Apuntes SQL

April 4, 2018 | Author: Ricardo Bernal | Category: Sql, Information Retrieval, Information Science, Data Model, Software Engineering


Comments



Description

Departamento de Lenguajes y Sistemas InformáticosE.T.S. Ingeniería Informática. Universidad de Sevilla Avda Reina Mercedes s/n. 41012 Sevilla Tlf/Fax 954 557 139 E-mail [email protected] Web www.lsi.us.es E.T.S. Ingeniería Informática Bases de Datos SQL Sevilla, octubre 2007 V 2007.10.1 Pág. 1 de 21 Bases de Datos Sevilla, octubre 2007, V 2007.10.1 SQL 1 SQL (STRUCTURED QUERY LANGUAGE).........................................3 1.1 1.2 OBJETIVOS Y ALCANCE DE SQL ..............................................................................3 EVOLUCIÓN DEL MODELO RELACIONAL .................................................................4 DOMINIOS SQL2 .................................................................................................4 CREATE TABLE ..................................................................................................5 CONSULTAS DE VARIAS TABLAS ....................................................................6 EXISTS ..................................................................................................................6 IN ...........................................................................................................................6 ANY, ALL ..............................................................................................................7 BETWEEN............................................................................................................8 LIMITACIÓN DE LA LISTA DE RESULTADOS ..............................................8 SUBCADENAS (LIKE) .........................................................................................9 ORDENACIÓN (ORDER BY).............................................................................9 JOIN NATURAL Y OUTER JOIN ..................................................................... 10 FUNCIONES AGREGADAS.............................................................................. 11 GROUP BY .......................................................................................................... 12 EJEMPLO............................................................................................................ 13 INSERT ............................................................................................................... 14 DELETE.............................................................................................................. 14 UPDATE.............................................................................................................. 14 2 DEFINICIÓN DE DATOS EN SQL (DDL) ...........................................4 2.1 2.2 3 CONSULTAS SIMPLES ............................................................................5 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 4 CONSULTAS AVANZADAS................................................................... 10 4.1 4.2 4.3 4.4 5 ACTUALIZACIÓN DE DATOS ............................................................. 14 5.1 5.2 5.3 6 7 VISTAS...................................................................................................... 14 SINTAXIS SQL-2 ..................................................................................... 15 7.1 7.2 7.3 INTRODUCCIÓN .................................................................................................... 15 LENGUAJE DE DEFINICIÓN DE DATOS (DDL) ..................................................... 15 LENGUAJE DE MANIPULACIÓN DE DATOS (DML)................................................ 17 Pág. 2 de 21 3 de 21 . V 2007. PL/SQL en ORACLE. es decir..Bases de Datos Sevilla. b) El DML de SQL es un lenguaje de especificación. • Especificar un modelo de seguridad de acceso a los datos (definición de usuarios. octubre 2007. etc.. c) La gramática DML está basada en el cálculo relacional orientado a tuplas. las expresiones definen el resultado esperado. TRANSACT SQL en MS-SQL Server). generado por el subsistema de proceso de consultas del SGBD relacional.1 Objetivos y alcance de SQL a) SQL es un lenguaje estándar(ISO) para definición manipulación en SGBD relacionales. estos métodos generados por el subsistema de proceso de consultas se denominan planes1 de acceso o planes de ejecución de la consulta. dejando que el SGBD se encargue de resolver el mejor método para ejecutar dicha especificación(optimización de la consulta).1 SQL 1 SQL (Structured Query Language) 1. Un plan de ejecución de una consulta es un programa a bajo nivel.10. 1 Pág.) y su volumetría (volúmenes de datos de las tablas en la base de datos). • El DML de SQL puede ser utilizado en lenguajes de programación de propósito general como C o Pascal o bien en lenguajes específicos del fabricante (p. niveles de autorización o acceso a los datos). • Definir restricciones de integridad declarativa. donde figuran detalles de índices. direccionamiento.ej. • Especificar transacciones. Este plan de acceso contiene el método de acceso a los datos en función de la situación del esquema de la base de datos(esquema interno. d) Permite: • Definición de tablas y vistas. 1973 . fecha y hora. REAL. Podemos declarar números con formato empleando DECIMAL(i. cadena de caracteres. . Pág.10. cadena de bit. Entre los tipos de datos disponibles para atributos están los numéricos.j) ( o DEC(i.) QBE 1979 1980 1981 1982 1986 1987 1989 1989 1990 1990 1992 1995 1999 Oracle Ingres SQL DB2 SQL/ ANS SQL ISO (9075) SQL Addendum Manifiesto de los SGBO Modelo Relacional Versión 2 Manifiesto de los SGBO.j) NUMERIC(i. donde i (precisión) es el número total de dígitos decimales y j (escala) el número de dígitos que aparecen después del punto decimal. etc.1 SQL 1.Bases de Datos Sevilla.1 DOMINIOS SQL2 En SQL2 es posible declarar un dominio y usar su nombre. sistema R. . .1978 1978 ↔ ↔ ↔ ↔ ↔ ↔ ↔ ↔ ↔ ↔ ↔ ↔ ↔ ↔ ↔ ↔ ↔ Surge el modelo Desarrollos teóricos Prototipos (Ingres.3G SQL 92 3er Manifiesto SQL 3 P O S T R E L A C I O N A L 2 Definición de datos en SQL (DDL) 2. 4 de 21 b) . DOUBLE PRECISION). CREATE DOMAIN <nombre_dominio> AS <tipo_datos>.2 Evolución del modelo relacional P R E R E L A C I O N A L R E L A C I O N A L 1968 .j)). . y SMALLINT) y números reales de diversas precisiones (FLOAT. a) Los tipos de datos numéricos incluyen números enteros de diversos tamaños (INTEGER o INT.1970 1970 . V 2007. Los tipos de cadena de caracteres tienen longitud fija (CHAR(n) o CHARACTER(n) o variable VARCHAR (n) o CHAR VARYING (n) o CHARACTER VARYING (n). octubre 2007. pdesc Televisor M2 Televisor M3 ppeso 30 35 pprecio 78000 97000 Pág. CREATE DOMAIN importes AS DECIMAL(9. 5 de 21 . Pprecio cantidades. pid SELECT * P2 FROM Productos P3 WHERE ppeso ≥ 30. pid FROM Productos. Ej. CREATE DOMAIN cantidades AS INTEGER. La instrucción CREATE TABLE sirve para especificar una nueva tabla CREATE DOMAIN codigos AS VARCHAR(4) NOT NULL. octubre 2007. d) SQL2 cuenta con nuevos tipos de datos para fecha y hora DATE y TIME.Bases de Datos Sevilla. SELECT pdesc. SELECT <lista de atributos> FROM <lista de tablas> WHERE <condición> Productos pid P1 P2 P3 P10 P11 pdesc Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 ppeso 27 30 35 12 10 pprecio 56000 78000 97000 112000 142000 pdesc Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 pid P1 P2 P3 P10 P11 a) Descripción y código de piezas de todas las piezas existentes. 3 Consultas simples La sentencia básica para recuperar información en SQL es la sentencia SELECT. 2.4). b) Piezas (todos los atributos) de peso mayor o igual a 30. CREATE TABLE productos ( Pid codigos. V 2007. PRIMARY KEY (pid) ). Ppeso cantidades.2 CREATE TABLE La estructura de datos soportada por SQL es la tabla como soporte a la definición de una relación del modelo RM/B.10. Pdes nombres.1 SQL c) Los tipos de datos de cadena de bit tienen longitud fija n (BIT(n)) o (BIT VARYING (n)). CREATE DOMAIN nombres AS VARCHAR(20). acant FROM AExistencias AE.pid AND pdesc = ‘Televisor M2’ ) . V 2007. SELECT aid.10. acant FROM AExistencias AE WHERE EXISTS ( SELECT * FROM Productos P WHERE P. 4 A3 Poligono Calonge. AE. A-45 Productos pid pdesc P1 Televisor M1 P2 Televisor M2 P3 Televisor M3 P10 Mini TK67 P11 Mini TK68 AExistencias Aid pid A2 P1 A2 P2 A2 P3 A2 P10 A2 P11 A3 P3 A4 P1 A4 P2 A4 P3 A4 P10 A4 P11 aloc Alcalá de Guadaira Sevilla Granada ppeso 27 30 35 12 10 pprecio 56000 78000 97000 112000 142000 SELECT AE. 3. Devuelve TRUE si v es uno de los elementos de V.aid ) . Rescribiendo la expresión anterior: a) Códigos de los almacenes que tienen existencias del producto ‘Televisor M2’ y cantidad que tienen en stock.1 CONSULTAS DE VARIAS TABLAS a) Códigos de los almacenes que tienen existencias del producto ‘Televisor M2’ y cantidad que tienen en stock.I.pid = AE.aid = A. Baja. Armilla.aid.1 SQL 3. Pág. 6 de 21 .pid = P.3 IN El operador de comparación IN permite comparar un valor individual v (generalmente un nombre de atributo) con un conjunto de valores V (generalmente una consulta anidada). acant 156 1234 69 120 345 5000 200 956 134 120 542 Almacenes aid adir A2 C/. N12/a A4 P. octubre 2007. b) Códigos de los almacenes que no tienen existencias de productos.Bases de Datos Sevilla. Productos P WHERE AE.2 EXISTS La función EXISTS sirve para comprobar si el resultado de una consulta anidada contiene tuplas. SELECT aid FROM Almacenes A WHERE NOT EXISTS ( SELECT * FROM Aexistencias AE WHERE AE.pid AND pdesc = ‘Televisor M2’.aid A2 A4 acant 1234 956 3. acant FROM AExistencias WHERE pid IN ( SELECT pid FROM Productos WHERE pdesc = ‘Televisor M2’ ) . b) Descripción de los productos de precio superior a todos los productos que tiene el almacen ‘A2’. El operador =ALL devuelve TRUE si el valor de v es igual a todos los valores del conjunto V. a) Códigos de los almacenes que tienen existencias del producto ‘Televisor M2’ y cantidad que tienen en stock. 7 de 21 . <= y <>.10.pid = AE. También es posible utilizar IN con un conjunto explícito de valores: b) Código y peso de los productos cuyo peso sea 10. acant FROM AExistencias WHERE pid =ANY ( SELECT pid FROM Productos WHERE pdesc = ‘Televisor M2’ ) .1 SQL Es posible rescribirla la consulta anterior utilizando el operador de comparación IN. >=. 3. SELECT aid.pid AND aid = ‘A2’ ) . octubre 2007. <. Es equivalente a IN.Bases de Datos Sevilla. SELECT aid. 12. Otros operadores que se pueden utilizar con ANY y con ALL son >. a) Códigos de los almacenes que tienen existencias del producto ‘Televisor M2’ y cantidad que tienen en stock. El operador >ALL devuelve TRUE si el valor de v es mayor que todos los valores del conjunto V. ppeso FROM Productos WHERE ppeso IN (10.4 ANY. 12 o 27 ppid P1 P10 P11 ppeso 27 12 10 SELECT ppid. Pág. Aexistencias AE WHERE P. ALL Permiten comparar un valor individual v (nombre de atributo) con un conjunto de valores V (consulta anidada). V 2007. SELECT pdesc FROM Productos WHERE pprecio > ALL ( SELECT pprecio FROM Productos P. 27) . El operador =ANY devuelve TRUE si el valor de v es igual a algún valor del conjunto V. Bases de Datos Sevilla.10. aid A2 A3 A4 Aloc Alcalá de Guadaira Sevilla Granada TOP2.aid = A. Almacenes A WHERE AE. ppid P1 P10 P11 ppeso 27 12 10 3.aid.aid. a) Código y localidad de los almacenes que tienen algún producto en existencia. No se puede utilizar en WinRDBi Pág. V 2007. SELECT TOP N <lista de atributos> limita el número de filas a mostrar a N. DISTINCT. Armilla. Almacenes A WHERE AE.aid. SELECT ppid. aloc FROM AExistencias AE.I. 4 A3 Poligono Calonge.6 LIMITACIÓN DE LA LISTA DE RESULTADOS Para limitar los resultados de una consulta se pueden utilizar las palabras clave DISTINCT y TOP. b) En la consulta anterior obtener sólo las dos primeras filas.aid = A. A-45 aloc Alcalá de Guadaira Sevilla Granada SELECT DISTINCT A. Baja. Elimina las tuplas repetidas del resultado de una consulta. SELECT DISTINCT TOP 2 A. aid A2 A3 Aloc Alcalá de Guadaira Sevilla 2 TOP no es estándar. octubre 2007.1 SQL 3.5 BETWEEN c) Código y peso de los productos cuyo peso esté entre 10 y 27. ppeso FROM Productos WHERE ppeso BETWEEN 10 AND 27. aloc FROM AExistencias AE. acant 156 1234 69 120 345 5000 200 956 134 120 542 AExistencias aid pid A2 P1 A2 P2 A2 P3 A2 P10 A2 P11 A3 P3 A4 P1 A4 P2 A4 P3 A4 P10 A4 P11 Almacenes aid Adir A2 C/. Limita el número de filas.aid. 8 de 21 . N12/a A4 P. 9 de 21 . pid. aid A2 A2 A4 A4 A4 pid P2 P11 P2 P11 P1 acant 1234 345 956 542 200 Pág. ordenado por almacén y dentro de cada almacén por cantidad de mayor a menor.7 SUBCADENAS (LIKE) Para comparar cadenas de caracteres se utiliza el operador de comparación LIKE. acant FROM AExistencias WHERE acant BETWEEN 200 AND 2000 ORDER BY aid. a) Códigos de piezas cuya descripción empieza por ‘Televisor’ Productos Pid P1 P2 P3 P10 P11 pdesc Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 ppeso 27 30 35 12 10 pprecio 56000 78000 97000 112000 142000 pid P1 P2 P3 SELECT pid FROM Productos WHERE pdesc LIKE ‘Televisor%’. V 2007. Las cadenas parciales se especifican mediante los caracteres reservados % y -. Considerando únicamente los productos cuyas cantidades en stock en cada almacén estén entre 200 y 2000 AExistencias aid A2 A2 A2 A2 A2 A3 A4 A4 A4 A4 A4 pid P1 P2 P3 P10 P11 P3 P1 P2 P3 P10 P11 acant 156 1234 69 120 345 5000 200 956 134 120 542 SELECT aid. 3.1 SQL 3.8 ORDENACIÓN (ORDER BY) a) Código de almacenes y cantidad de cada producto que tienen en stock. pid P11 SELECT pid FROM Productos WHERE pdesc LIKE ‘%TK_8’.Bases de Datos Sevilla. b) Código de productos que en la descripción incluyen ‘TK’ seguido por un carácter y termina en ‘8’. acant DESC. octubre 2007.10. pid. (JOIN es equivalente a INNER JOIN) El resultado será: Aid A2 A2 A2 A2 A2 A3 A4 A4 A4 A4 A4 AE. pdesc. acant FROM ( AExistencias AS AE JOIN Productos AS P ON AE. acant FROM AExistencias AE.pid.pid = P.1 SQL 4 Consultas avanzadas 4. AE. La consulta quedaría: SELECT aid. acant 156 1234 69 120 345 5000 200 956 134 120 542 AExistencias aid pid A2 P1 A2 P2 A2 P3 A2 P10 A2 P11 A3 P3 A4 P1 A4 P2 A4 P3 A4 P10 A4 P11 Productos pid pdesc P1 Televisor M1 P2 Televisor M2 P3 Televisor M3 P10 Mini TK67 P11 Mini TK68 ppeso 27 30 35 12 10 pprecio 56000 78000 97000 112000 142000 SELECT aid. pdesc.pid ). octubre 2007. Productos P WHERE AE. AE.Bases de Datos Sevilla.10.pid = P.pid P1 P2 P3 P10 P11 P3 P1 P2 P3 P10 P11 pdesc Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 Televisor M3 Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 acant 156 1234 69 120 345 5000 200 956 134 120 542 ⇒ pid P1 P2 P3 P10 P11 P20 Al incluir el producto nuevo P20 en la tabla Productos: Productos Pdesc Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 Equipo Nuevo ppeso 27 30 35 12 10 10 pprecio 56000 78000 97000 112000 142000 100 Pág.1 JOIN NATURAL y OUTER JOIN a) Código de almacén. código y descripción del producto y cantidad en stock.pid. Se puede especificar primero la reunión de las relaciones AExistencias y Productos y seleccionar luego los atributos y tuplas deseadas. V 2007. 10 de 21 . No se visualiza la tupla nueva ya que no tiene correspondencia en la tabla AExistencias.2 FUNCIONES AGREGADAS COUNT devuelve el número de filas o valores especificados en una consulta.pid. Devuelve el mismo resultado anterior.1 SQL La consulta: SELECT aid. a) pid P1 P2 P3 P10 P11 Numero de productos que existen. SUM.Bases de Datos Sevilla.pid = P. pdesc. V 2007.10.pid. el valor máximo. acant FROM ( AExistencias AS AE RIGHT JOIN Productos AS P ON AE. acant FROM ( AExistencias AS AE JOIN Productos AS P ON AE. pdesc. Pág.pid = P. El resultado será: aid A2 A2 A2 A2 A2 A3 A4 A4 A4 A4 A4 AE. AE.pid P1 P2 P3 P10 P11 P3 P1 P2 P3 P10 P11 pdesc Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 Televisor M3 Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 Equipo Nuevo acant 156 1234 69 120 345 5000 200 956 134 120 542 (RIGHT JOIN es equivalente a RIGHT OUTER JOIN) De igual forma para obtener las tuplas de AExistencias que no tengan correspondencias en Productos se utilizara el LEFT JOIN (LEFT JOIN es equivalente a LEFT OUTER JOIN) 4. Para que aparezca dicha tupla se utiliza el join externo por la derecha. SELECT aid. AVG se aplican a un conjunto o multiconjunto de valores numéricos y devuelven respectivamente la suma. octubre 2007. 11 de 21 . pdesc Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 ppeso 27 30 35 12 10 pprecio 56000 78000 97000 112000 142000 COUNT (*) 5 SELECT COUNT (*) FROM Productos .pid ). Estas funciones se pueden usar con la cláusula SELECT o con la cláusula HAVING. el mínimo y el promedio de dicho valores. MAX. AE. MIN.pid ). MAX(acant). Pág. COUNT (*) SELECT COUNT (DISTINCT pid) 5 FROM AExistencias . SUM(acant) FROM AExistencias GROUP BY aid. V 2007. COUNT(*) FROM AExistencias . COUNT(*). la cantidad máxima. MIN(acant). pid P1 P2 P3 P10 P11 P3 P1 P2 P3 P10 P11 Acant 156 1234 69 120 345 5000 200 956 134 120 542 SELECT SUM(acant). la media y contar todos los productos que existen en stock. pid P1 P2 P3 P10 P11 P3 P1 P2 P3 P10 P11 acant 156 1234 69 120 345 5000 200 956 134 120 542 aid A2 A3 A4 COUNT(*) 5 1 5 SUM(acant) 1924 5000 1952 SELECT aid. 4. 12 de 21 . Los llamaremos atributos de agrupación y podremos aplicar las funciones a cada uno de dichos grupos. AVG(acant).1 SQL b) aid A2 A2 A2 A2 A2 A3 A4 A4 A4 A4 A4 Calcular la suma de las cantidades.10. SUM(acant) 8876 MAX(acant) 5000 MIN(acant) 69 AVG(acant) 872 COUNT(*) 11 c) Contar los productos de los que haya existencia en algún almacén.3 GROUP BY Cuando se quiera aplicar las funciones agregadas a subgrupos de tuplas de una relación agruparemos las tuplas que tienen el mismo valor para ciertos atributos.Bases de Datos Sevilla. Para especificar los atributos de agrupación se utiliza la cláusula GROUP BY. la mínima. octubre 2007. Los atributos de agrupación pueden aparecer en la cláusula SELECT. a) aid A2 A2 A2 A2 A2 A3 A4 A4 A4 A4 A4 Calcular para cada almacén el número de productos en stock y la cantidad total. Sólo los grupos que cumplan la condición entrarán en el resultado de la consulta. Pedidos pdid PD10 PD20 PD30 PD40 PD50 PD60 PD70 tid T1 T1 T2 T2 T4 T4 T4 aid A2 A2 A2 A4 A2 A4 A2 pid P1 P2 P10 P11 P10 P11 P11 cant 100 150 50 70 80 25 40 fecha 10/12/03 12/12/03 14/12/03 11/12/03 10/12/03 13/12/03 14/12/03 SELECT tid.1 SQL HAVING HAVING especifica una condición sobre el grupo de tuplas asociado a cada valor de los atributos de agrupación (clases de equivalencia). octubre 2007.acant) FROM AE GROUP BY AE.aid.aid. • Mediante SELECT anidados SELECT AE.acant) FROM AE GROUP BY AE.acant) as total FROM AE GROUP BY AE.acant) >= ALL (SELECT Sum(AE.aid ) ). tid T1 T4 A2 A2 aid SUM(acant) 250 120 4.acant) FROM AE GROUP BY AE. Sum(AE. V 2007.aid ORDER BY 1 DESC).aid HAVING Sum(AE. 13 de 21 . b) Para las tiendas que hayan hecho más de un pedido al mismo almacén calcular la cantidad total pedida.aid. aid. tid HAVING COUNT(*) > 1.aid HAVING Sum(AE. sum(AE.acant) FROM AE GROUP BY AE. SUM(acant) FROM Pedidos GROUP BY aid. Utilizando TOP SELECT AE.acant) FROM AE GROUP BY AE.acant) = • ( SELECT TOP 1 Sum(AE.aid HAVING sum(acant) = ( SELECT Max(total) FROM ( SELECT Sum(Sx.4 EJEMPLO a) • Almacén con mayor número de productos.aid). Utilizando ALL SELECT AE. Pág.10.Bases de Datos Sevilla. Sum(AE. Precio) Pid.1 SQL 5 Actualización de datos 5. pedidos PD WHERE P. Una vista no se materializa en SQL. 5. UPDATE Productos SET pprecio = 200 WHERE pid = ‘P1’.pid. octubre 2007. 6 Vistas Una vista es una estructura tabular derivada de otras tablas. DELETE FROM Productos WHERE pprecio >30.pdid.3 UPDATE Modifica los valores de los atributos.pid. PD. Pprecio Productos pprecio >30. 5.pdesc. Pág. CREATE VIEW Producto_pedido AS SELECT PD.1 INSERT Sirve para añadir tuplas a la BD INSERT INTO Productos VALUES (P20. Se pueden añadir múltiples filas utilizando la claúsula SELECT.cantidad FROM productos P. Nombre.pid = PD.Bases de Datos Sevilla. se genera en el momento de su ejecución. 14 de 21 . La eliminación puede propagarse a tuplas de otras relaciones si tal acción está especificada en las restricciones de integridad referencial. Pdesc. UPDATE SET WHERE Productos pprecio = pprecio * 1.10.200). V 2007. P.2 pid IN (SELECT pid FROM pedidos) . PD. INSERT INTO SELECT FROM WHERE ProductoPedidos (Pid. 20.2 DELETE Elimina tuplas de una relación. Cadena A100. dcho...1 SQL 7 Sintaxis SQL-2 7. indica repetición: 7.10.> <condición de búsqueda> <parent. .. izq.Bases de Datos Sevilla.2 Lenguaje de Definición de Datos (DDL) <definición de esquema >::= CREATE SCHEMA <cláusula de nombre de esquema> [ <elemento de esquema> .> <atributos de restricción> ::= <tiempo de verificación de restricción> [ [NOT] DEFERRABLE ] | [ [NOT] DEFERRABLE ] <tiempo de verificación de restricción> Pág. y . V 2007.dividido en: .Lenguaje de Manipulación de Datos (LMD). de autorización de usuario> <elemento de esquema> ::= <definición de dominio> | <definición de tabla> | <definición de vista> | <definición de aserción> <definición de dominio> ::= CREATE DOMAIN <nombre de dominio> [ AS ] <tipo de datos> [ <cláusula de defecto> ] [ <restricción de dominio> ] <cláusula de defecto> ::= DEFAULT <opción por defecto> <opción por defecto> ::= <literal> |<función de valor tiempo/fecha> | USER | SYSTEM | USER | NULL <restricción de dominio> ::= [ <definición de nombre de restricción> ] < definición de restricción de verificación> [ <atributos de restricción> ] <definición de nombre de restricción> ::= CONSTRAINT <nombre de restricción> <definición de restricción de verificación> ::= CHECK <parent..Lenguaje de Definición de Datos (LDD). 15 de 21 .1 Introducción Se presenta un resumen de la sintaxis de SQL según el estándar ISO 9075 (SQL-92). de autorización de usuario> |<nombre de esquema> AUTHORIZATION <id.Lenguaje de Administración de Datos (LAD). octubre 2007. ] <cláusula de nombre de esquema> ::= <nombre de esquema> | AUTHORIZATION <id. La nomenclatura utilizada es una extensión de la Forma Normal de Backus (BNF) siendo: <> representa los símbolos no terminales del lenguaje ::= es el operador de definición [] indica elementos opcionales {} agrupa elementos en una fórmula | indica una alternativa . > ::= <lista de columnas de referencia> <columnas y tabla referenciadas> ::= <nombre de tabla> [ <parent. V 2007. ] <paréntesisdcho. dcho.> <columnas que ref.Bases de Datos Sevilla.> ] <lista de columnas de referencia> ::= <lista de nombres de columnas> <acción referencial disparada> ::= <regla de modificación> [ <regla de borrado> ] | <regla de borrado> [regla de modificación] <regla de modificación> ::= ON UPDATE <acción referencial> <regla de borrado> ::= ON DELETE <acción referencial> Pág.> <lista de columnas de referencia> <parent. dcho. dcho.> <elemento de tabla> [{<coma> <elemento de tabla>} .10... izq.> <parent.> <especificación de unicidad> ::= UNIQUE | PRIMARY KEY <lista de columnas únicas> ::= <lista de nombre de columnas> <definición de restricción referencial> ::= FOREIGN KEY <parent.> <lista de columnas únicas> <parent..> <especificación de la referencia> <especificación de la referencia> ::= REFERENCES <columnas y tabla referenciadas> [ <acción referencial disparada> ] <columnas que ref... 16 de 21 . izq.1 SQL <tiempo de verificación de restricción> ::= INITIALLY DEFERRED | INITIALLY INMEDIATE <definición de tabla> ::= CREATE [ {GLOBAL|LOCAL} TEMPORARY ] TABLE <nombre de tabla> <lista de elementos de tabla> <lista de elementos de tabla> ::= <paréntesis izq. octubre 2007. ] <definición de restricción de columna> ::= [ <definición de nombre de restricción> ] <restricción de columna> [ <atributos de restricción> ] <restricción de columna> ::= NOT NULL | <especificación de unicidad> | <especificación de referencia> | <definición de restricción de verificación> <definición de restricción de tabla> ::= [ <nombre de definición de restricción> ] <restricción de tabla> [ <atributos de restricción> ] <restricción de tabla> ::= <definición de restricción de unicidad> | <definición de restricción referencial> | <definición de restricción de verificación> <definición de restricción de unicidad> ::= <especificación de unicidad> <parent. izq.> <elemento de tabla> ::= <definición de columna> | <definición de restricción de tabla> <definición de columna> ::= <nombre de columna> { <tipo de datos> | <nombre de dominio>} [ <claúsula de defecto> ] [ <definición de restricción de columna> . > <lista de columnas que corresponden><parent. dcho. izq.> <expresión de combinación de no consulta> <parent.1 SQL <acción referencial> ::= CASCADE | SET NULL | SET DEFAULT <definición de vista> ::= CREATE VIEW <nombre de tabla> [ <parent.Bases de Datos Sevilla. octubre 2007.3 Lenguaje de Manipulación de Datos (DML) <expresión de consulta>::= <expresión de consulta de no combinación> | <tabla combinada> <expresión de consulta de no combinación> ::= <término de consulta de no combinación> | <expresión de consulta> UNION [ALL] [ <especificación de correspondencia> ] <término de consulta> | <expresión de consulta> EXCEPT [ALL] [ <especificación de correspondencia> ] <término de consulta> <término de consulta> ::= <término de consulta de no combinación> | <tabla combinada> <término de consulta de no combinación> ::= <primario de consulta de no combinación> |<términodeconsulta> INTERSECT [ALL] [ <especificación de correspondencia> ] <primario de consulta> <primario de consulta> ::= <primario de consulta de no combinación> | <tabla combinada> <primario de consulta de no combinación> ::= <tabla simple> | <parent..10.> 7. V 2007. izq. dcho. dcho..> <lista de constructores de valor de fila> <parent.> ] <lista de columnas que corresponden> ::= <lista de columnas> <constructor de valor de tabla> ::= VALUES <lista de constructores de valores de tabla> <lista de constructores de valores de tabla> ::= <constructor de valor de fila> [ { <coma> <constructor de valor de fila> .> <tabla simple> ::= <especificación de consulta> | <constructor de valor de tabla> | <tabla explícita> <tabla explícita> ::= TABLE <nombre de tabla> <especificación de correspondencia> ::= CORRESPONDING [ BY <parent. izq.>] AS <expresión de consulta> [ WITH CHECK OPTION ] <lista de columnas de vista> ::= <lista de nombres de columnas> <definición de aserción> ::= CREATE ASSERTION <nombre de restricción> <verificación de aserción> [ <atributos de restricción> ] <verificación de aserción> ::= CHECK <parent. dcho.> <lista de columnas de vista> <parent. } <constructor de valor de fila> ::= <elemento constructor de valor de fila> | <parent. izq. dcho.> Pág. izq.> <condición de búsqueda> <parent. 17 de 21 . > <expresión de consulta> <parent.. ] <nombre de correlación> ::= <identificador> <calificador> ::= <nombre de tabla> | <nombre de correlación> <tabla combinada> ::= <combinación cruzada> | <combinación calificada> | <parent.> <especificación de consulta> ::= SELECT [<cuantificador de conjunto>] <lista de consulta> <expresión de tabla> <lista de consulta> ::= <asterisco> | <sublista de consulta> [{<coma> <sublista de consulta>} .. ] <elemento constructor de valor de fila> ::= <expresión de valor> | <especificación de nulos> | DEFAULT <especificación de nulos> ::= NULL <subconsulta de fila> ::= <subconsulta> <subconsulta> ::= <parent. izq. 18 de 21 . ] <referencia a tabla> ::= <nombre de tabla> [ [AS] <nombre de correlación> [<parent.> <tabla combinada> <parent. dcho.. V 2007. octubre 2007. dcho. izq... izq.1 SQL | <subconsulta de fila> <lista de constructores de valor de fila> ::= <elemento constructor de valor de fila> [ {<coma> <elemento constructor de valor de fila>} ..> <lista de columnas derivadas> <parent.Bases de Datos Sevilla.> <lista de columnas derivadas> <parent.> <combinación cruzada> ::= <referencia a tabla> CROSS JOIN <referencia a tabla> <combinación calificada> ::= <referencia a tabla> [NATURAL] [<tipo de combinación>] JOIN <referencia a tabla> [<especificación de combinación>] <especificación de combinación> ::= <condición de combinación> | <combinación de columnas nominadas> Pág. dcho.10. izq.]] | <tabla derivada> [AS] <nombre de correlación> [<parent. dcho.] <sublista de consulta> ::= <columna derivada> | <calificador> <punto> <asterisco> <columna derivada> ::= <expresión de valor> [<cláusula as>] <cláusula as> ::= [AS] <nombre de columna> <cuantificador de conjunto> ::= DISTINCT | ALL <expresión de tabla> ::= <cláusula from> [ <cláusula where> ] [ <cláusula group by> ] [ <cláusula having>] <cláusula from> ::= FROM <referencia a tabla> [ { <coma> <referencia a tabla> } ..] | <tabla combinada> <tabla derivada> ::= <subconsulta de tabla> <lista de columnas derivadas> ::= <lista de nombres de columnas> <lista de nombres de columnas> ::= <nombre de columna> [ { <coma> <nombre de columna> } .. . octubre 2007. izq. V 2007.Bases de Datos Sevilla. 19 de 21 .> <tipo de combinación> ::= INNER | <tipo de combinación externa> [OUTER] | UNION <tipo de combinación externa> ::= LEFT | RIGHT | FULL <lista de columnas de combinación> ::= <lista de nombres de columnas> <cláusula where> ::= WHERE <condición de búsqueda> <cláusula group by> ::= GROUP BY <lista de referencias a columna de agrupamiento> <lista de referencias a columna de agrupamiento> ::= <referencia a columna de agrupamiento>[{<coma><referencia a columnas de agrupamiento>}. dcho.> <condición de búsqueda> <parent. izq.1 SQL <condición de combinación> ::= ON <condición de búsqueda> <combinación de columnas nominadas> ::= USING <parent.> <lista de columnas de combinación> <parent.10.> <predicado> ::= <predicado de comparación> | <predicado entre> | <predicado en> | <predicado parece> | <predicado de nulidad> | <predicado de comparación cuantificada> | <predicado existe> | <predicado de unicidad> | <predicado de concordancia> | <predicado de solapamiento> <predicado de comparación> ::= <constructor de valor de fila> <operación de comparación> <constructor de valor de fila> <predicado entre> ::= <constructor de valor de fila> ::= [ NOT ] BETWEEN Pág. dcho.] <referencia a columna de agrupamiento> ::= <referencia a columnas> <referencias a columnas> ::= [ <calificador> <punto> ] <nombre de columnna> <cláusula having> ::= HAVING <condición de búsqueda> <condición de búsqueda> ::= <término booleano> | <condición de búsqueda> OR <término booleano> <término booleano> ::= <factor booleano> | <factor booleano> AND <factor booleano> <factor booleano> ::= [ NOT ] <test booleano> <test booleano> ::= <primario booleano> [ IS [ NOT ] <valor lógico> ] <valor lógico> ::= TRUE | FALSE | UNKNOWN <primario booleano> ::= <predicado> | <parent.. > <lista de valores en> <parent.Bases de Datos Sevilla. 20 de 21 ..1 SQL <constructor de valor de fila> AND <constructor de valor de fila> <predicado en> ::= <constructor de valor de fila> [ NOT ] IN <valor de predicado en> <valor de predicado en> ::= <subconsulta de tabla> | <parent.10. dcho. octubre 2007. izq.> <lista de columnas de inserción> <parent. <predicado parece> ::= valor de concordancia> [ NOT ] LIKE <patrón> <valor de concordancia> ::= <expresión de valores caracter> <patrón> ::= <expresión de valores caracter> <predicado de nulidad> ::= constructor de valor de fila> IS [ NOT ] NULL <predicado de comparación cuantificada> ::= constructor de valor de fila> <operación de comparación> <cuantificador> <subconsulta de tabla> <cuantificador> ::= <todos> | <algunos> <todos> ::= ALL <algunos> ::= SOME | ANY <predicado existe> ::= EXISTS <subconsulta de tabla> <predicado de unicidad> ::= UNIQUE <subconsulta de tabla> <predicado de concordancia> ::= <constructor de valor de fila>MATCH[ UNIQUE ][ PARTIAL | FULL]<subconsulta de tabla> <predicado de solapamiento> ::= <constructor de valor de fila 1> OVERLAPS <constructor de valor de fila 2> <constructor de valor de fila 1> ::= <constructor de valor de fila> <constructor de valor de fila 2> ::= <constructor de valor de fila> Otras sentencias de manipulación de datos son las siguientes: <sentencia de borrado: con búsqueda> ::= DELETE FROM <nombre de tabla> [WHERE <condición de búsqueda>] <sentencia de inserción> ::= INSERT INTO <nombre de tabla> <fuente y columnas de inserción> <fuente y columnas de inserción> ::= [ <parent.> <lista de valores en> ::= <expresión de valor> { <coma> <expresión de valor> } .. dcho.>] <expresión de consulta> | DEFAULT VALUES <lista de columnas de inserción> ::= <lista de nombres de columnas> <sentencia de modificación: con búsqueda> ::= UPDATE <nombre de tabla> SET <lista de cláusula de conjunto> [WHERE <condición de búsqueda>] <lista de cláusula de conjunto> ::= <cláusula de conjunto> [ {<coma> <cláusula de conjunto>}. V 2007..] <cláusula de conjunto> ::= <nombre de columna> <operador igual> <fuente de modificación> <fuente de modificación> ::= <expresión de valor> | <especificación de nulos> | DEFAULT Pág.. izq. Bases de Datos Sevilla.. incluyendo otros aspectos de las restricciones de integridad referencial como el tipo de concordancia (si todos los valores de la columnas que referencian pueden ser nulos o no nulos o ambas cosas) y el modo de restricción (diferida. dcho. dcho. ] <comportamiento al borrar> <privilegios> ::= ALL PRIVILEGES | <lista de acciones> <lista de acciones> ::= <acción> [ { <coma> <acción> } .Relativas a la <operación de comparación>. 3.10. TIMESTAMP.> <lista de nombres de columnas> <parent.Relativas a la dinámica.Relativas a <expresión de valor> a) Una <expresión de valor> es cualquier expresión que dé como resultado un valor numérico.> <lista de nombres de columnas> <parent. ] [WITH GRANT OPTION] <nombre de objeto> ::= [ TABLE ] <nombre de tabla> | DOMAIN <nombre de dominio> <sentencia de revocación> ::= REVOKE [GRANT OPTION FOR ] <privilegios> ON <nombre de objeto> FROM <concedido> [ { <coma> <concedido> } . dcho. BIT. izq. >=.. segundos y.1 SQL Lenguaje de Administración de Datos <sentencia de concesión> ::= GRANT <privilegios> ON <nombre de objeto> TO <concedido> [{<coma> <concedido> } . Pág. SMALLINT.> ] | USAGE <concedido> ::= PUBLIC | <id.> ] | REFERENCES[ <parent.Relativas al <tipo de datos> a) En SQL-92.. b) Los tipos BIT y BIT VARYING contienen bits pero no son interpretados por el SGBD. Puede ser tan simple como un dígito o tan complejo como una subconsulta. INTERVAL expresa la diferencia entre fechas u horas.Las operaciones de comparación son las usuales: =.. octubre 2007. DECIMAL. >. En caso de no especificar la <lista de columnas referencia> se entenderá que referencia a la clave primaria. b) En caso de no especificar la <acción referencial disparada> se considera que ésta es restringida. 21 de 21 . c) Las propuestas del estándar son más completas. hora. izq.> ] | UPDATE [ <parent.. <=. DATE. fracciones de segundo.INTERVAL y BIT VARYING. 4.. V 2007. REAL. FLOAT y DOUBLE PRECISION) también se admiten los siguientes: CHARACTER VARYING. fecha o intervalo.carácter. ] <acción> ::= SELECT | DELETE | INSERT [ <parent. Se puede establecer una restricción referencial con conjuntos de columnas únicas sin que sean necesariamente la clave primaria. mes. <> . 2. hora..izq.. además de los tipos de datos del SQL-89 (INTEGER. y TIMESTAMP contiene año.> <lista de nombresdecolumnas> <parent. 5..CHARACTER. minutos. TIME. si se efectúa al finalizar cada sentencia). de autorización de usuario> Anotaciones: 1. ésta debe ser idéntica a una <lista de columnas únicas> en una <definición de restricción de unicidad> de la tabla referenciada.. opcionalmente.Relativas a la <definición de restricción referencial> a) Si <columnas y tabla referenciada> especifica una <lista de columnas de referencia>.. Existen además operaciones relacionadas con manejo de cursores. si se verifica al finalizar la transacción o inmediata. NUMERIC. <. día.
Copyright © 2024 DOKUMEN.SITE Inc.