0% encontró este documento útil (0 votos)
23 vistas28 páginas

06 ConsultasSQL

Cargado por

voltisurspa
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
23 vistas28 páginas

06 ConsultasSQL

Cargado por

voltisurspa
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 28

Ingeniería en Información y

Control de Gestión

Lenguaje de Consultas SQL

22 de septiembre 2017 | Francisco Ortiz-Vidal


Consultas

v Una consulta básica tiene la forma:


SELECT [DISTINCT|ALL] lista-selección
FROM lista(tablas, vistas)
WHERE condición

v Cada consulta debe tener una cláusula SELECT y otra FROM, pero la
cláusula WHERE es opcional.
Consultas (cont.)

SELECT [DISTINCT|ALL] lista-selección


FROM lista(tablas, vistas)
WHERE condición

v En condición se pueden encontrar los operadores de comparación


{=, <, <=, >, >=, <>}, que forman predicados built-in.
Por ejemplo:
§ nombre=‘Juan’ or edad<=30
Ejemplo consultas básicas

v Considere el siguiente esquema:

Alumno ID Nombre Apellido Edad


1 Pedro Gómez 26
2 Juan Muñoz 25
3 Marta Figueroa 34
5 Mario González 27
6 Ximena Gómez 18
Ejemplo consultas básicas (cont.)

v Para la unión de operadores built-in se utilizan los siguientes conectores


lógicos:
§ AND (y)
§ OR (o)
SELECT NOMBRE, APELLIDO, EDAD
FROM ALUMNO
WHERE EDAD>20 AND APELLIDO =‘Gomez’

Nombre Apellido Edad


Pedro Gómez 26
Ejemplo consultas básicas (cont.)

SELECT NOMBRE, APELLIDO, EDAD


FROM ALUMNO
WHERE EDAD>20 OR APELLIDO =‘Gomez’

Nombre Apellido Edad

Pedro Gómez 26

Juan Muñoz 25
Marta Figueroa 34

Mario González 27

Ximena Gómez 18
Uso de DISTINCT

v Supongamos la siguiente relación y la consulta:


§ Listar los ID de alumnos que tiene nota

Nota IDA IDC Nota SELECT IDA IDA


FROM NOTA 1
1 14 6,4
1
1 15 5,8
3
3 14 6,9 3
3 15 5,6
SELECT DISTINCT IDA IDA
FROM NOTA 1
3
Uso de JOIN

v Para poder realizar consultas a más de una tabla, se deben realizar una
condición donde se igualen las clave primaria de una de ellas y la clave
foránea de la otra tabla.

SELECT columnas
FROM tabla1, tabla2
WHERE tabla1.columna= tabla2.columna

SELECT columnas
FROM tabla1
JOIN tabla2 ON tabla1.columna= tabla2.columna
Uso de JOIN (cont.)

v Si se tiene el siguiente esquema:


§ Alumno (IdA, Nombre, Edad),
§ Curso (IdC, Nombre, Profesor),
§ Nota (IdA, IdC, Cal)
v Si deseo conocer el nombre del curso y nombre del alumno de los curso
que toma cada uno de los alumnos
SELECT Curso.Nombre , Alumno.Nombre
FROM Curso
JOIN Nota ON Curso.Idc=Nota.IdC
JOIN Alumno ON Alumno.IdA=Nota.IdA

Uso de alías
SELECT C.Nombre , A.Nombre
FROM Curso C
JOIN Nota N ON C.Idc=N.IdC
JOIN Alumno A ON A.IdA=N.IdA
Operador: BETWEEN

v BETWEEN: Permite seleccionar un conjunto de datos de acuerdo a un


determinado rango.

SELECT columnas
FROM tablas
WHERE nombre_columna BETWEEN valor1 AND valor2

v Ejemplo:
SELECT Nombre, Apellido, Edad
FROM ALUMNO
WHERE Edad BETWEEN 20 AND 35;
Operador: LIKE

v LIKE: Permite hacer una búsqueda basada en un patrón. Un _


representa un carácter y % n-caracteres.

SELECT columnas
FROM tablas
WHERE nombre_columna LIKE (patron)

v Ejemplo
SELECT Nombre, Apellido, Edad
FROM ALUMNO
WHERE Nombre LIKE (‘%am%’);
Operaciones con consultas

v Se pueden utilizar las siguientes operaciones con consultas:


§ Union
§ Intersects
§ Except

v Sintaxis

Consulta 1 <operador> Consulta 2

v Nota: El resultado de todas las consultas debe tener el mismo dominio


Uso de UNION

v Entrega el resultado que entrega la consulta1 o que entrega la consulta


2. Se duplican las tuplas que aparecen como resultado de ambas
consultas, a no ser que se utilice ALL

Consulta 1
UNION
Consulta 2
UNION

Consulta N
Ejemplo de UNION

v Esquema:
§ Empleado_partime(rut, nombre, edad, n°horas, salario)
§ Empleado_Full (rut, nombre, titulo, salario).

v Es necesario conocer el nombre y rut de todos los empleados

SELECT rut, nombre


FROM Empleado_full
UNION
SELECT rut, nombre
FROM Empleado_partime
Uso de INTERSECT

v Entrega el resultado que aparece en todas las consultas.

Consulta 1 INTERSECT Consulta 2


INTERSECT … Consulta N

v Considerando el esquema de los empleado full y part time.


v Consulta: Es necesario conocer los empleados que están como partime
y full
SELECT rut, nombre
FROM Empleado_full
INTERSECT
SELECT rut, nombre
FROM Empleado_partime
Uso de EXCEPT

v Muestra la tuplas que están en el resultado de la consulta 1 pero no


están en el resultado de la consulta 2.

Consulta 1 EXCEPT Consulta 2

v Considerando el esquema de los empleado full y part time.


v Consulta: Es necesario conocer los empleados que están como partime
y no full
SELECT rut, nombre
FROM Empleado_partime
EXCEPT
SELECT rut, nombre
FROM Empleado_full
Operador: IN

v El operador IN, forma una condición donde se sabe que valores exactos
se deben cumplir. Es decir verifica si un elemento esta en un conjunto
dado, los que pueden ser valores o el resultado de una consulta

SELECT columnas
FROM tablas
WHERE nombre_columna IN (valor1,.. , valorn)

SELECT Nombre, Apellido, Edad


FROM ALUMNO
WHERE Nombre IN (‘Pedro’,’Mario’);
Operador: NOT IN

v Del mismo modo, el operador NOT IN, lista los elementos que no están
en un cojunto dado, pudiendo ser ser valores o el resultado de una
consulta

SELECT columnas
FROM tablas
WHERE nombre_columna NOT IN (valor1,.. , valorn)

SELECT Nombre, Apellido, Edad


FROM ALUMNO
WHERE Nombre NOT IN (‘Pedro’,’Mario’);
ORDER BY

v ORDER BY <criterio> [nombre columna][ASC] / [DESC]


§ Ordena
§ Selecciona
§ Proyecciones.

v La comparación con NULL se hace:


§ columna [IS] NULL
§ columna [IS NOT] NULL
Ejemplo de ORDER BY

v Utilizando ORDER BY para ordenar ascendentemente los apellidos de


los alumnos
v Ejemplo:
SELECT Nombre, Apellido, Edad
FROM ALUMNO
ORDER BY Apellido ASC;
Consultas Anidadas

v Una consulta anidada es una consulta que tiene otra consulta embebida
dentro de ella.
§ La segunda consulta es llamada sub-consulta
§ Esta sub-consulta puede, a su vez, tener una consulta anidada
§ Una sub-consulta generalmente aparece en la cláusula WHERE, pero
también pueden aparecer en la cláusula FROM o en la cláusula
HAVING
Ejercicio en SQL

v Suponga el siguiente esquema:


§ Navegante (idn, nombre, rating, edad),
§ Reserva (idn, idb, fecha)
§ Bote (idb, nombreb, color)
Ejercicio (Q1)

v Q1: Encontrar los nombres de los navegantes que reservaron el bote


con identificador (idb) Nº 103

v Solución con consulta anidada:


SELECT N.nombre
FROM Navegante N
WHERE N.idn IN ( SELECT R.idn
FROM Reserva R
WHERE R.idb =103);
v Solución con JOIN:
SELECT N.nombre
FROM Navegante N
JOIN Reserva R on N.idn IN = R.idn
WHERE R.idb =103;
Ejercicio (Q2)

v Q2: Encontrar los nombres de los navegantes que NO reservaron el


bote con identificador (idb) Nº 103

v Solución con consulta anidada:


SELECT N.nombre
FROM Navegante N
WHERE N.idn NOT IN ( SELECT R.idn
FROM Reserva R
WHERE R.idb = 103);

v Solución con LEFT JOIN:


SELECT N.nombre
FROM Navegante N
LEFT JOIN Reserva R on N.idn IN = R.idn
WHERE R.idb <> 103;
Ejercicio (Q3)

v Q3: Encontrar los nombres de los navegantes que reservaron un bote


rojo

v Solución:
SELECT N.nombre
FROM Navegante N
WHERE N.idn IN (SELECT R.idn
FROM Reserva R
WHERE R.idb IN (
SELECT B.idb
FROM Bote B
WHERE B.color = 'rojo'));
Ejercicio (Q4)

v Q4: Encontrar los nombres de los navegantes que NO reservaron un


bote rojo

v Solución:
SELECT N.nombre
FROM Navegantes N
WHERE N.idn NOT IN (SELECT R.idn
FROM Reservas R
WHERE R.idb IN ( SELECT B.idb
FROM Botes B
WHERE B.color = 'rojo’));
¿Qué computan las siguientes consultas?

SELECT N.nombre
FROM Navegantes N
WHERE N.idn IN (SELECT R.idn
FROM Reservas R
WHERE R.idb NOT IN (SELECT B.idb
FROM Botes B
WHERE B.color = 'rojo'));

SELECT N.nombre
FROM Navegantes N
WHERE N.idn NOT IN (SELECT R.idn
FROM Reservas R
WHERE R.idb NOT IN (SELECT B.idb
FROM Botes B
WHERE B.color = 'rojo'));
Ingeniería en Información y

Control de Gestión

También podría gustarte