bases de datos i. tema vi. lenguaje de consulta estructurado

51
::Universidad del Mar:: ::Universidad del Mar:: ::Campus Puerto Escondido :: ::Campus Puerto Escondido :: Tema VI. Tema VI. Lenguaje de Consulta Lenguaje de Consulta Estructurado Estructurado SQL SQL Bases de Datos I Bases de Datos I MTI Remedios Fabián Velasco MTI Remedios Fabián Velasco Ver. 1.1 Ver. 1.1 Cuarto Semestre Cuarto Semestre Licenciatura en Informática Licenciatura en Informática

Upload: 13scorpio87

Post on 12-Jun-2015

2.279 views

Category:

Documents


3 download

DESCRIPTION

Trabajo hecho por la M.C. Remedios Fabián Velasco, docente de la Universidad del Mar, campus Puerto Escondido.

TRANSCRIPT

Page 1: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

::Universidad del Mar:: ::Universidad del Mar:: ::Campus Puerto Escondido ::::Campus Puerto Escondido ::

Tema VI. Tema VI. Lenguaje de Consulta Lenguaje de Consulta Estructurado SQLEstructurado SQL

Bases de Datos IBases de Datos IMTI Remedios Fabián VelascoMTI Remedios Fabián Velasco

Ver. 1.1Ver. 1.1Cuarto SemestreCuarto Semestre

Licenciatura en InformáticaLicenciatura en Informática

Bases de Datos IBases de Datos IMTI Remedios Fabián VelascoMTI Remedios Fabián Velasco

Ver. 1.1Ver. 1.1Cuarto SemestreCuarto Semestre

Licenciatura en InformáticaLicenciatura en Informática

Page 2: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

TemarioTemario6 Lenguaje de consulta estructurado (SQL).6 Lenguaje de consulta estructurado (SQL).6.1 Introducción.6.1 Introducción.

6.1.1 ¿Qué es el SQL?6.1.1 ¿Qué es el SQL?6.1.2 Características del lenguaje.6.1.2 Características del lenguaje.6.1.3 Cómo interpretar un diagrama sintáctico.6.1.3 Cómo interpretar un diagrama sintáctico.

6.2 Consultas simples.6.2 Consultas simples.6.2.1 Sintaxis de la SELECT (para consultas simples).6.2.1 Sintaxis de la SELECT (para consultas simples).6.2.2 La tabla origen (cláusula FROM).6.2.2 La tabla origen (cláusula FROM).6.2.3 Selección de columnas.6.2.3 Selección de columnas.6.2.4 Ordenación de las filas (ORDER BY).6.2.4 Ordenación de las filas (ORDER BY).6.2.5 Selección de filas.6.2.5 Selección de filas.6.2.6 Las cláusulas DISTINCT / ALL.6.2.6 Las cláusulas DISTINCT / ALL.6.2.7 La cláusula TOP.6.2.7 La cláusula TOP.6.2.8 La cláusula WHERE.6.2.8 La cláusula WHERE.6.2.9 Condiciones de selección.6.2.9 Condiciones de selección.6.2.10 Expresiones válidas.6.2.10 Expresiones válidas.6.2.11 Operadores lógicos.6.2.11 Operadores lógicos.6.2.12 Caracteres comodines.6.2.12 Caracteres comodines.

6.3 Las consultas multitabla.6.3 Las consultas multitabla.6.3.1 La unión de tablas.6.3.1 La unión de tablas.6.3.2 La composición de tablas.6.3.2 La composición de tablas.6.3.3 El operador UNION.6.3.3 El operador UNION.6.3.4 El producto cartesiano.6.3.4 El producto cartesiano.6.3.5 El INNER JOIN.6.3.5 El INNER JOIN.6.3.6 El LEFT/RIGHT JOIN.6.3.6 El LEFT/RIGHT JOIN.

6.4 Las consultas de resumen.6.4 Las consultas de resumen.6.4.1 Las funciones de columna.6.4.1 Las funciones de columna.6.4.2 Selección en el origen de datos.6.4.2 Selección en el origen de datos.6.4.3 Origen múltiple.6.4.3 Origen múltiple.6.4.4 La cláusula GROUP BY.6.4.4 La cláusula GROUP BY.6.4.5 La cláusula HAVING.6.4.5 La cláusula HAVING.

Page 3: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

TemarioTemario6.5 Las subconsultas.6.5 Las subconsultas. 6.5.1 Definiciones.6.5.1 Definiciones. 6.5.2 Referencias externas.6.5.2 Referencias externas. 6.5.3 Anidar subconsultas.6.5.3 Anidar subconsultas. 6.5.4 Subconsulta en la lista de selección.6.5.4 Subconsulta en la lista de selección. 6.5.5 Subconsulta en la cláusula FROM.6.5.5 Subconsulta en la cláusula FROM. 6.5.6 Subconsulta en las cláusulas WHERE y HAVING.6.5.6 Subconsulta en las cláusulas WHERE y HAVING. 6.5.7 Condiciones de selección con subconsultas.6.5.7 Condiciones de selección con subconsultas.6.6 Actualización de datos.6.6 Actualización de datos. 6.6.1 Insertar una fila INSERT INTO VALUES.6.6.1 Insertar una fila INSERT INTO VALUES. 6.6.2 Insertar varias filas INSERT INTO SELECT.6.6.2 Insertar varias filas INSERT INTO SELECT. 6.6.3 Insertar filas en una tabla nueva SELECT INTO.6.6.3 Insertar filas en una tabla nueva SELECT INTO. 6.6.4 Modificar el contenido de las filas UPDATE.6.6.4 Modificar el contenido de las filas UPDATE. 6.6.5 Borrar fila DELETE.6.6.5 Borrar fila DELETE. 6.6.6 Conceptos básicos de integridad referencial.6.6.6 Conceptos básicos de integridad referencial.6.7 Tablas de referencias cruzadas.6.7 Tablas de referencias cruzadas. 6.7.1 La sentencia TRANSFORM.6.7.1 La sentencia TRANSFORM. 6.7.2 Las columnas dinámicas.6.7.2 Las columnas dinámicas. 6.7.3 Las columnas fijas.6.7.3 Las columnas fijas.6.8 El DDL (lenguaje de definición de datos).6.8 El DDL (lenguaje de definición de datos). 6.8.1 La sentencia CREATE TABLE.6.8.1 La sentencia CREATE TABLE. 6.8.2 La sentencia ALTER TABLE.6.8.2 La sentencia ALTER TABLE. 6.8.3 La sentencia DROP TABLE.6.8.3 La sentencia DROP TABLE. 6.8.4 La sentencia CREATE INDEX.6.8.4 La sentencia CREATE INDEX. 6.8.5 La sentencia DROP INDEX.6.8.5 La sentencia DROP INDEX. 6.8.6 Integridad referencial.6.8.6 Integridad referencial. 6.8.7 Los índices.6.8.7 Los índices. 6.8.8 Tipos de datos. 6.8.8 Tipos de datos.

Page 4: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.1 Introducción.6.1 Introducción.

19741974 D. Chamberlin Laboratorio San José de D. Chamberlin Laboratorio San José de IBM Structured English Query Language o IBM Structured English Query Language o SEQUEL.SEQUEL.

19761976 SEQUEL/2 versión mejorada SEQUEL/2 versión mejorada renombrada a SQL (sicuel) por razones renombrada a SQL (sicuel) por razones legaleslegales

IBM desarrolló prototipo basado en SEQUEL/2, IBM desarrolló prototipo basado en SEQUEL/2, denominado System R, el propósito era validar la denominado System R, el propósito era validar la factibilidad del sistema relacional.factibilidad del sistema relacional.SQL es resultado del desarrollo de este proyecto SQL es resultado del desarrollo de este proyecto (System R)(System R)Las raíces de SQL se encuentran en el lenguaje Las raíces de SQL se encuentran en el lenguaje SQUARE (Specifying Queries As Relational SQUARE (Specifying Queries As Relational Expressions, especificación de consultas como Expressions, especificación de consultas como expresiones relacionales) anterior al proyecto expresiones relacionales) anterior al proyecto System R. SQUARE fue diseñado como lenguaje System R. SQUARE fue diseñado como lenguaje de investigación para implementar el álgebra de investigación para implementar el álgebra relacional, mediante frases en inglés.relacional, mediante frases en inglés.

Page 5: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.1 Introducción.6.1 Introducción.A finales de los 70’s Oracle Corporation desarrolló el A finales de los 70’s Oracle Corporation desarrolló el

SMBD Oracle, que fue la primera versión SMBD Oracle, que fue la primera versión implementación comercial de un SMBD relacional implementación comercial de un SMBD relacional basado en SQL.basado en SQL.

1982 ANSI comenzó a trabajar en un lenguaje de 1982 ANSI comenzó a trabajar en un lenguaje de bases de datos relacional (RDL, Relational bases de datos relacional (RDL, Relational Database Language). RDL fue abandonado en Database Language). RDL fue abandonado en 1984 y el borrador del estándar adoptó una forma 1984 y el borrador del estándar adoptó una forma parecida a las implementaciones existentes de parecida a las implementaciones existentes de SQL). SQL).

1986 ANSI (American Nacional Standard Institute) 1986 ANSI (American Nacional Standard Institute) definió un estándar para SQL que fue adoptado en definió un estándar para SQL que fue adoptado en 1987 como estándar internacional por ISO 1987 como estándar internacional por ISO (International Organization for Standardization).(International Organization for Standardization).

Actualmente se utiliza en centenares de SMBD.Actualmente se utiliza en centenares de SMBD.

Page 6: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.1.1. ¿Qué es SQL?6.1.1. ¿Qué es SQL?

Lenguaje estándar para las bases de datos Lenguaje estándar para las bases de datos relacionalesrelacionalesEl El SQLSQL (Structured Query Language), (Structured Query Language), lenguaje lenguaje de consulta estructuradode consulta estructurado, es un lenguaje que , es un lenguaje que surgió de un proyecto de investigación de IBM surgió de un proyecto de investigación de IBM para el acceso a bases de datos relacionales. para el acceso a bases de datos relacionales. Actualmente se ha convertido en un Actualmente se ha convertido en un estándarestándar  de   de lenguaje de bases de datos, y la mayoría de los lenguaje de bases de datos, y la mayoría de los sistemas de bases de datos lo soportan, desde sistemas de bases de datos lo soportan, desde sistemas para ordenadores personales, hasta sistemas para ordenadores personales, hasta grandes ordenadores.grandes ordenadores.Definición del lenguaje SQL hecha por ISO. Definición del lenguaje SQL hecha por ISO. Lenguaje portable, debe ajustarse a un estándar Lenguaje portable, debe ajustarse a un estándar reconocidoreconocidoSQL es un ejemplo de lenguaje orientado a la SQL es un ejemplo de lenguaje orientado a la transformación, diseñado para usar relaciones con transformación, diseñado para usar relaciones con el fin de transformar los datos de entrada en las el fin de transformar los datos de entrada en las salidas requeridas.salidas requeridas.

Page 7: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.1.1. ¿Qué es SQL?6.1.1. ¿Qué es SQL?

Como su nombre indica, el SQL nos Como su nombre indica, el SQL nos permitepermite realizar realizar consultas a la base de datosconsultas a la base de datos. Pero SQL además realiza . Pero SQL además realiza funciones de funciones de definición, control y gestión de la base de definición, control y gestión de la base de datos.datos. Las sentencias SQL se clasifican según su finalidad Las sentencias SQL se clasifican según su finalidad dando origen a tres ‘lenguajes’ o mejor dicho sublenguajes:dando origen a tres ‘lenguajes’ o mejor dicho sublenguajes:

DDLDDL (Data Description Language), (Data Description Language), lenguaje de definición lenguaje de definición de de datos, incluye órdenes para definir, modificar o borrar las tablas datos, incluye órdenes para definir, modificar o borrar las tablas en las que se almacenan los datos y de las relaciones entre en las que se almacenan los datos y de las relaciones entre estas. (Es el que más varia de un sistema a otro)estas. (Es el que más varia de un sistema a otro)DCLDCL (Data Control Language), (Data Control Language), lenguaje de controllenguaje de control de datos, de datos, contiene elementos útiles para trabajar en un entorno contiene elementos útiles para trabajar en un entorno multiusuario, en el que es importante la protección de los datos, multiusuario, en el que es importante la protección de los datos, la seguridad de las tablas y el establecimiento de restricciones la seguridad de las tablas y el establecimiento de restricciones en el acceso, así como elementos para coordinar la compartición en el acceso, así como elementos para coordinar la compartición de datos por parte de usuarios concurrentes, asegurando que no de datos por parte de usuarios concurrentes, asegurando que no interfieren unos con otros. interfieren unos con otros. DMLDML (Data Manipulation Language), (Data Manipulation Language), lenguaje de lenguaje de manipulaciónmanipulación de datos, nos permite recuperar los datos de datos, nos permite recuperar los datos almacenados en la base de datos y también incluye órdenes para almacenados en la base de datos y también incluye órdenes para permitir al usuario actualizar la base de datos añadiendo nuevos permitir al usuario actualizar la base de datos añadiendo nuevos datos, suprimiendo datos antiguos o modificando datos datos, suprimiendo datos antiguos o modificando datos previamente almacenados.previamente almacenados.

Page 8: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.1.1. ¿Qué es SQL?6.1.1. ¿Qué es SQL?

Idealmente debe permitir:Idealmente debe permitir:CREAR la base de datos y las estructuras CREAR la base de datos y las estructuras de relaciónde relaciónRealizar TAREAS básicas DE GESTION DE Realizar TAREAS básicas DE GESTION DE DATOS, como la inserción, modificación y DATOS, como la inserción, modificación y borrado de los datos de las relaciones.borrado de los datos de las relaciones.Realizar CONSULTAS tanto simples como Realizar CONSULTAS tanto simples como complejas.complejas.

Page 9: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.1.2. Características del 6.1.2. Características del lenguajelenguaje

Sintaxis y estructura fácil Sintaxis y estructura fácil

Lenguaje no procedimental, SQL no requiere que Lenguaje no procedimental, SQL no requiere que se especifique el método de acceso a los datos.se especifique el método de acceso a los datos.

SQL es de formato libre.SQL es de formato libre.

La estructura de los comandos esta compuesta La estructura de los comandos esta compuesta por palabras inglesas normales, por ejemplo: por palabras inglesas normales, por ejemplo: CREATE TABLE, INSERT, SELECT. Por ejemplo:CREATE TABLE, INSERT, SELECT. Por ejemplo:

CREATE TABLE Personal (noPersonal VARCHAR(5) PRIMARY CREATE TABLE Personal (noPersonal VARCHAR(5) PRIMARY KEY, nombrePersonal VARCHAR(15), apellidoPersonal KEY, nombrePersonal VARCHAR(15), apellidoPersonal VARCHAR(15), salario DECIMAL(7,2);VARCHAR(15), salario DECIMAL(7,2);

INSERT INTO Personal VALUES (‘SG16’, ‘Carlos’, ‘Ríos’, INSERT INTO Personal VALUES (‘SG16’, ‘Carlos’, ‘Ríos’, 6300);6300);

SELECT noPersonal, apellidoPersonal, salario FROM SELECT noPersonal, apellidoPersonal, salario FROM Personal WHERE salario > 5000;Personal WHERE salario > 5000;

Page 10: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.1.2. Características del 6.1.2. Características del lenguajelenguaje

Una sentencia SQL es como una Una sentencia SQL es como una frasefrase (escrita en (escrita en inglésinglés) con la cual, decimos ) con la cual, decimos lo que queremos lo que queremos obtener y de donde obtenerloobtener y de donde obtenerlo..

Todas las sentencias empiezan con un Todas las sentencias empiezan con un verboverbo (palabra reservada que indica la acción a realizar), (palabra reservada que indica la acción a realizar), seguido del resto de seguido del resto de cláusulascláusulas, algunas , algunas obligatoriasobligatorias y otras y otras opcionalesopcionales que completan que completan la frase. la frase.

Todas las sentencias siguen una Todas las sentencias siguen una sintaxissintaxis para para que se puedan ejecutar correctamente, para que se puedan ejecutar correctamente, para describir esa sintaxis utilizaremos un describir esa sintaxis utilizaremos un diagrama diagrama sintáctico.sintáctico.

Page 11: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.1.3. Cómo interpretar un 6.1.3. Cómo interpretar un diagrama sintácticodiagrama sintáctico

Una sentencia válida se construye siguiendo la línea a través del diagrama hasta el punto que marca el final. Las líneas se siguen de izquierda a derecha y de arriba abajo. Cuando se quiere alterar el orden normal  se indica con una flecha, por ejemplo: el uso de la coma (,) si existe más de un elemento a listar.

Diagrama sintáctico: Diagrama sintáctico: Representación de sintaxis de las Representación de sintaxis de las cláusulas SQLcláusulas SQL

• Las palabras que aparecen en mayúsculas son palabras reservadas se tienen que poner tal cual y no se pueden utilizar para otro fin, por ejemplo, en el diagrama de la figura tenemos las palabras reservadas SELECT, ALL, DISTINCT, FROM, WHERE.

• Las palabras en minúsculas son variables que el usuario deberá sustituir por un dato concreto. En el diagrama tenemos nbcolumna, expresión-tabla y condición-de-búsqueda.

Page 12: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.1.3. Cómo interpretar un 6.1.3. Cómo interpretar un diagrama sintácticodiagrama sintáctico¿Cómo se interpretaría el diagrama sintáctico de la figura?¿Cómo se interpretaría el diagrama sintáctico de la figura?

Iniciar por la palabra Iniciar por la palabra SELECTSELECT, después puedes poner , después puedes poner ALLALL o o bien bien DISTINCTDISTINCT o nada, a continuación un nombre de o nada, a continuación un nombre de columna (columna (nombrenombre), o varios separados por comas (), o varios separados por comas (nombre, nombre, apellidosapellidos), posteriormente la palabra ), posteriormente la palabra FROMFROM y una y una expresión-tabla (expresión-tabla (alumnosalumnos), y por último de forma opcional ), y por último de forma opcional puedes incluir la cláusula puedes incluir la cláusula WHEREWHERE con una condición-de- con una condición-de-búsqueda (búsqueda (edad=19edad=19). ).

SELECTSELECT ALLALL nombre, apellidos nombre, apellidos

FROMFROM alumnos alumnos

WHEREWHERE edad=19 edad=19

Puedes terminar aquí o bien incluir la cláusula WHEREPuedes terminar aquí o bien incluir la cláusula WHERE

Palabras reservadasPalabras reservadas Palabras opcionalesPalabras opcionales Campos o columnasCampos o columnas

TablaTabla

CondiciónCondición

Page 13: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.1.3. Cómo interpretar un 6.1.3. Cómo interpretar un diagrama sintácticodiagrama sintáctico Otros ejemplos correctos:Otros ejemplos correctos:

SELECT ALL col1,col2,col3 FROM tablaSELECT ALL col1,col2,col3 FROM tablaSELECT col1,col2,col3 FROM tablaSELECT col1,col2,col3 FROM tablaSELECT DISTINCT col1 FROM tablaSELECT DISTINCT col1 FROM tablaSELECT col1,col2 FROM tabla WHERE col2 = 0SELECT col1,col2 FROM tabla WHERE col2 = 0

Todas estas sentencias se podrían escribir Todas estas sentencias se podrían escribir y no darían lugar a errores sintácticos.y no darían lugar a errores sintácticos.Cuando una palabra opcional está Cuando una palabra opcional está subrayadasubrayada, indica que ese es el , indica que ese es el valor por valor por defectodefecto (el valor que se asume si no se (el valor que se asume si no se pone nada). En el ejemplo anterior las dos pone nada). En el ejemplo anterior las dos primeras sentencias son equivalentes (en primeras sentencias son equivalentes (en el diagrama ALL aparece subrayada).el diagrama ALL aparece subrayada).

Page 14: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2. Consultas Simples6.2. Consultas Simples

La estructura básica de una expresión SQL La estructura básica de una expresión SQL consiste en tres cláusulas: consiste en tres cláusulas: selectselect, , from from y y wherewhere..El resultado de una consulta SQL es El resultado de una consulta SQL es también una relación. también una relación. Considérese una consulta simple, usando la Considérese una consulta simple, usando la Sintaxis SELECT. Sintaxis SELECT. Una consulta típica en SQL tiene la formaUna consulta típica en SQL tiene la forma

SELECT aSELECT a11,a,a22,a,a33,a,aNN

FROM rFROM r11, r, r22, r, rNN

WHERE PWHERE P

Cada Cada aaii representa un atributo, y cada representa un atributo, y cada rrii una relación. una relación. P P es un predicado. es un predicado.

Page 15: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2. Consultas Simples6.2. Consultas Simples

La cláusula SELECT corresponde con la operación de La cláusula SELECT corresponde con la operación de Proyección del algebra relacional. Se usa para obtener una Proyección del algebra relacional. Se usa para obtener una relación de atributos deseados en el resultado de una relación de atributos deseados en el resultado de una consulta.consulta.La cláusula FROM se corresponde con la operación producto La cláusula FROM se corresponde con la operación producto cartesiano del álgebra relacional. Genera una lista de cartesiano del álgebra relacional. Genera una lista de relaciones que deben ser analizadas por la evaluación de la relaciones que deben ser analizadas por la evaluación de la expresión.expresión.La cláusula WHERE se corresponde con el predicado La cláusula WHERE se corresponde con el predicado selección del álgebra relacional. Es un predicado que selección del álgebra relacional. Es un predicado que engloba a los atributos de las relaciones que aparecen en la engloba a los atributos de las relaciones que aparecen en la cláusula FROM.cláusula FROM.

SelectSelect a1,a2,a3,aN a1,a2,a3,aNFromFrom r r11, r, r22, r, rNN

Where Where PP

ΠΠa1,a2,a3,aN(ϭ a1,a2,a3,aN(ϭ PP (r (r11 XX r r22 XX r rNN))))

SQLSQL Algebra RelacionalAlgebra Relacional

Page 16: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2. Consultas Simples6.2. Consultas Simples

SELECTSELECT Su propósito consiste en extraer y Su propósito consiste en extraer y visualizar datos de una o más tablas de la base de visualizar datos de una o más tablas de la base de datos. Especifica que columnas deben aparecer en datos. Especifica que columnas deben aparecer en la salidala salida

DISTINCTDISTINCT elimina duplicados elimina duplicadosASAS Opción de renombramiento campo calculado o Opción de renombramiento campo calculado o derivado derivado

SELECT [SELECT [DISTINCTDISTINCT] [] [ALLALL] {* | [expresionColumna AS nuevoNombre]] ] {* | [expresionColumna AS nuevoNombre]] [,…] }[,…] }FROMFROM NombreTabla [alias] [,…] NombreTabla [alias] [,…][WHERE condición][WHERE condición][GROUP BY listaColumnas] [HAVING condición][GROUP BY listaColumnas] [HAVING condición][ORDER BY listaColumnas][ORDER BY listaColumnas]

Page 17: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2. Consultas Simples6.2. Consultas Simples

FROMFROM especifica la tabla o tablas que hay que usar especifica la tabla o tablas que hay que usar

WHEREWHERE filtra las filas de acuerdo con alguna filtra las filas de acuerdo con alguna condicióncondición

GROUP BYGROUP BY forma grupos de filas que tengan el forma grupos de filas que tengan el mismo valor de columnamismo valor de columna

HAVINGHAVING filtra los grupos de acuerdo con alguna filtra los grupos de acuerdo con alguna condicióncondición

ORDER BYORDER BY especifica el orden de la salida especifica el orden de la salida

Page 18: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2.1 Sintaxis de la SELECT (para 6.2.1 Sintaxis de la SELECT (para consultas simples).consultas simples).

SELECTSELECT Su propósito consiste en extraer y Su propósito consiste en extraer y visualizar datos de una o más tablas de la base de visualizar datos de una o más tablas de la base de datos. Especifica que columnas deben aparecer en datos. Especifica que columnas deben aparecer en la salida:la salida:

ASAS Opción de renombramiento campo calculado o Opción de renombramiento campo calculado o derivado derivado

SELECT salario/12 AS salarioMes FROM personal;SELECT salario/12 AS salarioMes FROM personal;

Page 19: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2.2 La tabla origen (cláusula 6.2.2 La tabla origen (cláusula FROM).FROM).

FROMFROM especifica la tabla o tablas que hay especifica la tabla o tablas que hay que usarque usar

FromFrom r1, r2, rN = (r1 r1, r2, rN = (r1 XX r2 r2 XX rN) rN)

SQL forma el producto cartesiano de las SQL forma el producto cartesiano de las relaciones incluidas en la cláusula relaciones incluidas en la cláusula FROMFROM

SELECT {* | [expresionColumna AS nuevoNombre]] [,…] }SELECT {* | [expresionColumna AS nuevoNombre]] [,…] }FROMFROM NombreTabla [alias] [,…] NombreTabla [alias] [,…]

Selecciona los nombres del producto cartesiano: alumnos Selecciona los nombres del producto cartesiano: alumnos X profesoresX profesores

SELECT a.nombre, b.nombre SELECT a.nombre, b.nombre FROM alumnos a, profesores b FROM alumnos a, profesores b

Page 20: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2.3 Selección de columnas.6.2.3 Selección de columnas.

Extracción de todas las filas: Extracción de todas las filas: SELECT * FROM nomTabla;SELECT * FROM nomTabla;

Extraer una serie de columnas específicas Extraer una serie de columnas específicas de todas las filas:de todas las filas:

SELECT nomAlumno, edadAlumno FROM estudiante;SELECT nomAlumno, edadAlumno FROM estudiante;

Lista con valores no duplicados:Lista con valores no duplicados:SELECT DISTINCT nomAlumno FROM estudiante;SELECT DISTINCT nomAlumno FROM estudiante;

Campos calculados:Campos calculados:SELECT COUNT nomAlumno AS numAlumnos FROM SELECT COUNT nomAlumno AS numAlumnos FROM

estudiante;estudiante;

Page 21: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2.4 Ordenación de las filas 6.2.4 Ordenación de las filas (ORDER BY).(ORDER BY).

ORDER BYORDER BY especifica el orden de la salida especifica el orden de la salida

Ordenación Ordenación ASCASC ascendente o ascendente o DESCDESC descendentedescendente

SELECT noPersonal, nomPersonal, apellidoPersonal, salarioSELECT noPersonal, nomPersonal, apellidoPersonal, salarioFROM PersonalFROM PersonalORDER BY salario ORDER BY salario DESCDESC;;

La cláusula anterior ordenará los números, La cláusula anterior ordenará los números, nombres, apellidos y salario del personal de nombres, apellidos y salario del personal de acuerdo al campo salario, iniciando con el acuerdo al campo salario, iniciando con el mayor y terminando con el menor.mayor y terminando con el menor.

Page 22: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2.5 Selección de filas.6.2.5 Selección de filas.

WHEREWHERE se utiliza cuando se requiera restringir se utiliza cuando se requiera restringir las filas que hay que extraer, por ejemplo:las filas que hay que extraer, por ejemplo:

Extraer todos los nombres de la tabla alumnos Extraer todos los nombres de la tabla alumnos (sin restricción)(sin restricción)

SELECT nombresSELECT nombresFROM alumnos;FROM alumnos;

Extraer todos los nombres de la tabla alumnos Extraer todos los nombres de la tabla alumnos cuya edad sea mayor a 18 años (con restricción)cuya edad sea mayor a 18 años (con restricción)

SELECT nombresSELECT nombresFROM alumnosFROM alumnosWHERE edad >= 18;WHERE edad >= 18;

Page 23: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2.6 Las cláusulas DISTINCT / ALL.6.2.6 Las cláusulas DISTINCT / ALL.

SQL forma el producto cartesiano de las relaciones SQL forma el producto cartesiano de las relaciones incluidas en la cláusula incluidas en la cláusula FROMFROM, lleva a cabo la , lleva a cabo la selección del álgebra relacional usando el selección del álgebra relacional usando el predicado de la cláusula predicado de la cláusula WHERE WHERE y entonces y entonces proyecta el resultado sobre los atributos de la proyecta el resultado sobre los atributos de la cláusula cláusula SELECTSELECT..Los lenguajes formales de consulta están basados Los lenguajes formales de consulta están basados en la noción matemática de que una relación es en la noción matemática de que una relación es un conjunto. Así, nunca aparecen tuplas un conjunto. Así, nunca aparecen tuplas duplicadas en las relaciones. En la práctica, duplicadas en las relaciones. En la práctica, la la eliminación de duplicados consume tiempoeliminación de duplicados consume tiempo. .

SELECT [DISTINCT] [ALL] {* | [expresionColumna AS SELECT [DISTINCT] [ALL] {* | [expresionColumna AS nuevoNombre]] [,…] }nuevoNombre]] [,…] }FROMFROM NombreTabla [alias] [,…]; NombreTabla [alias] [,…];

Page 24: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2.6 Las cláusulas DISTINCT / ALL.6.2.6 Las cláusulas DISTINCT / ALL.

SQL permite duplicados en las relaciones, SQL permite duplicados en las relaciones, así como en el resultado. En aquellos casos así como en el resultado. En aquellos casos donde se quiera forzar la eliminación de donde se quiera forzar la eliminación de duplicados, se insertará la palabra duplicados, se insertará la palabra reservada reservada DISTINCT DISTINCT después de después de SELECTSELECT. .

DISTINCTDISTINCT elimina duplicados. elimina duplicados. SELECT DISTINCT SELECT DISTINCT nomSucursalnomSucursal FROM FROM préstamopréstamo

SQL permite usar la palabra clave SQL permite usar la palabra clave ALLALL para para especificar explícitamente que no se especificar explícitamente que no se eliminan los duplicadoseliminan los duplicados

ALLALL especifica duplicados (default)especifica duplicados (default)SELECT ALL SELECT ALL nomSucursal nomSucursal FROM FROM préstamopréstamo

Page 25: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2.7 La cláusula TOP.6.2.7 La cláusula TOP.La cláusula La cláusula TOPTOP permite permite sacarsacar las las n primeras filasn primeras filas de la de la tabla origen. tabla origen. No elige entre valores iguales. Siempre se guía por una No elige entre valores iguales. Siempre se guía por una columna de ordenación, la que aparece en la cláusula columna de ordenación, la que aparece en la cláusula ORDER BY o en su defecto la clave principal de la tabla.ORDER BY o en su defecto la clave principal de la tabla.Por ejemplo, para saber los dos empleados más antiguos Por ejemplo, para saber los dos empleados más antiguos de la empresa.de la empresa.

SELECT SELECT TOPTOP 22 numemp, nombre numemp, nombreFROM empleadoFROM empleadoORDER BY contrato;ORDER BY contrato;

Lista el código y nombre de los empleados ordenándolos Lista el código y nombre de los empleados ordenándolos por fecha de contrato, sacando únicamente los dos por fecha de contrato, sacando únicamente los dos primeros (serán los dos más antiguos).primeros (serán los dos más antiguos).

SELECT SELECT TOP 10 PERCENTTOP 10 PERCENT nombre nombreFROM empleadoFROM empleadoORDER BY contratoORDER BY contrato

Lista el nombre de los empleados ordenándolos por fecha Lista el nombre de los empleados ordenándolos por fecha de contrato, mostrando únicamente un 10% del total de de contrato, mostrando únicamente un 10% del total de empleados. Como tenemos 10 empleados, sacará el empleados. Como tenemos 10 empleados, sacará el primero, si fueran 100 empleados sacaría los 10 primeros.primero, si fueran 100 empleados sacaría los 10 primeros.

Page 26: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2.8 La cláusula WHERE.6.2.8 La cláusula WHERE.

WHEREWHERE filtra las filas de acuerdo con alguna filtra las filas de acuerdo con alguna condicióncondición

Para restringir las filas que hay que extraer , se Para restringir las filas que hay que extraer , se hace mediante la cláusula hace mediante la cláusula WHEREWHERE seguida de una seguida de una condición de búsqueda que especifica las filas que condición de búsqueda que especifica las filas que hay que extraer.hay que extraer.

SELECT nombreSELECT nombreFROM alumnosFROM alumnosWHEREWHERE materia = ‘Bases de Datos I’; materia = ‘Bases de Datos I’;

SELECT nombreSELECT nombreFROM alumnosFROM alumnosWHEREWHERE carrera IN (‘Informática’);carrera IN (‘Informática’);

SELECT nombreSELECT nombreFROM empleadosFROM empleadosWHEREWHERE oficina = 12 AND edad > 30; oficina = 12 AND edad > 30;

Page 27: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2.9 Condiciones de selección.6.2.9 Condiciones de selección.

Condiciones basadas en:Condiciones basadas en:

ComparaciónComparación. Compara el valor de una expresión con . Compara el valor de una expresión con el valor de otrael valor de otra

RangoRango. Comprueba si el valor de una expresión cae . Comprueba si el valor de una expresión cae dentro del rango específico de valoresdentro del rango específico de valores

Pertenencia a conjuntoPertenencia a conjunto. Comprueba si el valor de una . Comprueba si el valor de una expresión coincide con uno de lo valores de un cierto expresión coincide con uno de lo valores de un cierto conjunto.conjunto.Correspondencia de patronesCorrespondencia de patrones.. Comprueba si una Comprueba si una cadena de caracteres se ajusta a un patrón cadena de caracteres se ajusta a un patrón específicado.específicado.

NuloNulo. Comprueba si una columna tiene un valor nulo . Comprueba si una columna tiene un valor nulo (desconocido).(desconocido).

Page 28: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2.9 Condiciones de selección.6.2.9 Condiciones de selección.

RangoRango. Comprueba si el valor de una expresión cae dentro del . Comprueba si el valor de una expresión cae dentro del rango específico de valoresrango específico de valores

Condiciona a una búsqueda de rangoCondiciona a una búsqueda de rango

BETWEEN AND, NOT BETWEENBETWEEN AND, NOT BETWEEN. Esta condición hace una . Esta condición hace una búsqueda indicada en los puntos extremos del rango. La búsqueda indicada en los puntos extremos del rango. La función NOT sirve para buscar a los que se encuentren fuera función NOT sirve para buscar a los que se encuentren fuera del rango especificado.del rango especificado.

Pertenencia a conjuntoPertenencia a conjunto. Comprueba si el valor de una . Comprueba si el valor de una expresión coincide con uno de lo valores de un cierto conjunto.expresión coincide con uno de lo valores de un cierto conjunto.

IN / NOT ININ / NOT IN Comprueba si el valor de los datos se corresponde Comprueba si el valor de los datos se corresponde con uno de los valores especificados en una determinada con uno de los valores especificados en una determinada lista.lista.

SELECT noPersonal, nomPersonal, apellidoPersonal, puestoPersonalSELECT noPersonal, nomPersonal, apellidoPersonal, puestoPersonal

FROM PersonalFROM Personal

WHERE puesto IN (‘AdministradorWHERE puesto IN (‘Administrador’,’,’Supervisor’); opc. (OR)’Supervisor’); opc. (OR)

Page 29: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2.9 Condiciones de selección.6.2.9 Condiciones de selección.

Correspondencia de patronesCorrespondencia de patrones.. Comprueba si una Comprueba si una cadena de caracteres se ajusta a un patrón cadena de caracteres se ajusta a un patrón específicado.específicado.

LIKE / NOT LIKELIKE / NOT LIKE símbolos especiales para correspondencia de símbolos especiales para correspondencia de patronespatrones

campo LIKE ‘H%’campo LIKE ‘H%’ primer carácter debe ser H primer carácter debe ser H

campo LIKE ‘H___’campo LIKE ‘H___’ de palabras de 4 posiciones el carácter uno es H de palabras de 4 posiciones el carácter uno es H

campo LIKE ‘%e’campo LIKE ‘%e’ el ultimo carácter de una secuencia debe ser e, el ultimo carácter de una secuencia debe ser e, incluye ‘e’incluye ‘e’

campo LIKE ‘%Centro%’ campo LIKE ‘%Centro%’ cualquier cadena que incluya la palabra cualquier cadena que incluya la palabra centrocentro

campo NOT LIKE ‘H%’campo NOT LIKE ‘H%’ el primer carácter no debe ser H el primer carácter no debe ser H

campo LIKE ‘15#%’ ESCAPE ‘#’campo LIKE ‘15#%’ ESCAPE ‘#’

NuloNulo. . Buscar valores que sean o no nulosuscar valores que sean o no nulosBúsqueda Búsqueda IS NULL / NOT IS NULLIS NULL / NOT IS NULL

Page 30: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2.10 Expresiones válidas.6.2.10 Expresiones válidas.

Las reglas para evaluar una expresión condicional Las reglas para evaluar una expresión condicional son:son:

Las expresiones se evalúan de izquierda a derecha Las expresiones se evalúan de izquierda a derecha Primero se evalúan subexpresiones contenidas Primero se evalúan subexpresiones contenidas entre corchetes o paréntesisentre corchetes o paréntesisNOTNOT se evalúa antes que se evalúa antes que ANDAND y y ORORANDAND se evalúa antes que se evalúa antes que ORORSe recomienda utilizar paréntesis para eliminar Se recomienda utilizar paréntesis para eliminar cualquier posible ambigüedad.cualquier posible ambigüedad.Pueden generarse predicados más complejos Pueden generarse predicados más complejos utilizando operadores lógicos utilizando operadores lógicos NOTNOT, , ANDAND, , OROR para para mostrar un orden de evaluación.mostrar un orden de evaluación.

Page 31: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2.11 Operadores lógicos.6.2.11 Operadores lógicos.

En SQL están disponibles los siguientes En SQL están disponibles los siguientes operadores simples de comparación:operadores simples de comparación:

== igual igual<><> ó ó !=!= distinto distinto<< menor que menor que>> mayor que mayor que<= <= menor o igual quemenor o igual que>=>= mayor o igual que mayor o igual que

Page 32: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.2.12 Caracteres comodines.6.2.12 Caracteres comodines.

%% secuencia de 0 o más caracteres secuencia de 0 o más caracteres

__ cualquier carácter individual cualquier carácter individual

‘‘___%___%’ cualquier cadena con al menos tres caracteres’ cualquier cadena con al menos tres caracteres

‘‘%cer%%cer%’ cualquier cadena que contenga cer’ cualquier cadena que contenga cer

Page 33: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.3 Las consultas multitabla.6.3 Las consultas multitabla.

Las operaciones de Las operaciones de unionunion, , intersect intersect y y except except operan sobre relaciones y operan sobre relaciones y corresponden a las operaciones del álgebra corresponden a las operaciones del álgebra relacional relacional ⋃⋃, , ⋂⋂ y y ––. . Al igual que la unión, intersección y Al igual que la unión, intersección y diferencia de conjuntos en el álgebra diferencia de conjuntos en el álgebra relacional, las relaciones que participan en relacional, las relaciones que participan en las operaciones han de ser las operaciones han de ser compatiblescompatibles; ; esto es, deben tener el mismo conjunto de esto es, deben tener el mismo conjunto de atributos.atributos.

Page 34: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.3.1 La unión de tablas.6.3.1 La unión de tablas.

Combina los resultados de dos o más consultas en un solo conjunto de resultados que incluye todas las filas que pertenecen a las consultas de la unión. La operación UNION es distinta de la utilización de combinaciones de columnas de dos tablas.A continuación se muestran las reglas básicas para combinar los conjuntos de resultados de dos consultas con UNION:

El número y el orden de las columnas deben ser El número y el orden de las columnas deben ser idénticos en todas las consultas.idénticos en todas las consultas.Los tipos de datos deben ser compatibles.Los tipos de datos deben ser compatibles.

Page 35: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.3.1 La unión de tablas.6.3.1 La unión de tablas.

Esta operación se utiliza cuando tenemos Esta operación se utiliza cuando tenemos dos dos tablastablas con las con las mismas columnasmismas columnas y queremos y queremos obtener una obtener una nueva tablanueva tabla con las con las filas de la filas de la primera y las filas de la segundaprimera y las filas de la segunda. . En este caso la tabla resultante tiene las mismas En este caso la tabla resultante tiene las mismas columnas que la primera tabla (que son las columnas que la primera tabla (que son las mismas que las de la segunda tabla). mismas que las de la segunda tabla).

Page 36: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.3.2 La composición de tablas.6.3.2 La composición de tablas.

La composición de tablas consiste en La composición de tablas consiste en concatenarconcatenar filas de una tabla con filas de otra. En este caso filas de una tabla con filas de otra. En este caso obtenemos una tabla con las obtenemos una tabla con las columnascolumnas de la de la primera tablaprimera tabla unidasunidas a las a las columnascolumnas de la de la segunda tablasegunda tabla, y las filas de la tabla resultante , y las filas de la tabla resultante son son concatenacionesconcatenaciones de de filasfilas de la de la primera primera tablatabla concon filas de la filas de la segunda tablasegunda tabla. .

Los tipos de composición de tablas son:El producto cartesianoEl INNER JOINEl LEFT / RIGHT JOIN

Page 37: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.3.3 El operador UNION.6.3.3 El operador UNION.

La unión de tablas. El operador La unión de tablas. El operador UNION:UNION:

RR11 ⋃⋃ R R22

(SELECT * FROM r(SELECT * FROM r11) UNION (SELECT * FROM r) UNION (SELECT * FROM r22))

Page 38: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.3.4 El producto cartesiano.6.3.4 El producto cartesiano.

La cláusula La cláusula FROM FROM define por sí misma un producto define por sí misma un producto cartesiano de las relaciones que aparecen en la cláusula.cartesiano de las relaciones que aparecen en la cláusula.Escribir una expresión SQL para la reunión natural es una Escribir una expresión SQL para la reunión natural es una tarea relativamente fácil, puesto que la reunión natural se tarea relativamente fácil, puesto que la reunión natural se define en términos de un producto cartesiano, una define en términos de un producto cartesiano, una selección y una proyección.selección y una proyección.La expresión del álgebra relacional se escribe como sigue:La expresión del álgebra relacional se escribe como sigue:

ΠΠnomClientenomCliente, , noPrestamonoPrestamo,,importe importe ((prestatario prestamoprestatario prestamo))

para la consulta «Para todos los clientes que tienen un para la consulta «Para todos los clientes que tienen un préstamo en el banco, obtener los nombres, números de préstamo en el banco, obtener los nombres, números de préstamo e importes». Esta consulta puede escribirse en préstamo e importes». Esta consulta puede escribirse en SQL como:SQL como:

SELECT SELECT nomClientenomCliente, , prestatario.noPrestamoprestatario.noPrestamo, , importeimporteFROM FROM prestatarioprestatario, , prestamoprestamoWHERE WHERE prestatario.noPrestamo = prestamo.noPrestamoprestatario.noPrestamo = prestamo.noPrestamo

Page 39: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.3.5 El INNER JOIN.6.3.5 El INNER JOIN.

Además de proporcionar el mecanismo básico de producto Además de proporcionar el mecanismo básico de producto cartesiano para reunir tuplas de relaciones, permitido en cartesiano para reunir tuplas de relaciones, permitido en versiones anteriores, SQL también proporciona varios versiones anteriores, SQL también proporciona varios mecanismos para reunir relaciones, incluyendo reuniones mecanismos para reunir relaciones, incluyendo reuniones condicionales y reuniones naturales, así como varias formas condicionales y reuniones naturales, así como varias formas de reunión externa. de reunión externa. Estas operaciones adicionales se usan a menudo como Estas operaciones adicionales se usan a menudo como subconsultas dentro de la cláusula subconsultas dentro de la cláusula FROMFROM..

Ejemplo simple de reunión interna:Ejemplo simple de reunión interna:

prestamoprestamo inner join inner join prestatarioprestatario on on prestamo.noPrestamo prestamo.noPrestamo = = pprestatario.noPrestamorestatario.noPrestamo

La expresión calcula la reunión zeta de las relaciones La expresión calcula la reunión zeta de las relaciones préstamo préstamo y y prestatarioprestatario, donde la condición de reunión es: , donde la condición de reunión es:

prestamo.noPrestamo prestamo.noPrestamo = = prestatario.noPrestamoprestatario.noPrestamo

Los atributos del resultado son los atributos del lado Los atributos del resultado son los atributos del lado izquierdo de la relación, seguidos por los del lado derecho de izquierdo de la relación, seguidos por los del lado derecho de la misma.la misma.

Page 40: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.3.6 El LEFT/RIGHT JOIN.6.3.6 El LEFT/RIGHT JOIN.

El tipo de relación reunión externa por la El tipo de relación reunión externa por la derecha (derecha (right outer joinright outer join) es simétrico al ) es simétrico al de reunión externa por la izquierda (de reunión externa por la izquierda (left left outer joinouter join). Las tuplas de la relación del ). Las tuplas de la relación del lado derecho que no encajen con ninguna lado derecho que no encajen con ninguna tupla de la relación del lado izquierdo se tupla de la relación del lado izquierdo se rellenan con valores nulos y se añaden al rellenan con valores nulos y se añaden al resultado de la reunión externa por la resultado de la reunión externa por la derecha. derecha. La siguiente expresión es un ejemplo de la La siguiente expresión es un ejemplo de la combinación de la condición de reunión combinación de la condición de reunión natural con el tipo de reunión externa por natural con el tipo de reunión externa por la derecha.la derecha.

prestamo prestamo natural right outer joinnatural right outer join prestatarioprestatario

Page 41: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.4 Las consultas de resumen.6.4 Las consultas de resumen.

Una fila de una consulta de resumen corresponde Una fila de una consulta de resumen corresponde a un resumen de varias filas de la tabla origen.a un resumen de varias filas de la tabla origen.El resultado de una consulta de resumen tienen El resultado de una consulta de resumen tienen una naturaleza distinta a las filas de las demás una naturaleza distinta a las filas de las demás tablas resultantes de consultas, ya que tablas resultantes de consultas, ya que corresponden a varias filas de la tabla origen. corresponden a varias filas de la tabla origen.

Las consultas de resumen Las consultas de resumen introducen dos introducen dos nuevas nuevas cláusulascláusulas a la sentencia a la sentencia SELECT, laSELECT, la cláusula cláusula GROUP BYGROUP BY y la y la cláusula cláusula HAVINGHAVING, son , son cláusulas que cláusulas que sólo sólo se pueden se pueden utilizar en una consulta de utilizar en una consulta de resumen, se tienen que escribir resumen, se tienen que escribir entreentre la cláusula la cláusula WHERE WHERE yy la la cláusulacláusula ORDER BY ORDER BY y tienen la y tienen la siguiente sintaxis:siguiente sintaxis:

Page 42: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.4 Las consultas de resumen.6.4 Las consultas de resumen.

Ejemplo:Ejemplo:Primer tabla muestra el total de ventas por oficina Primer tabla muestra el total de ventas por oficina y región.y región.La segunda muestra el resumen de ventas por La segunda muestra el resumen de ventas por regiónregión

Page 43: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.4 Las consultas de resumen.6.4 Las consultas de resumen.

Encuentra todos los empleados que ganan Encuentra todos los empleados que ganan más del salario promedio de todos los más del salario promedio de todos los empleados de la empresaempleados de la empresa

SELECT SELECT nombre_empleado nombre_empleado FROM FROM trabajo T trabajo T WHERE WHERE salario > salario > ((SELECT AVG SELECT AVG ((salariosalario) ) FROM FROM Trabajo Trabajo S S WHERE WHERE T.nomEmpresa = S.nomEmpresaT.nomEmpresa = S.nomEmpresa))

Obtener la media de saldos de las cuentas Obtener la media de saldos de las cuentas de la sucursal Navacerrada de la sucursal Navacerrada

SELECT AVG SELECT AVG ((saldosaldo) ) FROM FROM cuenta cuenta WHERE WHERE nomSucursal nomSucursal = ‘Navacerrada’= ‘Navacerrada’

Page 44: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.4.1 Las funciones de 6.4.1 Las funciones de columna.columna.En la lista de selección de una consulta de En la lista de selección de una consulta de

resumen aparecenresumen aparecen funciones de columna funciones de columna también denominadastambién denominadas funciones de dominio funciones de dominio agregadas. agregadas.

Una función de columna Una función de columna se aplica a una columnase aplica a una columna y y obtiene un obtiene un valor quevalor que resumeresume elel contenidocontenido de lade la columnacolumna..Tenemos las siguientes funciones de columna: Tenemos las siguientes funciones de columna:

Media: avgMedia: avgMínimo: minMínimo: minMáximo: maxMáximo: maxTotal: sumTotal: sumCuenta: countCuenta: count

El El argumentoargumento de la función indica de la función indica concon qué qué valoresvalores se tiene que operar, por eso se tiene que operar, por eso expresiónexpresión suele ser un suele ser un nombre de columnanombre de columna,, columna que columna que contiene los valores a resumir, pero también contiene los valores a resumir, pero también puede ser cualquier expresión válida que devuelva puede ser cualquier expresión válida que devuelva una lista de valores.una lista de valores.

Page 45: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.4.2 Selección en el origen de 6.4.2 Selección en el origen de datos.datos.

Para Para eliminareliminar del origen de datos del origen de datos algunas algunas filas no requeridasfilas no requeridas, es , es necesarionecesario incluir la cláusula incluir la cláusula WHEREWHERE que que ya conocemos después de la cláusula ya conocemos después de la cláusula FROMFROM..

Ejemplo: Obtener el acumulado de ventas Ejemplo: Obtener el acumulado de ventas de los empleados de la oficina 12.de los empleados de la oficina 12.

SELECT SELECT SUMSUM(ventas)(ventas)FROM empleadosFROM empleadosWHERE oficina = 12;WHERE oficina = 12;

Page 46: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.4.3 Origen múltiple.6.4.3 Origen múltiple.

Si los Si los datosdatos que se necesitan utilizar para que se necesitan utilizar para obtener el resumen obtener el resumen se encuentranse encuentran en en varias tablasvarias tablas, se forma el origen de datos , se forma el origen de datos adecuado en la cláusula adecuado en la cláusula FROMFROM como si como si fuera una consulta fuera una consulta multitablamultitabla normal. normal.

Ejemplo: Obtener el importe total de ventas Ejemplo: Obtener el importe total de ventas de todos los empleados y el mayor objetivo de todos los empleados y el mayor objetivo de las oficinas asignadas a los empleados:de las oficinas asignadas a los empleados:

SELECTSELECT SUMSUM(empleados.ventas), (empleados.ventas), MAXMAX(objetivo) (objetivo) FROMFROM empleados empleados LEFT JOINLEFT JOIN oficinas oficinas ONON

empleados.oficina=oficinas.oficinaempleados.oficina=oficinas.oficina

Page 47: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.4.4 La cláusula GROUP BY.6.4.4 La cláusula GROUP BY.

Existen situaciones en las cuales sería deseable Existen situaciones en las cuales sería deseable aplicar las funciones de agregación no sólo a un aplicar las funciones de agregación no sólo a un único conjunto de tuplas sino también a un grupo único conjunto de tuplas sino también a un grupo de conjuntos de tuplas; esto se especifica en SQL de conjuntos de tuplas; esto se especifica en SQL usando la cláusula usando la cláusula group bygroup by. . El atributo o atributos especificados en la cláusula El atributo o atributos especificados en la cláusula group by group by se usan para formar grupos. Las tuplas se usan para formar grupos. Las tuplas con el mismo valor en todos los atributos con el mismo valor en todos los atributos especificados en la cláusula especificados en la cláusula group by group by se colocan se colocan en un grupo.en un grupo.Ejemplo, considérese la consulta «Obtener el saldo Ejemplo, considérese la consulta «Obtener el saldo medio de las cuentas de cada sucursal».medio de las cuentas de cada sucursal».

SELECT SELECT nomSucursalnomSucursal, , AVGAVG((saldosaldo) ) FROM FROM cuenta cuenta GROUP BY GROUP BY nomSucursal;nomSucursal;

Page 48: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.4.4 La cláusula GROUP BY.6.4.4 La cláusula GROUP BY.

Una consulta con una cláusula Una consulta con una cláusula GROUP BYGROUP BY se se denomina denomina consulta agrupadaconsulta agrupada ya que agrupa los ya que agrupa los datos de la tabla origen y datos de la tabla origen y produce una única fila produce una única fila resumen por cada grupo formadoresumen por cada grupo formado..

Ejemplo: Ejemplo: obtener la suma de las ventas de obtener la suma de las ventas de las oficinas agrupadas por región y ciudad: las oficinas agrupadas por región y ciudad:

SELECTSELECT SUMSUM(ventas)(ventas)FROMFROM oficinas oficinasGROUP BYGROUP BY region,ciudad; region,ciudad;

Page 49: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.4.5 La cláusula HAVING.6.4.5 La cláusula HAVING.

A veces es más útil establecer una condición que A veces es más útil establecer una condición que se aplique a los grupos que una que se aplique a se aplique a los grupos que una que se aplique a las tuplas.las tuplas.

Por ejemplo, podemos estar interesados sólo en aquellas Por ejemplo, podemos estar interesados sólo en aquellas sucursales donde el saldo medio de cuentas es superior a sucursales donde el saldo medio de cuentas es superior a $1,200. Esta $1,200. Esta condición no es aplicable a una única tupla; condición no es aplicable a una única tupla; se aplica a cada grupo construido por la cláusulase aplica a cada grupo construido por la cláusula group group byby. .

Para expresar este tipo de consultas se utiliza la Para expresar este tipo de consultas se utiliza la cláusula cláusula having having de SQL. Los predicados de la de SQL. Los predicados de la cláusula cláusula having having se aplican después de la se aplican después de la formación de grupos, de modo que se pueden usar formación de grupos, de modo que se pueden usar las funciones de agregación. las funciones de agregación.

Esta consulta se expresa en SQL del modo siguiente:Esta consulta se expresa en SQL del modo siguiente:SELECT SELECT nomSucursalnomSucursal, , avg avg ((saldosaldo))FROM FROM cuentacuentaGROUP BY GROUP BY nomSucursalnomSucursalHAVING AVGHAVING AVG(saldo) > 1200;(saldo) > 1200;

Page 50: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

6.4.5 La cláusula HAVING.6.4.5 La cláusula HAVING.

La cláusula La cláusula HAVINGHAVING nos permite nos permite seleccionar seleccionar filasfilas de la tabla resultante de la tabla resultante de una consulta de de una consulta de resumenresumen. .

Ejemplo: Queremos saber las oficinas con un Ejemplo: Queremos saber las oficinas con un promedio de ventas de sus empleados mayor promedio de ventas de sus empleados mayor que 50,000.00 pesos.que 50,000.00 pesos.

SELECT oficinaFROM empleadosGROUP BY oficinaHAVING AVG(ventas) > 50000

Page 51: Bases de Datos I. Tema VI. Lenguaje de Consulta Estructurado

Bases de Datos IBases de Datos I MTI Remedios Fabián VelascoMTI Remedios Fabián VelascoUniversidad del Mar 07/2008Universidad del Mar 07/2008

Bibliografía utilizadaBibliografía utilizada

Libros: Libros: Fundamentos de Bases de Datos. Abraham Fundamentos de Bases de Datos. Abraham Silberschatz, Henry F. Korth, S. SudarshanSilberschatz, Henry F. Korth, S. SudarshanManual MySQL incorporado en la aplicaciónManual MySQL incorporado en la aplicación