La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

SQL.

Presentaciones similares


Presentación del tema: "SQL."— Transcripción de la presentación:

1 SQL

2 DEFINICIÓN DE DATOS EN SQL
Usado para CREATE, DROP and ALTER las descripciones de las tablas (relaciones) de una base de datos. CREATE TABLE Especifica una nueva relación de base dándole a esta un nombre, y especificando cada uno de sus atributos y sus tipos de datos (INTEGER, FLOAT, DECIMAL(i,j), CHAR(n), VARCHAR(n)). Una restricción NOT NULL puede ser especificada en un atributo. CREATE TABLE DEPARTMENT (DNAME VARCHAR(10) NOT NULL, DNUMBER INTEGER NOT NULL, MGRSSN CHAR(9), MGRSTARTDATE CHAR(9) );

3 En SQL2 Podemos usar el comando CREATE TABLE para especificar la llave primaria, llaves secundarias y restricciones de integridad referencial (llaves foráneas). Atributos llaves pueden ser especificados a través de las palabras clave PRIMARY KEY y UNIQUE CREATE TABLE DEPARTMENT (DNAME VARCHAR(10) NOT NULL, DNUMBER INTEGER NOT NULL, MGRSSN CHAR(9), MGRSTARTDATE CHAR(9) PRIMARY KEY(DNUMBER), UNIQUE(DNAME));

4 DROP TABLE Usada para remover una relación de base y su definición
La relación ya no podrá ser usada en consultas, actualizaciones u otros comandos ya que su descripción no existe. Ejemplo: DROP TABLE DEPENDENT;

5 ALTER TABLE Usada para añadir un atributo a una de las relaciones de base. El atributo añadido tendrá NULL en todas las tuplas de la relación después que el comando sea ejecutado; por lo tanto la restricción NOT NULL no será permitida para tales atributos. Ejemplo: ALTER TABLE EMPLOYEE ADD JOB VARCHAR(12); Los usuarios de la base de datos tienen que dar entrada a un valor para el nuevo atributo JOB para cada tupla de EMPLOYEE. Esto puede ser hecho usando el comando UPDATE.

6 CARACTERÍSTICAS AÑADIDAS EN SQL2
CREATE SQUEMA Especifica un nuevo esquema de base de datos dándole un nombre. CREATE SQUEMA COMPANY; OPCIONES DE INTEGRIDAD REFERENCIAL En SQL2, podemos especificar CASCADE ó SET NULL ó SET DEFAULT en restricciones de integridad referencial (foreign keys) CREATE TABLE DEPARTMENT (DNAME VARCHAR(10) NOT NULL, DNUMBER INTEGER NOT NULL, MGRSSN CHAR(9) DEFAULT 0, MGRSTARTDATE CHAR(9), PRIMARY KEY(DNUMBER), UNIQUE(DNAME), FOREIGN KEY(MGRSSN) REFEERENCES EMPLOYEE ON DELETE SET DEFAULT ON UPDATE CASCADE);

7 CREACION DE TABLA EN SQL2
CREATE TABLE EMPLOYEE (ENAME VARCHAR(30) NOT NULL, SSN CHAR(9), BDATE DATE, DNO INTEGER DEFAULT 1, SUPERSSN CHAR(9), PRIMARY KEY(SSN), FOREIGN KEY(DNO) REFERENCES DEPARTMENT ON DELETE SET DEFAULT ON UPDATE CASCADE, FOREIGN KEY(SUPERSSN) REFERENCES EMPLOYEE ON DELETE SET NULL ON UPDATE CASCADE);

8 CONSULTAS DE RECUPERACIÓN DE DATOS
SQL tiene una instrucción básica para recuperación de información desde una base de datos: la sentencia SELECT. Esta no es la misma que la operación SELECT del Álgebra Relacional. Una importante distinción entre SQL y el modelo relacional formal: SQL permite que una tabla tenga dos o más tuplas idénticas en todos los valores de sus atributos . Por lo tanto una tabla en SQL es un multi-conjunto (multi-set o bag) de tuplas; esto no es un conjunto de tuplas. Una tabla SQL puede estar restringida a un conjunto de tuplas si especificamos atributos PRIMARY KEY ó UNIQUE o usando la opción DISTINCT en una consulta

9 La forma básica de la sentencia SELECT de SQL es llamada un mapeo o un bloque SELECT-FROM-WHERE
SELECT <lista de atributos> FROM <lista de tablas> WHERE <condición> <lista de atributos> es una lista de nombres de atributos cuyos valores van a ser recuperados por la consulta <lista de tablas> es una lista de los nombres de las relaciones requeridos para procesar la consulta <condición> es una expresión condicional booleana que identifica las tuplas a ser recuperadas por la consulta

10 Query 0: Recuperar la fecha de nacimiento y la dirección del empleado ‘John B. Smith’.
Q0: SELECT BDATE, ADDRESS FROM EMPLOYEE WHERE FNAME=’John’ AND MINT=’B’ AND LNAME=’Smith’ Similar al par SELECT-PROJECT del Álgebra Relacional; la cláusula SELECT especifica los atributos de proyección y la cláusula WHERE especifica la condición de selección. Sin embargo, el resultado de la consulta podría contener tuplas duplicadas.

11 Query 1: Recuperar el nombre y la dirección de todos los empleados quienes trabajan para el departamento ‘Research’. Q1: SELECT FNAME, LNAME, ADDRESS FROM EMPLOYEE, DEPARTMENT WHERE DNAME=’Research’ AND DNUMBER=DNO; Similar a la secuencia SELECT-PROJECT-JOIN de las operaciones del Álgebra Relacional. (DNAME=’Research’) es una condición de selección (corresponde a una operación SELECT en Álgebra Relacional). (DNUMBER=DNO) es una condición de join (corresponde a una operación JOIN en Álgebra Relacional).

12 Query 2: Para cada proyecto localizado en ‘Houston’, liste el número de proyecto, el número del departamento controlador, y el apellido, dirección y fecha de nacimiento del manager del departamento. Q2: SELECT PNUMBER, DNUM, LNAME, BDATE, ADDRESS FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND PLOCATION=’Houston’; En Q2 hay dos condiciones de join. La condición de join DNUM=DNUMBER relaciona un proyecto al departamento que lo controla. La condición de join MGRSSN=SSN relaciona el departamento controlador al empleado que dirige ese departamento.

13 CLAÚSULA WHERE NO ESPECIFICADA
Una cláusula WHERE omitida indica no condición, por lo tanto todas las tuplas de las relaciones en la cláusula FROM serán seleccionadas. Esto es equivalente a la condición WHERE TRUE. Query 9: Recuperar los valores del SSN para todos los empleados Q9: SELECT SSN FROM EMPLOYEE;

14 PRODUCTO CARTESIANO Si más de una relación es especificada en la cláusula FROM y no hay condición de join, entonces el PRODUCTO CARTESIANO de tuplas es seleccionado. Example: Q10: SELECT SSN, DNAME FROM EMPLOYEE, DEPARTMENT; Es extremadamente importante no pasar por alto especificar ninguna condición de selección ni de join en la cláusula WHERE; de otra manera, relaciones incorrectas y muy grandes podrían resultar.

15 USE OF * Se usa * para recuperar todos los valores de los atributos de las tuplas seleccionadas. Ejemplos: Q1C: SELECT * FROM EMPLOYEE WHERE DNO=5; Q1D: SELECT * FROM EMPLOYEE, DEPARTMENT WHERE DNAME=’Research’ AND DNO=DNUMBER;

16 USE OF DISTINCT SQL no trata una relación como un conjunto: tuplas duplicadas pueden aparecer. Para eliminar tuplas duplicadas del resultado, la palabra clave DISTINCT es usada. Por ejemplo, el resultado de Q11 puede tener valores de SALARY duplicados mientras Q11A no tendrá ningún valor duplicado. Q11: SELECT SALARY FROM EMPLOYEE; Q11A: SELECT DISTINCT SALARY

17 OPERACIONES DE CONJUNTO
SQL tiene directamente incorporadas operaciones de conjunto. Hay una operación de UNION y en algunas versiones de SQL hay diferencia de conjuntos (MINUS) e intersección (INTERSECT). Las relaciones resultantes de esas operaciones de conjuntos son conjuntos de tuplas; tuplas duplicadas son eliminadas del resultado. Las operaciones de conjunto aplican sólo a relaciones que sean unión compatible: las dos relaciones tienen que tener los mismos atributos apareciendo en el mismo orden.

18 UNION DE CONJUNTOS Q4: (SELECT PNAME
FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND LNAME=‘Wong’) UNION (SELECT PNAME FROM PROJECT, WORKS_ON, EMPLOYEE WHERE PNUMBER=PNO AND ESSN=SSN AND LNAME=’Wong’);

19 CONSULTAS ANIDADAS Una consulta SELECT completa, llamada consulta anidada, puede ser especificada dentro de la cláusula WHERE de otra consulta llamada la consulta externa. Muchas de las consultas anteriores pueden ser especificadas en una forma alternativa usando anidamiento. Q1: SELECT FNAME, LNAME, ADDRESS FROM EMPLOYEE WHERE DNO IN (SELECT DNUMBER FROM DEPARTMENT WHERE DNAME=’Research’ ); La consulta anidada selecciona el número del departamento ‘Research’. La consulta externa selecciona una tupla de EMPLOYEE si su valor DNO está en el resultado de la consulta anidada. El operador de comparación IN compara un valor v con un conjunto o multiconjunto de valores V, y evalúa a TRUE si v es uno delos elementos en V. En general, tenemos varios niveles de consultas anidadas. Una referencia a un atributo no cualificado refiere a la relación declarada en la consulta anidada más interna. En este ejemplo, la consulta anidada no está correlacionada con la consulta más externa

20 FUNCIÓN EXISTS EXISTS es usado para checar si el resultado de una consulta correlacionada anidada es vacía (no contiene tuplas). Se puede formular la Query 12 en una forma alternativa que utiliza EXISTS como en Query 12B Query 12B: Recuperar el nombre de cada empleado que tenga dependientes con el mismo nombre de dicho empleado. Q12B: SELECT FNAME, LNAME FROM EMPLOYEE WHERE EXISTS (SELECT * FROM DEPENDENT WHERE SSN=ESSN AND FNAME=DEPENDENT_NAME); Query 6: Recuperar los nombres de los empleados quienes no tienen dependientes Q6: SELECT FNAME, LNAME WHERE NOT EXISTS (SELECT * WHERE SSN=ESSN );

21 CONJUNTOS EXPLÍCITOS Es también posible usar un conjunto explícito (enumerado) de valores en la cláusula WHERE antes que una consulta anidada. Query 13: Recuperar los números de seguro social de todos los empleados que trabajan en los proyectos con número 1, 2 ó 3. Q13: SELECT DISTINCT ESSN FROM WORKS_ON WHERE PNO IN (1,2,3);

22 NULLS EN CONSULTAS SQL SQL permite consultas que chequen si un valor es NULL (perdido, indefinido ó no aplicable) SQL usa IS ó IS NOT para comparar valores nulos porque este considera cada NULL distinto de otro valor NULL, por lo tanto la comparación por igualdad no es apropiada. Query 14: Recuperar los nombres de todos los empleados quienes no tienen supervisores. Q14: SELECT FNAME, LNAME FROM EMPLOYEE WHERE SUPERSSN IS NULL;

23 COMPARACIÓN DE SUBCADENAS
El operador de comparación LIKE es usado para comparar cadenas parciales. Dos caracteres reservados son usados: ‘%’ (ó ‘*’ en algunas implementaciones) reemplaza un número arbitrario de caracteres y ‘_’ reemplaza un carácter arbitrario simple. Query 25: Recuperar todos los empleados cuyas direcciones están en Houston, Texas. Aquí, el valor del atributo ADDRESS tiene que contener la subcadena ‘Houston, Texas’. Q25: SELECT FNAME, LNAME FROM EMPLOYEE WHERE ADDRESS LIKE ‘%Houston,TX%’; Query 26: Recuperar todos los empleados que nacieon durante los años 50’s. Aquí, ‘5’ tiene que ser el octavo carácter de la cadena (de acuerdo al formato para la fecha dd-mm-aaaa), de manera que el valor de BDATE es ‘________5_’, con cada guión bajo reservando un lugar para cada carácter arbitrario simple. Q26: SELECT FNAME, LNAME WHERE BDATE LIKE ‘________5_ ’; El operador LIKE nos permite considerar cada valor como atómico o indivisible de la misma manera en que SQL trata a sus cadenas.

24 FUNCIONES AGREGADAS Incluye COUNT, SUM, MAX, MIN Y AVG
Query 15: Encontrar el salario máximo, mínimo y promedio entre todos los empleados. Q15: SELECT MAX(SALARY), MIN(SALARY), AVG(SALARY) FROM EMPLOYEE; Query 16: Encontrar el salario máximo, mínimo y promedio entre los empleados que trabajan en el Departamento de ‘Research’. Q16: SELECT MAX(SALARY), MIN(SALARY), AVG(SALARY) FROM EMPLOYEE, DEPARTMENT WHERE DNO=DNUMBER AND DNAME=’Research’; Query 17 y 18: Recuperar el número total de empleados en la compañía (Q17), y el número de empleados en el departamento de ‘Research’ (Q18). Q17: SELECT COUNT(*) FROM EMPLOYEE; Q18: SELECT COUNT(*) FROM EMPLOYEE, DEPARTMENT

25 OPERACIONES ARITMÉTICAS
Los operadores aritméticos estándar ‘+’, ‘-‘, ‘*’, ‘/’ (para suma, resta, multiplicación y división respectivamente) pueden ser aplicados a valores numéricos en una consulta SQL. Query 27: Mostrar el efecto de dar un 10% de aumento de salario a todos los empleados que trabajan en el proyecto ‘ProductX’. Q27: SELECT FNAME, LNAME, 1.1*SALARY FROM EMPLOYEE, WORKS_ON, PROJECT WHERE SSN=ESSN AND PNO=PNUMBER AND PNAME=’ProductX’;

26 AGRUPAMIENTO En muchos casos, queremos aplicar funciones agregadas a subgrupos de tuplas en una relación. Cada subgrupo de tuplas consiste del conjunto de tuplas que tiene el mismo valor para el atributo(s) de agrupamiento. La función es aplicada a cada subgrupo independientemente. SQL tiene una cláusula GROUP_BY para especificar el ó los atributos de agrupamiento, los cuales tienen que aparecer en la cláusula SELECT. Query 20: Por cada departamento, recuperar el número de departamento, el número de empleados en el departamento, y su salario promedio. Q20: SELECT DNO, COUNT(*), AVG(SALARY) FROM EMPLOYEE GROUP BY DNO; En la Q20, las tuplas de EMPLOYEE están divididas en grupos. Cada grupo tiene el mismo valor para el atributo de grupo DNO. Las funciones COUNT y AVG a cada grupo de tuplas separadamente. La cláusula SELECT incluye solo el atributo de agrupamiento y las funciones a ser aplicadas a cada grupo de tuplas. Query 21: Por cada proyecto, recuperar el número y el nombre de proyecto y el número de empleados que trabajan en ese proyecto. Q21: SELECT PNUMBER, PNAME, COUNT(*) FROM PROJECT, WORKS_ON WHERE PNUMBER=PNO GROUP BY PNUMBER, PNAME;

27 CLAÚSULA HAVING Algunas veces nosotros queremos recuperar los valores de esas funciones para solo aquellos grupos que satisfacen ciertas condiciones. La cláusula HAVING es usada para especificar una condición de selección sobre grupos antes que en tuplas individuales. Query 22: Por cada proyecto en el cual más de dos empleados trabajan, recuperar el número y el nombre de proyecto y el número de empleados que trabajan en ese proyecto. Q22: SELECT PNUMBER, PNAME, COUNT(*) FROM PROJECT, WORKS_ON WHERE PNUMBER=PNO GROUP BY PNUMBER, PNAME HAVING COUNT(*) > 2;

28 ORDER_BY La cláusula ORDER_BY es usada para ordenar las tuplas en el resultado de una consulta basado en los valores de algún atributo(s). Query 28: Recuperar una lista de empleados y los proyectos en que cada uno trabaja ordenados por departamento y dentro de cada departamento ordenados alfabéticamente por apellidos de los empleados. Q28: SELECT DNAME, LNAME, FNAME, PNAME FROM DEPARTMENT, EMPLOYEE, WORKS_ON, PROJECT WHERE DNUMBER=DNO AND SSN=ESSN AND PNO=PNUMBER ORDER BY DNAME, LNAME LIMIT 0 , 3; El orden por default es por valor ascendente del atributo(s). Se puede especificar la palabra clave DESC si queremos un orden descendente de los atributos. La palabra clave ASC puede ser usada para explícitamente especificar el orden ascendente.

29 RESUMEN DE CONSULTAS SQL
Una consulta en SQL puede consistir de un grupo de hasta seis cláusulas, pero solo las primeras dos SELECT y FROM son obligatorias. Las cláusulas son especificadas en el siguiente orden: SELECT <lista de atributos> FROM <lista de tablas> WHERE <condición> GROUP BY <atributos de grupo> HAVING <condición de tamaño del grupo> ORDER BY <lista de atributos> LIMIT < 0, N tuplas > La cláusula SELECT lista los atributos o funciones a ser recuperadas. La cláusula FROM especifica todas las relaciones (ó alias) necesarias en la consulta pero no aquellas necesarias en consultas anidadas. La cláusula WHERE especifica las condiciones para selección y join de tuplas para las relaciones especificadas en la cláusula FROM. GROUP BY especifica los atributos de agrupamiento. HAVING especifica una condición para la selección de los grupos. ORDER BY especifica un orden para desplegar el resultado de una consulta. Una consulta es evaluada primero aplicando la cláusula WHERE, entonces GROUP BY y HAVING, y finalmente la cláusula SELECT.

30

31

32

33

34

35

36


Descargar ppt "SQL."

Presentaciones similares


Anuncios Google