La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Lenguaje SQL (Structured Query Language)

Presentaciones similares


Presentación del tema: "Lenguaje SQL (Structured Query Language)"— Transcripción de la presentación:

1 Lenguaje SQL (Structured Query Language)
Unidad 8 Lenguaje SQL (Structured Query Language)

2 Introducción Resultado del esfuerzo conjunto de dos grupos:
Características del lenguaje Resultado del esfuerzo conjunto de dos grupos: ANSI – American National Standars Institute ISO – International Standards Organitation SQL constituye un factor fundamental en el éxito de las bases de datos relacionales Es un lenguaje declarativo (no procedural), es decir, se indica “que” se busca pero no el “como”

3 SQL Evolución SQL 1 SQL 2 SQL (extiende SQL 2 con conceptos de OO)

4 SQL Lenguaje de Definición de Datos (DDL)
Tipos de Operaciones Lenguaje de Definición de Datos (DDL) Lenguaje de Manipulación de Datos (DML): consultas y actualizaciones Definición de vistas Definición de restricciones de integridad Especificación de seguridad y autorización Especificación de control de transacciones Reglas para inclusión en lenguajes (C, PASCAL, etc.)

5 SQL: DDL y DML DDL DML Incluye sentencias que permiten definir los objetos de la Base de Datos Las sentencias DDL generan cambios en el diccionario de datos, el cual contiene metadatos Es un lenguaje que permite a los usuarios acceder o manipular los datos de la base de datos

6 SQL DDL DML Create Alter Drop Select Insert Update Delete

7 1- DDL CREATE DOMAIN nombre_dominio AS tipo_dato [DEFAULT valor];

8 1- DDL CREATE TABLE CREATE TABLE nombre_tabla (nombre_columna tipo_dato/dominio [NOT NULL] [DEFAULT valor], [nombre_columna tipo_dato/dominio [NOT NULL] [DEFAULT valor], ...], [ PRIMARY KEY (nombre_columna [, nombre_columna,...]), ] [ FOREIGN KEY (nombre_columna [, nombre_columna,...]), REFERENCES nombre_tabla (nombre_columna [, nombre_columna,...]) ];

9 1- DDL DROP TABLE DROP TABLE nombre_tabla [RESTRICT/CASCADE];

10 1- DDL ALTER TABLE nombre_tabla ADD nombre_columna tipo_dato/dominio
[DEFAULT valor]; ALTER TABLE nombre_tabla DROP nombre_columna;

11 2 - DML SQL Algebra Muticonjunto o bolsa Conjunto

12 2 - DML SELECT lista_atributos FROM nombre_tabla [WHERE condición];
(Forma más simple) SELECT lista_atributos FROM nombre_tabla [WHERE condición];

13 2 - DML SELECT lista_atributos
FROM [nombre_tabla [, nombre_tabla,...]] / [join] [WHERE condición] [UNION | UNION ALL | INTERSECT | MINUS Subconsulta] [GROUP BY lista_atributos [HAVING condición]] [ORDER BY lista_atributos];

14 2 - DML [join] :: = nom_tabla1 NATURAL JOIN nom_tabla2 /
nom_tabla1 JOIN nom_tabla2 ON condición / nom_tabla1 INNER JOIN nom_tabla2 ON condición / nom_tabla1 LEFT [OUTER] JOIN nom_tabla2 ON condición / nom_tabla1 RIGHT [OUTER] JOIN nom_tabla2 ON condición

15 2 - DML: Tablas Ejemplo Tabla DEPT 4 filas Tabla DEPT DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 4 filas

16 2 - DML: Tablas Ejemplo Tabla EMP 14 filas Tabla DEPT EMPNO ENAME JOB
MGR HIREDATE SAL COMM DEPTNO 7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER CLERK SALESMAN MANAGER ANALYST PRESIDENT 17/12/80 20/02/81 22/02/81 02/04/81 28/09/81 01/05/81 09/06/81 19/04/87 17/11/81 08/09/81 23/05/87 03/12/81 23/01/82 800 1600 1250 2975 2850 2450 3000 5000 1500 1100 950 1300 1400 20 30 10 14 filas

17 2 - DML: Proyección π epno, ename EMP
Algebra SQL π epno, ename EMP SELECT epno, ename FROM EMP; (proyección1.sql)

18 2 - DML: Proyección (atributo)
Algebra SQL π job EMP SELECT job FROM EMP; SELECT distinct job (proyección2 y 3.sql)

19 2 - DML: Proyección (atributo)
Algebra SQL EMP SELECT * FROM EMP; Proyecta todos los atributos de la tabla (proyección4.sql)

20 2 - DML: Proyección (atributo)
Algebra SQL ρnombre (π ename EMP ) SELECT ename AS nombre FROM EMP; (proyección5.sql)

21 2- DML Los valores que se pueden proyectar son: Atributos Constantes
Proyección Los valores que se pueden proyectar son: Atributos Constantes Expresiones Funciones

22 2 - DML: Proyección SELECT ename as nombre, sal/2 as salario_quincena
Expresiones y Constantes SELECT ename as nombre, sal/2 as salario_quincena FROM EMP; (proyección5.sql) SELECT ename as nombre, ‘ cobra quincenalmente ’, sal/2 as salario_quincena, ‘pesos’

23 2 - DML: Proyección SELECT count(*) FROM EMP; Funciones
(proyección5.sql)

24 2 - DML: Selección π empno,ename(σ deptno=20 (EMP))
Algebra SQL π empno,ename(σ deptno=20 (EMP)) SELECT empno, ename FROM EMP WHERE DEPTNO=20; (seleccion1.sql)

25 2 - DML: Selección SELECT empno, ename FROM EMP
Condiciones compuestas SELECT empno, ename FROM EMP WHERE DEPTNO=20 and SAL<1000; La condición puede utilizar cualquiera de los operadores relacionales y operadores lógicos para generar expresiones más complejas (para cualquier tipo de dato)

26 2 - DML: Selección SELECT empno, ename FROM EMP WHERE DEPTNO is null;
Condiciones con nulos SELECT empno, ename FROM EMP WHERE DEPTNO is null; La condición puede utilizar el operador is que permite evaluar si un atributo tiene un valor nulo o no.

27 2 - DML: Selección SELECT * FROM scott.emp WHERE ename LIKE 'A%';
Condiciones con operador el “like “ SELECT * FROM scott.emp WHERE ename LIKE 'A%'; (selección2_1.sql) El operador like compara parte de una cadena de caracteres, donde: % sustituye a una cantidad arbitraria de caracteres _ sustituye a un solo carácter

28 2- DML Operadores de comparación de conjuntos
Operadores de comparación para consultas simples (sin subqueries) Operadores de comparación de conjuntos <columna> [NOT] IN (<lista de valores>) Select * from EMP where DEPTNO in (20,30); Operadores de valores nulos <columna> IS [NOT] NULL (ya vimos un ejemplo) Operadores de condiciones de dominios <columna> [NOT] BETWEEN <valor inferior> AND <valor superior>

29 2 - DML Un subquery valuado en valor
Operadores de comparación para consultas más complejas Un subquery valuado en valor <expresión> [NOT] IN (<subquery>) En este caso <expresión> es comparada con el conjunto que devuelve el subquery

30 2 - DML (continuación) Operadores de comparación para consultas más complejas <expresión> <operador de comparación> [ANY/ALL] (<subquery>) donde <expresión> puede ser una columna o un valor computado En este caso <expresión> es comparada con cada valor seleccionado por el subquery Any: Evalúa verdadero si existe al menos una tupla seleccionada en el subquery que satisfaga la condición. Si el subquery da vacío, la condición es falsa. All: Evalúa verdadero si todas las tuplas seleccionadas por el subquery satisfacen la comparación. Si el subquery es vacío, la condición es verdadera.

31 2 - DML: Ejemplos Operadores de comparación para consultas más complejas Mostrar todos los empleados que trabajan en el depto 10 y que ganan al menos tanto como algún empleado del departamento 30 SELECT * FROM scott.emp WHERE deptno=10 and sal >= any (SELECT sal WHERE deptno=30);

32 2 - DML: Ejemplos Operadores de comparación para consultas más complejas Mostrar todos los empleados que no trabajan en el depto 30 y que ganan más que todos los empleados que trabajan en el departamento 30 SELECT * FROM scott.emp WHERE deptno <> 30 and sal >= all (SELECT sal WHERE deptno=30);

33 2 - DML In = any Not in <> all
Equivalencias de operadores para consultas más complejas (con subqueries) In = any Not in <> all Equivale Equivale

34 2 - DML Un subquery para test de existencia
Operadores de comparación para consultas más complejas (con subqueries) Un subquery para test de existencia <NOT> EXISTS (<subquery>) En este caso: Exists: Evalúa verdadero si el subquery devuelve tuplas. Not Exists: Evalúa verdadero si el subquery no genera tuplas, es decir, devuelve una tabla vacía.

35 2 - DML: Ejemplos Operadores de comparación para consultas más complejas (con subqueries) Mostrar todos los datos de los departamentos que no tienen empleados SELECT * FROM scott.dept WHERE not exists (SELECT * FROM scott.emp WHERE emp.deptno = dept.deptno);

36 2 - DML SELECT .... .... [ORDER BY lista_atributos ASC/DESC];
Ordenamiento SELECT .... .... [ORDER BY lista_atributos ASC/DESC]; Ordena la salida (tabla resultante) según el/los atributos especificados

37 2 - DML: Producto Cartesiano
Algebra SQL EMP x DEPT SELECT * FROM EMP , DEPT; (producto.sql)

38 2 - DML: Natural Join π ename, job, dname (EMP * DEPT)
Algebra SQL π ename, job, dname (EMP * DEPT) SELECT ename, job, dname FROM EMP NATURAL JOIN DEPT; (join2.sql) (Los atributos sobre los cuales se hace el JOIN deben tener el mismo nombre en ambas tablas)

39 2 - DML: Natural Join Natural Join construido con producto cartesiano Algebra SELECT epno,ename, job, mgr, hiredate, sal, comm, deptno, dname, loc FROM EMP, DEPT WHERE EMP.deptno= DEPT.deptno; (join1.sql)

40 2 - DML: Join πename, job, dname (EMP EMP.deptno = DEPT.deptno DEPT)
Algebra SQL πename, job, dname (EMP EMP.deptno = DEPT.deptno DEPT) SELECT ename, job, dname FROM EMP JOIN DEPT ON EMP.deptno = DEPT.deptno; (join3.sql) SELECT ename, job, dname FROM EMP INNER JOIN DEPT ON EMP.deptno = EPT.deptno; (join3_1.sql)

41 2 - DML: Join SELECT ename, job, dname
Join con restricción extra SELECT ename, job, dname FROM EMP JOIN DEPT ON EMP.deptno = DEPT.deptno WHERE EMP.deptno = 10; (join3_1.sql)

42 2 - DML: Outer Join LEFT OUTER JOIN RIGHT OUTER JOIN FULL OUTER JOIN

43 2 - DML: Outer Join (join5.sql)
Left Outer Join SELECT deptno,dname, ename, job FROM DEPT NATURAL JOIN EMP; El departamento 40 no sale informado porque no existe ningún empleado asignado a él (join5.sql) SELECT DEPT.deptno,dname, ename, job FROM DEPT LEFT OUTER JOIN EMP ON DEPT.DEPTNO=EMP.DEPTNO; El departamento 40 sale informado a pesar de que no existen empleados asignados a él (join6.sql)

44 2 - DML: Outer Join (join5.sql) SELECT deptno,dname, ename, job
Right Outer Join SELECT deptno,dname, ename, job FROM DEPT NATURAL JOIN EMP; El departamento 40 no sale informado porque no existe ningún empleado asignado a él (join5.sql) SELECT ename, job, dept.deptno,dname FROM EMP RIGHT OUTER JOIN DEPT ON DEPT.DEPTNO=EMP.DEPTNO; El departamento 40 sale informado a pesar de que no existen empleados asignados a él (join7.sql)

45 2 - DML: Outer Join Full Outer Join SELECT lista_atributos FROM nombre_tabla FULL OUTER JOIN nombre_tabla ON condición;

46 2 - DML: Union π ename (σ deptno=20 or deptno=30 EMP)
Algebra SQL π ename (σ deptno=20 or deptno=30 EMP) π ename (σ deptno=20 EMP) U π ename (σ deptno=30 EMP) SELECT ename FROM EMP WHERE deptno=20 or deptno=30 ; UNION SELECT ename FROM EMP WHERE deptno=30; (union1.sql)

47 2 - DML: Union Union Union All En este caso, si existen tuplas repetidas se eliminan En este caso, si existen tuplas repetidas no se eliminan

48 2 - DML: Intersección Intersección Departamentos que tienen administrativos y analistas entre sus empleados (CLERK y ANALYST) π deptno(σ job=`CLERK´ EMP) ∩ π deptno(σ job=`ANALYST´ EMP)

49 2 - DML: Intersección Intersección Select deptno from emp where job='CLERK' INTERSECT where job=‘ANALYST'; (interseccion1.sql) Ver (depts_jobs.sql)

50 2 - DML: Intersección Intersección SELECT dept.deptno, dname from dept where deptno in (Select deptno from emp where job='CLERK') and deptno in where job=‘ANALYST'); (interseccion2.sql)

51 π deptno Dept – π deptno EMP
2 - DML: Minus Algebra SQL π deptno Dept – π deptno EMP select deptno from dept minus select deptno from emp; where deptno not in (select deptno from emp); Departamentos que no tienen empleados (minus1.sql) (minus2.sql)

52 2 - DML: Exists vs. In Exists vs. In Las subconsultas vinculadas con un In pueden seleccionar más de un atributo, obviamente compatible con los atributos expresados en el where. Todas las consultas resueltas con IN pueden ser resueltas con Exists. Idem para los negados (Not In – Not Exists)

53 2 - DML: Division πx,y A DIVIDE BY πy B Select A.x from A
Algebra SQL πx,y A DIVIDE BY πy B Select A.x from A where not exists (select * from B from A AX where AX.x=A.x and AX.y=B.y));

54 2 - DML: Alias Alias SELECT lista_atributos FROM nombre_tabla nombre_alias .....;

55 2 - DML: Funciones de Resumen
AVG COUNT MAX MIN

56 2 - DML: Funciones Resumen
Funciones de Resumen SELECT Sum(nombre_atributo*) FROM nombre_tabla; SELECT Avg(nombre_atributo*) SELECT Count(*) * El atributo debe ser numérico

57 (agrup cantidad emp x depto.sql)
2 - DML: Grupos Group y Having SELECT .... .... [GROUP BY lista_atributos [HAVING condición]]; Agrupa las tuplas que tienen igual valor del/ de los atributos especificados en lista_atributos. Muestra una tupla representativa del grupo (resume el grupo). Este valor debe ser único al grupo y además si es un atributo, debe estar especificado en la cláusula group by. (agrup cantidad emp x depto.sql) (agrup con join.sql)

58 2 - DML: Grupos SELECT .... [GROUP BY lista_atributos
Group y Having SELECT .... [GROUP BY lista_atributos [HAVING condición]]; Agrupa las tuplas que tienen igual valor del/ de los atributos especificados en lista_atributos. Muestra una tupla representativa del grupo (resume el grupo). Este valor debe ser único al grupo y además si es un atributo, debe estar especificado en la cláusula group by. El HAVING permite seleccionar los grupos que cumplen la condición indicada (agrup cantidad emp x depto.sql) (agrup con join.sql) (agrup cantidad emp x depto con condicion.sql)

59 2 – DML Inserción de tuplas Modificación de tuplas
Actualización Inserción de tuplas Modificación de tuplas Eliminación de tuplas

60 2 – DML: Inserción Insert con values INSERT INTO <tabla> [<colum_i, …, colum_j>] VALUES (<valor_i, …, valor_j>); Para cada columna debe ser especificado un valor. Si no se especifica una columna de la tabla, se almacenará en ella un valor nulo. Si no se especifican las columnas se asumirá el orden especificado en el create.

61 3 – DML: Inserción Insert con subquery INSERT INTO <tabla> [<colum_i, …, colum_j>] <query>; Ejemplo: insert into hr.jobs select * from otrohr.jobs;

62 3 – DML: Modificación UPDATE <tabla>
SET<colum_i>=<expr_i>, …, <expr_j> = <expr_j> [WHERE <condición>]; Donde: <expr> puede ser una constante, una expresión aritmética o un query Ejemplo: UPDATE EMP SET sal = (select min(sal) from EMP where job=‘MANAGER’) WHERE job=‘SALESMAN’ and deptno=20;

63 3 – DML: Modificación UPDATE <tabla>
SET (<columna i, …, columna j>) = <query> [WHERE <condición>];

64 3 – DML: Eliminación DELETE DELETE FROM <tabla> [WHERE <condición>];

65 3 - Vistas Definición de Vistas Una vista es definida como una consulta sobre una o más relaciones, guardadas con un nombre en el diccionario de datos ¿Por qué usar vistas? Ocultar información a algunos usuarios Hacer más simples algunas consultas Modularidad en el acceso a la base de datos

66 3 - Vistas Creación de Vistas CREATE VIEW <nombre de la vista> [<columna(s)>] AS <sentencia select> [ WITH CHECK OPTION ]; Si [<columna(s)>] no está especificado, las columnas toman el mismo nombre de los correspondientes a la trabla generada en la sentencia select. Una vista es evaluada cada vez que es accedida. La definción de una vista puede usar otra vista. La cláusula WITH CHECK OPTION provoca que si se intenta insertar en la vista una tupla que no satisface la condición de la vista, esa inserción es rechazada. Los Updates son similarmente rechazados si el nuevo valor no satisface la condición.

67 3 - Vistas Uso de Vistas Una vista puede ser usada en una sentencia SELECT en forma idéntica que una tabla. No toda vista puede ser actualizada automáticamente (insert, update, delete). La dificultad de la actualización de vistas radica en que éstas deben ser traducidas a actualizaciones sobre las tablas bases sobre las que está definida la vista (create trigger … instead of … )

68 3 - Vistas La cláusula from debe usar una sola tabla
Condiciones para que una vista pueda actualizarse automática- mente La cláusula from debe usar una sola tabla La clausula select contiene sólo nombres de atributos, es decir, no tiene: expresiones funciones de agregación especificación de distinct No debe incluir la cláusula group by en su definción No se ha incluido en la clausula select algún atributo que en la tabla base tiene la restricción de not null

69 4 – Restricciones de Integridad
Una restricción puede definirse sintácticamente de dos formas: Como parte de la definición de una columna El nombre de la restricción es asignada automáticamente por el motor de base de datos. Como parte de la definición de la tabla. El nombre de la restricción puede ser especificado por el usuario. Tipos (En cuanto a la forma de definirse)

70 4 – Restricciones de Integridad
De tabla / columna Unicidad (unique). Clave primaria (primary key). Integridad referencial (foreign key - references). Control (check). De dominio Se aplican a cada columna (de cualquier tabla) que está basada en ese dominio, actuando como una restricción de tabla. Pueden incluir una condición referida a los valores del dominio. Tipos (En cuanto al objeto sobre el que se define)

71 4 – Restricciones de Integridad
Aserción Una restricción de control (check constraint) definida independientemente de cualquier tabla. Incluyen una condición que puede referir al contenido de filas individuales de una o varias tablas, al contenido de tablas enteras o a un estado determinado por las relaciones entre varias tablas. Tipos

72 4 – Restricciones de Integridad
Todas las restricciones son comprobadas con los mismos mecanismos y procedimientos: Cada restricción tiene una condición que se evalúa a cierto o a falso. Cada restricción tiene un modo (constraint mode): DEFERRED => diferido Las restricciones con el modo DEFERRED son comprobadas al final de la ejecución de un grupo lógico de sentencias SQL (transacción). IMMEDIATE => inmediato Las restricciones con el modo IMMEDIATE son comprobadas después de la ejecución de cada sentencia SQL. Comprobación

73 4 – Restricciones de Integridad
Cada restricción tiene un modo por defecto que es el utilizado al iniciar una nueva sesión SQL o una nueva transacción. <modo de restricción> ::= { INITIALLY DEFERRED | INITIALLY IMMEDIATE } [ [ NOT ] DEFERRABLE ] Comprobación

74 4 – Restricciones de Integridad
Unicidad (unique) Dos filas de la tabla no pueden tener el mismo valor no nulo en las columnas indicadas. Puede aplicarse al conjunto completo de columnas Restricciones de Tabla /Columna

75 4 – Restricciones de Integridad
Clave primaria (primary key) Es una restricción de unicidad pero en la cual las columnas no pueden tomar valor nulo (integridad de entidades) Restricciones de Tabla / Columna

76 4 – Restricciones de Integridad
Integridad referencial (foreign key- references) Representa una clave ajena o foránea. Incluye una o más columnas referenciantes (referencing columns) y las correspondientes columnas referenciadas (referenced columns) de una tabla base referenciada (referenced table), que puede ser la referenciante. Las columnas referenciadas deben tener una restricción de unicidad en la tabla referenciada. Restricciones de Tabla / Columna

77 4 – Restricciones de Integridad
Control (check). Incluye una condición de búsqueda que sólo puede referir a elementos de la tabla que la incluye. Restricciones de Tabla / Columna

78 4 – Restricciones de Integridad
Sintaxis <definición de restricción de tabla> ::= [ CONSTRAINT <nombre de restricción> ] <restricción de tabla> [ <modo 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 control> }

79 4 – Restricciones de Integridad
Sintaxis <definición de restricción de unicidad> ::= { { UNIQUE | PRIMARY KEY } ( <lista de columnas> ) | UNIQUE ( VALUE ) } <definición de restricción referencial> ::= FOREIGN KEY ( <lista columnas referenciantes> ) <especificación de referencia> <especificación de referencia> ::= REFERENCES <nombre tabla referenciada> [ (<lista columnas referenciadas>) ] [ <acciones referenciales> ]

80 4 – Restricciones de Integridad
Sintaxis <acciones referenciales> ::= { <regla de modificación> [ <regla de borrado> ] | <regla de borrado> [ <regla de modificación> ] } <regla de modificación> ::= ON UPDATE { CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION } <regla de borrado> ::= ON DELETE { CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION }

81 4 – Restricciones de Integridad
Sintaxis <definición de restricción de control> ::= CHECK (<condición >)

82 4 – Restricciones de Integridad
Sintaxis Las restricciones de columna son restricciones asociadas a una única columna de una tabla: <restricción de columna> ::= { NOT NULL | { UNIQUE | PRIMARY KEY } | <especificación de referencia> | <definición de restricción de control> }

83 4 – Restricciones de Integridad
Sintaxis <restricción de dominio> ::= [ CONSTRAINT <nombre de restricción> ] CHECK (<condición de busqueda>) [ <modo de restricción> ]

84 4 – Restricciones de Integridad
Aserciones: Sintaxis <definición de aserción> ::= CREATE ASSERTION <nombre de restricción> CHECK (<condición de busqueda>) [ <modo de restricción> ]

85 5 – Seguridad create <nombre usuario>
Usuarios create <nombre usuario> identified by <password>;

86 5 – Seguridad grant <lista de privilegios> [on <objeto/s>]
Conceder/ Revocar permisos grant <lista de privilegios> [on <objeto/s>] to <usuario/s o rol/es> [with grant option]; revoke <lista de privilegios> [on <objeto/s>] from <usuario/s o rol/es> [restrict | cascade];

87 6 –Transacciones Transacciones: Commit Rollback Una transacción consiste en una secuencia de instrucciones de consulta y actualizaciones. Inicio: Implícitamente una transacción comienza cuando se ejecuta la primer instrucción SQL Finalización: Una transacción puede terminar con Commit: Compromete la transacción actual, es decir, hace que los cambios realizados por la transacción sean permanentes en la base de datos Rollback: Causa el retroceso de la transacción , es decir, deshace todas las actualizaciones realizadas por las instrucciones SQL de la transacción;. El estado de la base de datos se restaura al que existía previo a la ejecución de la transacción


Descargar ppt "Lenguaje SQL (Structured Query Language)"

Presentaciones similares


Anuncios Google