Presenta: Liliana Gutiérrez Flores 6-abril-2016 SQL Structured Query Language 9:20 Buenos días, mi nombre es Liliana Gutiérrez Flores y les voy a presentar el tema SQL. Presenta: Liliana Gutiérrez Flores 6-abril-2016
SQL - Liliana Gutiérrez Objetivo: Presentar el lenguaje SQL como el lenguaje estándar para la gestión de bases de datos relacionales. Aprender la sintaxis y aplicarla para la creación y manipulación de una base de datos utilizando mysql y Oracle sqlplus. 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez Contenido: Marco conceptual: modelo relacional. Marco histórico: fechas y estándares de SQL. Base de datos de ejemplo. SQL: sintaxis y ejemplos. 4.1. DDL: CREATE, ALTER, DROP. 4.2. DML: INSERT, UPDATE, DELETE, SELECT. 4.3. Consultas más elaboradas. 06/04/2016 SQL - Liliana Gutiérrez
El modelo de datos relacional. 1. Marco conceptual El modelo de datos relacional. ACM journal En las últimas cuatro décadas los Sistemas Gestores de Bases de Datos (SGBS o DBMS) se han basado, primordialmente en el modelo de datos relacional. A Relational Model of Data.. Dr. Edgar F. Codd Junio 1970 El Modelo de datos relacional fue propuesto en Junio de 1970 por el Dr. Edgar Frank Codd en su trabajo A Relational Model of Data for Large Shared Data Banks publicado en la Association of Computer Machinery (ACM) journal. 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 1. Marco conceptual Relaciones. Elemento básico de organización de los datos. Tabla de dos dimensiones con filas y columnas. Atributos El modelo relacional utiliza las relaciones como elemento básico para la organización de los datos. Una relación puede ser vista como una tabla de dos dimensiones con filas (denominadas tuplas) y columnas. Los atributos (o datos de interés de los objetos a modelar), son los encabezados de la tabla y cada fila o tupla contiene los datos de un objeto (cosa, lugar, persona, concepto, hecho, etc.). Tuplas 06/04/2016 SQL - Liliana Gutiérrez
Esquema de relación y relación 1. Marco conceptual Esquema de relación y relación Un conjunto de n atributos cada uno con nombre distinto y un dominio. Tupla: Conjunto de n valores en los dominios de los atributos del esquema de relación. Un conjunto de m tuplas. 06/04/2016 SQL - Liliana Gutiérrez
Restricciones de integridad 1. Marco conceptual Restricciones de integridad OBLIGATORIEDAD NOT NULL UNICIDAD UNIQUE IDENTIDAD PRIMARY KEY REFERENCIAL FOREIGK KEY DOMINIO CHECK Mecanismos para maximizar la integridad de los datos. 06/04/2016 SQL - Liliana Gutiérrez
1. Marco conceptual Las reglas de Codd. Las 12 reglas de un verdadero DBMS … Regla 5 Dr. Edgar F. Codd 1984 Debe existir al menos un lenguaje cuyas sentencias sean expresables, mediante una sintaxis bien definida, soportando la definición y manipulación de datos incluyendo las restricciones de integridad y el soporte de transacciones. En 1984 Edgar F. Codd, publicó las 12 Reglas que un verdadero Sistema Relacional de Bases de Datos debería cumplir. 06/04/2016 SQL - Liliana Gutiérrez
Fechas importantes. 2. Marco histórico 1986: ANSI SQL 1983: DB2: SQL ISO SQL/87 IBM Mainframe 1986: ANSI SQL 1983: DB2: SQL 1979: Oracle: SQL 1978: System R: SEQUEL 1970. Modelo relacional. 1974 y1975 Lab. IBM. Donald Chamberlin SEQUEL. SEQUEL-XRM 1978. IBM desarrolla SYSTEM/R basado en el modelo original de Codd, que incluyó SEQUEL - Structured English Query Language. 1979. Relational Software Inc. lanzó su RDBMS: ORACLE con SQL, 1982 cambio su nombre a Oracle. 1982: IBM lanza su primer RDBMS comercial cuya segunda versión lanzada en 1985 DB2(Database 2 system) es todavía utilizado en sistemas legados. Incialmente diseñado para equipos MainFrame y portado posteriomente a windows y UNIX. En 1986, el ANSI adoptó SQL (sustancialmente adoptó el dialecto SQL de IBM) como estándarpara los lenguajes relacionales y en 1987 se transfomó en estándar ISO. Esta versión delestándar va con el nombre de SQL/86. En los años siguientes, éste ha sufrido diversasrevisiones que han conducido primero a la versión SQL/89 y, posteriormente, a la actualSQL/92. ANSI 1986, ISO SQL-87. Relational Software Inc. 1974: SEQUEL-XRM Laboratorios de IBM 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 2. Marco histórico Estándares ANSI 1986, ISO SQL-87. ANSI SQL-89. ANSI/ISO SQL-92 o SQL2. ANSI/ISO SQL-99 o SQL3. 2003, 2006 y 2008 ANSI SQL: 2011 or ISO/IEC 9075:2011. 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 2. Marco histórico http://webstore.ansi.org/ Consultado 3 de abril de 2016. ISO/IEC 9075-1:2011 SQL Framework. ISO/IEC 9075-2:2011 SQL Foundation. ISO/IEC 9075-3:2008 SQL Call-Level Interface. ISO/IEC 9075-4:2011 SQL Persistent Stored Modules. ISO/IEC 9075-9:2008 SQL Management of External Data. ISO/IEC 9075-10:2008 SQL Object Language Bindings . ISO/IEC 9075-11:2011 SQL Information and Definition. ISO/IEC 9075-13:2008 SQL Routines and Types Using Java. ISO/IEC 9075-14:2011 SQL XML-Related Specifications. 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 3. Base de datos de ejemplo Esquema https://www.lucidchart.com/documents/edit/a143281c-3fa3-4a7c-ba8f-e50fca7194bc# 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 3. Base de datos de ejemplo Tablas 06/04/2016 SQL - Liliana Gutiérrez
Estructura del lenguaje SQL DDL CREATE ALTER DROP DML INSERT UPDATE DELETE SELECT 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.1. DDL: CREATE, ALTER, DROP CREATE CREATE DATABASE nombre_db; CREATE TABLE nombre_tabla( nom_col_1 tipo, nom_col_2 tipo, nom_col_3 tipo, ...) ; 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.1. DDL: CREATE, ALTER, DROP Creación en mysql mysql> CREATE DATABASE db_emp1; mysql> USE db_emp1; mysql> CREATE TABLE EMPLEADO ( -> numero integer, -> nombre varchar(40), -> puesto varchar(30), -> fecha_ingreso date); Query OK, 0 rows affected (36.65 sec) 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.1. DDL: CREATE, ALTER, DROP Creación en sqlplus C:\Users\Liliana>sqlplus/nolog SQL> connect SYSTEM:Ol1l14n4@emp1; Connected. SQL> CREATE TABLE EMPLEADO ( 2 numero integer PRIMARY KEY, 3 nombre varchar(40), 4 puesto varchar(30), 5 fecha_ingreso date); Table created. 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.1. DDL: CREATE, ALTER, DROP DROP DROP TABLE nombre_tabla; mysql> DROP TABLE EMPLEADO; SQL> DROP TABLE empleado; 06/04/2016 SQL - Liliana Gutiérrez
Restricciones de integridad 4.1. DDL: CREATE, ALTER, DROP Restricciones de integridad CREATE TABLE nombre_tabla( nom_col_1 tipo [ restricción ], nom_col_2 tipo [ restricción ], nom_col_3 tipo [ restricción ], ...) ; restricción: NOT NULL | UNIQUE |PRIMARY KEY | DEFAULT | CHECK | FOREIGN KEY REFERENCES tabla(col) 06/04/2016 SQL - Liliana Gutiérrez
Restricciones de integridad 4.1. DDL: CREATE, ALTER, DROP Restricciones de integridad CREATE TABLE nombre_tabla( nom_col_1 tipo, nom_col_2 tipo, nom_col_3 tipo, ..., [restricción , restricción , ... ] ; restricción: NOT NULL (col) | UNIQUE (col)| PRIMARY KEY (col) | FOREIGN KEY (col) REFERENCES tabla(col) 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.1. DDL: CREATE, ALTER, DROP CREATE TABLE EMPLEADO ( numero integer PRIMARY KEY, nombre varchar(40), puesto varchar(30), fecha_ingreso date ); numero integer, fecha_ingreso date, PRIMARY KEY (numero) ); 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.1. DDL: CREATE, ALTER, DROP ALTER ALTER TABLE nombre_tabla ADD COLUMN nombre_col tipo | DROP COLUMN nombre_col | MODIFY COLUMN nombre_col tipo | ADD PRIMARY KEY (nombre_col) | DROP PRIMARY KEY | ADD FOREIGN KEY (col) REFERENCES tabla(col); 06/04/2016 SQL - Liliana Gutiérrez
Agregar / eliminar columna 4.1. DDL: CREATE, ALTER, DROP Agregar / eliminar columna mysql> ALTER TABLE EMPLEADO -> ADD COLUMN sexo char(1); mysql> ALTER TABLE EMPLEADO -> DROP COLUMN sexo; 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.1. DDL: CREATE, ALTER, DROP Archivos de comandos mysql> source sqlFiles/db_empresa1_mysql.sql; source sqlFiles/insert_mysql.sql; SQL> @sqlFiles/db_empresa1_sqlplus.sql @sqlFiles/insert_sqlplus.sql 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.2. DML: INSERT, UPDATE, DELETE, SELECT INSERT INSERT INTO nombre_tabla [ (col1, col2, col3, ...)] VALUES (valor1,valor2,valor3,...); 06/04/2016 SQL - Liliana Gutiérrez
Inserción en mysql y sqlplus 4.2. DML: INSERT, UPDATE, DELETE, SELECT Inserción en mysql y sqlplus mysql> insert into empleado values (1, 'Anita', 'Secretaria', STR_TO_DATE('03/10/2014','%m/%d/%Y')); SQL> to_date('10-Mar-2014', 'DD-MON-YYYY')); 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.2. DML: INSERT, UPDATE, DELETE, SELECT Archivos de comandos mysql> source sqlFiles/db_empresa1_mysql.sql; source sqlFiles/insert_mysql.sql; SQL> @sqlFiles/db_empresa1_sqlplus.sql @sqlFiles/insert_sqlplus.sql 06/04/2016 SQL - Liliana Gutiérrez
Restricción o selección [ WHERE ] 4.2. DML: INSERT, UPDATE, DELETE, SELECT Restricción o selección [ WHERE ] UPDATE nombre_tabla SET nombre_col = valor [WHERE condicion]; DELETE FROM nombre tabla SELECT * FROM nombre_tabla 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.2. DML: INSERT, UPDATE, DELETE, SELECT condición: predicado [ AND | OR predicado [AND | OR predicado [...] ] ] predicado: atributo 𝜽 valor; 𝜽∈{ =, <>, !=, >, <, >=, <=} atributo BETWEEN valor AND valor atributo [NOT] LIKE ‘expresion’ 06/04/2016 SQL - Liliana Gutiérrez
Ejemplos clausula WHERE 4.2. DML: INSERT, UPDATE, DELETE, SELECT Ejemplos clausula WHERE UPDATE EMPLEADO SET puesto = "Jefe" WHERE LIKE "G%"; DELETE FROM PROYECTO WHERE clave = 2; SELECT * FROM PROYECTO WHERE clave > 2 AND prioridad = 1; 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.2. DML: INSERT, UPDATE, DELETE, SELECT Proyección SELECT lista_atributos FROM nombre_table [DISTINCT] [ORDER BY atributo] mysql> SELECT nombre, puesto FROM EMPLEADO ORDER BY nombre; 06/04/2016 SQL - Liliana Gutiérrez
Funciones de agregación 4.3. Consultas más elaboradas Funciones de agregación Regresan un valor a partir de los múltiples valores en una columna. SELECT func(atributo) FROM nombre_tabla; func(): count() | sum() | avg() | min() | max() 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.3. Consultas más elaboradas Ejemplos de funciones SELECT count(*) FROM EMPLEADO; SELECT COUNT(*) AS CUENTA FROM EMPLEADO; SELECT max(prioridad) FROM PROYECTO; SELECT avg(prioridad) FROM PROYECTO; 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.3. Consultas más elaboradas Agrupación de tuplas SELECT * FROM ASIGNACION; SELECT count(*) FROM ASIGNACION GROUP BY proyecto; SELECT proyecto, count(*) FROM ASIGNACION GROUP BY proyecto [HAVING count(*) > 2]; 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.3. Consultas más elaboradas WHERE y HAVING mysql> SELECT proyecto, count(*) FROM ASIGNACION WHERE empleado > 3 GROUP BY proyecto HAVING count(*) > 2; 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.3. Consultas más elaboradas Producto cartesiano La concatenación de todas las tuplas de una relación con todas las tuplas una segunda. WHERE EMPLEADO.numero = ASIGNACION.empleado 06/04/2016 SQL - Liliana Gutiérrez
Combinación (inner join) 4.3. Consultas más elaboradas Combinación (inner join) 𝜽 –join SELECT * FROM tabla1, tabla2 WHERE tabla1.atributo 𝜽 tabla2.atributo; Equi – join WHERE tabla1.atributo = tabla2.atributo; mysql> SELECT * FROM EMPLEADO, ASIGNACION WHERE EMPLEADO.numero = ASIGNACION.empleado; 06/04/2016 SQL - Liliana Gutiérrez
Restricción, proyección y join 4.3. Consultas más elaboradas Restricción, proyección y join mysql> SELECT DISTINCT nombre FROM EMPLEADO, ASIGNACION WHERE numero = empleado AND nombre LIKE ‘A%’ AND proyecto = 3 ORDER BY nombre; 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.3. Consultas más elaboradas Subconsultas SQL> SELECT * FROM EMPLEADO WHERE numero IN (1,2,3); WHERE numero IN (SELECT ASIGNACION.empleado FROM ASIGNACION WHERE ASIGNACION.proyecto = 3); 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.3. Consultas más elaboradas Cuantificadores WHERE atributo IN (subconsulta que regresa valores de una sóla columna) Equivalente a: WHERE atributo = ANY (subconsulta ...) En general: WHERE atributo 𝜽 ANY | ALL 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.3. Consultas más elaboradas Existencia SELECT * FROM EMPLEADO WHERE numero IN (SELECT empleado FROM ASIGNACION WHERE EMPLEADO.numero = ASIGNACION.empleado ); WHERE EXISTS 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.3. Consultas más elaboradas Existencia Mismo dominio SELECT * FROM EMPLEADO WHERE numero NOT IN (SELECT empleado FROM ASIGNACION WHERE EMPLEADO.numero = ASIGNACION.empleado ); WHERE NOT EXISTS * 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez 4.3. Consultas más elaboradas Existencia SELECT * FROM EMPLEADO WHERE NOT EXISTS (SELECT * FROM PROYECTO (SELECT * FROM ASIGNACION WHERE EMPLEADO.numero = ASIGNACION.empleado AND PROYECTO.clave = ASIGNACION.proyecto ) ); 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez Conclusiones Hemos revisado y ejemplificado el uso de SQL para la creación y manipulación de bases de datos con mysql y sqlplus. Para trabajar con otros DBMS, en general se puede utilizar SQL-estándar, pero es importante referirse siempre a la documentación propia del sistema. “Los DBMS comerciales no implementan los estándares en su totalidad, en vez de ello, manejan un súperconjunto de un subconjunto...” [C. J. Date]. 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez Conclusiones SQL como cualquier otro lenguaje se aprende practicando. Temas para seguir aprendiendo: SQL-incrustado y soporte de transacciones para desarrollo de aplicaciones (Desarrollo Web e Ingeniería de SW). Creación de otros objetos (vistas, índices, disparadores, ...) SQL: DCL para administración de usuarios y privilegios. (Administración de base de datos) SQL de procedimientos (Administración de base de datos) Procesamiento de consultas y algebra relacional (Bases de datos distribuidas) 06/04/2016 SQL - Liliana Gutiérrez
SQL - Liliana Gutiérrez Gracias por su atención. Liliana Gutiérrez lilianag@apolo.acatlan.unam.mx 06/04/2016 SQL - Liliana Gutiérrez