Senin, 14 November 2011

Oracle Database 10g- SQL Fundamentals I

Lesson 1 : Memperoleh Data Menggunakan Pernyataan SQL SELECT Baca Selengkapnya >>
Lesson 2 : Membatasi dan Mengurutkan Data Baca Selengkapnya >>
Lesson 3 : Menggunakan Fungsi Baris Tunggal untuk Menyesuaika Output Baca Selengkapnya >>
Lesson 4 : Melaporkan Pengumpulan Data Menggunakan Fungsi Group Baca Selengkapnya >>
Lesson 5 : Menampilkan Data dari Beberapa Tabel Baca Selengkapnya >>
Lesson 6 : Menggunakan Subquerie untuk Menyelesaikan Queri Baca Selengkapnya >>

Lesson 6 : Menggunakan Subquerie untuk Menyelesaikan Queri


Setelah melengkapi pelajaran ini, kamu harus mampu untuk melakukan hal-hal berikut:

  • Definisikan subqueries 
  • Deskripsikan jenis dari masalah yang subqueries dapat selesaikan 
  • Daftarkan jenis dari subqueries 
  • Tulis baris tunggal dan baris perkalian subqueries

    Menggunakan Sebuah Subqueri
    SELECT last_name
    FROM   employees
    WHERE  salary >
                   (SELECT salary
                    FROM   employees
                    WHERE  last_name = 'Abel');

    Melaksanakan Subqueri Baris Tunggal
    SELECT last_name, job_id, salary
    FROM   employees
    WHERE  job_id
                    (SELECT job_id
                     FROM   employees
                     WHERE  employee_id = 141)
    AND    salary >
                    (SELECT salary
                     FROM   employees
                     WHERE  employee_id = 143);

    Menggunakan Fungsi Group dalam Sebuah Subqueri
    SELECT last_name, job_id, salary
    FROM   employees
    WHERE  salary =
                    (SELECT MIN(salary)
                     FROM   employees);

    Kalimat HAVING dengan Subqueri
    SELECT   department_id, MIN(salary)
    FROM     employees
    GROUP BY department_id
    HAVING   MIN(salary) >
                           (SELECT MIN(salary)
                            FROM   employees
                            WHERE  department_id = 50);


    Apa yang terjadi dengan pernyataan ini?
    SELECT employee_id, last_name
    FROM   employees
    WHERE  salary =
                    (SELECT   MIN(salary)
                     FROM     employees
                     GROUP BY department_id);


    Akankah pernyataan ini menhasilkan baris?
    SELECT last_name, job_id
    FROM   employees
    WHERE  job_id =
                    (SELECT job_id
                     FROM   employees
                     WHERE  last_name = 'Haas');


    Menggunakan Operator Apapun dalam Subqueri Multiple-Rows
    SELECT employee_id, last_name, job_id, salary
    FROM   employees
    WHERE  salary < ANY
                        (SELECT salary
                         FROM   employees
                         WHERE  job_id = 'IT_PROG')
    AND    job_id <> 'IT_PROG';



    Menggunakan Semua Operator dalam Subqueri Multiple-Rows
    SELECT employee_id, last_name, job_id, salary
    FROM   employees
    WHERE  salary < ALL
                        (SELECT salary
                         FROM   employees
                         WHERE  job_id = 'IT_PROG')
    AND    job_id <> 'IT_PROG';


    Nilai NULL pada Subqueri
    SELECT emp.last_name
    FROM   employees emp
    WHERE  emp.employee_id NOT IN
                               (SELECT mgr.manager_id
                                FROM   employees mgr);









Lesson 5 : Menampilkan Data dari Beberapa Tabel

Setelah melengkapi pelajaran ini, kamu harus mampu untuk melakukan hal-hal berikut: 
  • Tulis pernyataan SELECT   untuk mengakses data dari lebih dari satu tabel mempergunakan equijoins dan bukan equijoins 
  • Gabungkan satu tabel itu sendiri dengan menggunakan join-self 
  • Lihat data yang umumnya tidak menjumpai satu kondisi gabungan  dengan mempergunakan penggabungan luar (outer join) 
Hasilkan satu produk Cartesian dari semua baris dari dua atau lebih tabel 

Mendapatkan Kembali Dokumen dengan Penggabungan Natural
SELECT department_id, department_name,
       location_id, city
FROM   departments
NATURAL JOIN locations ;

Mendapatkan Kembali Dokumen dengan Kalimat USING
SELECT employees.employee_id, employees.last_name,
       departments.location_id, department_id
FROM   employees JOIN departments
USING (department_id) ;



Menggunakan Nama Lain Tabel

  • Mempergunakan nama lain tabel  untuk menyederhanakan queri-queri. 
  • Mempergunakan nama lain tabel  untuk meningkatkan kinerja
    SELECT e.employee_ide.last_name,
           d.location_iddepartment_id
    FROM   employees e JOIN departments d
    USING (department_id) ;



  • Mendapatkan Kembali Dokumen dengan Kalimat ON
    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-Join Menggunakan Kalimat ON
    SELECT e.last_name emp, m.last_name mgr
    FROM   employees e JOIN employees m
    ON    (e.manager_id = m.employee_id);

    Menerapkan Kondisi Tambahan pada Sebuah Penggabungan
    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)
    AND    e.manager_id = 149 ;

    Membuat Penggabunga THREE-WAY dengan Kalimat ON
    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;

    Mengembalikan Dokumen dengan 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;


    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) ;

    Membuat Penggabungan Silang (CROSS)
    SELECT last_name, department_name
    FROM   employees
    CROSS JOIN departments ;








    Lesson 4 : Melaporkan Pengumpulan Data Menggunakan Fungsi Group

    Setelah melengkapi pelajaran ini, kamu harus mampu untuk melakukan hal-hal berikut: 

    • Mengidentifikasi fungsi grup yang tersedia
    • Mendeskripsikan penggunaan dari fungsi grup.
    • Penggolingan data dengan menggunakan kata GROUP BY
    • Memasukkan atau mengeluarkan kumpulan baris dengan menggunakan kata HAVING

      Menggunakan Fungsi AVD dan SUM
      SELECT AVG(salary), MAX(salary),
             MIN(salary), SUM(salary)
      FROM   employees
      WHERE  job_id LIKE '%REP%';

      Menggunakan Fungsi MIN dan MAX
      SELECT MIN(hire_date), MAX(hire_date)
      FROM    employees;


      Menggunakan Fungsi COUNT
      COUNT (*) mengembalikan angka dari baris pada suatu tabel
      SELECT COUNT(*)
      FROM   employees
      WHERE  department_id = 50;

      COUNT (expr) mengembalikan angka dari baris dengan nilai tidak NULL untuk expr
      SELECT COUNT(commission_pct)
      FROM   employees
      WHERE  department_id = 80;

      Menggunakan Kata Kunci DISTINCT
      SELECT COUNT(DISTINCT department_id)
      FROM   employees;

      Fungsi Group dan Nilai NULL
      Fungsi Group mengabaikan nilai NULL pada kolom :
      SELECT AVG(commission_pct)
      FROM   employees;

      Fungsi NVL memaksa Fungsi Group untuk memasukkan nilai NULL:
      SELECT AVG(NVL(commission_pct, 0))
      FROM   employees;

      Menggunakan Kalimat GROUP BY
      Semual kolom yang berada dalam daftar SELECT yang tidak ada dalam fungsi GROUP pasti berada dalam kalimat GROUP BY
      SELECT   department_id, AVG(salary)
      FROM     employees
      GROUP BY department_id ;

      Kolom GROUP BY tidak harus berada dalam daftar SELECT
      SELECT   AVG(salary)
      FROM     employees
      GROUP BY department_id ;

      Menggunakan Kalimat GROUP BY pada Kolom Perkalian
      SELECT   department_id dept_id, job_id, SUM(salary)
      FROM     employees
      GROUP BY department_id, job_id ;

      Queri-Queri Ilegal Menggunakan Fungsi Group
      Kolom atau ekspresi apapun dalam daftar SELECT yang bukan kumpulan fungsi pasti berada dalam kalimat GROUP BY :
      SELECT department_id, COUNT(last_name)
      FROM   employees;

      SELECT   department_id, AVG(salary)
      FROM     employees
      WHERE    AVG(salary) > 8000
      GROUP BY department_id;

      Menggunakan Kalimat HAVING
      SELECT   department_id, MAX(salary)
      FROM     employees
      GROUP BY department_id
      HAVING   MAX(salary)>10000 ;

      SELECT   job_id, SUM(salary) PAYROLL
      FROM     employees
      WHERE    job_id NOT LIKE '%REP%'
      GROUP BY job_id
      HAVING   SUM(salary) > 13000
      ORDER BY SUM(salary);

      Fungsi Group Cadangan
      Menampilkan rata-rata gaji maksimum
      SELECT   MAX(AVG(salary))
      FROM     employees
      GROUP BY department_id;