Beruflich Dokumente
Kultur Dokumente
(en
La clausula join nos permite unir 2 tablas bajo un determinado criterio, nos sir
ve para juntar la informacion almacenada en los campos de una tabla con los de o
tra
un join se especifica en la seccion del from:
select Tabla1.Campo, Tabla2.Campo
from Tabla1 aliasTabla1 join tabla2 aliastabla2 on condicion
En la parte del select especificamos la tabla a la que pertenece el campo princi
palmete para evitar ambiguedades en el caso de que 2 tablas posean campos con el
mismo nombre (por ejemplo el campo nombre de la tabla proveedores y el campo no
mbre de la tabla productos), ademas de esta forma se da mas claridad a la consul
ta.
Los alias permiten cambiar, por asi decirlo, el nombre de una tabla en la consul
ta, Si se le pone un alias a una de las tablas, se tiene que dejar de usar el no
mbre de la tabla y forzosamente para esa tabla tenemos que usar el alias.
De acuerdo a la condicion del join podemos tener los siguientes tipos de join
EQUIJOIN, es cuando en la condicion se pide que se cumpla una igualdad, generalm
ente es de una llave primaria con una llave foranea.
select Tabla1.Campo, Tabla2.Campo
from Tabla1 join tabla2 on Tabla1.CampoLlavePrim=Tabla2.CampoLLaveForanea
NON EQUIJOINS, es cuando en la condicion no se pide una igualdad, una posibilida
d es cuando se compara un valor de una de las tablas con un rango establecido en
una de las otras
select Tabla1.Campo, Tabla2.Campo
from Tabla1 join tabla2 on
Tabla1.Dato>Tabla2.LimInf and Tabla1.Dato<Tabla2.LimSup
Si tabla1 y tabla2 son la misma tabla, entonces se dice que se esta haciendo un
SELF JOIN, en este caso en particular se hace obligatorio el uso del alias para
tablas:
El join solo muestra los registros que cumplen con la relacion establecida media
nte la condicion, todos los registros de ambas tablas que no puedan cumplir con
dicha condicion quedan fuera, por esta razon es que se conocen como INNER JOINS
o joins internos.
Debido a que es muy comun los casos en que necesitemos todos los registros de un
a de las dos tablas o incluso de las 2, existen los OUTER JOINS,que nos permiten
agregar estos registros, estos son:
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN
o simplemente:
LEFT JOIN
RIGHT JOIN
FULL JOIN
Estos en pocas palabras, si nos posicionamos en la palabra join, tenemos una tab
la a la izquierda y otra a la derecha, mediante LEFT o RIGHT indicamos de cual d
e las tablas queremos todos los registros, FULL nos permite obtener todos los re
gistros de ambas tablas.
select Tabla1.Campo, Tabla2.Campo
from TablaIzquierda left join tablaDerecha on condicion
ANIDAMIENTO DE JOINS
La instruccion completa de un join nos da como resultado una tabla que contiene
todos los campos de las tablas usadas, ese resultado puede ser usado como parame
tro para otro join, lo cual nos permite hacer cosas como:
select Tabla1.Campo, Tabla2.Campo, Tabla3.Campo
from (Tabla1 join Tabla2 on condicion1)
join Tabla3 on Condicion2
SUBCONSULTAS
En ciertas ocasiones para poder resolver una consulta necesitamos de un valor al
macenado en la base de datos. Una subconsulta nos permite hacer esto, literalmen
te es una consulta metida dentro de otra, la cual se ejecuta primero para obtene
r un resultado y este resultado se usa en la consulta exterior para llegar al re
sultado final.
Por lo tanto necesitamos una forma de garantizar en este caso,que el resultado d
e la consulta interna unicamente regrese un registro, para lograr ese objetivo e
n lugar de usar el nombre usamos el identificador de producto
En realidad todos los resultados de una consulta pueden ser considerados como ta
blas, pero de acuerdo a la cantidad de datos que regresa y el tipo de estos, pod
riamos clasificarlo de la siguiente forma:
TIPO 1.- Un unico dato de un tipo especifico, generado por consultas en las que
en la parte del select solo existe un campo y de algun modo se garantiza que sol
o se regresara un registro, ya sea que se condicione mediante el identificador o
usando la clausula limit, o funciones de agregado sobre toda la tabla, etc.
select nombre
From tblClientes
where IdCliente=1
TIPO 2.- Un conjunto de datos del mismo tipo. Generado por consultas que en la p
arte del select tienen un unico campo pero en el where se regresan 2 o mas regis
tros
select nombre
From tblClientes
TIPO 3.- Un conjunto de datos de tipo diferente pero que tienen una relacion ent
re si.
select nombre, FechalAlta, Credito
From tblClientes
where IdCliente=1
TIPO 4.- Una tabla con varios datos de tipo diferente.
select nombre, FechalAlta, Credito
From tblClientes
Lo cual nos lleva a las siguientes restriciones:
En la parte del select unicamente pueden ir subconsultas del tipo 1
En la parte del from, pueden ir consultas de cualquier tipo pero se les tiene qu
e poner un alias
En operaciones aritmeticas, solo pueden usar consultas del tipo 1
En condiciones mediante operadores comparativos, solo se pueden usar del tipo 1,
aunque nos podemos ayudar de los operadores IN, ALL y ANY para extender sus cap
acidades y poder usar consultas de los demas tipos
Where campo in (valor1, valor2, ...) pide que campo sea igual a cualquiera de lo
s valores
where campo > all(valor1, valor2, valor3,...) pide que campo sea mayor a todos l
os valores
where campo > any (valor1, valor2, valor3,...) pide que campor sea mayor a cualq
uiera de los valores
Podemos reemplazar esta lista de valores por una subconsulta
Where campo in (subconsulta) pide que campo sea igual a cualquiera de los valore
s
where campo > all(subconsulta) pide que campo sea mayor a todos los valores
where campo > any (subconsulta) pide que campo sea mayor a cualquiera de los val
ores
Estas subconsultas pueden ser de cualquier tipo
ORDENAMIENTO
El ordenamiento de los registros se hace mediante la clausula order by esta se p
one al final se la consulta
select campo1, campo2..
from tabla
where condicion
order by tituloColumna1 ASC/DESC, tituloColumna2 ASC/DESC...
TituloColumna es la col con la cual vamos a ordenar
Ejemplo
--Ordena los clientes por nombre en orden descendente
select nombre
from tblClientes
order by nombre
LIMITE DE REGISTROS
Se puede establecer un limite de registros a mostrar.Una vez establecido dicho l
imite, la consulta siempre regresara la cantidad de registros indicados.
select campo1, campo2
from tblClientes
where condicion
limit Cantidad, PosInicial
Donde Cantidad es el numero de registros que se desean y la posicion inicial a p
artir de que registro se va a obtener
TRATAMIENTO DE NULOS
Un valor nulo es un valor especial que indica que dicho valor es desconocido, es
diferente de un 0 y de una cadena vacia en el sentido de que cualquier operacio
n que involucre a un nulo va a dar como resultado nulo.
numero/0=0
concat ('texto1', '')='Texto1'
numero/NULO=NULO
concant('Texto1', NULO)=NULO
End
--Muestra a la delegacion gustavo A. Madero como GAM
SELECT nombre,
delegacion,
CASE delegacion
WHEN 'Gustavo A. Madero' THEN 'GAM'
ELSE delegacion
END
FROM tblClientes
Version 2.- Es una version mas general, ya que en cada caso se puede especificar
sobre cualquier campo y poner cualquier tipo de condicion
select case
when condicion1 then Resultado1
when condicion2 then Resultado2
...
else ResultadoDefault
end