SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Window functions in MySQL 8.0
Window functions in MySQL 8.0Window functions in MySQL 8.0
Window functions in MySQL 8.0Mydbops
 
80 different SQL Queries with output
80 different SQL Queries with output80 different SQL Queries with output
80 different SQL Queries with outputNexus
 
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
 
10 Creating Triggers
10 Creating Triggers10 Creating Triggers
10 Creating Triggersrehaniltifat
 
Window functions with SQL Server 2016
Window functions with SQL Server 2016Window functions with SQL Server 2016
Window functions with SQL Server 2016Mark Tabladillo
 
SQL-RDBMS Queries and Question Bank
SQL-RDBMS Queries and Question BankSQL-RDBMS Queries and Question Bank
SQL-RDBMS Queries and Question BankMd Mudassir
 
Restricting and sorting data
Restricting and sorting dataRestricting and sorting data
Restricting and sorting dataSyed Zaid Irshad
 
SQL practice questions set - 2
SQL practice questions set - 2SQL practice questions set - 2
SQL practice questions set - 2Mohd Tousif
 
SQL Functions and Operators
SQL Functions and OperatorsSQL Functions and Operators
SQL Functions and OperatorsMohan Kumar.R
 
Introduction to structured query language (sql)
Introduction to structured query language (sql)Introduction to structured query language (sql)
Introduction to structured query language (sql)Sabana Maharjan
 
Sql queries questions and answers
Sql queries questions and answersSql queries questions and answers
Sql queries questions and answersMichael Belete
 
SQL practice questions set
SQL practice questions setSQL practice questions set
SQL practice questions setMohd Tousif
 
Aggregate functions
Aggregate functionsAggregate functions
Aggregate functionssinhacp
 

Was ist angesagt? (20)

PostgreSQL - Lección 10 - Vistas
PostgreSQL - Lección 10 - VistasPostgreSQL - Lección 10 - Vistas
PostgreSQL - Lección 10 - Vistas
 
Window functions in MySQL 8.0
Window functions in MySQL 8.0Window functions in MySQL 8.0
Window functions in MySQL 8.0
 
SQL BASIC QUERIES
SQL  BASIC QUERIES SQL  BASIC QUERIES
SQL BASIC QUERIES
 
80 different SQL Queries with output
80 different SQL Queries with output80 different SQL Queries with output
80 different SQL Queries with output
 
All questions
All questionsAll questions
All questions
 
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
 
10 Creating Triggers
10 Creating Triggers10 Creating Triggers
10 Creating Triggers
 
Window functions with SQL Server 2016
Window functions with SQL Server 2016Window functions with SQL Server 2016
Window functions with SQL Server 2016
 
SQL-RDBMS Queries and Question Bank
SQL-RDBMS Queries and Question BankSQL-RDBMS Queries and Question Bank
SQL-RDBMS Queries and Question Bank
 
Restricting and sorting data
Restricting and sorting dataRestricting and sorting data
Restricting and sorting data
 
SQL practice questions set - 2
SQL practice questions set - 2SQL practice questions set - 2
SQL practice questions set - 2
 
Manualsqlserverparte
ManualsqlserverparteManualsqlserverparte
Manualsqlserverparte
 
Date and time functions in mysql
Date and time functions in mysqlDate and time functions in mysql
Date and time functions in mysql
 
SQL Functions and Operators
SQL Functions and OperatorsSQL Functions and Operators
SQL Functions and Operators
 
Introduction to structured query language (sql)
Introduction to structured query language (sql)Introduction to structured query language (sql)
Introduction to structured query language (sql)
 
Basic sql Commands
Basic sql CommandsBasic sql Commands
Basic sql Commands
 
PLSQL tutorial...
PLSQL tutorial...PLSQL tutorial...
PLSQL tutorial...
 
Sql queries questions and answers
Sql queries questions and answersSql queries questions and answers
Sql queries questions and answers
 
SQL practice questions set
SQL practice questions setSQL practice questions set
SQL practice questions set
 
Aggregate functions
Aggregate functionsAggregate functions
Aggregate functions
 

Andere mochten auch

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.
 
PostgreSQL - Lección 8 - Manipulando Datos y Transacciones
PostgreSQL - Lección 8 - Manipulando Datos y TransaccionesPostgreSQL - Lección 8 - Manipulando Datos y Transacciones
PostgreSQL - Lección 8 - Manipulando Datos y TransaccionesNicola 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
 

Andere mochten auch (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 8 - Manipulando Datos y Transacciones
PostgreSQL - Lección 8 - Manipulando Datos y TransaccionesPostgreSQL - Lección 8 - Manipulando Datos y Transacciones
PostgreSQL - Lección 8 - Manipulando Datos y Transacciones
 
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
 

Kürzlich hochgeladen

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 

Kürzlich hochgeladen (12)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 

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