Chapter 06-Displaying Data From multiple Tables - 01

Objectives

After completing this lesson,you should be able to do the following:

  • Write SELECT statements to access data from more than one table using equijoins and nonequijoins.
  • Join a table to itself by using a self-join
  • View data that generally does not meet a join condtions by using outer joins
  • Generate a Cartesian product of all rows from two or more tables.

Lesson Agenda

Types of JOINS and its syntax

  • Nature join:
    • -USING clause
    • -ON clause
  • Self-join
  • Nonequijoins
  • OUTER join
    • -LEFT OUTER join
    • -RIGHT OUTER join
    • -FULL OUTER join
  • Cartesian product
    • -Cross join

Obtaining Data from Multiple Tables

equijoin:两张表基于某个值相等,而连接起来.

Types of Joins

Joins that are complicant with the SQL:1999 standard include the following:

  • Natural joins:
    • -NATURAL JOIN clause
    • -USING clause
    • -ON clause
  • Outer joins:
    • -LEFT OUTER JOIN
    • -RIGHT OUTER JOIN
    • -FULL OUTER JOIN
  • Cross joins

Joining Tables Using SQL:1999 Syntax

Use a join to query data from more than one table:

View Code
SELECT table1.column,table2.column

FROM table1

[NATURAL JOIN table2] | 

[JOIN table2 USING (column_name)] | 

[JOIN table2 ON (table1.column_name = table2.column_name)] | 

[LEFT|RIGHT|OUTER JOIN table2 ON (table1.column_name = table2.column_name)] | 

[CROSS JOIN table2];

Joining Tables Using Oracle Syntax

  • Use a join to query data from more than one table:
SELECT table1.column_name,table2.column_name

FROM table1,table2

WHERE table1.column1 = table2.column2
  • Write the join condition in the WHERE clause
  • Prefix the column name with the table name when the same column name appears in more than one table.
INNER JOIN
SQL> SELECT e.employee_id,e.last_name,d.department_id,d.department_name FROM employees e,departments d WHERE e.department_id = d.department_id;

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        200 Whalen                               10 Administration
        201 Hartstein                            20 Marketing
        202 Fay                                  20 Marketing
        114 Raphaely                             30 Purchasing
        119 Colmenares                           30 Purchasing
        115 Khoo                                 30 Purchasing
        116 Baida                                30 Purchasing
        117 Tobias                               30 Purchasing
        118 Himuro                               30 Purchasing
        203 Mavris                               40 Human Resources
        198 OConnell                             50 Shipping

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        199 Grant                                50 Shipping
        120 Weiss                                50 Shipping
        121 Fripp                                50 Shipping
        122 Kaufling                             50 Shipping
        123 Vollman                              50 Shipping
        124 Mourgos                              50 Shipping
        125 Nayer                                50 Shipping
        126 Mikkilineni                          50 Shipping
        127 Landry                               50 Shipping
        128 Markle                               50 Shipping
        129 Bissot                               50 Shipping

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        130 Atkinson                             50 Shipping
        131 Marlow                               50 Shipping
        132 Olson                                50 Shipping
        133 Mallin                               50 Shipping
        134 Rogers                               50 Shipping
        135 Gee                                  50 Shipping
        136 Philtanker                           50 Shipping
        137 Ladwig                               50 Shipping
        138 Stiles                               50 Shipping
        139 Seo                                  50 Shipping
        140 Patel                                50 Shipping

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        141 Rajs                                 50 Shipping
        142 Davies                               50 Shipping
        143 Matos                                50 Shipping
        144 Vargas                               50 Shipping
        180 Taylor                               50 Shipping
        181 Fleaur                               50 Shipping
        182 Sullivan                             50 Shipping
        183 Geoni                                50 Shipping
        184 Sarchand                             50 Shipping
        185 Bull                                 50 Shipping
        186 Dellinger                            50 Shipping

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        187 Cabrio                               50 Shipping
        188 Chung                                50 Shipping
        189 Dilly                                50 Shipping
        190 Gates                                50 Shipping
        191 Perkins                              50 Shipping
        192 Bell                                 50 Shipping
        193 Everett                              50 Shipping
        194 McCain                               50 Shipping
        195 Jones                                50 Shipping
        196 Walsh                                50 Shipping
        197 Feeney                               50 Shipping

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        104 Ernst                                60 IT
        103 Hunold                               60 IT
        107 Lorentz                              60 IT
        106 Pataballa                            60 IT
        105 Austin                               60 IT
        204 Baer                                 70 Public Relation
                                                    s

        176 Taylor                               80 Sales
        177 Livingston                           80 Sales
        179 Johnson                              80 Sales

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        175 Hutton                               80 Sales
        174 Abel                                 80 Sales
        173 Kumar                                80 Sales
        172 Bates                                80 Sales
        171 Smith                                80 Sales
        170 Fox                                  80 Sales
        169 Bloom                                80 Sales
        168 Ozer                                 80 Sales
        145 Russell                              80 Sales
        146 Partners                             80 Sales
        147 Errazuriz                            80 Sales

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        148 Cambrault                            80 Sales
        149 Zlotkey                              80 Sales
        150 Tucker                               80 Sales
        151 Bernstein                            80 Sales
        152 Hall                                 80 Sales
        153 Olsen                                80 Sales
        154 Cambrault                            80 Sales
        155 Tuvault                              80 Sales
        156 King                                 80 Sales
        157 Sully                                80 Sales
        158 McEwen                               80 Sales

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        159 Smith                                80 Sales
        160 Doran                                80 Sales
        161 Sewall                               80 Sales
        162 Vishney                              80 Sales
        163 Greene                               80 Sales
        164 Marvins                              80 Sales
        165 Lee                                  80 Sales
        166 Ande                                 80 Sales
        167 Banda                                80 Sales
        101 Kochhar                              90 Executive
        100 King                                 90 Executive

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        102 De Haan                              90 Executive
        110 Chen                                100 Finance
        108 Greenberg                           100 Finance
        111 Sciarra                             100 Finance
        112 Urman                               100 Finance
        113 Popp                                100 Finance
        109 Faviet                              100 Finance
        206 Gietz                               110 Accounting
        205 Higgins                             110 Accounting

106 rows selected.

Qualifying Ambiguous Column Names

  • Use table prefixes to qualify column names that are in multiple tables.
  • Use table prefixes to improve performance
  • Instead of full table name prefixes,use table aliases.
  • Table alias gives a table a short name:
  • -Keeps SQL code smaller,uses less memory
  • Use column aliases to distinguish columns that have identical names,but reside in different tables.
正常别名使用
SQL> SELECT e.employee_id,e.last_name,d.department_id,d.department_name FROM employees e,departments d WHERE e.department_id = d.department_id;

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        200 Whalen                               10 Administration
        201 Hartstein                            20 Marketing
        202 Fay                                  20 Marketing
        114 Raphaely                             30 Purchasing
        119 Colmenares                           30 Purchasing
        115 Khoo                                 30 Purchasing
        116 Baida                                30 Purchasing
        117 Tobias                               30 Purchasing
        118 Himuro                               30 Purchasing
        203 Mavris                               40 Human Resources
        198 OConnell                             50 Shipping

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        199 Grant                                50 Shipping
        120 Weiss                                50 Shipping
        121 Fripp                                50 Shipping
        122 Kaufling                             50 Shipping
        123 Vollman                              50 Shipping
        124 Mourgos                              50 Shipping
        125 Nayer                                50 Shipping
        126 Mikkilineni                          50 Shipping
        127 Landry                               50 Shipping
        128 Markle                               50 Shipping
        129 Bissot                               50 Shipping

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        130 Atkinson                             50 Shipping
        131 Marlow                               50 Shipping
        132 Olson                                50 Shipping
        133 Mallin                               50 Shipping
        134 Rogers                               50 Shipping
        135 Gee                                  50 Shipping
        136 Philtanker                           50 Shipping
        137 Ladwig                               50 Shipping
        138 Stiles                               50 Shipping
        139 Seo                                  50 Shipping
        140 Patel                                50 Shipping

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        141 Rajs                                 50 Shipping
        142 Davies                               50 Shipping
        143 Matos                                50 Shipping
        144 Vargas                               50 Shipping
        180 Taylor                               50 Shipping
        181 Fleaur                               50 Shipping
        182 Sullivan                             50 Shipping
        183 Geoni                                50 Shipping
        184 Sarchand                             50 Shipping
        185 Bull                                 50 Shipping
        186 Dellinger                            50 Shipping

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        187 Cabrio                               50 Shipping
        188 Chung                                50 Shipping
        189 Dilly                                50 Shipping
        190 Gates                                50 Shipping
        191 Perkins                              50 Shipping
        192 Bell                                 50 Shipping
        193 Everett                              50 Shipping
        194 McCain                               50 Shipping
        195 Jones                                50 Shipping
        196 Walsh                                50 Shipping
        197 Feeney                               50 Shipping

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        104 Ernst                                60 IT
        103 Hunold                               60 IT
        107 Lorentz                              60 IT
        106 Pataballa                            60 IT
        105 Austin                               60 IT
        204 Baer                                 70 Public Relation
                                                    s

        176 Taylor                               80 Sales
        177 Livingston                           80 Sales
        179 Johnson                              80 Sales

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        175 Hutton                               80 Sales
        174 Abel                                 80 Sales
        173 Kumar                                80 Sales
        172 Bates                                80 Sales
        171 Smith                                80 Sales
        170 Fox                                  80 Sales
        169 Bloom                                80 Sales
        168 Ozer                                 80 Sales
        145 Russell                              80 Sales
        146 Partners                             80 Sales
        147 Errazuriz                            80 Sales

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        148 Cambrault                            80 Sales
        149 Zlotkey                              80 Sales
        150 Tucker                               80 Sales
        151 Bernstein                            80 Sales
        152 Hall                                 80 Sales
        153 Olsen                                80 Sales
        154 Cambrault                            80 Sales
        155 Tuvault                              80 Sales
        156 King                                 80 Sales
        157 Sully                                80 Sales
        158 McEwen                               80 Sales

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        159 Smith                                80 Sales
        160 Doran                                80 Sales
        161 Sewall                               80 Sales
        162 Vishney                              80 Sales
        163 Greene                               80 Sales
        164 Marvins                              80 Sales
        165 Lee                                  80 Sales
        166 Ande                                 80 Sales
        167 Banda                                80 Sales
        101 Kochhar                              90 Executive
        100 King                                 90 Executive

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID DEPARTMENT_NAME
----------- ------------------------- ------------- ---------------
        102 De Haan                              90 Executive
        110 Chen                                100 Finance
        108 Greenberg                           100 Finance
        111 Sciarra                             100 Finance
        112 Urman                               100 Finance
        113 Popp                                100 Finance
        109 Faviet                              100 Finance
        206 Gietz                               110 Accounting
        205 Higgins                             110 Accounting

106 rows selected.
错误别名用法
SQL> SELECT e.employee_id,e.last_name,d.department_id,d.department_name FROM employees e,departments d WHERE employees.department_id = d.department_id;
SELECT e.employee_id,e.last_name,d.department_id,d.department_name FROM employees e,departments d WHERE employees.department_id = d.department_id
                                                                                                        *
ERROR at line 1:
ORA-00904: "EMPLOYEES"."DEPARTMENT_ID": invalid identifier

 

 

 

 

 

 

 

 

 

 

posted @ 2013-04-15 15:37  ArcerZhang  阅读(188)  评论(0编辑  收藏  举报