• No se han encontrado resultados

Consultas SQL. Bases de Datos

N/A
N/A
Protected

Academic year: 2021

Share "Consultas SQL. Bases de Datos"

Copied!
85
0
0

Texto completo

(1)

Consultas SQL

(2)

Contenido

1. Consultas básicas de una sola tabla  Consulta Select-From-Where

 Operadores en la clausula Where 2. Consultas Multi-tablas

 Join

 Aliasing

3. Consultas Anidadas

 Tipos de consultas anidadas

(3)

Consulta SQL

La sintaxis básica de una consulta SQL: Bloque SELECT-FROM-WHERE

SELECT <attribute list> FROM <table list>

(4)

Consulta SQL <—> Algebra Relational

SELECT <attribute list> FROM <table list>

WHERE <condition on the tables>

condiciones de la forma attr1 op constant/attr2 producto

cartesiano de las relaciones

<attribute list> <condition>(R1 ⇥ R2 ⇥ · · · ⇥ Rn)

No elimina duplicados como el SELECT en el

(5)

Ejemplo: Product Database

Name Category Price Manufacter

iPad Tablet $399.00 Apple

Surface Tablet $299.00 Microsoft

Kindle eReader $79.00 Amazon

Macbook Air Laptop $999.99 Apple

(6)

Consulta SQL Básica: * SELECTOR

• Selecciona todos los valores de todas las tuplas de

una relación

• Ejemplo:

SELECT *

FROM Product;

Name Category Price Manufacter

iPad Tablet $399.00 Apple

Surface Tablet $299.00 Microsoft

Kindle eReader $79.00 Amazon

Macbook Air Laptop $999.99 Apple

(7)

Selección usando *

SELECT *

FROM Product

WHERE Category = ‘Tablet’;

Name Category Price Manufacter

iPad Tablet $399.00 Apple

Surface Tablet $299.00 Microsoft

(8)

Proyección

SELECT Name, Category FROM Product;

Name Category

iPad Tablet

Surface Tablet

Kindle eReader

Macbook Air Laptop

(9)

Selección y Proyección

SELECT Name, Category
 FROM Product


WHERE Manufactor = ‘Apple’


Name Category

iPad Tablet

(10)

Detalles de SQL

• Los comandos en SQL son "case insensitive"  SELECT = select = Select

• Los valores son "case sensitive"  Apple =/= apple

• Las constantes de cadenas de caracteres van entre

comillas simples

(11)
(12)

Ejercicios: Company Database

• Recuperar la fecha de nacimiento y la dirección del

empleado cuyo nombre es 'John B. Smith'

• Listar el SSN, el apellido y el número de departamento

de todos los empleados

• Listar el número de departamento y el nombre de

todos los departamentos

• Listar los proyectos que están bajo el control del

(13)

DISTINCT: Elimina Duplicados

• SQL produce valores duplicados por defecto

 Una relación (tabla) es un multi-conjunto (bag) de

tuplas vs un conjunto (set) de tuplas

 En favor de la eficiencia de las bases de datos • Sintaxis:

SELECT DISTINCT <attr list> FROM <table>;

(14)

Ejemplo de consulta: DISTINCT

• SELECT Category

FROM Product;

• SELECT DISTINCT Category

FROM Product; Category Tablet Tablet eReader Laptop Category Tablet eReader Laptop

(15)

Detalles de SQL: Condición WHERE

SELECT <attribute list>
 FROM <table list>


WHERE <condition on the tables>

• Nombre de atributos de la/s relación/es usadas en

la clausula FROM

• Operadores de comparación: =, <>, <, >, <=, >= • Operaciones aritméticas: +, -, *, /

(16)

Detalles de SQL: Condición WHERE

• Operadores lógicos para combinar condiciones: AND,

OR, NOT

• Operadores sobre cadenas de caracteres (ejemplo,

concatenación)

• Test de pertenencia • Pattern matching

(17)

IN: Test de pertenencia a un conjunto

• Determina si un valor esta contenido en un conjunto  True si el valor del atributo es un miembro de un

conjunto de valores

 False en caso contrario • Sintaxis:

SELECT <attr list> FROM <table>

(18)

Ejemplo de consultas: IN

• Buscar el nombre y el precio de los productos fabricados por Amazon o Microsoft:

SELECT name, price FROM Product

WHERE Manufacter IN (‘Amazon’, ‘Microsoft’);

• Buscar el nombre de los productos fabricados por Amazon o Microsoft y son tablets:

SELECT name

FROM Product

WHERE (Manufacter, Category) IN ((‘Amazon’, ‘Tablet’), (‘Microsoft’, ‘Tablet’));

(19)

LIKE: Simple String Pattern Matching

• Sintaxis:

SELECT *

FROM Products

WHERE Name LIKE ‘%Air’;

• Soporta 2 comodines

 Underscore (_) matches exactly one character

(equivalent to ? in the UNIX shell)

 Percent (%) matches 0 or more characters

(equivalent to * in the UNIX shell)

Substring comparison for partial strings

(20)

Ejemplo de consultas: LIKE

• Buscar nombres de productos cuyo nombre de

fabricante comience con ‘A’: SELECT name

FROM Product

WHERE Manufacter LIKE ’A%’;

• Buscar el nombre y el precio de productos que

contengan la palabra Air: SELECT name, price

FROM Product

(21)

SQL: IS NULL

• Determina si un atributo contiene el valor NULL • Sintaxis:

attr IS NULL

• Ejemplo: Buscar empleados que tienen el valor NULL en

el atributo salario SELECT *

FROM employee

(22)

SQL: NOT IN y IS NOT NULL

• Determina si un valor no esta contenido en un conjunto

no contiene un valor NULL respectivamente

• La sintaxis es similar a los operadores IN, IS NULL:

attr NOT IN (set of values) attr IS NOT NULL

(23)

SQL: Three-Value Logic

TRUE FALSE UNKNOWN

TRUE TRUE FALSE UNKNOWN

FALSE FALSE FALSE FALSE

UNKNOWN UNKNOWN FALSE UNKNOWN

AND

TRUE FALSE UNKNOWN

TRUE TRUE TRUE TRUE

FALSE TRUE FALSE UNKNOWN

UNKNOWN TRUE UNKNOWN UNKNOWN

OR

TRUE FALSE UNKNOWN

FALSE TRUE UNKNOWN

(24)

SQL: ORDER BY

• Ordena las tuplas en una consulta basada en los

valores de algunos atributos

• El orden por defecto es el orden ascendentes de los

valores (ASC)

• Sintaxis:

SELECT <attribute list> FROM <table list>

WHERE <condition on the tables>

ORDER BY <attribute-list> ASC | DESC;

Ordenamiento por múltiple columnas

(25)

Ejemplo de consulta: ORDER BY

• Ordenar los empleados por el valor de sus salarios en

orden descendente:

SELECT fname, lname, salary FROM employee

ORDER BY salary DESC;

• Ordenar los empleados por el valor de sus salarios, y

para salarios con el mismo valor, por sus apellidos. SELECT fname, lname, salary

FROM employee

(26)

SQL: LIMIT

• Limita el resultado a una cantidad especificada de tuplas  Útil si la tabla tiene muchas tuplas y solo se quiere hacer

un "sanity check" de la consulta

 Puede ser usado con ORDER BY para obtener un valor

máximo o mínimo.

• Sintaxis:

SELECT <attribute list> FROM <table list>

WHERE <condition on the tables> LIMIT <number of tuples>;

(27)

Ejercicios: Company Database (2)

• ¿Cuáles son los nombres y apellidos de los empleados

que viven en Houston?

• ¿Cuáles son los SSNs de los 5 mejores empleados que

trabajaron más horas en el proyecto número 30? Listar en orden descendente

• ¿Por que números de departamentos están

controlados los proyectos ProductX, ProductY y ProductZ??

(28)
(29)

Resumen: Consulta SQL

SELECT <attribute list> FROM <table list>

WHERE <condition on the tables>

(30)

Ejemplo: Operación Producto Cartesiano

SELECT ssn, lname, dno, dnumber, dname FROM employee, department;

ssn lname dno dnumber dname

111-12-2345 Kirk 5 5 Research 111-12-2345 Kirk 5 4 Administration 111-12-2345 Kirk 5 1 Headquarters 222-23-2222 McCoy 4 5 Research 222-23-2222 McCoy 4 4 Administration 222-23-2222 McCoy 4 1 Headquarters … … … … … 134-52-2340 Scott 5 5 Research 134-52-2340 Scott 5 4 Administration 134-52-2340 Scott 5 1 Headquarters

(31)

SQL: Operación Join

• Expresión en el Álgebra Relacional

• Producto Cartesiano seguido por una operación selección • Comando SQL

 La clausula FROM especifica la operación producto

cartesiano

 La clausula WHERE especifica la condición de la

operación selección

(32)

Ejemplo de consulta: Join

SELECT ssn, lname, dno, dnumber, dname FROM employee, department

WHERE dno = dnumber;

ssn lname dno dnumber dname

111-12-2345 Kirk 5 5 Research

222-23-2222 McCoy 4 4 Administration

134-23-2345 Sulu 4 4 Administration

234-13-3840 Chapel 1 1 Headquarters

(33)

SQL: Join (2)

• Distintas maneras equivalentes de escribir un join básico • Método 1: es simplemente utilizar el producto cartesiano

en la clausula FROM junto con la condición en el WHERE (llamado join implícito)

• Método 2: sintaxis de join explicito

SELECT <attribute list>

FROM <table1> JOIN <table2> ON <join condition> WHERE <condition on the tables>

(34)

Ejemplo de consulta: Join (2)

SELECT ssn, lname, dno, dnumber, dname FROM employee, department

WHERE dno = dnumber;

SELECT ssn, lname, dno, dnumber, dname

(35)

Ejemplo de consulta: Join en el AR

Consulta: Buscar el nombre, el apellido y la dirección de los empleados que trabajan en el departamento ‘Research’

Expresión en el Álgebra Relacional

RD = Dname=‘Research’(DEPARTMENT) RE = RD ./Dnumber = Dno EMPLOYEE

(36)

Ejemplo de consulta: Join en SQL

Consulta: Buscar el nombre, el apellido y la dirección de los empleados que trabajan en el departamento ‘Research’

• Expresión SQL 1

SELECT fname, lname, address FROM employee, department

WHERE dname=‘Research’ AND dno = dnumber;

• Expresión SQL 2

SELECT fname, lname, address FROM employee JOIN

department ON dno = dnumber WHERE dname=‘Research’;

join condition

(37)

Ejercicios: Company Database (3)

• Encontrar el nombre de los empleados en el

departamento 'Research' que ganan más de $30,000

• Encontrar el nombre de los empleados que trabajan en el

proyecto 'ProductX'

• Para los proyectos ubicados en ‘Stafford’, buscar el

nombre del proyecto, el nombre del departamento que lo controla, el apellido del gerente del departamento, su

(38)

SQL: Ambigüedad

¿Qué sucede si queremos listar los empleados con el nombre de las personas a cargo y los proyectos en los que trabaja el empleado?

SELECT essn, name, pno

FROM Dependent, Works_on WHERE essn = essn;

Nombres de atributos ambiguos: el mismo nombre para dos o más atributos en

(39)

SQL: Calificando nombres de atributos

• Para evitar ambigüedad se puede agregar el nombre de

la relación como prefijo del nombre a cada atributo (de lo contrario no se puede decir a qué relación corresponde)

• Calificar (prefijar) el nombre del atributo con el nombre de

la relación origen

 Se puede hacer en las clausulas SELECT o WHERE • Sintaxis SQL: <relation>.<attr>

(40)

Ejemplo: Calificando nombres de atributos

Buscar los números de proyectos en los cuales trabajan empleados que tienen una hija llamada ‘Alice’

SELECT pno

FROM works_on, dependent


WHERE works_on.essn = dependent.essn
 AND name = ‘Alice’

(41)

SQL: Otra Ambiguedad

¿Qué sucede si queremos listar el nombre y apellido de cada empleado y el nombre y apellido de su gerente?

SELECT fname, lname, fname, lname FROM employee, employee

WHERE superssn = ssn;

Los nombres de atributos ambiguos no serán resueltos agregando como prefijo el nombre

(42)

SQL: Aliasing

• Problema: Necesidad de utilizar la misma relación

varias veces en una consulta SELECT y cada nombre de atributo de esa relación será ambiguo

• Solución: Utilice un alias o un identificador que siga al

nombre de relación en la cláusula FROM de una consulta SELECT

(43)

SQL: Aliasing Syntax

• Sintaxis:

SELECT <alias1>.<attr1>, <alias2>.<attr2>

FROM <relation1> <alias1>, <relation2> <alias 2> WHERE <alias1>.<A> = <alias2>.A;

• No hay coma entre el alias y el nombre de la relación • Referirse a la relación usando el alias dado en otras

(44)

Ejemplo de consulta: Aliasing

Listar el nombre y apellido de cada empleado, y el nombre y apellido de su gerente

SELECT e.fname, e.lname, m.fname, m.lname FROM employee e, employee m

WHERE e.superssn = m.ssn;

e y m son llamados alias o variables de tupla para cada relación empleado

(45)

SQL: Operaciones Aritméticas

• Cualquier expresión aritmética (que tenga sentido)

puede ser usado en la clausula SELECT

• Ejemplo: Mostrar el efecto de dar un aumento del

10% a todos los empleados que trabajan en el proyecto ‘ProductX’

SELECT fname, lname, 1.1*salary

FROM employee, works_on, project WHERE ssn = essn

AND pno = pnumber

(46)

Ejercicios: Company Database (4)

• ¿Cuál es el nombre de los departamentos que están

ubicados en Houston?

• Buscar el nombre de los gerentes que están a cargo

de los departamentos ubicados en Houston

• ¿Cuáles son los nombres de los niños cuyos padres

(47)
(48)

Repaso: Consulta SQL básica

Una consulta SQL puede consistir de distintas clausulas, pero solo las clausulas SELECT y FROM son obligatorias SELECT <attribute list>

FROM <table list>

[WHERE <condition on the tables (join or selection)>] [ORDER BY <attribute list>]

(49)

Subconsulta

• Subconsulta: Es una sentencia SELECT-FROM-WHERE

entre paréntesis que produce como resultado una relación de tuplas

• Sintaxis:

(SELECT-command)

• Usos

 Dentro de la clausula WHERE (consulta anidada)  Dentro de la clausula FROM (relación temporal)

(50)

Consulta anidada

• Una consulta anidada es cuando se especifica una

subconsulta dentro de la clausula WHERE de otra consulta, llamada consulta externa

• Sintaxis: SELECT … FROM … WHERE … (SELECT … FROM … WHERE …) Consulta anidada

(51)

Tipos de consulta anidada

• Tipos de consulta anidada:

 Pertenencia a un conjunto: IN y NOT IN  Comparación sobre un conjunto:

compareOp ANY or compareOp ALL

 Chequea por la relación vacía: EXISTS y NOT EXISTS • En teoría, la anidación puede ser arbitrariamente

profunda, pero en la práctica el número de niveles es limitado por el motor de bases de datos.

(52)

Consulta anidada: IN

Recuperar el nombre y la dirección de todos los empleados que trabajan para el departamento ‘Research’

• Sol. #1: SELECT fname, lname

FROM employee, department
 WHERE dno = dnumber


AND dname = ‘Research’;

• Sol. #2: SELECT fname, lname

FROM EMPLOYEE


WHERE dno IN (SELECT dnumber
 FROM department

(53)

Consulta anidada: IN (2)

Buscar el nombre y apellido de los empleados que no tienen personas a cargo

SELECT fname, lname FROM employee

WHERE ssn NOT IN (SELECT essn

(54)

Consultas anidadas correlacionada

• Correlacionada: la consulta interna usa uno o mas atributos

de las relaciones especificadas en la consulta externa

• No correlacionada: La consulta interna es una consulta

autónoma que puede ser ejecutada independientemente de la consulta externa

• Sintaxis:

SELECT … FROM R1

WHERE attr1 IN (SELECT attr2 FROM R2

(55)

Ejemplo: Consulta anidada correlacionada

Recuperar el nombre y el apellido de cada empleado que tiene una persona a cargo con el mismo nombre que el empleado

SELECT e.fname, e.lname FROM employee AS e

WHERE e.ssn IN (SELECT essn

FROM dependent WHERE essn = e.ssn

(56)

Consulta anidada: ALL

FROM employee b

WHERE b.dno = a.dno);

• Ejecución de consulta anidada correlacionada  FOR (cada tupla X en la consulta externa) DO

{ Ejecutar la consulta interna usando el valor del atributo de la tupla X

}

• Ejemplo:

SELECT fname, lname, salary, dno FROM employee a

(57)

Ejecución de consulta anidada correlacionada (2)

FName LName DNo Salary

John Smith 4 50,000 James Bond 4 80,000 Jane Brown 3 60,000 Jennifer Wallace 5 30,000 James Borg 1 55,000 Joyce English 5 25,000 Alicia Wong 4 70,000

• Tupla externa a = John Smith 4 50,000

WHERE 50,000 >= ALL (SELECT salary FROM employee b where b.dno = 4) => FALSE

(58)

Ejecución de consulta anidada correlacionada (2)

FName LName DNo Salary

John Smith 4 50,000 James Bond 4 80,000 Jane Brown 3 60,000 Jennifer Wallace 5 30,000 James Borg 1 55,000 Joyce English 5 25,000 Alicia Wong 4 70,000

• Tupla externa a = James Bond 4 80,000

WHERE 80,000 >= ALL (SELECT salary FROM employee b where b.dno = 4) => TRUE (se selecciona la tupla)

(59)

Ejecución de consulta anidada correlacionada (2)

SELECT fname, lname, salary, dno FROM employee a

WHERE salary >= ALL (SELECT salary

FROM employee b

WHERE b.dno = a.dno);

FName LName DNo Salary

James Bond 4 80,000

Jane Brown 3 60,000

Jennifer Wallace 5 30,000

(60)

Alcance de la consulta anidada correlacionada

Las reglas de alcance definen donde un nombre es visible  Cada nivel de anidamiento constituye un nuevo

alcance interno

 Los nombres de las relaciones y sus atributos en la consulta externa son visibles en la consulta interna pero no lo inverso

 El nombre del atributo especificado dentro de una consulta interna está asociado con la relación más cercana

(61)

Ejemplo: Alcance de consulta anidada

SELECT <attribute list from R1 and/or R2>

FROM R1, R2

WHERE <conditions from R1 and/or R2> AND

(SELECT <attribute list from R1, R2, R3 and/or R4> FROM R3, R4

WHERE <conditions from R1, R2, R3, and/or R4>)

• Atributos de R1 y R2 son visibles en la consulta interna • Atributos de R3 y R4 no son visibles en la consulta

(62)

Ejemplo: Alcance de consulta anidada (2)

SELECT <attribute list from R1 and/or R2>
 FROM R1, R2


WHERE <conditions from R1 and/or R2> AND
 (SELECT x


FROM R3, R4


WHERE <conditions from R1, R2, R3, and/or R4>)

• Si R3 o R4 contiene el nombre de atributo x, entonces x en la consulta interna se refiere a ese atributo en R3 o R4

• Si R3 y R4 no contienen el nombre de atributo x, entonces

(63)

Consulta anidada: EXISTS

• Comprueba si el resultado de una consulta anidada

correlacionada es vacía (no contiene tuplas) o no

• Ejemplo: Recuperar los nombres y los apellidos de

los empleados que no tienen personas a cargo SELECT fname, lname

FROM employee e

WHERE NOT EXISTS (SELECT *

FROM dependent

(64)

Ejercicios: Company Database (5)

• Buscar el nombre y el apellido de los empleados que

ganan el salario más alto en su departamento

• Buscar el nombre y el apellido de las empleadas que

gana el salario más alto (entre las mujeres) en su depto

• Buscar el nombre y el apellido de los empleados que no

tienen ninguna persona a cargo

• Buscar el nombre y el apellido de los empleados que no

trabajan en ningún proyecto controlado por el departamento de Research

(65)

Consulta SQL: Función de Agregación

• Las funciones COUNT, SUM, MAX, MIN, AVG pueden

ser usada en la clausula SELECT

• Ejemplo: Encontrar la suma, el máximo, el mínimo y

promedio de los salarios de los empleados del departamento Research

SELECT SUM(salary), MAX(salary), MIN(salary), AVG(salary)

FROM employee e, department d WHERE e.dno = d.dnumber

(66)

Consulta SQL: Función de Agregación (2)

• El nombre del atributo seleccionado para la función de

agregación es el mismo al de la llamada a la función.

• SELECT MAX(salary), MIN(salary), AVG(salary)

FROM employee;

• Renombrar los atributos seleccionados con la clausula AS

alias dentro de la clausula SELECT

SELECT MAX(salary) AS max, MIN(salary) AS min, AVG(salary) AS average

FROM employee;

(67)

Consulta SQL: Función de Agregación

Recuperar los apellidos y nombres de todos los

empleados que tienen dos o más personas a cargo SELECT lname, fname

FROM employee e

WHERE ( SELECT COUNT (*) FROM dependent

(68)

Consulta SQL: GROUP BY

• Aplica funciones de agregación a subgrupos de tuplas en

una relación

• Corresponden al agrupamiento y las funciones de

agregación en el AR

• Agrupamiento por atributos: atributos usados para

agrupar las tuplas.

• La función de agregación se aplica a cada subgrupo de

forma independiente

• Sintaxis:

SELECT <attribute list> FROM <table list>

WHERE <condition on the tables> GROUP BY <grouping attributes>

(69)

Ejecución del GROUP BY

Una consulta con la clausula GROUP BY es procesada en el siguiente orden:

1. Selecciona las tuplas que satisfacen la condición WHERE

2. Las tuplas seleccionadas desde (1) se agrupan

basadas en su valor en los atributos de agrupación 3. Una o mas funciones se aplican a cada subgrupo

(70)

Ejemplo: GROUP BY

Para cada departamento, recuperar el numero de departamento, el numero de empleados en el departamento, y su salario promedio

SELECT dno, count(*), avg(salary) FROM employee

(71)

Consulta SQL: Detalles del GROUP BY

• ¿Qué sucede si no incluimos ciertos atributos de

agrupación en la cláusula SELECT?

• ¿Qué sucede si incluimos un atributo en la cláusula

SELECT que no está en la lista de atributos del GROUP BY?

(72)

Consulta SQL: Detalles del GROUP BY

• ¿Qué sucede si no incluimos ciertos atributos de

agrupación en la cláusula SELECT?

Resp: La consulta aun se ejecuta pero ya no se tiene idea de lo que significa el resultado

• ¿Qué sucede si incluimos un atributo en la cláusula

SELECT que no está en la lista de atributos del GROUP BY?

(73)

Consulta SQL: Detalles del GROUP BY

• ¿Qué sucede si no incluimos ciertos atributos de

agrupación en la cláusula SELECT?

Resp: La consulta aun se ejecuta pero ya no se tiene idea de lo que significa el resultado

• ¿Qué sucede si incluimos un atributo en la cláusula

SELECT que no está en la lista de atributos del GROUP BY?

Resp: En teoría, esto no se debería permitir ya que no se puede producir un solo valor para atributos que no se agrupan. Sin embargo, algunas

(74)

Consulta SQL: HAVING

• La clausula HAVING especifica una condición de

selección sobre grupos (en lugar de tuplas individuales) Filtra los grupos que no satisfacen la condición de grupo

• Sintaxis:

SELECT <attribute list>
 FROM <table list>


WHERE <condition on the tables>
 GROUP BY <grouping attributes>


(75)

Consulta SQL: Detalles del HAVING

• Si una consulta SQL usa la clausula HAVING, entonces

la clausula GROUP BY debe estar.

• La condición de grupo es una condición sobre un

conjunto de tuplas

• No se puede usar atributos que no se agrupan dentro

de la clausula HAVING

• La forma mas común de condición de grupo es:

(76)

SQL: Orden de ejecución del HAVING

1. Selecciona las tuplas que satisfacen la condición WHERE

2. Las tuplas seleccionadas desde (1) se agrupan basadas en su valor en los atributos de agrupación

3. Filtra los grupos de manera que solo queden aquellos grupos que satisfagan la condición

4. Un conjunto de funciones de agregación en la clausula SELECT son aplicados a estos grupos

(77)

Ejemplo: HAVING

Para cada proyecto en el que trabajan mas de dos

empleados, recuperar el numero de proyecto, nombre de proyecto, el numero de empleados que trabajan en ese proyecto

SELECT pnumber, pname, COUNT(*) FROM project, works_on

WHERE pnumber = pno GROUP BY pnumber, pname HAVING COUNT(*) > 2;

(78)

Ejemplo: HAVING (2)

Para cada departamento con al menos 2 empleados, buscar el nombre de departamento y el numero de

empleados en ese departamento que ganan mas de $40K SELECT dname, COUNT(ssn)


FROM department, employee
 WHERE dnumber = dno

AND salary > 40000
 GROUP BY dname


HAVING COUNT(ssn) >= 2;

(79)

Ejemplo: HAVING (2)

• La consulta anterior sólo cuenta el número de

departamentos que tienen al menos 2 empleados que ganan más de $40K.

• SELECT dname, COUNT(ssn)

FROM employee, department
 WHERE dno = dnumber


AND dno IN ( SELECT dno


FROM employee
 GROUP BY dno


HAVING COUNT(ssn) >= 2)
 AND salary > 40000

(80)

Resumen de las consultas SQL

SELECT [DISTINCT] <attribute list> FROM <table list>

[WHERE <condition on the tables>] [GROUP BY <grouping attributes>]

[HAVING <group condition>]

[ORDER BY <attribute list> ASC | DESC] [LIMIT <number of tuples>]

Tiene todas las cláusulas posibles que un comando SQL puede incluir

(81)

Ejercicios: Company Database (6)

• ¿Cuales son los SSN de los empleados que trabajan en

al menos 2 proyectos?

• ¿Cuál es el nombre del proyecto donde los empleados

han trabajado el mayor número de horas (total)?

• ¿Qué departamento tiene el mayor número de personas

a cargo?

(82)

MySQL Workbench

• Open source, IDE para el sistema de base de datos

MySQL

• Editor SQL

• Provee Modelado de Datos

• Administración de datos + monitoreo del

rendimiento

• Corre en Windows, Linux, Mac OS X

(83)
(84)

Consultas SQL: Resumen

• Consulta básica de una sola tabla

• Operadores útiles: *, DISTINCT, IN, LIKE, ORDER

BY, LIMIT, IS NULL

• Consulta multi-tabla

• Join

• Aliasing and qualification

• Consultas anidadas

• Operadores y comandos adicionales

• Operaciones sobre conjuntos, GROUP BY,

(85)

Referencias

• SQL Queries. http://joyceho.github.io/cs377_s17/

slide/8-9-sql.pdf

• Mysql Reference Manual. https://dev.mysql.com/doc/

Referencias

Documento similar

El nuevo Decreto reforzaba el poder militar al asumir el Comandante General del Reino Tserclaes de Tilly todos los poderes –militar, político, económico y gubernativo–; ampliaba

No había pasado un día desde mi solemne entrada cuando, para que el recuerdo me sirviera de advertencia, alguien se encargó de decirme que sobre aquellas losas habían rodado

De acuerdo con Harold Bloom en The Anxiety of Influence (1973), el Libro de buen amor reescribe (y modifica) el Pamphihis, pero el Pamphilus era también una reescritura y

Missing estimates for total domestic participant spend were estimated using a similar approach of that used to calculate missing international estimates, with average shares applied

Sin embargo, es ese profundo malestar con las religiones occidentales y con el Islam, lo que ha llevado a Fernando Vallejo a erigirse en una voz crítica y punzante, que no sólo ataca

The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,

Ciaurriz quien, durante su primer arlo de estancia en Loyola 40 , catalogó sus fondos siguiendo la división previa a la que nos hemos referido; y si esta labor fue de

Para denegación hegeliana del mal: «Así como no existe lo fal- so, no existe el mal, es objetada primero por Sade y luego por la subjetividad romántica: en la mé- dula de la