1 of 32

Mata Kuliah : BASIS DATA�Minggu ke 10

2 of 32

Tujuan Perkuliahan

Mahasiswa mampu mendesain SQL (Structured Query Language) .

3 of 32

Materi Pembelajaran

  • Sub Query

4 of 32

Skema Relasi yang Digunakan Classicmodels

5 of 32

  • Sub Query adalah suatu query yang menjadi bagian dari suatu query.
  • Sub Query digunakan untuk menangani masalah yang kompleks yang mungkin sulit untuk dilakukan hanya dengan sebuah query.
  • Menyediakan cara alternatif untuk melakukan operasi yang membutuhkan join atau union yang rumit.

Sub Query

6 of 32

  • Cari data produk yang harga belinya (buyPrice) melebihi rata-rata harga belinya.
    • Query membutuhkan Sub Query karena untuk dapat mencari produk yang diinginkan, maka rata-rata harga belinya harus dicari terlebih dahulu.

Contoh Kasus

7 of 32

Contoh Kasus

8 of 32

Aturan Sub Query

  • Dalam sebuah query boleh memiliki lebih dari 1 sub query.
  • Sebuah sub query boleh memiliki sub query lagi.
  • Operator perbandingan yang dapat digunakan adalah =, >, =, <=, <>, !=, <=>, IN, ANY, SOME, ALL, EXISTS, NOT EXISTS

9 of 32

Contoh Data

10 of 32

Operator =, >, =, <=, <>, !=, <=> dalam sub query

  • Syarat dalam penggunaan operator tersebut adalah sub querynya hanya boleh memiliki 1 baris.
  • Jika barisnya memiliki lebih dari 1 baris akan menampilkan pesan “Subquery returns more than 1 row”

11 of 32

Operator =, >, =, <=, <>, !=, <=> dalam sub query

  • Contoh Benar

  • Untuk operator > boleh diganti dengan operator lain untuk mendapatkan hasil yang berbeda.

12 of 32

Operator =, >, =, <=, <>, !=, <=> dalam sub query

  • Contoh Salah

  • SQL di atas akan menampilkan pesan kesalahan “#1242 - Subquery returns more than 1 row” karena mySQL tidak bisa melakukan perbandingan dengan data lebih dari 1 baris. Solusi untuk masalah ini adalah menggunakan ANY, SOME atau ALL.

13 of 32

Operator ANY, SOME, ALL dalam Sub Query

  • Operator ANY, SOME dan ALL, harus diawali dengan penggunaan operator perbandingan =, >, =, <=, <>, !=, <=>.
  • Operator ANY akan memeriksa apakah suatu nilai dari outer query sesuai dengan SALAH SATU anggota dari hasil sebuah sub query. Kondisi sesuai ditentukan oleh operator yang ditulis sebelumnya.
  • Operator SOME adalah alias dari ANY
  • Operator ALL akan memeriksa apakah suatu nilai dari outer query sesuai dengan SEMUA anggota dari hasil sebuah sub query.
  • Sub query boleh memiliki data lebih dari 1 baris

14 of 32

Operator ANY, SOME, ALL dalam Sub Query

15 of 32

Operator ANY, SOME, ALL dalam Sub Query

  • Menghasilkan 0 Rows, karena tidak ada EmployeeNumber yang sama dengan semua employeeNumber yang ada di sub query

16 of 32

Operator ANY, SOME, ALL dalam Sub Query

17 of 32

Operator ANY, SOME, ALL dalam Sub Query

18 of 32

Operator ANY, SOME, ALL dalam Sub Query

19 of 32

  • Operator IN akan memeriksa apakah suatu nilai di outer query ada dalam sebuah hasil sub query. •
  • Operator IN bisa disamakan dengan operator “= ANY”
  • Lawan hasil dari operasi IN adalah NOT IN.
  • Operator NOT IN bisa disamakan dengan “<> ALL”
  • Sub query boleh memiliki data lebih dari 1 baris

Operator IN dalam Sub Query

20 of 32

Operator IN dalam Sub Query

21 of 32

Operator IN dalam Sub Query

22 of 32

  • Perbandingan banyak kolom dimungkinkan dengan menuliskan field-field yang akan dicocokkan dalam sebuah tanda kurung ().
  • Untuk lebih jelas, lihat contoh di slide berikutnya

Perbandingan dengan lebih dari 1 kolom pada Sub Query

23 of 32

Perbandingan dengan lebih dari 1 kolom pada Sub Query

Mencari pegawai yang sekantor dan seatasasn denan pegawai yang bernomor 1370

24 of 32

  • Sebuah correlated subquery adalah suatu subquery yang memiliki sebuah reference ke tabel yang juga menjadi outer query.
  • Subquery boleh ditempatkan di daftar kolom atau dalam WHERE

Correlated Sub Query

25 of 32

Correlated Sub Query

26 of 32

Correlated Sub Query

27 of 32

  • EXISTS digunakan untuk memeriksa apakah subquery memiliki baris atau tidak. Jika minimal ada 1 baris (walaupun hanya berisi NULL), maka akan bernilai TRUE
  • NOT EXISTS adalah kebalikan dari EXISTS

Exists dan Not Exists

28 of 32

Akan menampilkan semua data employee karena subquerynya bernilai TRUE.

Exists dan Not Exists

29 of 32

Tidak akan menampilkan semua data employee karena subquerynya bernilai FALSE.

Exists dan Not Exists

30 of 32

Akan menampilkan semua data employee karena subquerynya bernilai TRUE

Exists dan Not Exists

31 of 32

  • Biasanya penggunaan [NOT] EXISTS selalu melibatkan correlated subquery.

Exists dan Not Exists

  • Query diatas akan menampilkan semua pegawai yang memiliki bawahan (subquerynya menghasilkan baris).

32 of 32