8/20/2019 Base de datos SQL Cap5-8
1/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--11 SQL Server Básico
Desplegando datos deDesplegando datos de
múltiples tablasmúltiples tablas
Parte 5Parte 5
Parte 5 SQL-Server Básico
Página 1 de 27
8/20/2019 Base de datos SQL Cap5-8
2/27
8/20/2019 Base de datos SQL Cap5-8
3/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--33 SQL Server Básico
EMPNO DEPTNO LOC----- ------- --------7839 10 NEW YORK 7698 30 CHICAGO7782 10 NEW YORK 7566 20 DALLAS7654 30 CHICAGO7499 30 CHICAGO...14 rows selected.
EMPNO DEPTNO LOC----- ------- --------7839 10 NEW YORK 7698 30 CHICAGO7782 10 NEW YORK 7566 20 DALLAS7654 30 CHICAGO7499 30 CHICAGO
...
14 rows selected.
EMPEMP DEPTDEPT
EMPNO ENAME ... DEPTNO
------ ----- ... ------
7839 KING ... 10
7698 BLAKE ... 30
...
7934 MILLER ... 10
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
Obteniendo Datos de Múltiples TablasObteniendo Datos de Múltiples Tablas
Obteniendo Datos de Múltiples Tablas
En algunas ocasiones necesitara utilizar datos que están en más de una tabla.En el ejemplo, el reporte muestra datos de tablas separadas.
• EMPNO existe en la tabla EMP• DEPTNO existe en la tabla EMP y en DEPT
• LOC existe en la tabla DEPT
La consulta se puede leer como “Obtenemos los nombres del empleado, eldepartamento y su localización”
Para producir el reporte, se necesitan enlazar las tablas EMP y DEPT y accederlos datos en ambas tablas.
Parte 5 SQL-Server Básico
Página 3 de 27
8/20/2019 Base de datos SQL Cap5-8
4/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--44 SQL Server Básico
¿Qué es un¿Qué es un JoinJoin??
Utilice unUtilice un join join para consultar datos en más de unapara consultar datos en más de unatabla.tabla.
Escriba la condiciónEscriba la condición-- join join en la cláusula FROMen la cláusula FROMutilizando ON.utilizando ON.
Incluya el nombre de la tabla como prefijo delIncluya el nombre de la tabla como prefijo del
nombre de la columna, cuando el nombre de lanombre de la columna, cuando el nombre de lacolumna aparezca en dos o más tablas.columna aparezca en dos o más tablas.
SELECT table1.column, table2.column
FROM table1 INNER JOIN table2
ON table1.column1 = table2.column2 ;
SELECT table1.column, table2.column
FROM table1 INNER JOIN table2
ON table1.column1 = table2.column2 ;
Definición de Join
Cuando se requieren datos que están en más de una tabla , se requiere utilizaruna condicion –join. Los renglones de una tabla pueden ser “unidos” (joined) alos de otra Tabla, solo si existen en ambas tablas un atributo que sea comúnentre ellas, normalmente , una relación de la llave primaria y la llave foránea .
Para desplegar datos de dos o más tablas que están relacionadas escriba unasimple condición/join en la clausula FROM,
Sintaxis
table.colum
Denota la tabla y la columna donde los datos serán recuperados.
table.colum 1 = table 2.column2
es la condición de “junta” relaciona (join) las tablas.
• Cuando escriba una consulta que relacione dos tablas preceda cadacolumna con el nombre de su respectiva tabla por claridad y mejoramientodel acceso a la base de datos.
Parte 5 SQL-Server Básico
Página 4 de 27
8/20/2019 Base de datos SQL Cap5-8
5/27
• Si el mismo nombre de la columna aparece en más de una tabla el nombrede la columna debe ser precedido por el nombre de la tabla.
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--55 SQL Server Básico
Implementando unImplementando un JoinJoin tradicionaltradicional
Puede crear unPuede crear un JoinJoin utilizando lautilizando la condicióncondición- - join join en laen lacláusula WHERE.cláusula WHERE.
Esta es la sintaxis general para crear unEsta es la sintaxis general para crear unJoinJoin..
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2 ;
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2 ;
Definición de Join(continuación) Algunos manejadores de bases de datos no incluyen en su sintaxis las palabrasINNER JOIN, JOIN, LEFT OUTER JOIN, etc. Que pueden ser utilizadasdirectamente en la cláusula FROM junto con el indicador ON condición-join.
Por lo que el método tradicional para hacer un join es colocar las tablas afectadasen la cláusula FROM separads por comas, y la condición-join colocarla en lacláusula WHERE.
Estas dos formas de crear Joins genera exactamente el mismo resultado, solo queel método anterior( colocando la palabra join en la cláusula FROM) permite mayorcomodidad y claridad para otras condiciones adicionales que afecten el resultadode la consulta.
Parte 5 SQL-Server Básico
Página 5 de 27
8/20/2019 Base de datos SQL Cap5-8
6/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--66 SQL Server Básico
Producto CartesianoProducto Cartesiano
a
b
c
x
y
a
a
b
b
c
c
x
y
x
y
x
y
× =
A B
A x B
Producto Cartesiano
En matemáticas, el producto cartesiano de dos conjuntos; es el conjuto de todos
los pares ordenados de elementos tales que el primer elemento de cada parpertenece a A y el segundo elemento de cada par pertenece a B.
Parte 5 SQL-Server Básico
Página 6 de 27
8/20/2019 Base de datos SQL Cap5-8
7/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--77 SQL Server Básico
Producto CartesianoProducto Cartesiano
Un Producto Cartesiano es formadoUn Producto Cartesiano es formado
cuando:cuando:
Una condiciónUna condición-- join join es omitidaes omitida
Una condiciónUna condición-- join join es inválidaes inválida
Todos los registros de la primer tabla seTodos los registros de la primer tabla se
unen con todos los registros de launen con todos los registros de la
segunda tabla.segunda tabla.
Para evitar un Producto Cartesiano,Para evitar un Producto Cartesiano,
incluya siempre condiciónincluya siempre condición-- join join válida enválida enla cláusula WHERE.la cláusula WHERE.
Producto cartesiano
Cuando una condición-join es valida o se omite, el resultado es un producto
cartesiano en el que se combinan cada uno de los renglones de la tabla 1 con losde la tabla 2, hasta terminar el último registro de la tabla 1, con todos los de latabla 2
Un producto cartesiano tiende a generar un gran número de renglones (multiplicarla cardinalidad de la tabla 1 por la cardinalidad de la tabla 2, y se obtiene lacardinalidad del producto cartesiano).
Cardinalidad: en el modelo relacional, es un número de renglones de una tabla
Parte 5 SQL-Server Básico
Página 7 de 27
8/20/2019 Base de datos SQL Cap5-8
8/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--88 SQL Server Básico
Generando un Producto CartesianoGenerando un Producto Cartesiano
ENAME DNAME
------ ----------
KING
ACCOUNTING
BLAKE
ACCOUNTING
...
KING RESEARCH
BLAKE RESEARCH...
(56 row(s) afected)
ENAME DNAME
------ ----------
KING
ACCOUNTING
BLAKE
ACCOUNTING
...
KING RESEARCH
BLAKE RESEARCH...
(56 row(s) afected)
EMP (14EMP (14 rowsrows)) DEPT (4DEPT (4 rowsrows))EMPNO ENAME ... DEPTNO
------ ----- ... ------
7839 KING ... 10
7698 BLAKE ... 30
...
7934 MILLER ... 10
EMPNO ENAME ... DEPTNO
------ ----- ... ------
7839 KING ... 10
7698 BLAKE ... 30
...
7934 MILLER ... 10
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
“Producto“Producto
Cartesiano:Cartesiano:
14*4=5614*4=56 rengreng.”.”
Producto Cartesiano
En el ejemplo se muestran el nombre de los empleados y el de los departamentosde las tablas EMP y DEPT. Debido a que no se indicó condición en la cláusula
WHERE, todos los renglones (14) de la tabla EMP son unidos (joined) a losrenglones (4) de la tabla DEPT, el resultado es una tabla con 56 renglones.
SELECT ename, dnameFROM emp, dep;
ENAME DNAME
--------------------- -----------------------KING ACCOUNTING
BLAKE ACCOUNTING………
KING RESEARCH
BLAKE RESEARCH….
56 rows selected.
Parte 5 SQL-Server Básico
Página 8 de 27
8/20/2019 Base de datos SQL Cap5-8
9/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--99 SQL Server Básico
Tipos deTipos de JoinsJoins
Equijoin Non-equijoin Outer join Self join
Tipos de joinsExisten dos tipos principales de condició-join.
• Equijoins (inner join)
• Non-equijoins
Existen joins adicionales:
• Outer joins (left right join)
• Self joins
Parte 5 SQL-Server Básico
Página 9 de 27
8/20/2019 Base de datos SQL Cap5-8
10/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--1010 SQL Server Básico
¿Qué es un¿Qué es un EquijoinEquijoin??
EMPEMP DEPTDEPT
EMPNO ENAME DEPTNO
------ ------- -------
7839 KING 10
7698 BLAKE 30
7782 CLARK 10
7566 JONES 20
7654 MARTIN 30
7499 ALLEN 30
7844 TURNER 30
7900 JAMES 30
7521 WARD 30
7902 FORD 207369 SMITH 20
...
14 rows selected.
DEPTNO DNAME LOC
------- ---------- --------
10 ACCOUNTING NEW YORK
30 SALES CHICAGO
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
30 SALES CHICAGO
30 SALES CHICAGO
30 SALES CHICAGO
30 SALES CHICAGO
20 RESEARCH DALLAS20 RESEARCH DALLAS
...
14 rows selected.
PrimaryPrimary keykeyForeignForeign keykey
Equijoins
Para determinar el nombre de los departamentos a los que pertenece cadaempleado, necesita comparar el valor en la columna DEPTNO de la tabla EMPcon los valores de DEPTNO en la tabla DEPT. La relación entre las tablas EMP yDEPT son conocidas como un equijoin, es decir, los valores de las columnasDEPTNO en ambas tablas deben coincidir.
Nota: Los equijoins son también llamados simplemente joins o inner joins.
Parte 5 SQL-Server Básico
Página 10 de 27
8/20/2019 Base de datos SQL Cap5-8
11/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--1111 SQL Server Básico
Recuperando RenglonesRecuperando Renglones
concon EquijoinsEquijoins ((inner inner ))
SELECT emp.empno, emp.ename, emp.deptno,
dept.deptno, dept.loc
FROM emp INNER JOIN dept
ON emp.deptno=dept.deptno;
empno ename deptno deptno loc
------ ---------- ------ ------ -------------
7369 SMITH 20 20 DALLAS
7499 ALLEN 30 30 CHICAGO7521 WARD 30 30 CHICAGO
7566 JONES 20 20 DALLAS
.....
14 rows selected.
Recuperando Renglones con Equijoins
En el ejemplo:
• La cláusula SELECT especifica las columnas a recuperar:
- número y nombre del empleado y número del departamento al que se estáasignando tal empleado, tomados de la tabla EMP
- número de departamento y localización que son columnas de la tablaDEPT
• La cláusula FROM especifica las tablas que deberán ser accedidas y el
tipo de join que se efectuará entre ellas (INNER JOIN):
- Tabla DEPT- Tabla EMP- En la cláusula ON se especifica la condición join:
emp.deptno=dep.deptno;
Parte 5 SQL-Server Básico
Página 11 de 27
8/20/2019 Base de datos SQL Cap5-8
12/27
Como la columna DEPTNO es común en ambas tablas de ser calificado con elnombre de la tabla respectiva.
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--1212 SQL Server Básico
Recuperando RenglonesRecuperando Renglones
concon EquijoinsEquijoins
SELECT emp.empno, emp.ename, emp.deptno,
dept.deptno, dept.loc
FROM emp , dept
WHERE emp.deptno=dept.deptno;
empno ename deptno deptno loc
------ ---------- ------ ------ -------------
7369 SMITH 20 20 DALLAS7499 ALLEN 30 30 CHICAGO
7521 WARD 30 30 CHICAGO
7566 JONES 20 20 DALLAS
.....
14 rows selected.
Recuperando Renglones con Equijoins (continuación)
En el ejemplo:
• La cláusula FROM especifica las tablas que deberán ser acezadas sinespecificar el tipo de join que se efectuara entre ellas:
o Tabla DEPTo Tabla EMP
• La cláusula WHERE especifica como las tablas realizarán el join en estecaso es un equi-join:
emp.deptno= dep.deptno;
Parte 5 SQL-Server Básico
Página 12 de 27
8/20/2019 Base de datos SQL Cap5-8
13/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--1313 SQL Server Básico
Calificando Columnas RepetidasCalificando Columnas Repetidas
Utilice el nombre de la tabla como prefijoUtilice el nombre de la tabla como prefijo
para calificar los nombres de columnapara calificar los nombres de columna
que están en múltiples tablas.que están en múltiples tablas.
Mejore el rendimiento utilizando prefijosMejore el rendimiento utilizando prefijos
de tabla.de tabla.
Diferencie las columnas que tienenDiferencie las columnas que tienen
nombres idénticos pero se encuentran ennombres idénticos pero se encuentran en
diferentes tablas utilizando alias.diferentes tablas utilizando alias.
Parte 5 SQL-Server Básico
Página 13 de 27
8/20/2019 Base de datos SQL Cap5-8
14/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--1414 SQL Server Básico
Utilizando condiciones adicionalesUtilizando condiciones adicionales
EMPEMP DEPTDEPT
EMPNO ENAME DEPTNO
------ ------- -------
7839 KING 10
7698 BLAKE 30
7782 CLARK 10
7566 JONES 20
7654 MARTIN 307499 ALLEN 30
7844 TURNER 30
7900 JAMES 30
7521 WARD 30
7902 FORD 20
7369 SMITH 20
...
DEPTNO DNAME LOC
------ --------- --------
10 ACCOUNTING NEW YORK
30 SALES CHICAGO
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO30 SALES CHICAGO
30 SALES CHICAGO
30 SALES CHICAGO
30 SALES CHICAGO
20 RESEARCH DALLAS
20 RESEARCH DALLAS
...
Condiciones adicionales
Además del join, puede indicar otros criterios de búsqueda en la cláusula WHERE.Por ejemplo, mostrar el número, el nombre, el numero de departamento, y lalocalización del departamento del empleado KING.
SELECT empno, ename, emp.deptno, locFROM emp INNER JOIN dept
ON emp.deptno = dept.deptnoWHERE ename = ‘KING’;
empno ename deptno loc-------------------- ---------- ------ -------------
7839 KING 10 NEW YORK
O bien la forma tradicional :
Parte 5 SQL-Server Básico
Página 14 de 27
SELECT empno, ename, emp.deptno, locFROM emp, dept
WHERE emp.deptno = dept.deptno AND
Ename = ‘KING’;
8/20/2019 Base de datos SQL Cap5-8
15/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--1515 SQL Server Básico
Usando Alias en TablasUsando Alias en Tablas
Simplifique losSimplifique los querysquerys utilizando alias en tablas.utilizando alias en tablas.
SELECT emp.empno, emp.ename, emp.deptno,
dept.deptno, dept.loc
FROM emp INNER JOIN dept
ON emp.deptno=dept.deptno;
SELECT e.empno, e.ename, e.deptno,
d.deptno, d.loc
FROM emp e INNER JOIN dept d
ON e.deptno=d.deptno;
Usando alias en tabla
Calificar las columnas con los nombres de las tablas puede consumir tiempo,sobre todo cuando las tablas tienen nombres largos. Puede utilizar alias para re-nombrar las tablas.
En el ejemplo la tabla EMP toma el nombre de E, y la tabla DEPT el nombre D.
Parte 5 SQL-Server Básico
Página 15 de 27
8/20/2019 Base de datos SQL Cap5-8
16/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--1616 SQL Server Básico
Reuniendo más de dos TablasReuniendo más de dos Tablas
NAME CUSTID
----------- ------
JOCKSPORTS 100
TKB SPORT SHOP 101
VOLLYRITE 102
JUST TENNIS 103
K+T SPORTS 105
SHAPE UP 106
WOMENS SPORTS 107
... ...
9 rows selected.
NAME CUSTID
----------- ------
JOCKSPORTS 100
TKB SPORT SHOP 101
VOLLYRITE 102
JUST TENNIS 103
K+T SPORTS 105SHAPE UP 106
WOMENS SPORTS 107
... ...
9 rows selected.
CUSTOMERCUSTOMER
CUSTID ORDID
------- -------
101 610
102 611
104 612
106 601
102 602
106 604
106 605
...
21 rows selected.
CUSTID ORDID
------- -------
101 610
102 611
104 612
106 601
102 602106 604
106 605
...
21 rows selected.
ORDORD
ORDID ITEMID
------ -------
610 3
611 1
612 1
601 1
602 1
...
64 rows selected.
ORDID ITEMID
------ -------
610 3
611 1
612 1
601 1
602 1
...
64 rows selected.
ITEMITEM
Condiciones de búsqueda adicionales
En ocasiones necesitara hacer join con mas de dos tablas. Por ejemplo, paramostrar el nombre, las ordenes y los ítems, el total de cada orden para el clienteTKB SPORT SHOP, necesitara reunir las tablas CUSTUMER; ORD y ITEM.
SELECT c.name, o.ordid, i.itemid, i.itemtot, o.totalFROM customer c JOIN ord o ON c.custid = o.custid
JOIN item i ON o.ordid = i.ordid
WHERE c.name = 'TKB SPORT SHOP';
name ordid itemid itemtot total--------------------------------------------- ------ ------ ---------- --------------------TKB SPORT SHOP 610 3 58.00 101TKB SPORT SHOP 610 1 35.00 101TKB SPORT SHOP 610 2 8.40 101
3 filas afectadas
Parte 5 SQL-Server Básico
Página 16 de 27
8/20/2019 Base de datos SQL Cap5-8
17/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--1717 SQL Server Básico
NonNon--EquijoinsEquijoins
EMPEMP SALGRADESALGRADE
“salario en la tabla EMP“salario en la tabla EMP
se encuentre entrese encuentre entre
low low salary salary y y highhigh
salarysalary en laen la tabletable
SALGRADE”SALGRADE”
EMPNO ENAME SAL
------ ------- ------
7839 KING 5000
7698 BLAKE 2850
7782 CLARK 2450
7566 JONES 2975
7654 MARTIN 1250
7499 ALLEN 1600
7844 TURNER 1500
7900 JAMES 950
...
14 rows selected.
GRADE LOSAL HISAL
----- ----- ------
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
SELECT c.name, o.ordid, i.itemid, i.itemtot, o.totalFROM customer c ,ord o , item i
WHERE c.custid = o.custid
AND o.ordid = i.ordid
AND c.name = 'TKB SPORT SHOP';
Non-equijoins
La relación entre las tablas EMP y SALGRADE son un Non-Equijoins, es decir,que ninguna columna de la tabla EMP corresponde directamente a una columnaen la tabla SALGRADE
La relación entre estas dos tablas es por columna LOSAL y HISAL de la tablaSALGRADE. La relación se obtiene utilizando otro operador diferente de (=)
Parte 5 SQL-Server Básico
Página 17 de 27
8/20/2019 Base de datos SQL Cap5-8
18/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--1818 SQL Server Básico
Recuperar RegistrosRecuperar Registros
con Noncon Non--EquijoinsEquijoins
ENAME SAL GRADE---------- --------- ---------
JAMES 950 1
SMITH 800 1
ADAMS 1100 1
...
14 rows selected.
SELECT e.ename, e.sal, s.grade
FROM emp e JOIN salgrade s
ON e.sal BETWEEN s.losal AND s.hisal;
Recuperar registros con non-equijoins
El ejemplo crea un non-equijoin para evaluar que grado tiene el salario de cadaempleado: Este salario debe estar entre cualquier rango de lowsal y hisal de latabla SALGRADE.
Puede utilizar el método tradicional.
SELECT e.ename, e.sal, s.grade
FROM emp e, salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal
Parte 5 SQL-Server Básico
Página 18 de 27
8/20/2019 Base de datos SQL Cap5-8
19/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--1919 SQL Server Básico
Outer Outer JoinsJoins (LEFT | RIGHT)(LEFT | RIGHT)
EMPEMP DEPTDEPT
No existen empleados en elNo existen empleados en el
departamento OPERATIONSdepartamento OPERATIONS
ENAME DEPTNO
----- ------
KING 10
BLAKE 30
CLARK 10
JONES 20
...
DEPTNO DNAME
------ ----------
10 ACCOUNTING
30 SALES
10 ACCOUNTING
20 RESEARCH
...
40 OPERATIONS
Outer Joins (LEFT | RIGHT)
Si los renglones no satisfacen la condición join, el renglón no aparecerá en elresultado del query, por ejemplo, en el equi-join de EMP y DEP, el departamentoOPERATIONS no aparece debido a que ningún empleado trabaja en esedepartamento.
SELECT e.ename, e.deptno, d.nameFROM emp e JOIN dept d
ON e.deptno = d.deptno
Parte 5 SQL-Server Básico
Página 19 de 27
ename deptno dname
---------- ------ --------------
KING 10 ACCOUNTING
BLAKE 30 SALESCLARK 10 ACCOUNTING
JONES 20 RESEARCH
MARTIN 30 SALESALLEN 30 SALES
TURNER 30 SALES
……..14 rows selected
8/20/2019 Base de datos SQL Cap5-8
20/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--2020 SQL Server Básico
Outer Outer JoinsJoins
Puede utilizar unPuede utilizar un outer outer join join para ver tambiénpara ver también
aquellos renglones que normalmente noaquellos renglones que normalmente no
cumplen la condicióncumplen la condición-- join join..
Outer Outer join join puede ser por la izquierda (LEFT) opuede ser por la izquierda (LEFT) o
por la derecha (RIGHT).por la derecha (RIGHT).
SELECT table.column, table.column
FROM table1 LEFT OUTER JOIN table2
ON table1.column = table2.column;
SELECT table.column, table.column
FROM table1 LEFT OUTER JOIN table2
ON table1.column = table2.column;
SELECT table.column, table.column
FROM table1 RIGHT OUTER JOIN table2
ON table1.column = table2.column;
Outer Joins
Los renglones que no cumplen la condición pueden ser mostrados dependiendode que lado se encuentren.
Utilice LEFT ó RIGHT dependiendo de que lado se encuentran los renglones quedesee aparezcan aún cuando no cumpla la condición-join.
Parte 5 SQL-Server Básico
Página 20 de 27
8/20/2019 Base de datos SQL Cap5-8
21/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--2121 SQL Server Básico
UtilizandoUtilizando Outer Outer JoinsJoins
SELECT e.ename, d.deptno, d.dname
FROM emp e RIGHT OUTER JOIN dept d
ON e.deptno = d.deptno
ORDER By d.deptno;
ENAME DEPTNO DNAME
---------- --------- -------------KING 10 ACCOUNTING
CLARK 10 ACCOUNTING
...
40 OPERATIONS
15 rows selected.
Utilizando Outer Joins
Coloque la palabra LEFT o RIGHT del lado que desee mostrar los renglones condiferencia de información.
Parte 5 SQL-Server Básico
Página 21 de 27
8/20/2019 Base de datos SQL Cap5-8
22/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--2222 SQL Server Básico
Self Self JoinsJoins
EMP (WORKER)EMP (WORKER) EMP (MANAGER)EMP (MANAGER)
"MGR en la tabla WORKER es igual a EMPNO"MGR en la tabla WORKER es igual a EMPNO
en la tabla MANAGER "en la tabla MANAGER "
EMPNO ENAME MGR
----- ------ ----
7839 KING
7698 BLAKE 7839
7782 CLARK 7839
7566 JONES 7839
7654 MARTIN 76987499 ALLEN 7698
EMPNO ENAME
----- --------
7839 KING
7839 KING
7839 KING
7698 BLAKE7698 BLAKE
Self Joins
En ocasiones necesitará hacer join con la misma tabla. Para encontrar el nombredel jefe de cada empleado, necesita hacer un join con EMP y con la misma tabla.
Por ejemplo, para encontrar el nombre del “Jefe” de Blake, necesita:
• Encontrar a Blake en la tabla EMP mediante la columna ENAME
• Encontrar el número de jefe para Blake en la columna MGR. El número de
jefe es 7839. De tal forma que , King es el Jefe de Blake.
Parte 5 SQL-Server Básico
Página 22 de 27
8/20/2019 Base de datos SQL Cap5-8
23/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--2323 SQL Server Básico
HaciendoHaciendo JoinJoin en la misma tablaen la misma tabla
-------------------------------BLAKE works for KING
CLARK works for KING
JONES works for KING
MARTIN works for BLAKE
...
13 rows selected.
-------------------------------BLAKE works for KING
CLARK works for KING
JONES works for KING
MARTIN works for BLAKE
...
13 rows selected.
SELECT worker.ename + ' works for ' + manager.ename
FROM emp worker JOIN emp manager
ON worker.mgr = manager.empno;
Haciendo Join en la misma tabla
Un self-join puede ser implementado con el método tradicional de la siguienteforma:
SELECT worker.ename + ‘ works for ‘ + manager.ename
FROM emp worker, emp manager
WHERE worker.mgr = manager.empno;
Parte 5 SQL-Server Básico
Página 23 de 27
8/20/2019 Base de datos SQL Cap5-8
24/27
Desplegando datos de múltiples tablas 5Desplegando datos de múltiples tablas 5--2424 SQL Server Básico
PrácticasPrácticas
UtiliceUtilice equiequi-- joins joins para unir tablaspara unir tablas
EjecuteEjecute outer outer -- joins joins yy self self -- joins joins
AgregeAgrege
condiciones adicionalescondiciones adicionales
Parte 5 SQL-Server Básico
Página 24 de 27
8/20/2019 Base de datos SQL Cap5-8
25/27
Practica 5
1- Haga una consulta para desplegar el nombre, numero de departamento y el nombre del
departamento para todos los empleados.
ename deptno dname
---------- ------ --------------
KING 10 ACCOUNTING
BLAKE 30 SALESCLARK 10 ACCOUNTING
JONES 20 RESEARCHMARTIN 30 SALES
ALLEN 30 SALESTURNER 30 SALES
JAMES 30 SALES
WARD 30 SALESFORD 20 RESEARCH
SMITH 20 RESEARCH
SCOTT 20 RESEARCH
ADAMS 20 RESEARCHMILLER 10 ACCOUNTING
(14 filas afectadas)
2. Haga una lista única de todos los puestos que hay en el departamento 30.
3. Escriba un query para mostrar el nombre del empleado , nombre del departamento y
localización para todos los empleados que ganan una comisión.
4. Muestre el nombre de empleado y nombre del departamento para todos los empleados
que tengan una A en su nombre. Guarde el Script como s05q04.sql
5. Escriba un query que muestre el nombre, el puesto, el número y el nombre del
departamento para aquellos empleados que trabajen en DALLAS
6. Muestre el nombre y número de empleado junto con el nombre y número de su “jefe”,
ordene la salida por el nombre del jefe en forma descendente, etiquete las columnas como
se muestra a continuación..... guarde el script como s05q06.sql
Employeee Emp# Manager Mgr#
Parte 5 SQL-Server Básico
Página 25 de 27
8/20/2019 Base de datos SQL Cap5-8
26/27
Practica 5 (continuación) (opcionales)
7. Modifique el script s05q06.sql para desplegar os empleados que no tienen manager y
sustituya el nombre del jefe por “------“para cando no exista. Guarde el script.
Employee Emp# Manager Mgr#
ADAMS 7876 SCOTT 7788
JONES 7566 KING 7839BLAKE 7698 KING 7839CLARK 7782 KING 7839SCOTT 7788 JONES 7566FORD 7902 JONES 7566SMITH 7369 FORD 7902MILLER 7934 CLARK 7782
ALLEN 7499 BLAKE 7698WARD 7521 BLAKE 7698MARTIN 7654 BLAKE 7698TUNER 7844 BLAKE 7698JAMES 7900 BLAKE 7698KING 7839 "--------------"
8. Cree un query que muestre el nombre del empleado, numero de departamento y los
nombres de todos los empleados que trabajan en el mismo departamento para un empleado
dado. De nombres apropiados a las columnas.
deptno Employee Colleague
10 CLARK KING10 CLARK MILLER10 KING CLARK10 KING MILLER
10 MILLER CLARK10 MILLER KING20 ADAMS SMITH20 ADAMS JONES20 ADAMS SCOTT20 ADAMS FORD20 FORF SMITH20 FORD JONES20 FORD SCOTT
Parte 5 SQL-Server Básico
Página 26 de 27
8/20/2019 Base de datos SQL Cap5-8
27/27
………………(56 rows(s) affected)
Practica 5(continuación)
9. Haga un query que muestre el nombre, el puesto, el nombre del departamento, salario y
el nivel de salario de todos los empleados. (Nota: utilice la tabla SALGRADE para obtenerel nivel del salario)
ename Job dname sal grade
MILLER CLERK ACCOUNTING 1300.00 2
CLARK MANAGER ACCOUNTING 2450.00 4KING PRESIDENT ACCOUNTING 5000.00 5SMITH CLERK RESEARCH 800.00 1
ADAMS CLERK RESEARCH 1100.00 1JONES MANAGER RESEARCH 2975.00 4SCOTT ANALYST RESEARCH 3000.00 4FORD ANALYST RESEARCH 3000.00 4JAMES CLERK SALES 950.00 1WARD SALESMAN SALES 1250.00 2MARTIN SALESMAN SALES 1250.00 2
ALLEN SALESMAN SALES 1600.00 3TURNER SALESMAN SALES 1500.00 3BLAKE MANAGER SALES 2850.00 4 (14 row(s) affected)
10. Cree un query para mostrar el nombre y la fecha de ingreso para aquellos empleados
que han sido contratados después del empleado BLAKE.
dname Hiredate
SMITH 1980-12-17 00:00:00.000 ALLEN 1981-02-20 00:00:00.000WARD 1981-02-22 00:00:00.000JONES 1981-04-02 00:00:00.000
Parte 5 SQL-Server Básico
Top Related