Displaying Data from Multiple Tables
Database Design
       Muhammad Rudyanto Arief
          rudy@amikom.ac.id
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 non- equijoins
  §   Join a table to itself by using a self-join
  §   View data that generally does not meet a join condition by using outer
      joins
  §   Generate a Cartesian product of all rows from two or more tables
Obtaining Data from Multiple Tables
  EMPLOYEES       DEPARTMENTS
              …
Types of Joins
Joins that are compliant with the SQL:1999 standard
include the following:
§ Cross joins
§ Inner join atau Natural joins
§ USING clause
§ Full (or two-sided) outer joins
§ Arbitrary join conditions for outer joins
Cross Join
§ Menggabungkan semua record dari tabel pertama dengan semua
  record di tabel kedua.
§ Banyaknya record dari cross join = jumlah record tabel pertama X
  jumlah record tabel kedua
§ Contoh:
  § SELECT *
    FROM mahasiswa CROSS JOIN dosen;
  § SELECT *
    FROM mahasiswa, dosen;
Inner Join
§ Menghubungkan 2 (atau lebih) tabel berdasarkan atribut
  penghubung.
§ Metode 1:
  § SELECT *
    FROM mahasiswa INNER JOIN dosen
    USING (nik);
§ Metode 2:
  § SELECT *
    FROM mahasiswa INNER JOIN dosen ON mahasiswa.nik = dosen.nik;
Inner Join (lanjutan 1)
§ Metode 3:
  § SELECT * FROM mahasiswa NATURAL INNER JOIN dosen;
§ Metode 4 (paling kompatibel):
  § SELECT * FROM mahasiswa, dosen
    WHERE mahasiswa.nik = dosen.nik;
§ Perhatian: Untuk INNER JOIN, Anda dapat menghilangkan kata
  ‘INNER’. Jadi, cukup dengan kata ‘JOIN’ saja.
Inner Join (lanjutan 2)
§ Dengan metode 4, jika kolom yang ingin ditampilkan ada di lebih dari
  2 tabel, maka Anda harus menentukan tabel mana yang diinginkan.
§ Contoh:
  § SELECT dosen.nik, nama_mhs, nik FROM mahasiswa, dosen
    WHERE mahasiswa.nik = dosen.nik;
Joining Tables Using SQL:1999 Syntax
Use a join to query data from more than one table:
     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|FULL OUTER JOIN table2
       ON (table1.column_name = table2.column_name)]|
     [CROSS JOIN table2];
Creating Natural Joins
§ The NATURAL JOIN clause is based on all columns in
  the two tables that have the same name.
§ It selects rows from the two tables that have equal values
  in all matched columns.
§ If the columns having the same names have different
  data types, an error is returned.
  Qualifying Ambiguous Column Names
§ Use table prefixes to qualify column names that are
  in multiple tables.
§ Use table prefixes to improve performance.
§ Use column aliases to distinguish columns that have
  identical names but reside in different tables.
§ Do not use aliases on columns that are identified in
  the USING clause and listed elsewhere in the SQL
  statement.
Using Table Aliases
§ Use table aliases to simplify queries.
§ Use table aliases to improve performance.
   SELECT e.employee_id, e.last_name,
          d.location_id, department_id
   FROM   employees e JOIN departments d
   ON e.department_id = d.department_id;
Creating Joins with the ON Clause
§ The join condition for the natural join is basically an
  equijoin of all columns with the same name.
§ Use the ON clause to specify arbitrary conditions or
  specify columns to join.
§ The join condition is separated from other search
  conditions.
§ The ON clause makes code easy to understand.
Retrieving Records with the ON Clause
  SELECT e.employee_id, e.last_name, e.department_id,
         d.department_id, d.location_id
  FROM   employees e JOIN departments d
  ON     (e.department_id = d.department_id);
  …
Self-Joins Using the ON Clause
     EMPLOYEES (WORKER)            EMPLOYEES (MANAGER)
     …                             …
             MANAGER_ID in the WORKER table is equal to
                EMPLOYEE_ID in the MANAGER table.
Self-Joins Using the ON Clause
   SELECT e.last_name emp, m.last_name mgr
   FROM   employees e JOIN employees m
   ON    (e.manager_id = m.employee_id);
   …
Applying Additional Conditions to a Join
Creating Three-Way Joins with the ON Clause
   …
Non-Equijoins
   EMPLOYEES    JOB_GRADES
                Salary in the EMPLOYEES
                table must be between
   …            lowest salary and highest
                salary in the JOB_GRADES
                table.
Retrieving Records with Non-Equijoins
   SELECT e.last_name, e.salary, j.grade_level
   FROM   employees e JOIN job_grades j
   ON     e.salary
          BETWEEN j.lowest_sal AND j.highest_sal;
   …
Outer Joins
     DEPARTMENTS   EMPLOYEES
                    There are no employees in
                    department 190.
INNER Versus OUTER Joins
§ In SQL:1999, the join of two tables returning only
  matched rows is called an inner join.
§ A join between two tables that returns the results of
  the inner join as well as the unmatched rows from
  the left (or right) tables is called a left (or right) outer
  join.
§ A join between two tables that returns the results of
  an inner join as well as the results of a left and right
  join is a full outer join.
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) ;
  …
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) ;
  …
FULL OUTER JOIN
  SELECT e.last_name, d.department_id, d.department_name
  FROM   employees e FULL OUTER JOIN departments d
  ON   (e.department_id = d.department_id) ;
  …
Cartesian Products
§ A Cartesian product is formed when:
 o A join condition is omitted
 o A join condition is invalid
 o All rows in the first table are joined to all rows in the
    second table
§ To avoid a Cartesian product, always include a valid join
  condition.
Generating a Cartesian Product
      EMPLOYEES (20 rows)       DEPARTMENTS (8 rows)
       Cartesian product:
        20 x 8 = 160 rows
                            …
Creating Cross Joins
§ The CROSS JOIN clause produces the cross-
  product of two tables.
§ This is also called a Cartesian product between the
  two tables.    SELECT last_name, department_name
                FROM   employees
                CROSS JOIN departments ;
                …
Summary
In this lesson, you should have learned how to use
joins to display data from multiple tables by using:
§ Equijoins
§ Non-equijoins
§ Outer joins
§ Self-joins
§ Cross joins
§ Natural joins
§ Full (or two-sided) outer joins