You are on page 1of 36

SQL

DEFINICIN 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 relacin de base dndole 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 restriccin 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) );

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

CARACTERSTICAS AADIDAS EN SQL2


CREATE SQUEMA Especifica un nuevo esquema de base de datos dndole 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);
6

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); 7

CONSULTAS DE RECUPERACIN DE DATOS


SQL tiene una instruccin bsica para recuperacin de informacin desde una base de datos: la sentencia SELECT. Esta no es la misma que la operacin SELECT del lgebra Relacional. Una importante distincin entre SQL y el modelo relacional formal: SQL permite que una tabla tenga dos o ms tuplas idnticas 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 8 UNIQUE o usando la opcin DISTINCT en una consulta

La forma bsica 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 <condicin> <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 <condicin> es una expresin condicional booleana que identifica las tuplas a ser recuperadas por la consulta
9

Query 0: Recuperar la fecha de nacimiento y la direccin 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 clusula SELECT especifica los atributos de proyeccin y la clusula WHERE especifica la condicin de seleccin. Sin embargo, el resultado de la consulta podra 10 contener tuplas duplicadas.

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

CLASULA WHERE NO ESPECIFICADA


Una clusula WHERE omitida indica no condicin, por lo tanto todas las tuplas de las relaciones en la clusula FROM sern seleccionadas. Esto es equivalente a la condicin WHERE TRUE. Query 9: Recuperar los valores del SSN para todos los empleados Q9: SELECT SSN FROM EMPLOYEE;
13

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

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 comparacin 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;
22

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.

FUNCIONES AGREGADAS Incluye COUNT, SUM, MAX, MIN Y AVG

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

RESUMEN DE CONSULTAS SQL


Una consulta en SQL puede consistir de un grupo de hasta seis clusulas, pero solo las primeras dos SELECT y FROM son obligatorias. Las clusulas son especificadas en el siguiente orden: SELECT FROM WHERE GROUP BY HAVING ORDER BY LIMIT <lista de atributos> <lista de tablas> <condicin> <atributos de grupo> <condicin de tamao del grupo> <lista de atributos> < 0, N tuplas >

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

You might also like