SQL. Orígenes y Evolución - Departamento de Lenguajes y...

44
1 1 SQL SQL

Transcript of SQL. Orígenes y Evolución - Departamento de Lenguajes y...

11

SQLSQL

2216:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

SQL. OrSQL. Oríígenes y Evolucigenes y Evolucióónn

3316:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

SQL: EstSQL: Estáándar oficialndar oficial

4416:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

Funciones de SQLFunciones de SQL

DDL DDL –– Data Data DefinitionDefinition LanguageLanguageCreaciCreacióón de estructuras de la base de datosn de estructuras de la base de datosIntegridad de los datosIntegridad de los datos

DML DML –– Data Data ManipulationManipulation LanguageLanguageRecuperaciRecuperacióón de datosn de datosManipulaciManipulacióón de datosn de datos

DCL DCL –– Data Control Data Control LanguageLanguageControl de accesoControl de accesoComparticiComparticióónn de datosde datos

5516:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

Roles de SQL Roles de SQL

Base datos

Subtitle

1/30/2006

1/30/2006

Herramientas de programación

Motor de base de datos

Formularios Informes Herramientas de consulta

Programa de aplicación

Cliente de la Base de Datos

SQL SQL SQL SQL SQL

Sistemas Informáticos

Base de DatosGateway

Otros SGBD

6616:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

InvocaciInvocacióón de SQLn de SQLInvocaciInvocacióón directa o interactivan directa o interactiva

La sentencia es invocada desde el La sentencia es invocada desde el terminalterminalLos datos devueltos se presentan en pantallaLos datos devueltos se presentan en pantalla

El resultado puede serEl resultado puede serUn valorUn valorUna lista de valoresUna lista de valoresUna tablaUna tablaVacVacííoo

InvocaciInvocacióón desde programan desde programaLa sentencia se invoca como parte de la ejecuciLa sentencia se invoca como parte de la ejecucióón del programan del programaLos datos devueltos se recogen en una Los datos devueltos se recogen en una áárea de entrada del rea de entrada del programaprograma

7716:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

Ventajas de SQLVentajas de SQLIndependencia de los fabricantesIndependencia de los fabricantesPortabilidad a cualquier tipo de plataformaPortabilidad a cualquier tipo de plataformaSQL estSQL estáá estandarizadoestandarizadoBasado en el modelo relacionalBasado en el modelo relacionalLenguaje de alto nivelLenguaje de alto nivelConsultas interactivas adConsultas interactivas ad--hochocUtilizaciUtilizacióón en Lenguaje de programacin en Lenguaje de programacióónnMMúúltiples vistas de los datosltiples vistas de los datosLenguaje de base de datosLenguaje de base de datosDefiniciDefinicióón dinn dináámica de datosmica de datosArquitectura cliente/servidorArquitectura cliente/servidor

8816:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

Tipos de datosTipos de datos

CHARACTER (n)CHARACTER (n)CHARACTER CHARACTER VARYING(nVARYING(n))BIT(nBIT(n))BIT BIT VARYING(nVARYING(n))INTEGERINTEGERSMALLINTSMALLINTNUMERIC(p,qNUMERIC(p,q))DECIMAL(pDECIMAL(p, q), q)FLOAT(pFLOAT(p))Date: YYYYDate: YYYY--MMMM--DDDD

Time: Time: HH:MM:SSHH:MM:SSTime(iTime(i): i+1 posiciones para ): i+1 posiciones para fracciones de segundo.fracciones de segundo.Time Time withwith time time zonezone: : desplazamiento con respecto desplazamiento con respecto a la hora universal.a la hora universal.TimestampTimestamp: incluye d: incluye díía y a y hora.hora.IntervalInterval: un intervalo que se : un intervalo que se puede usar para incrementar o puede usar para incrementar o decrementardecrementar valores.valores.

9916:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

CreaciCreacióón de dominiosn de dominiosLos dominios se pueden utilizar como tipos de datosLos dominios se pueden utilizar como tipos de datosPermite cambiar el tipo simultPermite cambiar el tipo simultááneamente a varios neamente a varios atributosatributos

CREATE DOMAIN dominio [ASCREATE DOMAIN dominio [AS]] tipotipo--datosdatos[DEFAULT [DEFAULT valor_defectovalor_defecto]][CHECK [CHECK condicioncondicion]]

CREATE DOMAIN ciudades AS CREATE DOMAIN ciudades AS CHAR(15) DEFAULT CHAR(15) DEFAULT ‘‘??????’’

101016:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

OperadoresOperadoresComparaciComparacióónn

=, <>, <, >, <=, >=, IS NULL=, <>, <, >, <=, >=, IS NULL

LLóógicosgicosAND, OR, NOTAND, OR, NOT

IntervalosIntervalosBETWEEN BETWEEN …… AND AND ……

BETWEEN 90 AND 95BETWEEN 90 AND 95

Cadenas de textoCadenas de textoLIKELIKE

nombre LIKE nombre LIKE ‘‘%mou%%mou%’’

ConjuntosConjuntosININ

color IN (color IN (‘‘ColorColor’’, , ‘‘PALPAL--ColorColor’’))

111116:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

CreaciCreacióón de tablasn de tablasSe utiliza el comando CREATE TABLESe utiliza el comando CREATE TABLE

Se especifican los atributos de la relaciSe especifican los atributos de la relacióón y sus n y sus tipostipos

Se especifica la clave primariaSe especifica la clave primaria

Se especifica las restricciones de integridadSe especifica las restricciones de integridad

Se especifica la integridad referencialSe especifica la integridad referencial

121216:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

CREATE TABLE CREATE TABLE nombre_tablanombre_tabla ((nombre_columnanombre_columna tipo_columnatipo_columna restricciones_columnarestricciones_columna,,…… ,,restricciones_tablarestricciones_tabla

))

Al crear la tabla se puede indicar el esquema en el que se creaAl crear la tabla se puede indicar el esquema en el que se creanombre_esquema.nombre_tablanombre_esquema.nombre_tabla

Restricciones de columnaRestricciones de columnaUNIQUEUNIQUENOT NULLNOT NULLDEFAULT <DEFAULT <valor_por_defectovalor_por_defecto>>CHECK (CHECK (condicioncondicion))

PRIMARY KEYPRIMARY KEYREFERENCES REFERENCES nombre_tabla(nombre_atributonombre_tabla(nombre_atributo) ) accion_referencialaccion_referencial

131316:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

Restricciones de tablaRestricciones de tablaUNIQUE (UNIQUE (nombre_atributonombre_atributo, , ……))PRIMARY KEY (PRIMARY KEY (nombre_atributonombre_atributo, , ……))FOREIGN KEY (FOREIGN KEY (nombre_atributonombre_atributo, , ……) REFERENCES ) REFERENCES nombre_tabla(nombre_atributonombre_tabla(nombre_atributo)) accion_referencialaccion_referencial

CHECK (CHECK (condicioncondicion))

Acciones referencialesAcciones referencialesON UPDATE ON UPDATE acciaccióónnON DELETE ON DELETE acciaccióónnRESTRICTRESTRICT

Si no se especifica nada, se considera RESTRICTSi no se especifica nada, se considera RESTRICT

CASCADECASCADESET NULLSET NULLSET DEFAULT valorSET DEFAULT valor

141416:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

EjemploEjemplo

protagoniza

produce

se rueda

Peliculatituloaño

numero (FK)duracioncolornombre (FK)

Actornombre

direccionsexofecha nacimiento

Productoranumero

nombredireccionpresupuesto

Estudionombre

direccion

PelPelíícula(cula(titulotitulo, a, aññoo, duraci, duracióón, n, en_coloren_color, , nombre_estudionombre_estudio, numero), numero)

Protagoniza(Protagoniza(titulo_peliculatitulo_pelicula, , aañño_pelo_pelíículacula, , nombre_actornombre_actor))

Actor(Actor(nombrenombre, direcci, direccióón, sexo, n, sexo, fecha_nacimientofecha_nacimiento))

Productora(Productora(numeronumero, nombre, , nombre, direcciondireccion, valor), valor)

Estudio(Estudio(nombrenombre, , direccidireccióónn))

151516:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

161616:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

Si se utiliza CASCADE CONSTRAINT se elimina la tabla Si se utiliza CASCADE CONSTRAINT se elimina la tabla y todas sus restriccionesy todas sus restricciones

Si no se utiliza CASCADE CONSTRAINT, si la tabla Si no se utiliza CASCADE CONSTRAINT, si la tabla tiene restricciones asociadas no se elimina, hasta que tiene restricciones asociadas no se elimina, hasta que no se eliminen las restriccionesno se eliminen las restricciones

Al eliminar una tabla de la base de datos, tambiAl eliminar una tabla de la base de datos, tambiéén se n se eliminan los datos que tuviera almacenadoseliminan los datos que tuviera almacenados

Borrado de tablasBorrado de tablasDROP TABLE DROP TABLE nombre_tablanombre_tabla [CASCADE CONSTRAINT][CASCADE CONSTRAINT]

171716:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

Modificar una tablaModificar una tabla

Acciones de modificaciAcciones de modificacióónnAAññadir atributosadir atributos

ADD ADD nuevo_atributonuevo_atributo tipo restriccionestipo restriccionesLas restricciones sLas restricciones sóólo pueden ser NOT NULL, CHECK y DEFAULTlo pueden ser NOT NULL, CHECK y DEFAULTUn atributo NOT NULL sUn atributo NOT NULL sóólo se puede alo se puede aññadir a una tabla si esta vacadir a una tabla si esta vacííaa

Borrar atributosBorrar atributosDROP (DROP (nombre_atributonombre_atributo, , ……))DROP COLUMN nombre atributo DROP COLUMN nombre atributo [CASCADE CONSTRAINT][CASCADE CONSTRAINT]

Modificar atributosModificar atributosMODIFY MODIFY nombre_atributonombre_atributo nuevo_tiponuevo_tipo restriccionesrestricciones

Se puede cambiar el tipo o disminuir el tamaSe puede cambiar el tipo o disminuir el tamañño de un atributo si todas las o de un atributo si todas las tuplastuplastienen ese campo vactienen ese campo vacííooUn atributo existente se puede hacer NOT NULL si todas las Un atributo existente se puede hacer NOT NULL si todas las tuplastuplas tienen valor tienen valor en ese atributoen ese atributoSi no se especifica algo en la modificaciSi no se especifica algo en la modificacióón, permanece como estaban, permanece como estaba

ALTER TABLE ALTER TABLE nombre_tablanombre_tablaaccion_modificaciaccion_modificacióónn

181816:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

EjemploEjemplo

Borrado de tablaBorrado de tabla

DROP TABLE DROP TABLE peliculapelicula CASCADE CONSTRAINTCASCADE CONSTRAINTDROP TABLE DROP TABLE peliculapelicula

ALTER TABLE ALTER TABLE peliculapeliculaADD ADD fecha_estrenofecha_estreno DATEDATE

ModificaciModificacióón de tablan de tabla

191916:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

Introduce informaciIntroduce informacióón en la tabla y atributos n en la tabla y atributos indicadosindicadosEl orden y el tipo de los atributos debe coincidir El orden y el tipo de los atributos debe coincidir con el orden y tipo de los valorescon el orden y tipo de los valoresLos valores se puede obtener mediante una Los valores se puede obtener mediante una consultaconsultaSi un atributo no se indica, toma valor NULLSi un atributo no se indica, toma valor NULL

InserciInsercióón de datosn de datosINSERT INTO INSERT INTO nombre_tabla(lista_atributosnombre_tabla(lista_atributos) ) VALUES (VALUES (lista_valoreslista_valores))

202016:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

Si se omite la lista de atributos, los valores se Si se omite la lista de atributos, los valores se almacenan de acuerdo al orden de definicialmacenan de acuerdo al orden de definicióón de n de los mismos en el CREATE TABLElos mismos en el CREATE TABLE

Los tipos de la lista de valores deben coincidir Los tipos de la lista de valores deben coincidir con los tipos de definicicon los tipos de definicióón en el CREATE n en el CREATE TABLETABLE

INSERT INTO INSERT INTO nombre_tablanombre_tablaVALUES (VALUES (lista_valoreslista_valores))

212116:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

EjemploEjemplo

Todos los valores de la Todos los valores de la tuplatupla

Algunos valores de la Algunos valores de la tuplatupla

Valores desde consultaValores desde consulta

222216:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

ModificaciModificacióón de datosn de datos

Actualiza en la tabla indicada los valores del atributo siempre Actualiza en la tabla indicada los valores del atributo siempre y y cuando se cumpla la condicicuando se cumpla la condicióón especificadan especificadaLos valores se pueden obtener mediante una Los valores se pueden obtener mediante una subconsultasubconsulta o o mediante formulas matemmediante formulas matemááticasticasSi no hay condiciSi no hay condicióón, se actualizan todas las filas de la tablan, se actualizan todas las filas de la tabla

EjemploEjemplo

UPDATE UPDATE nombre_tablanombre_tablaSET SET nombre_atributonombre_atributo = = nuevo_valornuevo_valor, , ……WHERE condiciWHERE condicióónn

232316:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

Borrado de datosBorrado de datos

Borra de la tabla las Borra de la tabla las tuplastuplas que cumplen cierta condicique cumplen cierta condicióónnSi no hay condiciSi no hay condicióón se borran todas las filas de la tablan se borran todas las filas de la tablaA diferencia de DROP TABLE no borra la estructura de A diferencia de DROP TABLE no borra la estructura de la tablala tabla

EjemploEjemplo

DELETE DELETE nombre_tablanombre_tablaWHERE condiciWHERE condicióónn

242416:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

Consulta de datosConsulta de datos

Consulta valores de una o varias tablas de acuerdo a las Consulta valores de una o varias tablas de acuerdo a las condiciones impuestas en la sentenciacondiciones impuestas en la sentenciaLas Las úúnicas partes obligatorias son SELECT y FROM, el nicas partes obligatorias son SELECT y FROM, el resto son opcionalesresto son opcionales

Si aparecen deben ir en el orden que aparecen en la sentenciaSi aparecen deben ir en el orden que aparecen en la sentenciaHAVING sHAVING sóólo puede aparecer si hay GROUP BYlo puede aparecer si hay GROUP BY

SELECT SELECT lista_atributoslista_atributosFROM FROM lista_tablaslista_tablasWHERE condiciWHERE condicióónnGROUP BY GROUP BY lista_atributoslista_atributosHAVING HAVING condicioncondicionORDER BY ORDER BY lista_atributoslista_atributos

252516:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

En la clEn la clááusula usula SELECTSELECT se indican los atributos que se quieren se indican los atributos que se quieren obtener como respuesta a la consultaobtener como respuesta a la consulta

La clLa clááusula usula FROMFROM indica la tabla o tablas que son necesarias para indica la tabla o tablas que son necesarias para obtener la informaciobtener la informacióónn

En la clEn la clááusula usula WHEREWHERE se indican las condiciones que deben se indican las condiciones que deben cumplir las cumplir las tuplastuplas obtenidas como resultado de la consultaobtenidas como resultado de la consulta

GROUP BYGROUP BY se utiliza para formar grupos de datos en funcise utiliza para formar grupos de datos en funcióón de n de algalgúún atributon atributo

HAVINGHAVING establece condiciones sobre los grupos que se formenestablece condiciones sobre los grupos que se formen

ORDER BYORDER BY indica si muestra el resultado ordenado en funciindica si muestra el resultado ordenado en funcióón de n de algalgúún atributon atributo

262616:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

SELECTSELECTLista de atributos separados por comasLista de atributos separados por comasSELECT atSELECT at11, at, at22, , ……, , atatnn ……

Se indican solamente aquellos atributos que queremos que Se indican solamente aquellos atributos que queremos que aparezcan en el resultadoaparezcan en el resultado

Si utiliza * si queremos todos los atributos de las tablas involSi utiliza * si queremos todos los atributos de las tablas involucradasucradasSELECT * SELECT * ……

Pueden aparecen filas duplicasPueden aparecen filas duplicasPara evitarlos se puede utilizar DISTINCTPara evitarlos se puede utilizar DISTINCT

SELECT DISTINCT SELECT DISTINCT lista_atributoslista_atributos ……SSóólo se obtienen como resultado filas no duplicadas para la combinlo se obtienen como resultado filas no duplicadas para la combinaciacióón de n de los atributos que aparecen en el SELECTlos atributos que aparecen en el SELECT

Los nombres de los atributos se pueden cambiar en el resultado dLos nombres de los atributos se pueden cambiar en el resultado de e la consulta (alias de atributo)la consulta (alias de atributo)SELECT SELECT nombre_atributonombre_atributo [AS] [AS] nuevo_nombrenuevo_nombre ……

272716:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

FROMFROMLista de tablas que se utilizan en la consulta separadas Lista de tablas que se utilizan en la consulta separadas por comaspor comas

…… FROM tabFROM tab11, tab, tab22, , ……, , tabtabnn ……

Realiza el producto cartesiano (X) de las mismasRealiza el producto cartesiano (X) de las mismasLas condiciones (WHERE, GROUP BY) se imponen Las condiciones (WHERE, GROUP BY) se imponen sobre el producto cartesiano sobre el producto cartesiano Los atributos que aparecen en el SELECT se toman del Los atributos que aparecen en el SELECT se toman del producto cartesianoproducto cartesiano

Dentro de la consulta una tabla se puede renombrar Dentro de la consulta una tabla se puede renombrar (alias de tabla)(alias de tabla)…… FROM FROM nombre_tablanombre_tabla nuevo_nombre_tablanuevo_nombre_tabla, , ……

282816:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

WHEREWHEREIndica las condiciones que deben cumplir las filas obtenidas comIndica las condiciones que deben cumplir las filas obtenidas como resultadoo resultado

Si no aparece se recuperan todas las filas del producto cartesiaSi no aparece se recuperan todas las filas del producto cartesiano de las tablas no de las tablas que hay en el FROMque hay en el FROM

La condiciLa condicióón es una expresin es una expresióón n booleanabooleanaSSóólo se obtienen aquellas filas que cumplen la condicilo se obtienen aquellas filas que cumplen la condicióónn

Operadores para construir condicionesOperadores para construir condicionesComparaciComparacióón: =, <>, >, <, >=, <=n: =, <>, >, <, >=, <=

…… WHERE WHERE codigocodigo = 7 = 7 ………… WHERE WHERE codigocodigo < 7 < 7 ……

LLóógicos: AND, OR, NOTgicos: AND, OR, NOTSe utilizan para construir expresiones que involucran mSe utilizan para construir expresiones que involucran máás de una condicis de una condicióón (AND, OR) n (AND, OR) o para invertir el resultado de una condicio para invertir el resultado de una condicióón (NOT)n (NOT)

…… WHERE WHERE codigocodigo = 7 AND color = = 7 AND color = ‘‘rojorojo’’ ………… WHERE NOT (color = WHERE NOT (color = ‘‘rojorojo’’) ) ……

MatemMatemááticos: +, ticos: +, --, *, /, *, /…… WHERE WHERE codigocodigo = (numero * 10) = (numero * 10) ……

Otros: BETWEEN Otros: BETWEEN …… AND, IN, LIKEAND, IN, LIKE…… WHERE WHERE codigocodigo BETWEEN 90 AND 95 BETWEEN 90 AND 95 ………… WHERE nombre LIKE WHERE nombre LIKE ‘‘%mou%%mou%’’ ………… WHERE color IN (WHERE color IN (‘‘ColorColor’’, , ‘‘PALPAL--ColorColor’’) ) ……

292916:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

Peliculas de Disney del año 1990

EjemploEjemplo

303016:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

SELECT * SELECT * FROM FROM peliculaspeliculasWHERE aWHERE añño BETWEEN 90 AND 95; o BETWEEN 90 AND 95;

SELECT * SELECT * FROM actor FROM actor WHERE nombre LIKE WHERE nombre LIKE ‘‘%mou%%mou%’’;;

SELECT * SELECT * FROM FROM peliculapeliculaWHERE color IN (WHERE color IN (‘‘ColorColor’’, , ‘‘PALPAL--ColorColor’’););

313116:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

UniUnióón natural (n natural (JoinJoin ))No se realiza automNo se realiza automááticamenteticamenteHay que escribir la condiciHay que escribir la condicióón en la consultan en la consultaSi no se pone la condiciSi no se pone la condicióón de n de joinjoin, se obtiene el producto cartesiano , se obtiene el producto cartesiano (X)(X)Escritura de Escritura de joinjoin

Las tablas tienen estar relacionadas mediante claves extranjerasLas tablas tienen estar relacionadas mediante claves extranjeras(atributos comunes)(atributos comunes)Igualar los atributos comunes de las tablas participante en la cIgualar los atributos comunes de las tablas participante en la consultaonsulta

UniUnióónn naturalnatural

323216:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

AmbigAmbigüüedadesedades

Cuando el mismo nombre de atributo Cuando el mismo nombre de atributo aparece en maparece en máás de una tablas de una tabla

Hay que distinguir a que atributo se refiereHay que distinguir a que atributo se refiereSe cualifica el atributo con el nombre de la Se cualifica el atributo con el nombre de la tablatablanombre_tabla.nombre_atributonombre_tabla.nombre_atributo

SELECT SELECT empleado.nombreempleado.nombre, DNI, DNIFROM empleado, departamentoFROM empleado, departamentoWHERE WHERE empleado.codigoempleado.codigo==departamento.codigodepartamento.codigoandand departamento.nombredepartamento.nombre==‘‘nominasnominas’’

333316:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

Cuando la misma relaciCuando la misma relacióón se la usa mn se la usa máás s de una vez en la consultade una vez en la consultaEn ese caso se utilizan alias para las En ese caso se utilizan alias para las tablastablas

SELECT SELECT E.nombreE.nombre, S. nombre, S. nombreFROM empleado E , empleado SFROM empleado E , empleado SWHERE WHERE E.supervisornE.supervisorn= = S.nssS.nss

343416:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

AgregadosAgregadosCOUNT(atributoCOUNT(atributo))

Devuelve el nDevuelve el núúmero de mero de tuplastuplas o valores especificados en una o valores especificados en una consulta para el atributo indicadoconsulta para el atributo indicadoSe puede utilizar como atributo *Se puede utilizar como atributo *

SUM(atributoSUM(atributo), ), MAX(atributoMAX(atributo), ), MIN(atributoMIN(atributo), ), AVG(atributoAVG(atributo))

Se aplican a valores numSe aplican a valores numééricos y devuelven la suma, el mricos y devuelven la suma, el mááximo, ximo, mmíínimo y media de los atributos indicadosnimo y media de los atributos indicados

Se pueden utilizar en la clSe pueden utilizar en la clááusula SELECT o en el usula SELECT o en el HAVINGHAVING

En el SELECT no pueden aparecer otros atributos a En el SELECT no pueden aparecer otros atributos a menos que se incluyan en el GROUP BYmenos que se incluyan en el GROUP BY

353516:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

¿Cuántas películas he

protagonizado?

EjemploEjemplo

363616:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

SELECT SUM (sueldo), MAX (sueldo), SELECT SUM (sueldo), MAX (sueldo), MIN(sueldoMIN(sueldo) ) AVG(sueldoAVG(sueldo))FROM empleadoFROM empleado

SELECT COUNT (*)SELECT COUNT (*)FROM empleadoFROM empleado

SELECT SELECT COUNT(DISTINCTCOUNT(DISTINCT sueldo)sueldo)FROM empleadoFROM empleado

373716:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

SubconsultasSubconsultasEn general se admiten varios niveles de anidaciEn general se admiten varios niveles de anidacióónn

Para evitar la ambigPara evitar la ambigüüedad los atributos sin cualificar edad los atributos sin cualificar siempre se referirsiempre se referiráán a las relaciones declaradas en la n a las relaciones declaradas en la consulta mconsulta máás internas interna

Para evitar problemas es aconsejable cualificar los Para evitar problemas es aconsejable cualificar los atributos y utilizar alias para las relacionesatributos y utilizar alias para las relaciones

SubconsultaSubconsulta

383816:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

Operadores de Operadores de subconsultassubconsultasEXISTS (EXISTS (subconsultasubconsulta))

Se utiliza para comprobar si el resultado de una consulta anidadSe utiliza para comprobar si el resultado de una consulta anidada es a es vaciovacioDevuelve Devuelve truetrue si la tabla no es vacsi la tabla no es vacíía, en otro caso devuelve falsoa, en otro caso devuelve falso

NOT EXISTS (NOT EXISTS (subconsultasubconsulta))Se utiliza para comprobar si el resultado de una consulta anidadSe utiliza para comprobar si el resultado de una consulta anidada no es a no es vaciovacioDevuelve Devuelve truetrue si la tabla es vacsi la tabla es vacíía, en otro caso devuelve falsoa, en otro caso devuelve falso

atributo atributo operador_comparacioperador_comparacióónn ALL (ALL (subconsultasubconsulta))Se utilizara para comparar, mediante alguno de los operadores deSe utilizara para comparar, mediante alguno de los operadores de comparacicomparacióón, n, si el valor de un atributo es mayor, menor, igual, si el valor de un atributo es mayor, menor, igual, …… que todos los valores de un que todos los valores de un determinado conjunto de valoresdeterminado conjunto de valoresLa La subconsultasubconsulta debe devolver una lista de valoresdebe devolver una lista de valores

atributo atributo operador_comparacioperador_comparacióónn ANY (ANY (subconsultasubconsulta))Es similar al operador ALL, lo Es similar al operador ALL, lo úúnico que lo diferencia es que el valor del atributo nico que lo diferencia es que el valor del atributo úúnicamente tiene que ser igual, menor, mayor, nicamente tiene que ser igual, menor, mayor, …… que al menos uno de los que al menos uno de los valores del conjuntovalores del conjuntoLa La subconsultasubconsulta debe devolver una lista de valoresdebe devolver una lista de valores

393916:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

SELECT nombreSELECT nombreFROM EmpleadosFROM EmpleadosWHERE sueldo> ALL (SELECT sueldoWHERE sueldo> ALL (SELECT sueldo

FROM empleadoFROM empleadoWHERE WHERE dnodno=`5`)=`5`)

SELECT nombreSELECT nombreFROM empleadoFROM empleadoWHERE NOT EXIST (SELECT *WHERE NOT EXIST (SELECT *

FROM dependientesFROM dependientesWHERE WHERE ssnssn==essnessn))

404016:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

GROUP BYGROUP BY

Se utiliza para formar agrupaciones de Se utiliza para formar agrupaciones de tuplastuplas en funcien funcióón de los valores de uno o n de los valores de uno o varios atributosvarios atributosSe utiliza con agregadosSe utiliza con agregadosNo es necesario utilizar WHERENo es necesario utilizar WHEREComo resultado en el SELECT, sComo resultado en el SELECT, sóólo lo pueden aparecer agregados o los pueden aparecer agregados o los atributos que aparecen en GROUP BYatributos que aparecen en GROUP BY... GROUP BY at... GROUP BY at11, at, at22, , ……, , atatnn, , ……

414116:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

EjemploEjemplo

SELECT SELECT dptondpton, COUNT(*), AVG(sueldo), COUNT(*), AVG(sueldo)FROM empleadoFROM empleadoGROUP BY GROUP BY dptondpton

424216:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

HAVINGHAVINGSe utiliza siempre con GROUP BYSe utiliza siempre con GROUP BYImpone condiciones sobre los grupos formados Impone condiciones sobre los grupos formados previamente en GROUP BYpreviamente en GROUP BYLas condiciones son similares a las utilizadas en Las condiciones son similares a las utilizadas en WHERE, pero se pueden utilizar agregadosWHERE, pero se pueden utilizar agregadosMientras que WHERE impone condiciones a las Mientras que WHERE impone condiciones a las tuplastuplas, , HAVING impone condiciones los gruposHAVING impone condiciones los grupos

SELECT SELECT dptondpton, COUNT(*), AVG(sueldo), COUNT(*), AVG(sueldo)FROM empleadoFROM empleadoGROUP BY GROUP BY dptondptonHAVING COUNT(*)>2HAVING COUNT(*)>2

434316:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

ORDER BYORDER BY

Permite que el usuario ordene el resultado Permite que el usuario ordene el resultado de una consulta por los valores de uno o de una consulta por los valores de uno o mas atributos mas atributos El orden puede ser ascendente (El orden puede ser ascendente (ASCASC) o ) o descendente (descendente (DESCDESC))…… ORDER BY ORDER BY atat1 1 ordenorden, at, at2 2 ordenorden, , ……, , atatnn ordenorden

SELECT *SELECT *FROM empleadoFROM empleadoORDER BY nombre ASC, ORDER BY nombre ASC, codigocodigo DESC;DESC;

444416:05:3716:05:37 ÓÓscar Marbscar Marbáán Gallegon Gallego

Los operadores de conjuntosLos operadores de conjuntos

UNION, INTERSECT, MINUS UNION, INTERSECT, MINUS (consulta(consulta11) ) operador_conjuntooperador_conjunto (consulta(consulta22))

(SELECT (SELECT dnidniFROM alumnos)FROM alumnos)MINUSMINUS(SELECT (SELECT alumnos.dnialumnos.dniFROM alumnos, alumnos alFROM alumnos, alumnos alWHERE (al. edad < WHERE (al. edad < alumnos.edadalumnos.edad) )) )

(SELECT (SELECT asi#asi#FROM asigna FROM asigna WHERE WHERE credtcredt++credprcredpr >6)>6)INTERSECTINTERSECT(SELECT codas(SELECT codasFROM matricula FROM matricula WHERE curso=WHERE curso=‘‘19981998--19991999’’))