Base de datos SQL Cap5-8

download Base de datos SQL Cap5-8

of 12

Transcript of Base de datos SQL Cap5-8

  • 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