Anda di halaman 1dari 57

CONSULTAS SQL

ING. MARIA NINA YUCRA ING. MARIA NINA


YUCRA

1
Lenguaje SQL
(Structured Query Language)
Es el lenguaje standard para manejo de datos en
bases de datos relacionales.
Lo utilizan la mayora de los Sistemas Manejadores de
Bases de Datos (SMBD) comerciales (DB2, Oracle,
INGRES, SYBASE, SQL Server, etc.)
SQL se propuso inicialmente en 1970 y
peridicamente se publican versiones actualizadas de
la norma (ANSI y la ISO).
Las expresiones en las implementaciones de SQL
propias de cada DBMS pueden diferir levemente
respecto del standard.

ING. MARIA NINA


YUCRA 2
Lenguaje de Consulta Estructurado SQL
Agrupa tres tipos de sentencias con objetivos particulares
Lenguaje de Definicin de Datos (Data Definition Language LDD)
Lenguaje de Manipulacin de Datos (Data Manipulation Language
LMD)
Lenguaje de Control de Datos (Data Control Language LCD)
El Lenguaje de Manipulacin de Datos del SQL se pueden
usar interactivamente como un lenguaje de consulta o se
pueden insertar en programas de aplicacin.
En una consulta se especifica qu informacin se requiere,
sin especificar cmo obtenerla (no requiere mtodos de
acceso a los datos).
Cada sentencia tiene su propia sintaxis.
ING. MARIA NINA
YUCRA 3
Lenguaje de Consulta Estructurado SQL

Sentencias

Clusulas
SQL

Operadores

Funciones de
agregado

Estos elementos se combinan en las instrucciones


para crear, actualizar y manipular las bases de datos.
ING. MARIA NINA
YUCRA 4
Sentencias del Lenguaje de
Definicin de Datos

CREATE Utilizado para crear nuevas tablas,


campos e ndices

DROP Empleado para eliminar tablas e


ndices

Utilizado para modificar las tablas


ALTER agregando campos o cambiando la
definicin de los campos.
ING. MARIA NINA
YUCRA 5
Sentencias del Lenguaje de Manipulacin
de Datos

SELECT Utilizado para consultar registros de la base de


datos que satisfagan un criterio determinado

INSERT Utilizado para cargar lotes de datos en la base de


datos en una nica operacin.

UPDATE Utilizado para modificar los valores de los


campos y registros especificados

DELETE Utilizado para eliminar registros de una tabla de


una base de datos

ING. MARIA NINA


YUCRA 6
CLASULAS

FROM Utilizada para especificar la tabla de la cual se van a


seleccionar los registros

WHERE Utilizada para especificar las condiciones que


deben reunir los registros que se van a seleccionar

GROUP BY Utilizada para separar los registros seleccionados


en grupos especficos

HAVING Utilizada para expresar la condicin que debe


satisfacer cada grupo

ORDER BY Utilizada para ordenar los registros seleccionados


de acuerdo con un orden especfico

ING. MARIA NINA


YUCRA 7
Operadores Lgicos
Es el "y" lgico. Evalua dos condiciones y
AND devuelve un valor de verdad slo si ambas
son ciertas.

Es el "o" lgico. Evala dos condiciones y


OR devuelve un valor de verdar si alguna de
las dos es cierta.

NOT Negacin lgica. Devuelve el valor


contrario de la expresin.

ING. MARIA NINA


YUCRA 8
Funciones Agregadas
Utilizada para calcular el promedio de los
AVG valores de un campo determinado
Utilizada para devolver el nmero de
COUNT registros de la seleccin

Utilizada para devolver la suma de todos


SUM los valores de un campo determinado

Utilizada para devolver el valor ms alto de


MAX un campo especificado

Utilizada para devolver el valor ms bajo de


MIN un campo especificado

ING. MARIA NINA


YUCRA 9
Operadores de Comparacin
< Menor que

> Mayor que

<> Distinto de

<= Menor Igual que

>= Mayor Igual que

= Igual que
Utilizado para especificar un intervalo de
BETWEEN
valores.
LIKE Utilizado en la comparacin de un modelo

Utilizado para especificar registros de una base


In
de datos
ING. MARIA NINA
YUCRA 10
Sentencia SELECT
SELECT [ DISTINCT ] <lista items>
FROM <lista tablas>
[ WHERE condicin ]
[ GROUP BY <lista atributos grupo>
[ HAVING (condicin grupo) ] ]
[ ORDER BY <lista atributos orden> ] ;
El resultado es una tabla (si el resultado es un
nmero, se considera como una tabla con una
fila y una columna)
DISTINCT permite eliminar duplicados
La condicin del WHERE restringir el conjunto
de tuplas a recuperar
ING. MARIA NINA
YUCRA 11
Sentencia SELECT
SELECT [ DISTINCT ] <lista items>
FROM <lista tablas>
[ WHERE condicin ]
[ GROUP BY <lista atributos grupo>
[ HAVING (condicin grupo) ] ]
[ ORDER BY <lista atributos orden> ] ;
GROUP BY agrupa la relacin resultante en grupos,
y se puede aplicar un filtro sobre el grupo mediante
HAVING (<lista tems> debe coincidir con <lista
atributos grupo>, aunque puede incluir funciones de
agregado)
ORDER BY permite ordenar el resultado mediante
una lista de campos en <lista atributos orden>
ING. MARIA NINA
YUCRA 12
CONSULTAS
PROYECCION ()
La proyeccin de una relacin sobre un conjunto de sus
atributos es otra relacin definida sobre estos atributos,
eliminando las tuplas duplicadas que hubieran podido resultar.
Su sintaxis es: A1, A2, An(R)

R
A1(R)

La Relacin R
La Relacin Resultante
A B C A B
5 6 10 A,B (R) 5 6 A B En SQL
5 6 20 5 6 5 6
30 40 1 30 40 30 40 SELECT A,B
1 4 2 1 4 1 4
FROM R
ING. MARIA NINA
YUCRA
13
CONSULTAS

Ejemplo: Listar los nombres de todos los socios


SOCIO
CODIGO NOMBRE DIRECCION
1 Elena Manriquez Calle 123
2 Manuel Garca Calle 234
3 Paloma Soria Calle 325

Nombre (SOCIOS)
Se escogen las columnas especificadas en la lista de atributos o campos

En SQL
NOMBRE
Elena Manriquez
Manuel Garca SELECT Nombre
Paloma Soria FROM Socio

ING. MARIA NINA


YUCRA
14
CONSULTAS
Ejemplo: Listar la nacionalidad y la institucin de todos los autores
AUTOR
NOMBRE NACIONALIDAD INSTITUCION
Date C.J. Norteamericana Relational Ins.
De Miguel Espaola FIM
Saltor F. Espaola FI de UPB
Ceri S. Italiana Polit.Milan
Chen P. Norteamericana ER Ins.
Nacionalidad, Institucin (AUTOR)
Se escogen las columnas especificadas en la lista de
atributos o campos

NACIONALIDAD INSTITUCION
Norteamericana Relational Ins. En SQL
Espaola FIM
Espaola FI de UPB SELECT Nacionalidad, Institucin
Italiana Polit.Milan
FROM Autor
Norteamericana ER Ins. ING. MARIA NINA
YUCRA
15
CONSULTAS SELECT Bsicas
Selecciona todas las columnas de la tabla
SELECT *
FROM Customers;
Seleccin de Columnas Especificas
Ej:Selecciona las columnas CompanyName, address, City, country de la Tabla
Customers
SELECT CompanyName, address, City, country
FROM Customers
Uso de Alias de Columna
Ej:Selecciona la columnas CompanyName y se le asigna como alias Nombre de
la compaa de la Tabla Customers
SELECT CompanyName AS 'Nombre de la compaia'
FROM Customers;
Otro ejemplo:
SELECT CompanyName AS "Nombre de la Compaia", address AS "Direccin", City
AS "Ciudad", country AS Pais
FROM Customers;
ING. MARIA NINA
YUCRA
16
CONSULTAS SELECT Bsicas
Uso de Operadores Aritmticos
Ej:Se incrementa el precio unitario en diez unidades monetarias y se asigna
como alias de la columan Precio Aumentado
SELECT ProductName,UnitPrice, UnitPrice +10 AS "Precio Aumentado"
FROM Products;
Prioridad de los Operadores Aritmticos
Ej:Se incrementa el precio unitario 12 veces mas ms cien 100 unidades
monetarias
SELECT ProductName,UnitPrice, 12 *UnitPrice+100
FROM Products
Uso de Parntesis
Ej:Se incrementa el precio unitario ms cien 100 unidades y ese resultado
se incrementa 12 veces
SELECT ProductName,UnitPrice, 12 *(UnitPrice+100)
FROM Products

ING. MARIA NINA


YUCRA 17
CONSULTAS SELECT Bsicas
Operador de Concatenacin +
Ej:Se muestra los 10 primeros registros y se visualiza la columna
CompanyName
SELECT TOP 10 CompanyName + ' esta ubicada en ' + address AS "Nombre
de la compaia"
FROM Customers
Filas duplicadas, la visualizacin incluye las filas
duplicadas
Ej:Selecciona la columna Title (Cargo) incluida filas duplicadas
SELECT Title
FROM Employees
Eliminar Filas duplicadas a travs de la palabra clave
DISTINCT de la clusula SELECT
Ej:Selecciona la columna Title (Cargo) eliminando filas duplicadas
SELECT DISTINCT Title
FROM Employees

ING. MARIA NINA


YUCRA
18
Consultas de una Tabla
ORDER BY Ordena los resultadoos de una consulta
por una o mas columnas de forma ASC o DESC
Ej: Retornar las filas de todos los empleados ordenados descendentemente
pro el campo ciudad y apellido ascendentemente
SELECT EmployeeID,LastName,City
FROM Employees
ORDER BY City DESC ,LastName ASC
GROPU BY Especifica los grupos en los que se van colocar las filas
de salida y si se incluyen funciones de agregado en la clusula
SELECT, pudiendo calcular el valor de resumen de cada grupo
Ej: Retornar el nmero de pedidos atendidos por cada empleado ordenado
descendentemente por el nuemro de pedidos
SELECT EmployeeID, COUNT (OrderID) AS [Nro de Pedidos]
FROM Orders
GROUP BY EmployeeID
ORDER BY [Nro de Pedidos] DESC
ING. MARIA NINA
YUCRA 19
Consultas de una Tabla
Ej: Retorna el IdPedido, el numero de articulos en cada pedido
y el montod e cada pedido
SELECT OrderID, SUM (Quantity) AS [Nro de Articulos],
SUM(UnitPrice*Quantity) as Subtotal
FROM [Order Details]
GROUP BY OrderID
ORDER BY 1
Ej: Retorna el numero de clientes diferentes atendidos por cada
empleado
SELECT COUNT (DISTINCT CustomerID) AS "Nro de Clientes atendidos
por empleado" , EmployeeID
FROM Orders
GROUP BY EmployeeID

ING. MARIA NINA


YUCRA
20
Consultas de una Tabla - Condiciones
SELECCIN ( = SELECT)
Su sintxis es :p(R) = SELECT <LISTA ATRIBUTOS>
La Relacin R
R
A B C D A B C D
p(R) 1 7 C>=5 (R) 5 7
5 7 12 10
3 23
12 10

En SQL

SELECT *
FROM R
WHERE C>=5
ING. MARIA NINA
YUCRA
21
Consultas de una Tabla - Condiciones
Es un filtro que define las condiciones que debe cumplir cada fila
de las tabla de origen para satisfacer los requisitos de la
instruccin SELECT. Solo las filas que cumplen las condiciones
contribuyen con datos al conjunto de resultados
Los operadores de comparacin comprueban si dos expresiones
son o no las mismas. No se pude utilizarlos con los tipos de
datos text, ntext, image.
Los operadores lgicos comprueban la veracidad de alguna
condicin. Devuelven el tipo de datos Booeleano con valor
TRUE o FALSE

ING. MARIA NINA


YUCRA
22
Consultas de una Tabla - Condiciones
Ejemplo: Todos los autores que tienen nacionalidad espaola

AUTOR
NOMBRE NACIONALIDAD INSTITUCION
Date C.J. Norteamericana Relational Ins.
De Miguel Espaola FIM
Saltor F. Espaola FI de UPB
Ceri S. Italiana Polit.Milan
Chen P. Norteamericana ER Ins.
Nacionalidad=Espaola (Autor)
Se escogen filas que cumplan con el predicado En SQL

NOMBRE NACIONALIDAD INSTITUCION SELECT *


De Miguel Espaola FIM FROM Autor
Saltor F. Espaola FI de UPB WHERE Nacionalidad=Espaola

ING. MARIA NINA


YUCRA
23
Consultas de una Tabla - Condiciones
Ejemplo: Todos los autores que tienen nacionalidad espaola y
pertenecen a la institucin FIM
AUTOR
NOMBRE NACIONALIDAD INSTITUCION
Date C.J. Norteamericana Relational Ins.
De Miguel Espaola FIM
Saltor F. Espaola FI de UPB
Ceri S. Italiana Polit.Milan
Chen P. Norteamericana ER Ins.

Nacionalidad =Espaola Institucin= FIM (Autor)


Se escogen filas que cumplan con el predicado

NOMBRE NACIONALIDAD INSTITUCION


En SQL De Miguel Espaola FIM

SELECT *
FROM Autor
WHERE Nacionalidad=Espaola AND Institucin =FIM
ING. MARIA NINA
YUCRA
24
CONSULTAS - Condiciones
Ejemplo Listar la nacionalidad y la institucin de todos
los autores de nacionalidad ESPAOLA

Nacionalidad, Institucin ( Nacionalidad=Espaola(AUTOR))

En SQL

SELECT Nacionalidad, Institucin


FROM Autor
WHERE Nacionalidad=Espaola

ING. MARIA NINA


YUCRA
25
Consultas de una Tabla - Condiciones WHERE
Operador LIKE
Caracteres Comodines
Comodn Descripcin de la Bsqueda
% Cualquier cadena de cero o ms carcteres
~ Cualquier carcter nico
[] Cualquier carcter nico dentro del rango especificado Ej:[SsMm]
[^ ] Cualquier caracter unico que no este dentro del rango
especificado Ej:[^SsMm]

Ej: Retornar las filas de los clientes que tengan una F como caracter
inicial en el nombre de la compania
SELECT *
FROM Customers
WHERE CompanyName Like 'F%'
Ej: Retornar las filas de los clientes que tengan una ia como caracteres
finales en el nombre de la compania
SELECT *
FROM Customers
WHERE CompanyName Like '%ie'
ING. MARIA NINA
YUCRA
26
Consultas de una Tabla - Condiciones
Ejemplos con operadores relacionales:
Ej: Obtener todas las filas de los productos que pertenezcan a a
las categorias 1, 2, o 5
SELECT *
FROM Products
WHERE CategoryID=1 OR CategoryID=3 OR CategoryID=5
IN Se lo utiliza cuando se quiere determinar si un valor
coincide con algun valor de una subconsulta o lista
Ej:Obtener todas las filas de los productos que pertenezcan a las
categoras 1, 2, o 5
SELECT *
FROM Products
WHERE CategoryID IN (1,3,5)

ING. MARIA NINA


YUCRA 27
Consultas de una Tabla - Condiciones WHERE
Ej: Retornar las de los Productos que tengan un precio
comprendido entre 20-40
SELECT *
FROM Products
WHERE UnitPrice>=20 AND UnitPrice<=40
BETWEEN Se lo utiliza cuando se quiere especificar el intervalo
inclusivo que se va probar
Ej: Retornar las de los Productos que tengan un precio
comprendido entre 20-40
SELECT *
FROM Products
WHERE UnitPrice BETWEEN 20 AND 40
Ej: Retorna todos las filas de los pedidos que tengan un fecha de
pedido 01-05-97 al 31-05-98
SELECT *
FROM Orders
WHERE OrderDate BETWEEN '01-05-97' AND '31-05-98'
ING. MARIA NINA
YUCRA
28
Consultas de una Tabla - Condiciones WHERE
Ej: Retornar las filas de los productos que tengan los
caracteres ueso en las columna nombre de Producto
SELECT *
FROM Products
WHERE ProductName LIKE '%ueso%
Ej: Retornar las filas de todos los empleados que en su apellido
la segunda letra sea una a.
SELECT *
FROM Employees
WHERE LastName LIKE '_[a]%'
Ej: Retornar las filas de todos los empleados que en su apellido
la segunda letra no sea una a.
SELECT *
FROM Employees
WHERE LastName LIKE '_[^a]%'

ING. MARIA NINA


YUCRA
29
Consultas de una Tabla - Condiciones
Ej: Retorna la categora, promedio de precios y numero de articulos por categoria
SELECT CategoryID AS [Categoria], AVG(UnitPrice) AS [Promedio de los
Precios], SUM ([UnitsInStock]) AS [Cantidad x Categoria]
FROM Products
GROUP BY CategoryID
HAVING Especifica una condicion de busqueda en un
grupo agregado. Nomalmente se lo utiliza con GROUP
BY. Cuando no se lo utiliza con GROUP BY se comporta
como la clausula WHERE
Ej: Retorna las filas de los empleados que tengan mas de 100 pedidos atendidos
SELECT EmployeeID, COUNT(OrderID) AS NroPedidos
FROM Orders
GROUP BY EmployeeID
HAVING COUNT (OrderID)>100
ORDER BY EmployeeID
ING. MARIA NINA
YUCRA
30
Consultas Funciones de agregado
Permiten resumir el resultado de una consulta:
SUM( ) total de la columna especificada
AVG( ) promedio de la columna especificada Se aplican a
columnas de
MAX( ) valor mximo de la columna especificada tipo
MIN ( ) valor mnimo de la columna especificada numrico
COUNT ( ) cantidad de tuplas
Indicar la cantidad de proyectos sobre el tema Base de Datos.
SELECT COUNT(*) AS [Nro de proyectos]
FROM Proyecto
WHERE (((Proyecto.TemaProy)='Base de datos'))
Indicar duracin mnima y mxima de los proyectos de la
empresa con cdigo 501
SELECT MIN (DuracionProy) AS [Duracion Minima],
MAX(DuracionProy) AS [Duracion maxima]
FROM Proyecto
WHERE CodEmpresa=501 ING. MARIA NINA
YUCRA 31
BASE DE DATOS EJEMPLO
CentroProyectos

ING. MARIA NINA


YUCRA 32
Consultas de una Tabla
BD PROYECTOS Ejemplos:
Listar todos los datos de las Empresas
SELECT *
FROM Empresa

Listar los Cdigos y Nombres de los proyectos


SELECT CodProy, NombreProy
FROM Proyecto

ING. MARIA NINA


YUCRA 33
Consultas de una tabla - Distinct
No se eliminan filas repetidas, a menos que se
indique explcitamente con DISTINCT

Ejemplos:
Listar los temas de los proyectos
SELECT Tema
FROM PROYECTO

Listar los temas de los proyectos


SELECT DISTINCT Tema
FROM PROYECTO

ING. MARIA NINA


YUCRA 34
Consultas de una tabla - Condiciones
Listar los nombres de los proyectos de ms de 12
meses.
SELECT NombreProy
FROM Proyecto
WHERE DuracionProy>12

Listar los nombres de los proyectos de ms de 12


meses de duracin cuyo tema comience con Bases
SELECT NombreProy
FROM Proyecto
WHERE DuracionProy>12 AND TemaProy LIKE
'Base*'
ING. MARIA NINA
YUCRA 35
Consultas de una tabla
Listar el cdigo y nombre de los proyectos de 2
aos de duracin, ordenados por nombre
SELECT CodProy, NombreProy
FROM Proyecto
WHERE DuracionProy=24
ORDER BY NombreProy

Listar los datos completos de los proyectos,


ordenados por duracin y cdigo de empresa
SELECT *
FROM Proyecto
ORDER BY DuracionProy, CodProy

ING. MARIA NINA


YUCRA 36
CONSULTAS A VARIAS TABLAS
PRODUCTO CARTESIANO
El producto cartesiano de dos relaciones R1 y R2, de
cardinalidades m1 y m2 respectivamente, es una relacin
definida sobre la unin de los atributos de ambas
relaciones y cuya extensin esta constituida por las m1 x
m2 tuplas formadas concatenando cada tupla de R1 con
cada una de las tuplas de R2.
Sintaxis: R1 x R2
En SQL
Relacin Resultante
Relacin R1 Relacin R2
a x SELECT *
a R1 x R2 a y
x FROM R1,R2
b y b x
c b y
c x
c yNINA
ING. MARIA
YUCRA
37
CONSULTAS A VARIAS TABLAS
PRODUCTO CARTESIANO

SOCIOS PRESTAMO
CODIGO NOMBRE DIRECCION LIBRO AUTOR LECTOR FECHA_PREST
1 Elena Manrquez Calle 123 DB Systems Date C.J. Elena Manrquez 11/03/07
2 Manuel Garca Calle 234 Basi di Dati Ceri S. Manuel Garca 25/03/07
3 Paloma Soria Calle 325
En SQL
SOCIOS x PRESTAMO
SELECT *
FROM Socio, Prestamo

CODIGO NOMBRE DIREC LIBRO AUTOR LECTOR FECHA_PREST


1 Elena Manrquez Calle 123 DB Systems Date C.J. Elena Manrquez 11/03/07
1 Elena Manrquez Calle 123 Basi di Dati Ceri S. Manuel Garca 25/03/07
2 Manuel Garca Calle 234 DB Systems Date C.J. Elena Manrquez 11/03/07
2 Manuel Garca Calle 234 Basi di Dati Ceri S. Manuel Garca 25/03/07
3 Paloma Soria Calle 325 DB Systems Date C.J. Elena Manrquez 11/03/07
3 Paloma Soria Calle 325 Basi di Dati Ceri S. Manuel Garca 25/03/0
ING. MARIA NINA
YUCRA
38
CONSULTAS A VARIAS TABLAS

COMBINACION ( )
La combinacin de dos relaciones respecto a
una cierta combinacin, es otra relacin constituida
por todos los y tj concatenadas, tales que, en cada par,
las correspondientes satisfacen la condicin especificada.
Tambin se llama JOIN o PRODUCTO THETA.
Se corresponde con un producto cartesiano seguido de
una seleccin

ING. MARIA NINA


YUCRA
39
ALGEBRA RELACIONAL OPERADORES DE
CONSULTAS A VARIAS TABLAS
PRODUCTO CARTESIANO
Consulta: Se desea un listado de los socios y su direccin
siempre y cuando tengan prestamos de libros
SOCIOS x PRESTAMO
CODIGO NOMBRE DIREC LIBRO AUTOR LECTOR FECHA_PREST
1 Elena Manrquez Calle 123 DB Systems Date C.J. Elena Manrquez 11/03/03
1 Elena Manrquez Calle 123 Basi di Dati Ceri S. Manuel Garca 25/03/03
2 Manuel Garca Calle 234 DB Systems Date C.J. Elena Manrquez 11/03/03
2 Manuel Garca Calle 234 Basi di Dati Ceri S. Manuel Garca 25/03/03
3 Paloma Soria Calle 325 DB Systems Date C.J. Elena Manrquez 11/03/03
3 Paloma Soria Calle 325 Basi di Dati Ceri S. Manuel Garca 25/03/03

Solucin: =
NOMBRE,DIRECCION (SOCIOS.NOMBRE=PRESTAMO.LECTOR (SOCIOxPRESTAMO))
NOMBRE DIRECCION
Elena Manriquez Calle 123 En SQL
Manuel Garca Calle 234
SELECT *
FROM Prestamo, Socio
WHERE (((Socio.Nombre)=[Prestamo].[Lector]));
ING. MARIA NINA
YUCRA
40
CONSULTAS A VARIAS TABLAS
COMBINACION ( )
AUTOR LIBRO
NOMBRE NACIONALIDAD INSTITUCION LIBRO AUTOR EDITORIAL
Date C.J. Norteamericana Relational Ins. DB Systems Date C.J. Addison
De Miguel Espaola FIM Basi di Dati Ceri S. Clup
Saltor F. Espaola FI de UPB SQL stan. Date C.J. Addison
Ceri S. Italiana Polit.Milan Diseo BD De Miguel Rama

AUTOR LIBROS (autor.nombre = libros.autor) En SQL

SELECT *
FROM Autor INNER JOIN Libro ON Autor.Nombre=Libro.Lector;

NOMBRE NACIONALIDAD INSTITUCION LIBRO EDITORIAL AUTOR


Date C.J. Norteamericana Relational Ins. DB Systems Addison Date C.J.
De Miguel Espaola FIM Diseo BD Rama De Miguel
Date C.J. Norteamericana Relational Ins. SQL stan Addison Date C.J.
Ceri S. Italiana Polit.Milan Basi di Dati Clup Ceri S.

=
ING. MARIA NINA
YUCRA
41
Consulta a varias tablas
Para muchas de las consultas que los usuarios realizan sobre los datos
almacenados en la base de datos es necesario extraer informacin de ms de
una tabla, para ello es necesario emplear los JOINS que representan una
operacin producir un conjunto de resultados que incorporen filas y columnas
de las tablas referidas en la consulta, esto lo hace basndose en columnas
comunes a las tablas.
Cuando se ejecutan los JOIN, SQL Server compara los valores de las
columnas especificadas fila por fila entonces usa los resultados de la
comparacin para combinar los valores que califican como nuevas filas.
SELECT <lista de columnas>
FROM <tabla o vista >
[INNER | LEFT|RIGHT|FULL [OUTER]] JOIN
<Tabla o Vista > ON <condicin>
La lista de columnas puede incluir campos de diferentes tablas.
JOIN especifica las tablas incolucradas en la consulta.
ON, establece la condicin de unin de las tablas, a travs de campos
comunes.

ING. MARIA NINA


YUCRA
42
Consulta a varias tablas
Cuando se implementa los JOIN, debe tener en cuenta las siguientes
consideraciones:
Especificar las condiciones del JOIN en base a Primary Key y a Foreign Key.
Si una tabla tiene un Primary Key compuesta, se debe referenciar a la clave entera
en la clusula ON del JOIN de tablas.
La palabra clave JOIN especifica qu tablas se van a combinar y cmo
La palabra clave ON especifica la condicin de combinacin
Las columnas comunes a las tablas deben ser del mismo tipo de dato.
Si dos o ms columnas de las diferentes tablas que participan en el JOIN, tienen el
mismo nombre, deber de calificar dichas columnas usando el formato
NombreTabla.Nombre.Columna.
Limitar en lo posible el nmero de tablas en un JOIN, a ms tablas, el SQL Server
se tomar ms tiempo para resolver la consulta.
TIPOS DE COMBINACIONES
COMBINACIONES INTERNAS INNER JOIN
COMBINACIONES EXTERNAS OUTER JOIN:
Externa Izquierda
Externa Derecha
Completa
COMBINACIONES CRUZADAS CROSS JOIN)
ING. MARIA NINA
YUCRA
43
Consulta a varias tablas Combinaciones Internas
COMBINACIONES INTERNAS INNER JOIN Usan un operador para
hacer coincidir las filas de dos tablas segn los valores de las columnas comunes
de cada tabla
Ej: Nombre de los proveedores y los productos que suministran
SELECT PV.CompanyName, P.ProductName
FROM Suppliers AS PV INNER JOIN Products AS P
ON PV.SupplierID=P.SupplierID
ORDER BY 1
Ej: Listar los Numeros de Pedidos, Fecha y los datos del cliente que hizo
el pedido
SELECT Orders.OrderID,Orders.OrderDate,Customers.*
FROM Orders INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID
ORDER BY Orders.CustomerID
Ej: Obtener el IdProducto, Nombre del Producto, Nombre de su Categoria a la que
pertenece y Nombre de la compania donde el Proveedor tiene el codigo igual a 1
SELECT Products.*,C.CategoryName,S.CompanyName
FROM Products INNER JOIN Categories AS C ON Products.ProductID=C.ProductID
INNER JOIN Suppliers AS S ON Products.SupplierID=S.SupplierID
WHERE Products.SupplierID=1

ING. MARIA NINA


YUCRA
44
Consulta a varias tablas Combinaciones Externas

La clusula LEFT OUTER JOIN permite observar todos los registros


de la tabla que se referencia a la izquierda en una consulta, completa
las filas con NULL en caso no exista un valor almacenado en la tabla
de la derecha.
Seleccionar todos los cdigos de cliente, nombre de la compaa, los
cdigos de los pedidos que realizo y la fecha de pedido. Incluyendo a
los que no tienen ningn pedido.
SELECT C.CustomerID,C.CompanyName,P.OrderID,P.OrderDate
FROM Customers AS C LEFT OUTER JOIN Orders AS P
ON P.CustomerID=C.CustomerID
ORDER BY P.CustomerID
Seleccionar a todos lo clientes que no tienen ningun pedido.
SELECT C.CustomerID,C.CompanyName,P.OrderID,P.OrderDate
FROM Customers AS C LEFT OUTER JOIN Orders AS P
ON P.CustomerID=C.CustomerID
WHERE P.CustomerID IS NULL

ING. MARIA NINA


YUCRA
45
Consulta a varias tablas Combinaciones Externas
La clusula RIGHT OUTER JOIN permite observar todos los registros de la
tabla que se referencia a la derecha en una consulta, completa las filas con
NULL en caso no exista un valor almacenado en la tabla de la izquierda.
(Adicionar tres registro a Shippers)
SELECT P.OrderId, CE.CompanyNAme
FROM Orders AS P RIGHT OUTER JOIN Shippers AS CE
ON P.ShipVia=ShipperID
ORDER BY 2
La clusula FULL OUTER JOIN muestra la combinacin de todos los
registros de la tabla de la izquierda con los registros de la tabla de la derecha.
SELECT C.CustomerID,C.CompanyName,P.OrderID
FROM Customers AS C FULL OUTER JOIN Orders AS P
ON C.CustomerID=P.CustomerID
ORDER BY 3
COMBINACIONES CRUZADAS (CROSS JOIN) Devuelven todas las filas de la
tabla izquierda y cada fila de la tabla izquierda se combina con todas las filas de la
tabla de la derecha. Se llaman productos cartesianos
SELECT P.OrderId, CE.CompanyName
FROM Orders AS P CROSS JOIN Shippers AS CE
ORDER BY 2
ING. MARIA NINA
YUCRA 46
Consultas de mas de una tabla
Listar los cdigos, nombre de los empleados junto
con el cdigo de la empresa para que realizaron el
proyecto

SELECT E.CodEmp, E.NombreEmp, P.CodEmpresa


FROM Empleado AS E, Trabaja AS T,
Proyecto AS P
WHERE P.CodProy=T.CodProy AND E.CodEmp=T.CodEmp

ING. MARIA NINA


YUCRA 47
Consultas de mas de una tabla
Listar los cdigos y nombre de los empleados que no
trabajan en proyectos de la empresa con cdigo 501

SELECT Empleado.CodEmp, Empleado.NombreEmp


FROM Proyecto INNER JOIN (Empleado INNER JOIN
Trabaja ON Empleado.CodEmp=Trabaja.CodEmp) ON
Proyecto.CodProy=Trabaja.CodProy WHERE
Proyecto.CodEmpresa<>501

SELECT E.CodEmp, E.NombreEmp FROM Empleado AS E,


Trabaja AS T, Proyecto AS P WHERE
P.CodProy=T.CodProy AND E.CodEmp=T.CodEmp AND
P.CodEmpresa <>501;

ING. MARIA NINA


YUCRA 48
Consultas de mas de una tabla
Listar los cdigos, nombre de los empleados junto
con el cdigo de la empresa para que realizaron el
proyecto

SELECT E.CodEmp, E.NombreEmp, P.CodEmpresa


FROM Empleado AS E, Trabaja AS T,
Proyecto AS P
WHERE P.CodProy=T.CodProy AND E.CodEmp=T.CodEmp

ING. MARIA NINA


YUCRA 49
Consultas de mas de una tabla
Obtener los nombres de los proyectos de la Empresa 2

SELECT NombreProy
FROM Empresa INNER JOIN Proyecto ON Empresa.CodEmpresa
= Proyecto.CodEmpresa
WHERE Empresa.NomEmpresa='Empresa 2

Mediante consultas anidadas:


SELECT NombreProy
FROM Proyecto
WHERE CodEmpresa
IN ( SELECT CodEmpresa
FROM Empresa WHERE NomEmpresa='Empresa 2)

ING. MARIA NINA


YUCRA 50
Consultas de mas de una tabla
Listar los cdigos y nombre de los empleados que no
trabajan en proyectos de la empresa con cdigo 501
SELECT Empleado.CodEmp, Empleado.NombreEmp
FROM Proyecto INNER JOIN (Empleado INNER
JOIN Trabaja ON
Empleado.CodEmp=Trabaja.CodEmp) ON
Proyecto.CodProy=Trabaja.CodProy WHERE
Proyecto.CodEmpresa<>501

SELECT E.CodEmp, E.NombreEmp FROM Empleado


AS E, Trabaja AS T, Proyecto AS P WHERE
P.CodProy=T.CodProy AND E.CodEmp=T.CodEmp
AND P.CodEmpresa <>501;

ING. MARIA NINA


YUCRA 51
Consultas Ejemplo
1. Listar los Cdigos y Nombres de los proyectos.
2. Listar todos los datos de las Empresas
3. Listar los temas de los proyectos
4. Listar los nombres de los proyectos de ms de 12 meses.
5. Listar los nombres de los proyectos de ms de 12 meses de duracin
cuyo tema comience con Bases
6. Indicar la cantidad de proyectos sobre el tema Base de Datos.
7. Indicar duracin mnima y mxima de los proyectos de la empresa
con cdigo 501
8. Listar el cdigo y nombre de los proyectos de 2 aos de duracin,
ordenados por nombre.
9. Listar los datos completos de los proyectos, ordenados por duracin
y cdigo de empresa
10. Obtener los nombres de los proyectos de la Empresa 2.
11. Listar los cdigos, nombre de los empleados junto con el cdigo de
la empresa para que realizaron el proyecto
12. Listar los cdigos y nombre de los empleados que no trabajan en
proyectos de la empresa con cdigo 501
ING. MARIA NINA
YUCRA 52
Consultas de mas de una tabla
Obtener los nombres de los proyectos de la Empresa 2
SELECT NombreProy
FROM Empresa INNER JOIN Proyecto ON Empresa.CodEmpresa =
Proyecto.CodEmpresa
WHERE Empresa.NomEmpresa='Empresa 2

Mediante consultas anidadas:


SELECT NombreProy
FROM Proyecto
WHERE CodEmpresa
IN ( SELECT CodEmpresa
FROM Empresa WHERE NomEmpresa='Empresa 2)

ING. MARIA NINA


YUCRA 53
Subconsultas
Se utilizan para dividir una consulta compleja en varios pasos lgicos o para
responder una consulta que depende de los resultados de otra consulta
Una subconsulta es una consulta SELECT que devuelve un valor nico y esta
anidada en una instruccin SELECT, INSERT, UPDATE o DELETE, o dentro de una
subconsulta. Una subconsulta se puede utilizar en cualquier parte en la que se
permita una expresin
Se utiliza combinaciones en lugar de subconsultas porque SQL Server ejecuta
combinaciones ms rpidas que la subconsultas.
Uso de una subconsulta como una tabla derivada
SELECT T.OrderId, T.CustomerId
FROM
(SELECT Orderid, CustomerId
FROM Orders ) AS T
Uso de una subconsulta como una expresin
Ej: Hallar la diferencia del precio unitario con respectos al precio promedio
SELECT ProductName,UnitPrice,
(SELECT AVG(UnitPrice) FROM Products) AS Promedio,
UnitPrice-(SELECT AVG (UnitPrice)FROM Products) AS Diferencia
FROM Products
Subconsultas
Uso de una subconsulta para correlacionar datos
Cuando crea una subconsulta correlacionada, las subconsultas internas se
evalan repetidamente, una vez por cada fila de la consulta externa:
SQL Server ejecuta la consulta interna por cada fila que selecciona la consulta
externa y compara los resultados de la subconsulta con los resultados externos
a ella.
Ej: Mostrar OrderId y CustomerId de los clientes que tengan un pedido del
producto 23 y que la cantidad de ese pedido sea mayor a 20
SELECT OrderId, CustomerId
FROM Orders AS O
WHERE 20 < (SELECT Quantity
FROM [Order Details] AS OD
WHERE O.OrderId = OD.OrderId
AND OD.ProductId = 23)
Subconsultas
Uso de IN, EXISTS y NOT EXISTS
Se usa con subconsultas correlacionadas para determinar si hay datos
en una lista de valores. El proceso de SQL Server consiste en:
La consulta externa prueba la existencia de las filas
La consulta interna devuelve TRUE o FALSE
No se produce ningn dato
Ej: Mostrar el apellido y el id de los empleados que atendieron
pedidos en fecha 5/09/1997
SELECT LastName, EmployeeId
FROM Employees AS E
WHERE EXISTS (SELECT * FROM Orders AS O
WHERE E.EmployeeId = O.EmployeeId
AND O.OrderDate = '5/9/1997')
Subconsultas - Ejercicios
1. Retornar las columnas Identificacin del pedido, fecha del pedido y el
mximo precio unitario de cada pedido
2. Todos los productos con precio unitario igual al mayor precio de los
artculos que son abastecidos por el proveedor con identificacin igual
a1
3. Mostrar nombre de la compaa, ciudad y pas de los clientes que
residen en el mismo pas de la empresa Antonio Moreno Taquera
4. Mostrar el Id de cliente y nombre de la compaa de todos los clientes
que han realizado al menos un pedido
5. Mostrar el Id de cliente y nombre de la compaa de todos los clientes
que no han realizado al menos un pedido
6. Mostrar los pedidos que adquirieron el producto tofu
7. Mostrar el id del empleado y el nombre completo de los empleados que
atendieron al cliente Antonio Moreno Taquera

Anda mungkin juga menyukai