Você está na página 1de 6

JOINS

La sentencia SQL JOIN permite consultar datos de 2 o ms tablas.


Dichas tablas estarn relacionadas entre ellas de alguna forma, a travs de alguna de sus columnas.
Existen 3 tipos de JOINS: JOIN interno, JOIN externo y JOIN cruzado.
Una clave primaria es una columna con un valor nico para cada registro de una tabla.
El propsito del JOIN es unir informacin de diferentes tablas, para no tener que repetir datos en
diferentes tablas.
Ejemplo:
Si tenemos las siguientes tablas
Tabla personas, con la clave primaria "per "

per

nombre

apellido1

apellido2

dep

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Tabla "departamentos", con la clave primaria "dep"

dep

departamento

ADMINISTRACION

INFORMATICA

COMERCIAL

Si queremos saber los nombres de las personas que trabajan en INFORMATICA, tendramos que hacer
un JOIN de las 2 tablas "personas" y "departamentos", que se relacionaran por la columna "dep".
Es decir, que desde la tabla "personas" y mediante la columna "dep", podemos acceder a la informacin
de la tabla "departamentos".
INNER JOIN
La sentencia INNER JOIN es el sentencia JOIN por defecto, y consiste en combinar cada fila de una
tabla con cada fila de la otra tabla, seleccionado aquellas filas que cumplan una determinada condicin.

SELECT * FROM tabla1 INNER JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1


Ejemplo SQL INNER JOIN
Tabla personas, con la clave primaria "per "

per

nombre

apellido1

apellido2

dep

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Tabla "departamentos", con la clave primaria "dep"

dep

departamento

ADMINISTRACION

INFORMATICA

COMERCIAL

SELECT nombre, apellido1, departamento FROM personas INNER JOIN departamentos WHERE
personas.dep = departamentos.dep

nombre

apellido1

departamento

ANTONIO

PEREZ

ADMINISTRACION

ANTONIO

GARCIA

INFORMATICA

PEDRO

RUIZ

INFORMATICA

LEFT

JOIN

La sentencia LEFT JOIN combina los valores de la primera tabla con los valores de la segunda tabla.
Siempre devolver las filas de la primera tabla, incluso aunque no cumplan la condicin.

SELECT
*
LEFT
JOIN
WHERE tabla1.columna1 = tabla2.columna1
Ejemplo de SQL LEFT JOIN
Tabla personas, con la clave primaria "per "

FROM

tabla1
tabla2

per

nombre

apellido1

apellido2

dep

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Tabla "departamentos", con la clave primaria "dep"

dep

Departamento

ADMINISTRACION

INFORMATICA

COMERCIAL

SELECT
nombre,
FROM
LEFT
JOIN
WHERE personas.dep = departamentos.dep

apellido1,

nombre

apellido1

departamento

ANTONIO

PEREZ

ADMINISTRACION

ANTONIO

GARCIA

INFORMATICA

PEDRO

RUIZ

departamento
personas
departamentos

Aunque el departamento '4' de PEDRO RUIZ no existe en la tabla de departamentos, devolver la fila
con esa columna 'departamento' en blanco.
RIGHT
JOIN
La sentencia RIGHT JOIN combina los valores de la primera tabla con los valores de la segunda tabla.
Siempre devolver las filas de la segunda tabla, incluso aunque no cumplan la condicin.
En algunas bases de datos, la sentencia RIGHT JOIN es igual a RIGHT OUTER JOIN

SELECT * FROM tabla1 RIGHT JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1


EJEMPLO SQL RIGHT JOIN

per

nombre

apellido1

apellido2

dep

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Tabla "departamentos", con la clave primaria "dep"

dep

departamento

ADMINISTRACION

INFORMATICA

COMERCIAL

SELECT
nombre,
FROM
RIGHT
JOIN
WHERE personas.dep = departamentos.dep

apellido1,

nombre

apellido1

departamento

ANTONIO

PEREZ

ADMINISTRACION

ANTONIO

GARCIA

INFORMATICA

departamento
personas
departamentos

COMERCIAL
Aunque no exista ninguna persona del departamento 'COMERCIAL' (3), esta fila aparecer con las otras
columnas en blanco
FULL
JOIN
La sentencia FULL JOIN combina los valores de la primera tabla con los valores de la segunda tabla.
Siempre devolver las filas de las dos tablas, aunque no cumplan la condicin.
La sentencia FULL JOIN es la unin de LEFT JOIN y RIGHT JOIN

SELECT * FROM tabla1 FULL JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1


EJEMPLO SQL FULL JOIN

Per

nombre

apellido1

apellido2

dep

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Tabla "departamentos", con la clave primaria "dep"

dep

departamento

ADMINISTRACION

INFORMATICA

COMERCIAL

SELECT
nombre,
FROM
FULL
JOIN
WHERE personas.dep = departamentos.dep

apellido1,

nombre

apellido1

departamento

ANTONIO

PEREZ

ADMINISTRACION

ANTONIO

GARCIA

INFORMATICA

PEDRO

RUIZ

COMERCIAL

departamento
personas
departamentos

UNION
La sentencia SQL UNION es utilizada para acumular los resultados de dos sentencias SELECT.
Las dos sentencias SELECT tienen que tener el mismo nmero de columnas, con el mismo tipo de dato y
en el mismo orden.
Sintaxis SQL UNION

SELECT
UNION

columna1,

columna2

FROM

tabla1

SELECT columna1, columna2 FROM tabla2


Ejemplo SQL UNION
Tabla "personas_empresa1"

per

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Tabla "personas_empresa2"

per

nombre

apellido1

apellido2

JUAN

APARICIO

TENS

ANTONIO

GARCIA

RODRIGUEZ

LUIS

LOPEZ

VAZQUEZ

SELECT
nombre,
apellido1
UNION
SELECT nombre, apellido1 FROM personas_empresa2

nombre

apellido1

ANTONIO

PEREZ

ANTONIO

GARCIA

PEDRO

RUIZ

JUAN

APARICIO

LUIS

LOPEZ

FROM

personas_empresa1

La persona 'ANTONIO GARCIA RODRIGUEZ' aparecer solo una vez en el resultado, porque no
aparecern las filas repetidas.

PROCEDIMIENTOS ALMACENADOS
Un procedimiento almacenado es un conjunto de instrucciones a las que se les da un nombre,
que se almacena en el servidor. Permiten encapsular tareas repetitivas.
SQL Server permite los siguientes tipos de procedimientos almacenados:
1) del sistema: estn almacenados en la base de datos "master" y llevan el prefijo "sp_";
permiten recuperar informacin de las tablas del sistema y pueden ejecutarse en cualquier base
de datos.
2) locales: los crea el usuario
3) temporales: pueden ser locales, cuyos nombres comienzan con un signo numeral (#), o
globales, cuyos nombres comienzan con 2 signos numeral (##). Los procedimientos
almacenados temporales locales estn disponibles en la sesin de un solo usuario y se eliminan
automticamente al finalizar la sesin; los globales estn disponibles en las sesiones de todos
los usuarios.
4) extendidos: se implementan como bibliotecas de vnculos dinmicos (DLL, Dynamic-Link
Libraries), se ejecutan fuera del entorno de SQL Server. Generalmente llevan el prefijo "xp_".
No los estudiaremos.
Al crear un procedimiento almacenado, las instrucciones que contiene se analizan para verificar
si son correctas sintcticamente. Si no se detectan errores, SQL Server guarda el nombre del

procedimiento almacenado en la tabla del sistema "sysobjects" y su contenido en la tabla del


sistema "syscomments" en la base de datos activa. Si se encuentra algn error, no se crea.
Un procedimiento almacenado puede hacer referencia a objetos que no existen al momento de
crearlo. Los objetos deben existir cuando se ejecute el procedimiento almacenado.
Ventajas:
- comparten la lgica de la aplicacin con las otras aplicaciones, con lo cual el acceso y las
modificaciones de los datos se hacen en un solo sitio.
- permiten realizar todas las operaciones que los usuarios necesitan evitando que tengan acceso
directo a las tablas.
- reducen el trfico de red; en vez de enviar muchas instrucciones, los usuarios realizan
operaciones enviando una nica instruccin, lo cual disminuye el nmero de solicitudes entre el
cliente y el servidor.
Para crear un procedimiento almacenado empleamos la instruccin "create procedure".
La sintaxis bsica parcial es:
create procedure NOMBREPROCEDIMIENTO
as INSTRUCCIONES;
Para diferenciar los procedimientos almacenados del sistema de los procedimientos
almacenados locales use un prefijo diferente a "sp_" cuando le de el nombre.
Con las siguientes instrucciones creamos un procedimiento almacenado llamado
"pa_libros_limite_stock" que muestra todos los libros de los cuales hay menos de 10
disponibles:
create proc pa_libros_limite_stock
as
select *from libros
where cantidad <=10;
Entonces, creamos un procedimiento almacenado colocando "create procedure" (o "create
proc", que es la forma abreviada), luego el nombre del procedimiento y seguido de "as" las
sentencias que definen el procedimiento.
"create procedure" debe ser la primera sentencia de un lote.
Para ejecutar el procedimiento almacenado creado anteriormente tipeamos:
exec pa_libros_limite_stock;
Entonces, para ejecutar un procedimiento almacenado colocamos "execute" (o "exec") seguido
del nombre del procedimiento.
Cuando realizamos un ejercicio nuevo, siempre realizamos las mismas tareas: eliminamos la
tabla si existe, la creamos y luego ingresamos algunos registros. Podemos crear un
procedimiento almacenado que contenga todas estas instrucciones:
create procedure pa_crear_libros
as
if object_id('libros')is not null

drop table libros;


create table libros(
codigo int identity,
titulo varchar(40),
autor varchar(30),
editorial varchar(20),
precio decimal(5,2),
primary key(codigo)
);
insert into libros values('Uno','Richard Bach','Planeta',15);
insert into libros values('Ilusiones','Richard Bach','Planeta',18);
insert into libros values('El aleph','Borges','Emece',25);
insert into libros values('Aprenda PHP','Mario Molina','Nuevo siglo',45);
insert into libros values('Matematica estas ahi','Paenza','Nuevo siglo',12);
insert into libros values('Java en 10 minutos','Mario Molina','Paidos',35);
Y luego lo ejecutamos cada vez que comenzamos un nuevo ejercicio y as evitamos tipear tantas
sentencias:
exec pa_crear_libros;

Você também pode gostar