Consultas SQL
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
Consulta SQL
La sintaxis básica de una consulta SQL: Bloque SELECT-FROM-WHERE
SELECT <attribute list> FROM <table list>
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
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
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
Selección usando *
SELECT *
FROM Product
WHERE Category = ‘Tablet’;
Name Category Price Manufacter
iPad Tablet $399.00 Apple
Surface Tablet $299.00 Microsoft
Proyección
SELECT Name, Category FROM Product;
Name Category
iPad Tablet
Surface Tablet
Kindle eReader
Macbook Air Laptop
Selección y Proyección
SELECT Name, Category FROM Product
WHERE Manufactor = ‘Apple’
Name Category
iPad Tablet
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
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
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>;
Ejemplo de consulta: DISTINCT
• SELECT Category
FROM Product;
• SELECT DISTINCT Category
FROM Product; Category Tablet Tablet eReader Laptop Category Tablet eReader Laptop
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: +, -, *, /
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
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>
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’));
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
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
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
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
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
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
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
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>;
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??
Resumen: Consulta SQL
SELECT <attribute list> FROM <table list>
WHERE <condition on the tables>
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
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
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
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>
Ejemplo de consulta: Join (2)
SELECT ssn, lname, dno, dnumber, dname FROM employee, department
WHERE dno = dnumber;
SELECT ssn, lname, dno, dnumber, dname
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
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
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
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
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>
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’
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
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
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
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
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
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
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>]
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)
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
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.
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
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
Consultas anidadas correlacionada
• Correlacionada: la consulta interna usa uno o mas atributosde 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
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
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
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
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)
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
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
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
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
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
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
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
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;
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
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>
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
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
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?
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?
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
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>
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:
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
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;
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;
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
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
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?
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
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,
Referencias
• SQL Queries. http://joyceho.github.io/cs377_s17/
slide/8-9-sql.pdf
• Mysql Reference Manual. https://dev.mysql.com/doc/