Professional Documents
Culture Documents
En SQL2
Podemos usar el comando CREATE TABLE para especificar la llave primaria, llaves secundarias y restricciones de integridad referencial (llaves forneas). Atributos llaves pueden ser especificados a travs 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));
3
DROP TABLE
Usada para remover una relacin de base y su definicin La relacin ya no podr ser usada en consultas, actualizaciones u otros comandos ya que su descripcin no existe. Ejemplo: DROP TABLE DEPENDENT;
4
ALTER TABLE
Usada para aadir un atributo a una de las relaciones de base. El atributo aadido tendr NULL en todas las tuplas de la relacin despus que el comando sea ejecutado; por lo tanto la restriccin 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.
5
Query 1: Recuperar el nombre y la direccin 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 condicin de seleccin (corresponde a una operacin SELECT en lgebra Relacional). (DNUMBER=DNO) es una condicin de join (corresponde a una operacin JOIN en lgebra 11 Relacional).
Query 2: Para cada proyecto localizado en Houston, liste el nmero de proyecto, el nmero del departamento controlador, y el apellido, direccin 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 condicin de join DNUM=DNUMBER relaciona un proyecto al departamento que lo controla. La condicin de join MGRSSN=SSN relaciona el departamento controlador al empleado que dirige ese departamento.
12
PRODUCTO CARTESIANO
Si ms de una relacin es especificada en la clusula FROM y no hay condicin 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 condicin de seleccin ni de join en la clusula WHERE; de otra manera, relaciones incorrectas y muy grandes podran resultar.
14
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;
15
USE OF DISTINCT
SQL no trata una relacin 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 ningn valor duplicado.
Q11: Q11A: SELECT SALARY FROM EMPLOYEE; SELECT DISTINCT SALARY FROM EMPLOYEE;
16
OPERACIONES DE CONJUNTO
SQL tiene directamente incorporadas operaciones de conjunto. Hay una operacin de UNION y en algunas versiones de SQL hay diferencia de conjuntos (MINUS) e interseccin (INTERSECT). Las relaciones resultantes de esas operaciones de conjuntos son conjuntos de tuplas; tuplas duplicadas son eliminadas del resultado. Las operaciones de conjunto aplican slo a relaciones que sean unin compatible: las dos relaciones tienen que tener los mismos atributos apareciendo en el mismo orden.
17
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);
18
CONSULTAS ANIDADAS
Una consulta SELECT completa, llamada consulta anidada, puede ser especificada dentro de la clusula 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 nmero 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 comparacin IN compara un valor v con un conjunto o multiconjunto de valores V, y evala 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 relacin declarada en la consulta anidada ms interna. En este ejemplo, la consulta anidada no est correlacionada con la consulta ms externa 19
FUNCIN EXISTS
EXISTS es usado para checar si el resultado de una consulta correlacionada anidada es vaca (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 FROM EMPLOYEE WHERE NOT EXISTS (SELECT * FROM DEPENDENT WHERE SSN=ESSN );
20
CONJUNTOS EXPLCITOS
Es tambin posible usar un conjunto explcito (enumerado) de valores en la clusula WHERE antes que una consulta anidada. Query 13: Recuperar los nmeros de seguro social de todos los empleados que trabajan en los proyectos con nmero 1, 2 3. Q13: SELECT DISTINCT ESSN FROM WORKS_ON WHERE PNO IN (1,2,3);
21
COMPARACIN DE SUBCADENAS
El operador de comparacin LIKE es usado para comparar cadenas parciales. Dos caracteres reservados son usados: % ( * en algunas implementaciones) reemplaza un nmero arbitrario de caracteres y _ reemplaza un carcter arbitrario simple. Query 25: Recuperar todos los empleados cuyas direcciones estn 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 aos 50s. Aqu, 5 tiene que ser el octavo carcter de la cadena (de acuerdo al formato para la fecha dd-mm-aaaa), de manera que el valor de BDATE es ________5_, con cada guin bajo reservando un lugar para cada carcter arbitrario simple. Q26: SELECT FNAME, LNAME FROM EMPLOYEE WHERE BDATE LIKE ________5_ ; El operador LIKE nos permite considerar cada valor como atmico o indivisible 23 de la misma manera en que SQL trata a sus cadenas.
Query 15: Encontrar el salario mximo, mnimo y promedio entre todos los empleados. Q15: SELECT MAX(SALARY), MIN(SALARY), AVG(SALARY) FROM EMPLOYEE; Query 16: Encontrar el salario mximo, mnimo 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 nmero total de empleados en la compaa (Q17), y el nmero de empleados en el departamento de Research (Q18). Q17: SELECT COUNT(*) FROM EMPLOYEE; Q18: SELECT COUNT(*) FROM EMPLOYEE, DEPARTMENT WHERE DNO=DNUMBER AND DNAME=Research;
24
OPERACIONES ARITMTICAS
Los operadores aritmticos estndar +, -, *, / (para suma, resta, multiplicacin y divisin respectivamente) pueden ser aplicados a valores numricos 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; 25
AGRUPAMIENTO
En muchos casos, queremos aplicar funciones agregadas a subgrupos de tuplas en una relacin. Cada subgrupo de tuplas consiste del conjunto de tuplas que tiene el mismo valor para el atributo(s) de agrupamiento. La funcin es aplicada a cada subgrupo independientemente. SQL tiene una clusula GROUP_BY para especificar el los atributos de agrupamiento, los cuales tienen que aparecer en la clusula SELECT. Query 20: Por cada departamento, recuperar el nmero de departamento, el nmero 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 estn 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 clusula 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 nmero y el nombre de proyecto y el nmero de empleados que trabajan en ese proyecto. Q21: SELECT PNUMBER, PNAME, COUNT(*) FROM PROJECT, WORKS_ON WHERE PNUMBER=PNO GROUP BY PNUMBER, PNAME;
26
CLASULA HAVING
Algunas veces nosotros queremos recuperar los valores de esas funciones para solo aquellos grupos que satisfacen ciertas condiciones. La clusula HAVING es usada para especificar una condicin de seleccin sobre grupos antes que en tuplas individuales. Query 22: Por cada proyecto en el cual ms de dos empleados trabajan, recuperar el nmero y el nombre de proyecto y el nmero 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;
27
ORDER_BY
La clusula ORDER_BY es usada para ordenar las tuplas en el resultado de una consulta basado en los valores de algn 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 alfabticamente 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 explcitamente especificar el orden ascendente.
28
La clusula SELECT lista los atributos o funciones a ser recuperadas. La clusula FROM especifica todas las relaciones ( alias) necesarias en la consulta pero no aquellas necesarias en consultas anidadas. La clusula WHERE especifica las condiciones para seleccin y join de tuplas para las relaciones especificadas en la clusula FROM. GROUP BY especifica los atributos de agrupamiento. HAVING especifica una condicin para la seleccin de los grupos. ORDER BY especifica un orden para desplegar el resultado de una consulta. 29 Una consulta es evaluada primero aplicando la clusula WHERE, entonces GROUP
30
31
32
33
34
35
36