SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
Autor: Nicola Strappazzon C.
                 e-mail: nicola51980@gmail.com




                                                                         5
                 Blog: http://www.swapbytes.com/
                 Revisión: 17/11/11




 Lección
            Recibiendo datos desde
               múltiples tablas


Este material se encuentra basado en el curso de Fundamentos a SQL de ORACLE, el cual es adaptado para
el producto PostgreSQL, todos los ejemplos, códigos fuentes y la Base de Datos HR es propiedad de ORACLE.
Objetivos

    Al completar esta lección usted podrá entender los
    siguientes puntos:

    • Escribir sentencias SELECT para poder combinar
      diversas tablas que se encuentran relacionadas.




L5 -L -- 2
     L
Obteniendo datos de múltiples tablas
EMPLOYEES                                            DEPARTMENTS
  employee_id | last_name | department_id               department_id |    department_name   | location_id
 -------------+-----------+---------------             ---------------+----------------------+-------------
          145 | Russell   |            80                          10 | Administration       |        1700
          146 | Partners |             80                          20 | Marketing            |        1800
          147 | Errazuriz |            80                          30 | Purchasing           |        1700
          148 | Cambrault |            80                          40 | Human Resources      |        2400
          149 | Zlotkey   |            80                          50 | Shipping             |        1500
          150 | Tucker    |            80                          60 | IT                   |        1400
          151 | Bernstein |            80                          70 | Public Relations     |        2700
          152 | Hall      |            80                          80 | Sales                |        2500
          153 | Olsen     |            80                          90 | Executive            |        1700
          154 | Cambrault |            80                         100 | Finance              |        1700
                                                                  110 | Accounting           |        1700
                                                                  120 | Treasury             |        1700
                                                                  130 | Corporate Tax        |        1700




                             employee_id | department_id | department_name
                            -------------+---------------+-----------------
                                      202 |           20 | Marketing
                                      119 |           30 | Purchasing
                                      187 |           50 | Shipping
                                      107 |           60 | IT
                                      155 |           80 | Sales
                                      102 |           90 | Executive
                                      101 |           90 | Executive
                                      113 |          100 | Finance
                                      206 |          110 | Accounting
                            (32 rows)



L5 -L -- 3
     L
Tipos de JOIN



    •   [ INNER ] JOIN
    •   LEFT [ OUTER ] JOIN
    •   RIGHT [ OUTER ] JOIN
    •   FULL [ OUTER ] JOIN
    •   CROSS JOIN
    •   NATURAL JOIN




L5 -L -- 4
     L
Sintaxis básica

   SELECT table_1.expression, table_2.expresion [, ...]
   FROM   table_1
   [NATURAL JOIN table_2] |
   [JOIN table_2 USING(expression)] |
   [JOIN table_2 ON table_2.expression = table_1.expression] |
   [LEFT | RIGHT | FULL OUTER JOIN table_2
    ON table_2.expression = table_1.expression] |
   [CROSS JOIN table_2];




L5 -L -- 5
     L
Usando la Cláusula NATURAL JOIN
    • La cláusula NATURAL JOIN une dos tablas mediante
      todas las columnas que tengan el mismo nombre.
    • Selecciona los registros que provienen de las dos tablas
      siempre y cuando los valores de las columnas que tienen
      el mismo nombre coincidan.
    • Si el tipo de dato es diferente en las columnas que tienen
      el mismo nombre, se produce un error.




L5 -L -- 6
     L
Usando la cláusula NATURAL JOIN

   SELECT employee_id, department_id, department_name
   FROM employees
   NATURAL JOIN departments;

    employee_id | department_id | department_name
   -------------+---------------+-----------------
            202 |            20 | Marketing
            119 |            30 | Purchasing
            118 |            30 | Purchasing
            117 |            30 | Purchasing
            116 |            30 | Purchasing
            115 |            30 | Purchasing
            187 |            50 | Shipping
            186 |            50 | Shipping
            185 |            50 | Shipping
            184 |            50 | Shipping
   ▪ ▪ ▪
   (32 rows)


L5 -L -- 7
     L
Uniendo tablas usando la cláusula USING

    • En caso de existir varias columnas con el mismo nombre
      y su tipo de dato no coincide, se utiliza la cláusula JOIN
      acompañada de la cláusula USING para especificar
      cuales de las columnas serán utilizadas para unir las dos
      tablas.
    • Utilizar la cláusula USING solamente cuando existe mas
      de una columna que coincide.
    • No puede usar nombres de tablas o alias para hacer
      referencia a una columna que tenga nombres en común.




L5 -L -- 8
     L
Uniendo columnas con el mismo nombre



EMPLOYEES                                         DEPARTMENTS
   employee_id | last_name | department_id         department_id |    department_name   | location_id
  -------------+-----------+---------------       ---------------+----------------------+-------------
           145 | Russell   |            80                    10 | Administration       |        1700
           146 | Partners |             80                    20 | Marketing            |        1800
           147 | Errazuriz |            80                    30 | Purchasing           |        1700
           148 | Cambrault |            80                    40 | Human Resources      |        2400
           149 | Zlotkey   |            80                    50 | Shipping             |        1500
           150 | Tucker    |            80                    60 | IT                   |        1400
           151 | Bernstein |            80                    70 | Public Relations     |        2700
           152 | Hall      |            80                    80 | Sales                |        2500
           153 | Olsen     |            80                    90 | Executive            |        1700




                                              =
           154 | Cambrault |            80                   100 | Finance              |        1700


                       Clave Foránea              Clave Primaria




L5 -L -- 9
     L
Uniendo columnas con el mismo nombre

   SELECT employee_id, department_id, department_name
   FROM employees
   JOIN departments USING(department_id);

    employee_id | department_id | department_name
   -------------+---------------+------------------
            200 |            10 | Administration
            202 |            20 | Marketing
            201 |            20 | Marketing
            119 |            30 | Purchasing
            118 |            30 | Purchasing
            117 |            30 | Purchasing
            116 |            30 | Purchasing
            115 |            30 | Purchasing
            114 |            30 | Purchasing
            203 |            40 | Human Resources
   ▪ ▪ ▪
   (106 rows)


L5 -L -- 10
     L
Columnas Ambiguas
    • Usar los alias en las tablas para identificar correctamente
      las columnas entre las tablas.
    • Usar los alias en las tablas mejora el rendimiento.
    • Usar los alias en las columnas que son del mismo
      nombre y están en distintas tablas.
    • Usar los alias simplifican las consultas.




L5 -L -- 11
     L
Usando el alias en las tablas

   SELECT e.employee_id,   e.last_name,
          e.department_id, d.department_id,
          d.location_id
   FROM   employees   e
   JOIN   departments d USING(department_id);

    employee_id | last_name | department_id | department_id | location_id
   -------------+-------------+---------------+---------------+-------------
            200 | Whalen      |            10 |            10 |        1700
            202 | Fay         |            20 |            20 |        1800
            201 | Hartstein   |            20 |            20 |        1800
            119 | Colmenares |             30 |            30 |        1700
            118 | Himuro      |            30 |            30 |        1700
            117 | Tobias      |            30 |            30 |        1700
            116 | Baida       |            30 |            30 |        1700
            115 | Khoo        |            30 |            30 |        1700
            114 | Raphaely    |            30 |            30 |        1700
            203 | Mavris      |            40 |            40 |        2400
   ▪ ▪ ▪
   (106 rows)



L5 -L -- 12
     L
Creando JOIN con la cláusula ON
    • Se utiliza la cláusula ON para especificar la unión de las
      columnas con distinto nombre o condiciones arbitrarias.
    • Las condiciones en la cláusula ON se encuentran
      separadas de otras condiciones de búsqueda.
    • La cláusula ON permite un código mas fácil de entender.




L5 -L -- 13
     L
Usando la cláusula ON

   SELECT e.employee_id, e.last_name,
          d.location_id, department_id
   FROM   employees   e
   JOIN   departments d ON(d.department_id = e.department_id);

    employee_id | last_name | location_id | department_id
   -------------+-------------+-------------+---------------
            200 | Whalen      |        1700 |            10
            202 | Fay         |        1800 |            20
            201 | Hartstein   |        1800 |            20
            119 | Colmenares |         1700 |            30
            118 | Himuro      |        1700 |            30
            117 | Tobias      |        1700 |            30
            116 | Baida       |        1700 |            30
            115 | Khoo        |        1700 |            30
            203 | Mavris      |        2400 |            40
     ▪ ▪ ▪
   (106 rows)


L5 -L -- 14
     L
Uso libre del JOIN con la cláusula ON

  EMPLOYEES (Trabajadores)                       EMPLOYEES (Jefes)
   employee_id | last_name | manager_id           employee_id | last_name
  -------------+-------------+------------       -------------+-----------
           100 | King        |                             100 | King
           121 | Fripp       |        100                  101 | Kochhar
           120 | Weiss       |        100                  102 | De Haan
           108 | Greenberg   |        101                  114 | Raphaely
           103 | Hunold      |        102                  120 | Weiss
           106 | Pataballa   |        103                  121 | Fripp
           104 | Ernst       |        103                  122 | Kaufling
           113 | Popp        |        108                  123 | Vollman
           117 | Tobias      |        114                  124 | Mourgos
           116 | Baida       |        114                  145 | Russell
           126 | Mikkilineni |        120                  146 | Partners
           129 | Bissot      |        121                  147 | Errazuriz
           130 | Atkinson    |        121                  148 | Cambrault




                                             =
  (107 rows)                                     (15 rows)


                         Clave Foránea           Clave Primaria




L5 -L -- 15
     L
Uso libre del JOIN con la cláusula ON

   SELECT e.last_name AS "Trabajador",
          m.last_name AS "Jefe“
   FROM   employees e
   JOIN   employees m ON (e.manager_id = m.employee_id);

    Trabajador |    Jefe
   -------------+-----------
    Russell     | King
    Partners    | King
    Errazuriz   | King
    Cambrault   | King
    Zlotkey     | King
    Tucker      | Russell
    Bernstein   | Russell
    Hall        | Russell
    Olsen       | Russell
     ▪ ▪ ▪
   (106 rows)


L5 -L -- 16
     L
Condiciones adicionales en la cláusula JOIN

   SELECT e.last_name AS "Trabajador",
          m.last_name AS "Jefe“
   FROM   employees e
   JOIN   employees m ON (     e.manager_id = m.employee_id
                           AND e.manager_id = 100);
    Trabajador | Jefe
   ------------+------
    Russell    | King
    Partners   | King
    Errazuriz | King
    Cambrault | King
    Zlotkey    | King
    Kochhar    | King
    De Haan    | King
    Raphaely   | King
    Weiss      | King
    Fripp      | King
    Kaufling   | King
    Vollman    | King
    Mourgos    | King
    ▪ ▪ ▪
   (14 rows)



L5 -L -- 17
     L
Usando varias cláusulas JOIN juntas

   SELECT     employee_id, city, department_name
   FROM       employees   e
   JOIN       departments d ON d.department_id = e .department_id
   JOIN       locations   l ON d.location_id   = l.location_id;

    employee_id |         city        | department_name
   -------------+---------------------+------------------
            200 | Seattle             | Administration
            202 | Toronto             | Marketing
            201 | Toronto             | Marketing
            119 | Seattle             | Purchasing
            118 | Seattle             | Purchasing
            117 | Seattle             | Purchasing
            116 | Seattle             | Purchasing
            115 | Seattle             | Purchasing
            114 | Seattle             | Purchasing
            203 | London              | Human Resources
            199 | South San Francisco | Shipping
            198 | South San Francisco | Shipping
            197 | South San Francisco | Shipping
            196 | South San Francisco | Shipping
   ▪ ▪ ▪
   (106 rows)


L5 -L -- 18
     L
Combinaciones de desigualdad

 DEPARTMENTS                                   EMPLOYEES
     department_name   | department_id          department_id | last_name
 ----------------------+---------------        ---------------+-------------
  Administration       |            10                         | Grant
  Marketing            |            20                     110 | Gietz
  Purchasing           |            30                     110 | Higgins
  Human Resources      |            40                     100 | Urman
  Shipping             |            50                     100 | Faviet
  IT                   |            60                     100 | Chen
  Public Relations     |            70                     100 | Sciarra
  Sales                |            80                     100 | Popp
  Executive            |            90                     100 | Greenberg
  Finance              |           100                      90 | King
  Accounting           |           110                      90 | De Haan
  Contracting          |           190                      90 | Kochhar
 ▪ ▪ ▪                                                      80 | Russell
  (27 rows)                                                 80 | McEwen
                                                            80 | Smith
                                                            80 | Doran
                                               ▪ ▪ ▪
                                                (107 rows)


                                   El departamento 190 no se encuentra
                                   asignado a ningún empleado

L5 -L -- 19
     L
Combinaciones INNER Versus OUTER
    • Las combinaciones entre tablas usando las cláusulas
      NATURAL JOIN, USING y ON retorna un resultado de
      tipo INNER JOIN, donde siempre existe una relación de
      valores.
    • Para retornar aquellos registros que no coinciden
      mediante una relación entre tablas, se utiliza la cláusula
      OUTER JOIN, donde podemos especificar de cual lado
      falta una coincidencia.
       – LEFT OUTER JOIN
       – RIGHT OUTER JOIN
       – FULL OUTER JOIN
    • La clave foránea se encuentren con el valor NULL.


L5 -L -- 20
     L
Usando la cláusula LEFT,OUTER JOIN
   SELECT e.last_name, e.department_id, d.department_name
   FROM   employees e
   LEFT OUTER JOIN departments d
                ON e.department_id = d.department_id
   ORDER BY d.department_id DESC;
     last_name | department_id | department_name
   -------------+---------------+------------------
    Grant       |               |
    Gietz       |           110 | Accounting
    Higgins     |           110 | Accounting
    Urman       |           100 | Finance
    Faviet      |           100 | Finance
    Chen        |           100 | Finance
    Sciarra     |           100 | Finance
    Popp        |           100 | Finance
    Greenberg   |           100 | Finance
    King        |            90 | Executive
    De Haan     |            90 | Executive
    Kochhar     |            90 | Executive
    Russell     |            80 | Sales
    McEwen      |            80 | Sales
    ▪ ▪ ▪
   (107 rows)


L5 -L -- 21
     L
Usando la cláusula RIGHT OUTER JOIN
   SELECT e.last_name, e.department_id, d.department_name
   FROM   employees e
   RIGHT OUTER JOIN departments d
                ON e.department_id = d.department_id
   ORDER BY d.department_id DESC;
     last_name | department_id |    department_name
   -------------+---------------+----------------------
                |               | Payroll
                |               | Recruiting
                |               | Retail Sales
                |               | Government Sales
                |               | IT Helpdesk
                |               | NOC
                |               | IT Support
                |               | Operations
   ▪ ▪ ▪
                |               | Shareholder Services
                |               | Control And Credit
                |               | Corporate Tax
                |               | Treasury
    Higgins     |           110 | Accounting
    Gietz       |           110 | Accounting
   (122 rows)


L5 -L -- 22
     L
Usando la cláusula FULL OUTER JOIN
   SELECT e.last_name, e.department_id, d.department_name
   FROM   employees e
   FULL OUTER JOIN departments d
                ON e.department_id = d.department_id
   ORDER BY d.department_id DESC;
     last_name | department_id |    department_name
   -------------+---------------+----------------------
    Grant       |               |
                |               | Payroll
                |               | Recruiting
                |               | Retail Sales
                |               | Government Sales
                |               | IT Helpdesk
                |               | NOC
                |               | IT Support
   ▪ ▪ ▪
                |               | Shareholder Services
                |               | Control And Credit
                |               | Corporate Tax
                |               | Treasury
    Higgins     |           110 | Accounting
    Gietz       |           110 | Accounting
   (123 rows)


L5 -L -- 23
     L
Producto Cartesiano
    • El producto cartesiano se forma cuando:
       – Se omite una condición en el JOIN.
       – La condición del JOIN es invalida.
       – Todos los registros de la primera tabla se relacionan
         con todos los registros de la segunda tabla.
       – Se utiliza la cláusula CROSS JOIN.
    • Para evitar un producto cartesiano, siempre debe incluir
      una condición valida dentro del JOIN.




L5 -L -- 24
     L
Generando el producto cartesiano

 DEPARTMENTS                                         EMPLOYEES
     department_name   | department_id               department_id | last_name
 ----------------------+---------------             ---------------+-------------
  Administration       |            10                              | Grant
  Marketing            |            20                          110 | Gietz
  Purchasing           |            30                          110 | Higgins
  Human Resources      |            40                          100 | Urman
  Shipping             |            50                          100 | Faviet
  IT                   |            60                          100 | Chen
  Public Relations     |            70                          100 | Sciarra
  Sales                |            80                          100 | Popp
 ▪ ▪ ▪                                              ▪ ▪ ▪
  (27 rows)                                          (107 rows)


                                           employee_id | department_id |    department_name
                                          -------------+---------------+----------------------
                                                   145 |            10 | Administration
                                                   145 |            20 | Marketing
         Producto cartesiano:                      145 |            30 | Purchasing
                                                   145 |            40 | Human Resources
       27 x 107 = 2889 registros                   145 |            50 | Shipping
                                                   145 |            60 | IT
                                                   145 |            70 | Public Relations
                                          ▪ ▪ ▪
                                           (2889 rows)


L5 -L -- 25
     L
Usando la cláusula CROSS JOIN

   SELECT e.employee_id, d.department_id, d.department_name
   FROM   employees e
   CROSS JOIN departments d;

    employee_id | department_id |    department_name
   -------------+---------------+----------------------
            145 |            10 | Administration
            145 |            20 | Marketing
            145 |            30 | Purchasing
            145 |            40 | Human Resources
            145 |            50 | Shipping
            145 |            60 | IT
            145 |            70 | Public Relations
            145 |            80 | Sales
            145 |            90 | Executive
            145 |           100 | Finance
   ▪ ▪ ▪
   (106 rows)


L5 -L -- 26
     L
Resumen

    En esta lección, usted debió entender como usar la
    cláusula JOIN para mostrar los datos que provienen de
    distintas tablas usando:
    •   [ INNER ] JOIN
    •   LEFT [ OUTER ] JOIN
    •   RIGHT [ OUTER ] JOIN
    •   FULL [ OUTER ] JOIN
    •   CROSS JOIN
    •   NATURAL JOIN




L5 -L -- 27
     L

Más contenido relacionado

La actualidad más candente

Top 40 sql queries for testers
Top 40 sql queries for testersTop 40 sql queries for testers
Top 40 sql queries for testerstlvd
 
03 Writing Control Structures, Writing with Compatible Data Types Using Expli...
03 Writing Control Structures, Writing with Compatible Data Types Using Expli...03 Writing Control Structures, Writing with Compatible Data Types Using Expli...
03 Writing Control Structures, Writing with Compatible Data Types Using Expli...rehaniltifat
 
80 different SQL Queries with output
80 different SQL Queries with output80 different SQL Queries with output
80 different SQL Queries with outputNexus
 
Window functions with SQL Server 2016
Window functions with SQL Server 2016Window functions with SQL Server 2016
Window functions with SQL Server 2016Mark Tabladillo
 
Algebra relacional
Algebra relacionalAlgebra relacional
Algebra relacionalLuis Jherry
 
DBMS 5 | MySQL Practice List - HR Schema
DBMS 5 | MySQL Practice List - HR SchemaDBMS 5 | MySQL Practice List - HR Schema
DBMS 5 | MySQL Practice List - HR SchemaMohammad Imam Hossain
 
Manipulating Data Oracle Data base
Manipulating Data Oracle Data baseManipulating Data Oracle Data base
Manipulating Data Oracle Data baseSalman Memon
 
Using SQL Queries to Insert, Update, Delete, and View Data.ppt
Using SQL Queries to Insert, Update, Delete, and View Data.pptUsing SQL Queries to Insert, Update, Delete, and View Data.ppt
Using SQL Queries to Insert, Update, Delete, and View Data.pptMohammedJifar1
 
pl/sql online Training|sql online Training | iTeknowledge
pl/sql online Training|sql online Training | iTeknowledgepl/sql online Training|sql online Training | iTeknowledge
pl/sql online Training|sql online Training | iTeknowledgeMasood Khan
 
Tema4 algebra relacional
Tema4   algebra relacionalTema4   algebra relacional
Tema4 algebra relacionalAlvaro Loustau
 
Introduction of Oracle
Introduction of Oracle Introduction of Oracle
Introduction of Oracle Salman Memon
 
Oracle - Program with PL/SQL - Lession 09
Oracle - Program with PL/SQL - Lession 09Oracle - Program with PL/SQL - Lession 09
Oracle - Program with PL/SQL - Lession 09Thuan Nguyen
 
Ejercicios sql access
Ejercicios sql accessEjercicios sql access
Ejercicios sql accessInés Rosero
 
Triggers in SQL | Edureka
Triggers in SQL | EdurekaTriggers in SQL | Edureka
Triggers in SQL | EdurekaEdureka!
 
SQL practice questions set - 2
SQL practice questions set - 2SQL practice questions set - 2
SQL practice questions set - 2Mohd Tousif
 
SQL Macros - Game Changing Feature for SQL Developers?
SQL Macros - Game Changing Feature for SQL Developers?SQL Macros - Game Changing Feature for SQL Developers?
SQL Macros - Game Changing Feature for SQL Developers?Andrej Pashchenko
 

La actualidad más candente (20)

Top 40 sql queries for testers
Top 40 sql queries for testersTop 40 sql queries for testers
Top 40 sql queries for testers
 
03 Writing Control Structures, Writing with Compatible Data Types Using Expli...
03 Writing Control Structures, Writing with Compatible Data Types Using Expli...03 Writing Control Structures, Writing with Compatible Data Types Using Expli...
03 Writing Control Structures, Writing with Compatible Data Types Using Expli...
 
80 different SQL Queries with output
80 different SQL Queries with output80 different SQL Queries with output
80 different SQL Queries with output
 
Window functions with SQL Server 2016
Window functions with SQL Server 2016Window functions with SQL Server 2016
Window functions with SQL Server 2016
 
Algebra relacional
Algebra relacionalAlgebra relacional
Algebra relacional
 
DBMS 5 | MySQL Practice List - HR Schema
DBMS 5 | MySQL Practice List - HR SchemaDBMS 5 | MySQL Practice List - HR Schema
DBMS 5 | MySQL Practice List - HR Schema
 
Relacion uno a uno en base de datos
Relacion uno a uno en base de datosRelacion uno a uno en base de datos
Relacion uno a uno en base de datos
 
Arreglos - Assembler
Arreglos - AssemblerArreglos - Assembler
Arreglos - Assembler
 
Manipulating Data Oracle Data base
Manipulating Data Oracle Data baseManipulating Data Oracle Data base
Manipulating Data Oracle Data base
 
Using SQL Queries to Insert, Update, Delete, and View Data.ppt
Using SQL Queries to Insert, Update, Delete, and View Data.pptUsing SQL Queries to Insert, Update, Delete, and View Data.ppt
Using SQL Queries to Insert, Update, Delete, and View Data.ppt
 
pl/sql online Training|sql online Training | iTeknowledge
pl/sql online Training|sql online Training | iTeknowledgepl/sql online Training|sql online Training | iTeknowledge
pl/sql online Training|sql online Training | iTeknowledge
 
SQL BASIC QUERIES
SQL  BASIC QUERIES SQL  BASIC QUERIES
SQL BASIC QUERIES
 
SQL JOIN
SQL JOINSQL JOIN
SQL JOIN
 
Tema4 algebra relacional
Tema4   algebra relacionalTema4   algebra relacional
Tema4 algebra relacional
 
Introduction of Oracle
Introduction of Oracle Introduction of Oracle
Introduction of Oracle
 
Oracle - Program with PL/SQL - Lession 09
Oracle - Program with PL/SQL - Lession 09Oracle - Program with PL/SQL - Lession 09
Oracle - Program with PL/SQL - Lession 09
 
Ejercicios sql access
Ejercicios sql accessEjercicios sql access
Ejercicios sql access
 
Triggers in SQL | Edureka
Triggers in SQL | EdurekaTriggers in SQL | Edureka
Triggers in SQL | Edureka
 
SQL practice questions set - 2
SQL practice questions set - 2SQL practice questions set - 2
SQL practice questions set - 2
 
SQL Macros - Game Changing Feature for SQL Developers?
SQL Macros - Game Changing Feature for SQL Developers?SQL Macros - Game Changing Feature for SQL Developers?
SQL Macros - Game Changing Feature for SQL Developers?
 

Destacado

PostgreSQL - Lección 7 - Usando los operadores de conjunto
PostgreSQL - Lección 7 - Usando los operadores de conjuntoPostgreSQL - Lección 7 - Usando los operadores de conjunto
PostgreSQL - Lección 7 - Usando los operadores de conjuntoNicola Strappazzon C.
 
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQLMANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQLJesus Alberto Casco Agudelo
 
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2EQ SOFT EIRL
 
Administración de base de datos oracle - sesion 1
Administración de base de datos oracle - sesion 1Administración de base de datos oracle - sesion 1
Administración de base de datos oracle - sesion 1Sefira111
 
Comandos y funciones sql postgres
Comandos y funciones sql postgresComandos y funciones sql postgres
Comandos y funciones sql postgresHIPOLITO GRULLON
 
8 sistemas de calidad en ti
8 sistemas de calidad en ti8 sistemas de calidad en ti
8 sistemas de calidad en ti12303011
 
SENTENCIAS SQL
SENTENCIAS SQL SENTENCIAS SQL
SENTENCIAS SQL Jair Cruz
 
Unid2 transact sql 1
Unid2  transact sql 1Unid2  transact sql 1
Unid2 transact sql 1ALEXSILVARSM
 
Teorico palabras reservada
Teorico palabras reservadaTeorico palabras reservada
Teorico palabras reservadamalaclau
 
Mapa mental de los rubros que propone mcrosoft para sql
Mapa mental de los rubros que propone mcrosoft para sqlMapa mental de los rubros que propone mcrosoft para sql
Mapa mental de los rubros que propone mcrosoft para sqllolita_89
 
Ejercicios en prolog
Ejercicios en prologEjercicios en prolog
Ejercicios en prologJeffoG92
 

Destacado (20)

PostgreSQL - Lección 7 - Usando los operadores de conjunto
PostgreSQL - Lección 7 - Usando los operadores de conjuntoPostgreSQL - Lección 7 - Usando los operadores de conjunto
PostgreSQL - Lección 7 - Usando los operadores de conjunto
 
PostgreSQL - Lección 10 - Vistas
PostgreSQL - Lección 10 - VistasPostgreSQL - Lección 10 - Vistas
PostgreSQL - Lección 10 - Vistas
 
PostgreSQL - Lección 9 - Tablas
PostgreSQL - Lección 9 - TablasPostgreSQL - Lección 9 - Tablas
PostgreSQL - Lección 9 - Tablas
 
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQLMANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
 
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
 
Transacciones
TransaccionesTransacciones
Transacciones
 
plsql les02
 plsql les02 plsql les02
plsql les02
 
Administración de base de datos oracle - sesion 1
Administración de base de datos oracle - sesion 1Administración de base de datos oracle - sesion 1
Administración de base de datos oracle - sesion 1
 
MySQL Good Database Design
MySQL Good Database DesignMySQL Good Database Design
MySQL Good Database Design
 
Comandos y funciones sql postgres
Comandos y funciones sql postgresComandos y funciones sql postgres
Comandos y funciones sql postgres
 
8 sistemas de calidad en ti
8 sistemas de calidad en ti8 sistemas de calidad en ti
8 sistemas de calidad en ti
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 
Postgre sql
Postgre sqlPostgre sql
Postgre sql
 
SENTENCIAS SQL
SENTENCIAS SQL SENTENCIAS SQL
SENTENCIAS SQL
 
Trabajo Final
Trabajo FinalTrabajo Final
Trabajo Final
 
Unid2 transact sql 1
Unid2  transact sql 1Unid2  transact sql 1
Unid2 transact sql 1
 
Teorico palabras reservada
Teorico palabras reservadaTeorico palabras reservada
Teorico palabras reservada
 
Mapa mental de los rubros que propone mcrosoft para sql
Mapa mental de los rubros que propone mcrosoft para sqlMapa mental de los rubros que propone mcrosoft para sql
Mapa mental de los rubros que propone mcrosoft para sql
 
Ejercicios en prolog
Ejercicios en prologEjercicios en prolog
Ejercicios en prolog
 
Php Con Postgres
Php Con PostgresPhp Con Postgres
Php Con Postgres
 

Último

Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramDIDIERFERNANDOGUERRE
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 

Último (20)

Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ram
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 

PostgreSQL - Lección 5 - Recibiendo datos desde múltiples tablas

  • 1. Autor: Nicola Strappazzon C. e-mail: nicola51980@gmail.com 5 Blog: http://www.swapbytes.com/ Revisión: 17/11/11 Lección Recibiendo datos desde múltiples tablas Este material se encuentra basado en el curso de Fundamentos a SQL de ORACLE, el cual es adaptado para el producto PostgreSQL, todos los ejemplos, códigos fuentes y la Base de Datos HR es propiedad de ORACLE.
  • 2. Objetivos Al completar esta lección usted podrá entender los siguientes puntos: • Escribir sentencias SELECT para poder combinar diversas tablas que se encuentran relacionadas. L5 -L -- 2 L
  • 3. Obteniendo datos de múltiples tablas EMPLOYEES DEPARTMENTS employee_id | last_name | department_id department_id | department_name | location_id -------------+-----------+--------------- ---------------+----------------------+------------- 145 | Russell | 80 10 | Administration | 1700 146 | Partners | 80 20 | Marketing | 1800 147 | Errazuriz | 80 30 | Purchasing | 1700 148 | Cambrault | 80 40 | Human Resources | 2400 149 | Zlotkey | 80 50 | Shipping | 1500 150 | Tucker | 80 60 | IT | 1400 151 | Bernstein | 80 70 | Public Relations | 2700 152 | Hall | 80 80 | Sales | 2500 153 | Olsen | 80 90 | Executive | 1700 154 | Cambrault | 80 100 | Finance | 1700 110 | Accounting | 1700 120 | Treasury | 1700 130 | Corporate Tax | 1700 employee_id | department_id | department_name -------------+---------------+----------------- 202 | 20 | Marketing 119 | 30 | Purchasing 187 | 50 | Shipping 107 | 60 | IT 155 | 80 | Sales 102 | 90 | Executive 101 | 90 | Executive 113 | 100 | Finance 206 | 110 | Accounting (32 rows) L5 -L -- 3 L
  • 4. Tipos de JOIN • [ INNER ] JOIN • LEFT [ OUTER ] JOIN • RIGHT [ OUTER ] JOIN • FULL [ OUTER ] JOIN • CROSS JOIN • NATURAL JOIN L5 -L -- 4 L
  • 5. Sintaxis básica SELECT table_1.expression, table_2.expresion [, ...] FROM table_1 [NATURAL JOIN table_2] | [JOIN table_2 USING(expression)] | [JOIN table_2 ON table_2.expression = table_1.expression] | [LEFT | RIGHT | FULL OUTER JOIN table_2 ON table_2.expression = table_1.expression] | [CROSS JOIN table_2]; L5 -L -- 5 L
  • 6. Usando la Cláusula NATURAL JOIN • La cláusula NATURAL JOIN une dos tablas mediante todas las columnas que tengan el mismo nombre. • Selecciona los registros que provienen de las dos tablas siempre y cuando los valores de las columnas que tienen el mismo nombre coincidan. • Si el tipo de dato es diferente en las columnas que tienen el mismo nombre, se produce un error. L5 -L -- 6 L
  • 7. Usando la cláusula NATURAL JOIN SELECT employee_id, department_id, department_name FROM employees NATURAL JOIN departments; employee_id | department_id | department_name -------------+---------------+----------------- 202 | 20 | Marketing 119 | 30 | Purchasing 118 | 30 | Purchasing 117 | 30 | Purchasing 116 | 30 | Purchasing 115 | 30 | Purchasing 187 | 50 | Shipping 186 | 50 | Shipping 185 | 50 | Shipping 184 | 50 | Shipping ▪ ▪ ▪ (32 rows) L5 -L -- 7 L
  • 8. Uniendo tablas usando la cláusula USING • En caso de existir varias columnas con el mismo nombre y su tipo de dato no coincide, se utiliza la cláusula JOIN acompañada de la cláusula USING para especificar cuales de las columnas serán utilizadas para unir las dos tablas. • Utilizar la cláusula USING solamente cuando existe mas de una columna que coincide. • No puede usar nombres de tablas o alias para hacer referencia a una columna que tenga nombres en común. L5 -L -- 8 L
  • 9. Uniendo columnas con el mismo nombre EMPLOYEES DEPARTMENTS employee_id | last_name | department_id department_id | department_name | location_id -------------+-----------+--------------- ---------------+----------------------+------------- 145 | Russell | 80 10 | Administration | 1700 146 | Partners | 80 20 | Marketing | 1800 147 | Errazuriz | 80 30 | Purchasing | 1700 148 | Cambrault | 80 40 | Human Resources | 2400 149 | Zlotkey | 80 50 | Shipping | 1500 150 | Tucker | 80 60 | IT | 1400 151 | Bernstein | 80 70 | Public Relations | 2700 152 | Hall | 80 80 | Sales | 2500 153 | Olsen | 80 90 | Executive | 1700 = 154 | Cambrault | 80 100 | Finance | 1700 Clave Foránea Clave Primaria L5 -L -- 9 L
  • 10. Uniendo columnas con el mismo nombre SELECT employee_id, department_id, department_name FROM employees JOIN departments USING(department_id); employee_id | department_id | department_name -------------+---------------+------------------ 200 | 10 | Administration 202 | 20 | Marketing 201 | 20 | Marketing 119 | 30 | Purchasing 118 | 30 | Purchasing 117 | 30 | Purchasing 116 | 30 | Purchasing 115 | 30 | Purchasing 114 | 30 | Purchasing 203 | 40 | Human Resources ▪ ▪ ▪ (106 rows) L5 -L -- 10 L
  • 11. Columnas Ambiguas • Usar los alias en las tablas para identificar correctamente las columnas entre las tablas. • Usar los alias en las tablas mejora el rendimiento. • Usar los alias en las columnas que son del mismo nombre y están en distintas tablas. • Usar los alias simplifican las consultas. L5 -L -- 11 L
  • 12. Usando el alias en las tablas SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d USING(department_id); employee_id | last_name | department_id | department_id | location_id -------------+-------------+---------------+---------------+------------- 200 | Whalen | 10 | 10 | 1700 202 | Fay | 20 | 20 | 1800 201 | Hartstein | 20 | 20 | 1800 119 | Colmenares | 30 | 30 | 1700 118 | Himuro | 30 | 30 | 1700 117 | Tobias | 30 | 30 | 1700 116 | Baida | 30 | 30 | 1700 115 | Khoo | 30 | 30 | 1700 114 | Raphaely | 30 | 30 | 1700 203 | Mavris | 40 | 40 | 2400 ▪ ▪ ▪ (106 rows) L5 -L -- 12 L
  • 13. Creando JOIN con la cláusula ON • Se utiliza la cláusula ON para especificar la unión de las columnas con distinto nombre o condiciones arbitrarias. • Las condiciones en la cláusula ON se encuentran separadas de otras condiciones de búsqueda. • La cláusula ON permite un código mas fácil de entender. L5 -L -- 13 L
  • 14. Usando la cláusula ON SELECT e.employee_id, e.last_name, d.location_id, department_id FROM employees e JOIN departments d ON(d.department_id = e.department_id); employee_id | last_name | location_id | department_id -------------+-------------+-------------+--------------- 200 | Whalen | 1700 | 10 202 | Fay | 1800 | 20 201 | Hartstein | 1800 | 20 119 | Colmenares | 1700 | 30 118 | Himuro | 1700 | 30 117 | Tobias | 1700 | 30 116 | Baida | 1700 | 30 115 | Khoo | 1700 | 30 203 | Mavris | 2400 | 40 ▪ ▪ ▪ (106 rows) L5 -L -- 14 L
  • 15. Uso libre del JOIN con la cláusula ON EMPLOYEES (Trabajadores) EMPLOYEES (Jefes) employee_id | last_name | manager_id employee_id | last_name -------------+-------------+------------ -------------+----------- 100 | King | 100 | King 121 | Fripp | 100 101 | Kochhar 120 | Weiss | 100 102 | De Haan 108 | Greenberg | 101 114 | Raphaely 103 | Hunold | 102 120 | Weiss 106 | Pataballa | 103 121 | Fripp 104 | Ernst | 103 122 | Kaufling 113 | Popp | 108 123 | Vollman 117 | Tobias | 114 124 | Mourgos 116 | Baida | 114 145 | Russell 126 | Mikkilineni | 120 146 | Partners 129 | Bissot | 121 147 | Errazuriz 130 | Atkinson | 121 148 | Cambrault = (107 rows) (15 rows) Clave Foránea Clave Primaria L5 -L -- 15 L
  • 16. Uso libre del JOIN con la cláusula ON SELECT e.last_name AS "Trabajador", m.last_name AS "Jefe“ FROM employees e JOIN employees m ON (e.manager_id = m.employee_id); Trabajador | Jefe -------------+----------- Russell | King Partners | King Errazuriz | King Cambrault | King Zlotkey | King Tucker | Russell Bernstein | Russell Hall | Russell Olsen | Russell ▪ ▪ ▪ (106 rows) L5 -L -- 16 L
  • 17. Condiciones adicionales en la cláusula JOIN SELECT e.last_name AS "Trabajador", m.last_name AS "Jefe“ FROM employees e JOIN employees m ON ( e.manager_id = m.employee_id AND e.manager_id = 100); Trabajador | Jefe ------------+------ Russell | King Partners | King Errazuriz | King Cambrault | King Zlotkey | King Kochhar | King De Haan | King Raphaely | King Weiss | King Fripp | King Kaufling | King Vollman | King Mourgos | King ▪ ▪ ▪ (14 rows) L5 -L -- 17 L
  • 18. Usando varias cláusulas JOIN juntas SELECT employee_id, city, department_name FROM employees e JOIN departments d ON d.department_id = e .department_id JOIN locations l ON d.location_id = l.location_id; employee_id | city | department_name -------------+---------------------+------------------ 200 | Seattle | Administration 202 | Toronto | Marketing 201 | Toronto | Marketing 119 | Seattle | Purchasing 118 | Seattle | Purchasing 117 | Seattle | Purchasing 116 | Seattle | Purchasing 115 | Seattle | Purchasing 114 | Seattle | Purchasing 203 | London | Human Resources 199 | South San Francisco | Shipping 198 | South San Francisco | Shipping 197 | South San Francisco | Shipping 196 | South San Francisco | Shipping ▪ ▪ ▪ (106 rows) L5 -L -- 18 L
  • 19. Combinaciones de desigualdad DEPARTMENTS EMPLOYEES department_name | department_id department_id | last_name ----------------------+--------------- ---------------+------------- Administration | 10 | Grant Marketing | 20 110 | Gietz Purchasing | 30 110 | Higgins Human Resources | 40 100 | Urman Shipping | 50 100 | Faviet IT | 60 100 | Chen Public Relations | 70 100 | Sciarra Sales | 80 100 | Popp Executive | 90 100 | Greenberg Finance | 100 90 | King Accounting | 110 90 | De Haan Contracting | 190 90 | Kochhar ▪ ▪ ▪ 80 | Russell (27 rows) 80 | McEwen 80 | Smith 80 | Doran ▪ ▪ ▪ (107 rows) El departamento 190 no se encuentra asignado a ningún empleado L5 -L -- 19 L
  • 20. Combinaciones INNER Versus OUTER • Las combinaciones entre tablas usando las cláusulas NATURAL JOIN, USING y ON retorna un resultado de tipo INNER JOIN, donde siempre existe una relación de valores. • Para retornar aquellos registros que no coinciden mediante una relación entre tablas, se utiliza la cláusula OUTER JOIN, donde podemos especificar de cual lado falta una coincidencia. – LEFT OUTER JOIN – RIGHT OUTER JOIN – FULL OUTER JOIN • La clave foránea se encuentren con el valor NULL. L5 -L -- 20 L
  • 21. Usando la cláusula LEFT,OUTER JOIN SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON e.department_id = d.department_id ORDER BY d.department_id DESC; last_name | department_id | department_name -------------+---------------+------------------ Grant | | Gietz | 110 | Accounting Higgins | 110 | Accounting Urman | 100 | Finance Faviet | 100 | Finance Chen | 100 | Finance Sciarra | 100 | Finance Popp | 100 | Finance Greenberg | 100 | Finance King | 90 | Executive De Haan | 90 | Executive Kochhar | 90 | Executive Russell | 80 | Sales McEwen | 80 | Sales ▪ ▪ ▪ (107 rows) L5 -L -- 21 L
  • 22. Usando la cláusula RIGHT OUTER JOIN SELECT e.last_name, e.department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON e.department_id = d.department_id ORDER BY d.department_id DESC; last_name | department_id | department_name -------------+---------------+---------------------- | | Payroll | | Recruiting | | Retail Sales | | Government Sales | | IT Helpdesk | | NOC | | IT Support | | Operations ▪ ▪ ▪ | | Shareholder Services | | Control And Credit | | Corporate Tax | | Treasury Higgins | 110 | Accounting Gietz | 110 | Accounting (122 rows) L5 -L -- 22 L
  • 23. Usando la cláusula FULL OUTER JOIN SELECT e.last_name, e.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON e.department_id = d.department_id ORDER BY d.department_id DESC; last_name | department_id | department_name -------------+---------------+---------------------- Grant | | | | Payroll | | Recruiting | | Retail Sales | | Government Sales | | IT Helpdesk | | NOC | | IT Support ▪ ▪ ▪ | | Shareholder Services | | Control And Credit | | Corporate Tax | | Treasury Higgins | 110 | Accounting Gietz | 110 | Accounting (123 rows) L5 -L -- 23 L
  • 24. Producto Cartesiano • El producto cartesiano se forma cuando: – Se omite una condición en el JOIN. – La condición del JOIN es invalida. – Todos los registros de la primera tabla se relacionan con todos los registros de la segunda tabla. – Se utiliza la cláusula CROSS JOIN. • Para evitar un producto cartesiano, siempre debe incluir una condición valida dentro del JOIN. L5 -L -- 24 L
  • 25. Generando el producto cartesiano DEPARTMENTS EMPLOYEES department_name | department_id department_id | last_name ----------------------+--------------- ---------------+------------- Administration | 10 | Grant Marketing | 20 110 | Gietz Purchasing | 30 110 | Higgins Human Resources | 40 100 | Urman Shipping | 50 100 | Faviet IT | 60 100 | Chen Public Relations | 70 100 | Sciarra Sales | 80 100 | Popp ▪ ▪ ▪ ▪ ▪ ▪ (27 rows) (107 rows) employee_id | department_id | department_name -------------+---------------+---------------------- 145 | 10 | Administration 145 | 20 | Marketing Producto cartesiano: 145 | 30 | Purchasing 145 | 40 | Human Resources 27 x 107 = 2889 registros 145 | 50 | Shipping 145 | 60 | IT 145 | 70 | Public Relations ▪ ▪ ▪ (2889 rows) L5 -L -- 25 L
  • 26. Usando la cláusula CROSS JOIN SELECT e.employee_id, d.department_id, d.department_name FROM employees e CROSS JOIN departments d; employee_id | department_id | department_name -------------+---------------+---------------------- 145 | 10 | Administration 145 | 20 | Marketing 145 | 30 | Purchasing 145 | 40 | Human Resources 145 | 50 | Shipping 145 | 60 | IT 145 | 70 | Public Relations 145 | 80 | Sales 145 | 90 | Executive 145 | 100 | Finance ▪ ▪ ▪ (106 rows) L5 -L -- 26 L
  • 27. Resumen En esta lección, usted debió entender como usar la cláusula JOIN para mostrar los datos que provienen de distintas tablas usando: • [ INNER ] JOIN • LEFT [ OUTER ] JOIN • RIGHT [ OUTER ] JOIN • FULL [ OUTER ] JOIN • CROSS JOIN • NATURAL JOIN L5 -L -- 27 L