salesRepEmployeeNumber = e.employeeNumber; PENGELOLAAN DATABASE, TABEL, DAN INDEX

21 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia JOIN LEBIH DARI 2 TABEL SOLUSI 1 MENGGUNAKAN KOMA DAN WHERE: SELECT o.orderNumber,c.customerName,e.firstname FROM orders o, customers c, employees e WHERE o.customerNumber = c.customerNumber AND

c.salesRepEmployeeNumber = e.employeeNumber;

SOLUSI 2 MENGGUNAKAN JOIN ON: SELECT o.ordernumber,c.customername,e.firstname FROM orders o JOIN customers c ON o.customerNumber = c.customerNumber JOIN employees e ON c.salesRepEmployeeNumber = e.employeeNumber; SOLUSI 3 MENGGUNAKAN NATURAL JOIN DAN JOIN: SELECT o.ordernumber,c.customername,e.firstname FROM orders o NATURAL JOIN customers c JOIN employees e ON c.salesRepEmployeeNumber = e.employeeNumber 22 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia SELF JOIN • Self join adalah suatu kondisi dimana suatu tabel berelasi tabel itu sendiri. • Dalam self join, penggunaan alias tabel PASTI digunakan. • Contoh kasus : – Tampilan data pegawai lengkap dengan data atasannya. Atasannya berasal dari tabel yang sama. – Perhatikan pada skema relasi ClassicModel, pada table Employees ada field reportsTo yang berelasi dengan field CustomerNumber pada tabel yang sama. – Bisa kita anggap bahwa kolom reportsTo merupakan kolom yang menyatakan siapa yang menjadi atasan seorang pegawai. 23 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia SELF JOIN SOLUSI 1 MENGGUNAKAN KOMA DAN WHERE: SELECT peg.EmployeeNumber NoPegawai, concat_ws ,peg.firstName,peg.lastName NamaPegawai, peg.reportsTo, ats.EmployeeNumber NoAtasan, concat_ws ,ats.firstName,ats.lastName NamaAtasan FROM employees peg, employees ats WHERE peg.reportsTo = ats.employeeNumber SOLUSI 2 JOIN ON: SELECT peg.EmployeeNumber NoPegawai, concat_ws ,peg.firstName,peg.lastName NamaPegawai, peg.reportsTo, ats.EmployeeNumber NoAtasan, concat_ws ,ats.firstName,ats.lastName NamaAtasan FROM employees peg JOIN employees ats ON peg.reportsTo = ats.employeeNumber 24 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia SELF JOIN … 22 Rows Pegawai 1002 Diane Murphi tidak ditampilkan karena nilai field reportsTo bernilai NULL, berarti dia adalah pegawai tertinggi tidak mempunyai atasan. 25 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia OUTER JOIN • OUTER JOIN adalah suatu join yang akan menampilkan baris hasil JOIN equi-join dilengkapi dengan baris yang tidak mempunyai relasi di kedua tabel. • Ada tiga jenis OUTER JOIN, yaitu – LEFT [OUTER] JOIN : menampilkan semua hasil equi join, lengkap dengan baris dari tabel kiri tabel 1 yang tidak mempunyai relasipasangan dari tabel kanan tabel 2. Jika relasi tidak terpenuhi, maka kolom yang berasal dari tabel kanan akan diberi nilai NULL – RIGHT [OUTER] JOIN : menampilkan semua hasil equi join, lengkap dengan baris dari tabel kanan tabel 2 yang tidak mempunyai relasipasangan dari tabel kiritabel 1. Jika relasi tidak terpenuhi, maka kolom yang berasal dari tabel kiri akan diberi nilai NULL – FULL [OUTER] JOIN : Baris Hasil JOIN + LEFT OUTER JOIN + RIGHT OUTER JOIN. MySQL tidak mendukung FULL OUTER JOIN, tetapi bisa diemulasikan. 26 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia LEFT [OUTER] JOIN Perhatikan SQL Berikut : SQL tersebut akan menampilkan semua data pegawai lengkap dengan nama atasan. Perbedaan dengan SELF JOIN adalah SEMUA baris di tabel kiri Employees peg akan ditampilkan walaupun tidak punya relasi ke tabel kanan Employees ats SELECT peg.EmployeeNumber NoPegawai, concat_ws ,peg.firstName,peg.lastName NamaPegawai, peg.reportsTo, ats.EmployeeNumber NoAtasan, concat_ws ,ats.firstName,ats.lastName NamaAtasan FROM employees peg LEFT JOIN employees ats ON peg.reportsTo = ats.employeeNumber 27 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia Pegawai yang mempunyai relasi ke tabel Atasan Baris tabel kiri yang mempunyai relasi di tabel Kanan Pegawai yang tidak mempunyai relasi ke tabel Atasan Baris tabel Kiri yang tidak punya relasi di tabel Kanan 28 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia LEFT [OUTER] JOIN Jika anda ingin mengambil baris data dari tabel kiri yang tidak punya relasi di tabel kanan data pegawai yang tidak mempunyai atasan, maka yang perlu ditambahkan adalah filter terhadap field yang bersumber dari tabel kanan Employees ats yang berisi NULL. 29 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia LEFT [OUTER] JOIN SELECT peg.EmployeeNumber NoPegawai, concat_ws ,peg.firstName,peg.lastName NamaPegawai, peg.reportsTo, ats.EmployeeNumber NoAtasan, concat_ws ,ats.firstName,ats.lastName NamaAtasan FROM employees peg LEFT JOIN employees ats ON peg.reportsTo = ats.employeeNumber WHERE ats.employeeNumber IS NULL 30 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia RIGHT [OUTER] JOIN Perhatikan SQL Berikut : SQL tersebut akan menampilkan semua data pegawai lengkap dengan nama atasan. Perbedaan dengan SELF JOIN adalah SEMUA baris di tabel kanan Employees ats akan ditampilkan walaupun tidak punya relasi ke tabel kiri Employees peg SELECT peg.EmployeeNumber NoPegawai, concat_ws ,peg.firstName,peg.lastName NamaPegawai, peg.reportsTo, ats.EmployeeNumber NoAtasan, concat_ws ,ats.firstName,ats.lastName NamaAtasan FROM employees peg RIGHT JOIN employees ats ON peg.reportsTo = ats.employeeNumber 31 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia Pegawai Atasan yang tidak mempunyai relasi ke tabel Pegawai Bawahan Baris Tabel Kanan yang tidak mempunyai relasi di Tabel Kiri … 32 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia RIGHT [OUTER] JOIN Jika anda ingin baris dari tabel kanan yang tidak mempunyai relasi ke tabel kiri data pegawai yang tidak mempunyai bawahan, maka yang perlu ditambahkan adalah filter terhadap field yang bersumber dari tabel kiri Employees peg yang berisi NULL. 33 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia RIGHT [OUTER] JOIN SELECT peg.EmployeeNumber NoPegawai, concat_ws ,peg.firstName,peg.lastName NamaPegawai, peg.reportsTo, ats.EmployeeNumber NoAtasan, concat_ws ,ats.firstName,ats.lastName NamaAtasan FROM employees peg RIGHT JOIN employees ats ON peg.reportsTo = ats.employeeNumber WHERE peg.employeeNumber IS NULL 34 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia RIGHT [OUTER] JOIN 35 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia FULL OUTER JOIN • FULL OUTER JOIN tidak disupport oleh MySQL. • Hasil suatu join FULL OUTER JOIN akan menghasilkan baris tabel kiri yang mempunyai relasi di tabel kanan + baris tabel kiri yang tidak mempunyai relasi di tabel kanan + baris tabel kanan yang tidak mempunyai relasi di tabel kiri • FULL OUTER JOIN merupakan : – Gabungan antara LEFT OUTER JOIN dengan hasil RIGHT OUTER JOIN yang tabel kirinya bernilai NULL Atau – Gabungan antara RIGHT OUTER JOIN dengan hasil LEFT OUTER JOIN yang tabel kanannya bernilai NULL 36 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia FULL OUTER JOIN SELECT peg.EmployeeNumber NoPegawai, concat_ws ,peg.firstName,peg.lastName NamaPegawai, peg.reportsTo, ats.EmployeeNumber NoAtasan, concat_ws ,ats.firstName,ats.lastName NamaAtasan FROM employees peg LEFT JOIN employees ats ON peg.reportsTo = ats.employeeNumber UNION SELECT peg.EmployeeNumber NoPegawai, concat_ws ,peg.firstName,peg.lastName NamaPegawai, peg.reportsTo, ats.EmployeeNumber NoAtasan, concat_ws ,ats.firstName,ats.lastName NamaAtasan FROM employees peg RIGHT JOIN employees ats ON peg.reportsTo = ats.employeeNumber WHERE peg.employeeNumber IS NULL 37 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia FULL OUTER JOIN SELECT peg.EmployeeNumber NoPegawai, concat_ws ,peg.firstName,peg.lastName NamaPegawai, peg.reportsTo, ats.EmployeeNumber NoAtasan, concat_ws ,ats.firstName,ats.lastName NamaAtasan FROM employees peg RIGHT JOIN employees ats ON peg.reportsTo = ats.employeeNumber UNION SELECT peg.EmployeeNumber NoPegawai, concat_ws ,peg.firstName,peg.lastName NamaPegawai, peg.reportsTo, ats.EmployeeNumber NoAtasan, concat_ws ,ats.firstName,ats.lastName NamaAtasan FROM employees peg LEFT JOIN employees ats ON peg.reportsTo = ats.employeeNumber WHERE ats.employeeNumber IS NULL 38 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia FULL OUTER JOIN 39 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia LATIHAN-LATIHAN • Cari data pemesanan yang dilakukan oleh customer yang berasal dari negara Austria 7 Rows 40 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia LATIHAN-LATIHAN • Tampilkan data item pemesanan OrderDetails lengkap dengan nama produk ProductName dan deskripsi jenis produknya textDescription 2,996 Rows 41 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia LATIHAN-LATIHAN • Tampilkan data produk yang pernah dipesan. Tampilkan kode produk, nama produk dan deskripsinya. 109 Rows 42 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia LATIHAN-LATIHAN • Cara data customer yang belum pernah melakukan pembayaran. 24 Rows 43 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia LATIHAN-LATIHAN • Tampilkan data pemesanan barang lengkap dengan keuntungan yang didapat 2,996 Rows 1 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia UNION 2 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia SKEMA RELASI YANG DIGUNAKAN CLASSICMODELS 3 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia CLASSICMODELS 4 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia UNION • UNION digunakan untuk menggabungkan hasil eksekusi beberapa SQL SELECT sehingga menjadi 1 kesatuan hasil. • Nama Kolom pertama dari SELECT yang pertama digunakan sebagai nama kolom hasil query. • Secara default, UNION akan menghilangkan baris-baris yang duplikat. 5 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia UNION • Tipe data dan panjang dari Kolom di SELECT pertama harus sama dengan Kolom yang bersesuaian dengan SELECT kedua, dst. • Jika terjadi ketidaksesuaian tipe atau panjang maka akan menggunakan tipe data dan panjang yang bisa digunakan oleh semua tipe kolomnya. Contoh, jika nilai kolom di SELECT pertama bertipe integer dan nilai kolom di SELECT kedua bertipe double, maka akan menggunakan tipe double. 6 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia CONTOH UNION • Kota mana saja yang terdaftar di database ClassicModels SELECT country FROM Customers UNION SELECT country FROM Offices; SELECT country FROM Customers UNION DISTINCT SELECT country FROM Offices; = 27 Rows 7 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia CONTOH UNION • Negara mana saja yang terdaftar di database ClassicModels SELECT country FROM Customers UNION ALL SELECT country FROM Offices; 32 Rows 8 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia PENGURUTAN DALAM UNION • Negara mana saja yang terdaftar di database ClassicModels SELECT country FROM Customers UNION SELECT country FROM Offices ORDER BY country; 27 Rows 9 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia PENGURUTAN DALAM UNION SELECT country,city FROM Customers UNION SELECT country,city FROM Offices ORDER BY country 97 Rows 10 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia PENGURUTAN DALAM UNION SELECT country,city FROM Customers UNION SELECT country,city FROM Offices ORDER BY city 97 Rows SELECT country,city FROM Customers UNION SELECT country,city FROM Offices ORDER BY 2 ORDER BY 2 = Urutkan berdasarkan kolom ke-2 11 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia LIMIT DALAM UNION • 5 Negara yang terdaftar di database ClassicModels SELECT country FROM Customers UNION SELECT country FROM Offices ORDER BY country LIMIT 5; 5 Rows 1 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia SUB QUERY 2 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia SKEMA RELASI YANG DIGUNAKAN CLASSICMODELS 3 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia CLASSICMODELS 4 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia SUB QUERY • 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. 5 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia CONTOH KASUS 1 • 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. 6 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia CONTOH KASUS 1 SELECT ProductCode,ProductName,buyPrice FROM Products WHERE buyPrice SELECT AVGbuyPrice FROM Products 54 Rows Sub query bekerja untuk mencari nilai rata-rata dari buyPrice yang akan menjadi patokan dalam seleksi data produk 7 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia CONTOH KASUS 2 • Carilah data produk yang harga belinya sama dengan harga beli termahal. – Query membutuhkan Sub Query karena untuk dapat mencari produk yang diinginkan, maka nilai terbesar harga belinya harus dicari terlebih dahulu. – Query ini bisa dilakukan dengan menggunakan ORDER BY dan LIMIT, tetapi hanya akan menghasilkan 1 baris saja. Bagaimana jika data yang sesuai dengan kriteria lebih dari 1 baris. 8 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia CONTOH KASUS 2 • Perbedaan dari kedua SQL tersebut adalah : – Query pertama mungkin menampilkan data produk lebih dari 1 baris ketika baris yang buyprice-nya sama dengan nilai MAXbuyPrice lebih dari 1 baris. – Qery kedua hanya akan menampilkan 1 baris saja karena ada penggunaan LIMIT. Kekurangan dari SQL ini adalah ketika ada data produk yang sama-sama memiliki nilai sama dengan MAXbuyprice lebih dari 1 baris. SELECT ProductCode,ProductName,buyPrice FROM Products WHERE buyPrice= SELECT MAXbuyPrice FROM Products SELECT ProductCode,ProductName,buyPrice FROM Products ORDER BY buyPrice DESC LIMIT 1 9 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia CONTOH KASUS 3 • Carilah customer yang pernah melakukan pembayaran. – Query tersebut membutuhkan sub query karena harus melakukan perbandingan data customer dengan data customer yang ada di tabel pembayaran payments. Berarti data customer yang ada di tabel payments harus dicari terlebih dahulu. 10 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia CONTOH KASUS 3 • Sub query bekerja untuk mencari data customer yang telah terdaftar di tabel payments sudah pernah melakukan pembayaran SELECT CustomerNumber,CustomerName FROM Customers WHERE CustomerNumber IN SELECT DISTINCT CustomerNumber FROM Payments 98 Rows 11 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia CONTOH KASUS 4 • Carilah pegawai yang menjadi anak buah reportTo ke pegawai yang bernama “Mary Patterson” – Query tersebut harus membutuhkan sub query karena nomor pegawai EmployeeNumber dari Mary Patterson harus ditemukan terlebih dahulu, kemudian dibandingkan dengan data customer. 12 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia CONTOH KASUS 4 • Sub query bekerja untuk mencari EmployeeNumber pegawai yang bernama Mary Patterson. • Query utamanya adalah mencari pegawai yang reportTo-nya ke EmployeeNumber milik Mary Patterson. SELECT EmployeeNumber,CONCAT_WS ,FirstName,LastName FROM Employees WHERE reportsTo= SELECT EmployeeNumber FROM Employees WHERE CONCAT_WS ,FirstName,LastName =Mary Patterson 13 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia STRUKTUR SUBQUERY SELECT ProductCode,ProductName,buyPrice FROM Products WHERE buyPrice SELECT MAXbuyPrice FROM Products Sub Query Outer Query 14 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia 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 15 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia CONTOH DATA SELECT EmployeeNumber, FirstName FROM Employees SELECT EmployeeNumber FROM Employees WHERE OfficeCode=6 16 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia 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”. 17 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia OPERATOR =, , , =, =, , =, = DALAM SUB QUERY • Contoh Benar • Untuk operator boleh diganti dengan operator lain untuk mendapatkan hasil yang berbeda. SELECT ProductCode,ProductName,buyPrice FROM Products WHERE buyPrice SELECT AVGbuyPrice FROM Products SELECT ProductCode,ProductName,buyPrice FROM Products WHERE buyPrice 18 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia 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. SELECT ProductCode,ProductName,buyPrice FROM Products WHERE buyPrice SELECT BuyPrice FROM Products WHERE BuyPrice100 SELECT ProductCode,ProductName,buyPrice FROM Products WHERE buyPrice 19 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia 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. 20 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia OPERATOR ANY, SOME, ALL DALAM SUB QUERY SELECT EmployeeNumber, FirstName FROM Employees WHERE EmployeeNumber = ANY SELECT EmployeeNumber FROM Employees WHERE OfficeCode=6 21 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia OPERATOR ANY, SOME, ALL DALAM SUB QUERY • Menghasilkan 0 Rows, karena tidak ada EmployeeNumber yang sama dengan semua employeeNumber yang ada di sub query. SELECT EmployeeNumber, FirstName FROM Employees WHERE EmployeeNumber = ALL SELECT EmployeeNumber FROM Employees WHERE OfficeCode=6 22 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia OPERATOR ANY, SOME, ALL DALAM SUB QUERY SELECT EmployeeNumber, FirstName FROM Employees WHERE EmployeeNumber ANY SELECT EmployeeNumber FROM Employees WHERE OfficeCode=6 23 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia OPERATOR ANY, SOME, ALL DALAM SUB QUERY SELECT EmployeeNumber, FirstName FROM Employees WHERE EmployeeNumber ALL SELECT EmployeeNumber FROM Employees WHERE OfficeCode=6 24 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia OPERATOR IN DALAM SUB QUERY • 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. 25 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia OPERATOR IN DALAM SUB QUERY SELECT ProductCode,ProductName,buyPrice FROM Products WHERE ProductCode IN SELECT ProductCode FROM Products WHERE BuyPrice100 SELECT ProductCode,ProductName,buyPrice FROM Products WHERE ProductCode IN 26 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia OPERATOR IN DALAM SUB QUERY SELECT ProductCode,ProductName,buyPrice FROM Products WHERE ProductCode NOT IN SELECT ProductCode FROM Products WHERE BuyPrice100 SELECT ProductCode,ProductName,buyPrice FROM Products WHERE ProductCode NOT IN 27 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia PERBANDINGAN DENGAN LEBIH DARI 1 KOLOM PADA SUB QUERY • Perbandingan banyak kolom dimungkinkan dengan menuliskan field-field yang akan dicocokkan dalam sebuah tanda kurung . • Untuk lebih jelas, lihat contoh di slide berikutnya. 28 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia PERBANDINGAN DENGAN LEBIH DARI 1 KOLOM PADA SUB QUERY • Mencari pegawai yang sekantor dan seatasan dengan pegawai yang bernomor 1370 SELECT OfficeCode,reportsTo,EmployeeNumber,FirstName FROM Employees WHERE OfficeCode , reportsTo = SELECT OfficeCode , reportsTo FROM Employees WHERE employeeNumber=1370 29 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia CORRELATED SUBQUERY • 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 30 Oleh : Andri Heryandi, S.T., M.T. Teknik Informatika 2009 – Universitas Komputer Indonesia CORRELATED SUBQUERY SELECT e.EmployeeNumber ,e.FirstName, SELECT COUNT FROM Employees e2 WHERE

e.EmployeeNumber =