DML (Data Manipulation Language) Pertemuan Minggu Ke-9
Kompetensi Khusus Mahasiswa mampu menggunakan perintah dan fungsi manipulasi data pada database menggunakan MySQL (C3)
Aljabar Relasional Aljabar relasional mendefinisikan cara teoritis dalam memanipulasi isi tabel menggunakan 8 operator relasional sbb: SELECT, atau RESTRICT, menampilkan nilai untuk semua baris yang ditemukan dalam tabel yang memenuhi kondisi yang diberikan (menampilkan bagian horizontal dari tabel). PROJECT menampilkan semua nilai untuk atribut yang dipilih (menampilkan bagian vertikal dari tabel). UNION menggabungkan semua baris dari 2 tabel, termasuk baris yang duplikat. Kolom & domain dari tabel yang digabungkan harus sama. INTERSECT menampilkan hanya baris yang muncul di kedua tabel. DIFFERENCE menampilkan semua baris dalam 1 tabel yang tidak ditemukan dalam tabel lain. PRODUCT menampilkan semua pasangan baris yang ada dari 2 tabel, disebut juga dengan produk Cartesian.
Contoh SELECT
Contoh PROJECT
Contoh UNION Contoh INTERSECT Contoh DIFFERENCE
Contoh PRODUCT
JOIN menggabungkan informasi dari 2 atau lebih tabel. Natural join: menghubungkan tabel dengan memilih hanya baris dengan nilai yang sama dalam atribut yang sama. Berikut 3 tahap proses natural join yaitu PRODUCT, SELECT, & PROJECT. Equijoin: menghubungkan tabel dengan kondisi kesetaraan (equal) yang membandingkan kolom tertentu dari tiap tabel. Menggunakan operator sama dengan (=). Theta join: menghubungkan tabel menggunakan operator lain selain sama dengan (=). Inner join: hanya mengembalikan record yang sesuai dari tabel yang digabungkan. Outer join: pasangan yang sesuai akan dipertahankan, & nilai yang tidak sesuai dalam tabel lain akan dikosongkan. Left outer join: menampilkan semua baris dalam tabel pertama (sebelah kiri), termasuk semua baris yang tidak sesuai dengan nilai dalam tabel kedua (sebelah kanan). Right outer join: kebalikan dari left outer join.
Contoh Tabel untuk Ilustrasi JOIN
Contoh Tahapan Natural Join 1. PRODUCT
2. SELECT 3. PROJECT
LEFT OUTER JOIN RIGHT OUTER JOIN
DIVIDE menggunakan tabel pertama dengan 2 kolom sebagai yang dibagi & tabel kedua dengan 1 kolom sebagai pembagi. Hasilnya adalah kolom tunggal yang berisi semua nilai dari kolom kedua dari yang tabel pertama yang berhubungan dengan tiap baris dalam tabel kedua.
Perintah Manipulasi Data SQL COMMAND DESCRIPTION INSERT Menambahkan baris ke dalam tabel SELECT Memilih atribut dari baris dalam 1 atau lebih tabel atau view WHERE Membatasi pemilihan baris berdasarkan ekspresi kondisional GROUP BY Mengelompokkan baris yang dipilih berdasarkan 1 atau lebih atribut HAVING Membatasi pemilihan kelompok baris berdasarkan kondisi ORDER BY Mengurutkan baris yang dipilih berdasarkan 1 atau lebih atribut UPDATE Mengubah nilai atribut dalam 1 atau lebih baris tabel DELETE Menghapus 1 atau lebih baris dari tabel COMMIT Menyimpan perubahan data secara permanen ROLLBACK Membalikkan data ke nilai awalnya
COMMAND DESCRIPTION Operator Perbandingan =, <, >, <=, >=, <> Digunakan dalam ekspresi kondisional Operator Logikal AND/OR/NOT Operator Khusus BETWEEN Mengecek apakah nilai atribut berada dalam jangkauan IS NULL Mengecek apakah nilai atribut adalah NULL LIKE Mengecek apakah nilai atribut sesuai dengan string yang diberikan IN Mengecek apakah nilai atribut sesuai dengan salah satu nilai yang ada dalam daftar nilai EXISTS Mengecek apakah subquery mengembalikan baris DISTINCT Membatasi hanya nilai unik
COMMAND DESCRIPTION Fungsi Aggregasi COUNT Mengembalikan jumlah baris dengan nilai bukan NULL untuk kolom yang diberikan MIN Mengembalikan nilai atribut minimum yang ditemukan dalam kolom yang diberikan MAX Mengembalikan nilai atribut maksimum yang ditemukan dalam kolom yang diberikan SUM Mengembalikan total dari semua nilai untuk kolom yang diberikan AVG Mengembalikan rata-rata dari semua nilai untuk kolom yang diberikan
Menambah Baris Tabel SQL menggunakan perintah INSERT untuk memasukkan data ke dalam tabel. Berikut sintaks SQLnya: INSERT INTO tablename VALUES (value1, value2, …, valuen) Contoh: INSERT INTO VENDOR VALUES (21225, ‘Bryson, Inc.’, ‘Smithson’, ‘615’, ‘223-3234’, ‘TN’, ‘Y’);
Dalam baris entri data di atas, amati bahwa: Isi baris diinput di antara tanda kurung. Perhatikan bahwa karakter pertama setelah VALUES adalah tanda kurung buka & karakter terakhir adalah tanda kurung tutup. Nilai karakter (string) & tanggal harus diinput di antara tanda petik satu ( ‘ ). Nilai numerik tidak perlu ditutup dengan tanda petik satu. Nilai atribut dipisahkan dengan tanda koma. Nilai dibutuhkan untuk tiap kolom dalam tabel.
Menambah Baris dengan Atribut NULL Perhatikan bahwa nilai NULL diterima hanya karena atributnya opsional. INSERT INTO PRODUCT VALUES (‘BRT-345’, ‘Titanium drill bit’, ’18-Oct-11’, 75, 10, 4.50, 0.06, NULL); Menambah Baris dengan Atribut Opsional Satu tabel bisa memiliki banyak atribut opsional. Daripada harus mendeklarasikan tiap atribut sebagai NULL dalam perintah INSERT, user dapat menyebutkan hanya atribut yang membutuhkan nilai saja. INSERT INTO PRODUCT (P_CODE, P_DESCRIPT) VALUES (‘BRT-345’, ‘Titanium drill bit’);
Menyimpan Perubahan Tabel Setiap perubahan yang dilakukan pada isi tabel tidak disimpan dalam disk sampai user menutup database, menutup program yang digunakan, atau menggunakan perintah COMMIT. Jika database dibuka & terjadi pemadaman listrik atau beberapa interupsi lain terjadi sebelum user memberikan perintah COMMIT, maka perubahannya akan hilang & hanya isi tabel asli yang dipertahankan. Sintaksnya adalah COMMIT [WORK] Perintah COMMIT menyimpan semua perubahan – seperti penambahan baris, perubahan atribut, & penghapusan baris – yang dibuat ke tabel dalam database.
Menampilkan Baris Tabel Perintah SELECT digunakan untuk menampilkan isi tabel. Berikut sintaksnya: SELECT columnlist FROM tablename Columnlist mewakili 1 atau lebih atribut, yang dipisahkan dengan tanda koma. Contoh: SELECT P_CODE, P_DESCRIPT, P_INDATE FROM PRODUCT; User dapat menggunakan asterik ( * ) sebagai karakter wildcard untuk menampilkan semua atribut. Contoh: SELECT * FROM PRODUCT; Karakter wildcard adalah simbol yang dapat digunakan sebagai pengganti untuk karakter atau perintah lain.
Mengubah Baris Tabel Perintah UPDATE digunakan untuk mengubah data dalam tabel. Berikut sintaksnya: UPDATE tablename SET columnname = expression [, columnname = expression] [WHERE conditionlist]; Contoh jika user ingin mengubah P_INDATE dari 13 Des 2011 ke 18 Jan 2012 dengan P_CODE 13-Q2/P2: UPDATE PRODUCT SET P_INDATE=’18-JAN-2012’ WHERE P_CODE=‘13-Q2/P2’;
Jika lebih dari 1 atribut yang akan diubah, maka gunakan tanda koma untuk memisahkan atributnya. Cth: UPDATE PRODUCT SET P_INDATE=’18-JAN-2012’, P_PRICE=17.99, P_MIN=10 WHERE P_CODE=‘13-Q2/P2’; Ingat untuk menggunakan kondisi WHERE agar perubahan tidak dilakukan ke semua baris dalam tabel.
Mengembalikan Isi Tabel Jika user belum menggunakan perintah COMMIT untuk menyimpan perubahan dalam database, user dapat mengembalikan database ke kondisi sebelumnya menggunakan perintah ROLLBACK. Untuk menggunakannya cukup ketik: ROLLBACK; COMMIT & ROLLBACK berdampak hanya pada perintah manipulasi data yang menambah, mengubah, atau menghapus baris tabel. Semua perintah definisi data (CREATE TABLE) di-COMMIT secara otomatis ke kamus data & tidak dapat di-ROLLBACK.
Menghapus Baris Tabel Untuk menghapus baris tabel, gunakan perintah DELETE dengan sintaks berikut: DELETE FROM tablename [WHERE conditionlist]; Contoh jika ingin menghapus produk dengan kode ‘BRT-345’: DELETE FROM PRODUCT WHERE P_CODE=‘BRT-345’; Kondisi WHERE adalah opsional. Akan tetapi, jika tidak menggunakan kondisi WHERE maka semua baris dari tabel akan terhapus.
Memasukkan Baris Tabel dengan Subquery SELECT User dapat memasukkan lebih dari 1 baris ke tabel menggunakan sumber data dari tabel lain. Berikut sintaksnya: INSERT INTO tablename SELECT columnlist FROM tablename; Pernyataan INSERT di atas menggunakan subquery SELECT. Subquery, disebut juga nested query atau inner query, adalah query yang disisipkan ke dalam query lain. Inner query selalu dieksekusi terlebih dahulu oleh RDBMS. Output dari inner query akan menjadi input untuk outer query. Nilai yang dikembalikan oleh subquery SELECT harus sesuai dengan atribut & tipe data dari tabel dalam INSERT.
Query SELECT SELECT merupakan query yang dapat mengubah data menjadi informasi. Query SELECT dapat ditambahkan batasan untuk kriteria pencarian. Berikut akan dibahas beberapa variasi penggunaan query SELECT.
Memilih Baris dengan Kondisi User dapat memilih sebagian isi tabel dengan membatasi baris yang akan dimasukkan dalam output. Caranya dengan menambahkan WHERE ke pernyataan SELECT: SELECT columnlist FROM tablelist [WHERE conditionlist]; SELECT akan menampilkan semua baris yang sesuai dengan kondisi yang ditentukan – disebut juga kriteria kondisi – yang disebutkan dalam WHERE. Conditionlist dalam WHERE diwakilkan oleh 1 atau lebih ekspresi kondisi, dipisahkan dengan operator logis. SELECT P_DESCRIPT, P_INDATE, P_PRICE, V_CODE FROM PRODUCT WHERE V_CODE=21344;
Hasil Query dari Tabel PRODUCT untuk Kode Vendor 21344
Operator Perbandingan SYMBOL MEANING = Sama dengan < Lebih kecil <= Lebih kecil sama dengan > Lebih besar >= Lebih besar sama dengan <> Atau != Tidak sama dengan
Menggunakan Operator Perbandingan pada Atribut Karakter Karena komputer mengidentifikasi semua karakter menggunakan kode ASCII, maka operator perbandingan dapat digunakan untuk membatasi atribut karakter. Perbandingan string (karakter) dilakukan dari kiri ke kanan. Contoh: string “Ardmore” akan dinilai lebih besar dari string “Aarenson” tetapi lebih kecil dari string “Brown”. Jika karakter 0-9 disimpan sebagai string maka akan menyebabkan anomali, misalnya string “5” akan dinilai lebih besar dari “44” karena karakter pertama dari “44” lebih kecil dari “5”. Hal ini juga terjadi jika tanggal disimpan dalam format karakter. Oleh karena itu, gunakan tipe data yang sesuai dengan nilai yang disimpan oleh atribut.
Menggunakan Operator Perbandingan pada Tanggal Prosedur tanggal lebih mengacu ke software (software-specific) dibanding prosedur SQL lainnya. Contoh, query berikut akan menampilkan semua baris dengan tgl stok di atas 20 Jan 2012: SELECT P_DESCRIPT, P_QOH, P_MIN, P_PRICE, P_INDATE FROM PRODUCT WHERE P_INDATE >= ‘20-Jan-2012’; MS Access menggunakan tanda pagar (#) untuk tanggal. Cth: #20-Jan-12#.
Hasil Query dari Tabel PRODUCT dengan Batasan Tanggal
Menggunakan Kolom Alias Ketika user ingin menghitung total nilai dari tiap produk di inventori, maka logikanya adalah mengalikan jumlah produk dengan harganya. Berikut perintahnya: SELECT P_DESCRIPT, P_QOH, P_PRICE, P_QOH * P_PRICE FROM PRODUCT SQL menerima setiap ekspresi (formula) dalam kolom. Formula dapat berisi operator matematika & fungsi yang diaplikasikan ke atribut dalam tabel yang disebutkan di FROM dari SELECT. Kolom hasil perhitungan akan diberi label secara otomatis oleh RDBMS. Ms Access memberi label Expr. Oracle menggunakan teks formula sebagai label.
SQL memperbolehkan penggunaan alias untuk tiap kolom dalam SELECT SQL memperbolehkan penggunaan alias untuk tiap kolom dalam SELECT. Alias adalah nama pengganti yang diberikan untuk kolom atau tabel dalam pernyataan SQL. Cth: SELECT P_DESCRIPT, P_QOH, P_PRICE, P_QOH * P_PRICE AS TOTVALUE FROM PRODUCT; Misalnya user ingin mendapatkan daftar produk yang telah disimpan lebih dari 90 hari, maka query di Ms Access sbb: SELECT P_CODE, P_INDATE, DATE() – 90 AS CUTDATE FROM PRODUCT WHERE P_INDATE <= DATE() - 90; DATE() adalah fungsi khusus yang mengembalikan tanggal berjalan dalam Ms Access & dapat digunakan di INSERT, UPDATE, atau SELECT. Operator perhitungan juga dapat digunakan dengan atribut tanggal, cth manajer menginginkan daftar semua produk yang diterima, tgl diterima, & tgl kadaluwarsa (90 hari setelah diterima): SELECT P_CODE, P_INDATE, P_INDATE + 90 AS EXPDATE
Operator Hitung: Aturan Prioritas ARITHMETIC OPERATOR DESCRIPTION + Penambahan - Pengurangan * Perkalian / Pembagian ^ Pangkat Ketika melakukan operasi matematika pada atribut, perhatikan aturan prioritas yang menentukan urutan perhitungan sbb: Operasi dalam tanda kurung. Operasi pangkat. Operasi perkalian & pembagian. Operasi penambahan & pengurangan.
Operator Logis: AND, OR, NOT SQL memperbolehkan user memasukkan beberapa kondisi melalui penggunaan operator logis. Contoh: user ingin menampilkan daftar tabel dengan V_CODE = 21344 atau 24288: SELECT P_DESCRIPT, P_INDATE, P_PRICE, V_CODE FROM PRODUCT WHERE V_CODE = 21344 OR V_CODE = 24288; Operator logis AND memiliki kebutuhan sintaks SQL yang sama dengan OR. Contoh: user ingin menampilkan daftar tabel dengan P_PRICE lebih kecil dari $50 & P_INDATE setelah 15 Jan 2012: WHERE P_PRICE < 50 AND P_INDATE > ‘15-Jan-2012’;
User dapat menggabungkan operator OR & AND untuk membatasi output User dapat menggabungkan operator OR & AND untuk membatasi output. Contoh jika ingin mendapatkan tabel dengan kondisi berikut: P_INDATE setelah 15 Jan 2012 & P_PRICE lebih kecil dari $50. Atau V_CODE = 24288. SELECT P_DESCRIPT, P_INDATE, P_PRICE, V_CODE FROM PRODUCT WHERE (P_PRICE < 50 AND P_INDATE > ‘15-Jan-2012’) OR V_CODE = 24288; Tanda kurung digunakan untuk menggabungkan beberapa batasan logis. Kondisi di dalam tanda kurung selalu dieksekusi terlebih dahulu.
Operator logis NOT digunakan untuk meniadakan hasil dari ekspresi kondisional. Dalam SQL, semua ekspresi kondisional menghasilkan true atau false. Jika ekspresinya true, maka baris akan terpilih; sebaliknya jika false, maka barisnya tidak terpilih. NOT digunakan untuk menemukan baris yang tidak sesuai dengan kondisi yang diberikan. Contoh jika ingin menampilkan semua baris dengan kode selain 21344, maka berikut perintahnya: SELECT * FROM PRODUCT WHERE NOT (V_CODE = 21344);
Operator Khusus SQL memperbolehkan penggunaan operasi khusus yang dihubungkan dengan WHERE, mencakup: BETWEEN: untuk memeriksa apakah nilai atribut masuk dalam kisaran. IS NULL: untuk memeriksa apakah nilai atribut adalah NULL. LIKE: untuk memeriksa apakah nilai atribut sesuai dengan pola string yang diberikan. IN: untuk memeriksa apakah nilai atribut sesuai dengan salah satu nilai yang ada dalam daftar nilai. EXISTS: untuk memeriksa apakah subquery mengembalikan baris.
Jika DBMS tidak mendukung BETWEEN, gunakan perintah sbb: Contoh BETWEEN tampilkan semua produk dengan harga di antara $50 sampai $100: SELECT * FROM PRODUCT WHERE P_PRICE BETWEEN 50.00 AND 100.00; Jika DBMS tidak mendukung BETWEEN, gunakan perintah sbb: WHERE P_PRICE > 50.00 AND P_PRICE < 100.00; Contoh IS NULL tampilkan semua produk yang tidak memiliki vendor: SELECT P_CODE, P_DESCRIPT, V_CODE FROM PRODUCT WHERE V_CODE IS NULL;
SQL memperbolehkan penggunaan tanda persen (%) & garis bawah (_) untuk mencari kesamaan ketika seluruh string tidak diketahui: % berarti salah satu atau semua karakter sebelum atau sesudah yang memenuhi syarat. Cth: ‘J%’ mencakup Johnson, Jones, July, & J-231Q. ‘%n’ mencakup Johnson & Jernigan. _ berarti setiap satu karakter dapat menggantikan tanda garis bawah. Cth: ‘_23-456-6789’ mencakup 123-456-6789, 223-456-6789. ‘_o_es’ mencakup Jones, Cones, Cokes, Totes, & Roles. Contoh LIKE ‘%’ tampilkan semua vendor yang memiliki kontak dengan nama belakang diawali dengan Smith: SELECT V_NAME, V_CONTACT, V_AREACODE, V_PHONE FROM VENDOR WHERE V_CONTACT LIKE ‘Smith%’; Perlu diingat bahwa SQL melakukan pencarian case sensitive. Hal tsb dikarenakan karakter huruf besar memiliki kode ASCII yang berbeda dengan karakter huruf kecil.
Contoh LIKE ‘_’ jika user lupa apakan nama kontak vendor adalah Johnson atau Johnsen maka berikut querynya : SELECT * FROM VENDOR WHERE V_CONTACT LIKE ‘Johns_n’; Contoh kombinasi ‘%’ & ‘_’ string ‘_l%’ akan mencakup string “Al”, “Alton”, “Elgin”, “Blakeston”, “blank”, dsb.
Penggunaan OR dapat digantikan dengan IN. Contoh query dengan OR: SELECT * FROM PRODUCT WHERE V_CODE = 21344 OR V_CODE = 24288; Dapat ditangani secara efisien dengan IN: WHERE V_CODE IN (21344, 24288); Semua nilai dalam daftar nilai harus memiliki tipe data yang sama. Jika tipe data karakter yang digunakan, maka nilainya harus diapit dengan tanda kutip tunggal. Operator IN berguna khususnya ketika digabungkan dengan subquery. Contoh jika ingin menampilkan V_CODE & V_NAME dari vendor yang hanya menyediakan produk: SELECT V_CODE, V_NAME FROM VENDOR WHERE V_CODE IN (SELECT V_CODE FROM PRODUCT);
Operator EXISTS digunakan ketika terdapat kebutuhan untuk mengeksekusi perintah berdasarkan hasil dari query lain, yaitu jika subquery mengembalikan baris maka jalankan query utama. Contoh EXISTS tampilkan semua vendor dengan produk yang tersedia di bawah 2x jumlah minimum: SELECT * FROM VENDOR WHERE EXISTS (SELECT * FROM PRODUCT WHERE P_QOH < P_MIN * 2);
Update Data Perintah UPDATE digunakan untuk mengubah data yang sudah ada dalam tabel. Contoh UPDATE mengubah P_SALECODE menjadi ‘2’ dari P_CODE ‘1546-QQ2’: UPDATE PRODUCT SET P_SALECODE = ‘2’ WHERE P_CODE = ‘1546-QQ2’; Contoh UPDATE menggunakan operator aritmatika menambahkan produk 2232/QWE sebanyak 20 unit: SET P_QOH = P_QOH + 20 WHERE P_CODE = ‘2232/QWE’;
Mengkopi Sebagian Data Tabel SQL memperbolehkan user untuk mengkopi isi dari kolom tabel yang dipilih sehingga datanya tidak perlu dimasukkan secara manual ke tabel baru. Berikut sintaksnya: INSERT INTO target_tablename [(target_columnlist)] SELECT source_columnlist FROM source_tablename; Perhatikan bahwa daftar kolom target dibutuhkan jika daftar kolom sumber tidak sesuai dengan nama & karakteristik atribut dari tabel target (termasuk urutan kolomnya). Selain itu, tidak perlu menyebutkan daftar kolom target.
Contoh INSERT data ke tabel baru: INSERT INTO PART (PART_CODE, PART_DESCRIPT, PART_PRICE, V_CODE) SELECT P_CODE, P_DESCRIPT, P_PRICE, V_CODE FROM PRODUCT; Contoh CREATE TABLE berdasarkan baris & kolom dari tabel yang ada: CREATE TABLE PART AS SELECT P_CODE AS PART_CODE, P_DESCRIPT AS PART_DESCRIPT, P_PRICE AS PART_PRICE, V_CODE FROM PRODUCT; Perhatikan bahwa PK atau FK tidak akan ikut dikopi ke tabel baru.
Menghapus Tabel dari Database Perintah DROP TABLE digunakan untuk menghapus tabel dari database. Contoh DROP TABLE menghapus tabel PART: DROP TABLE PART; Jika user menghapus tabel yang memiliki FK di tabel lain maka RDBMS akan menghasilkan pesan kesalahan berisi pelanggaran integritas FK.
Kata Kunci Query SELECT Tambahan Mengurutkan Data ORDER BY digunakan untuk mengurutkan data tabel. Sintaksnya: SELECT columnlist FROM tablelist [WHERE conditionlist] [ORDER BY columnlist [ASC | DESC] ]; Jika user tidak menyebutkan jenis urutannya – menaik atau menurun – maka secara default adalah menaik. Contoh mengurutkan data secara menurun: SELECT P_CODE, P_DESCRIPT, P_INDATE, P_PRICE FROM PRODUCT ORDER BY P_PRICE DESC;
Menampilkan nilai unik DISTINCT digunakan untuk menampilkan hanya nilai yang berbeda satu sama lain (unik). Contoh menampilkan data vendor dari tabel PRODUCT: SELECT DISTINCT V_CODE FROM PRODUCT; Fungsi Agregasi SQL memiliki fungsi agregasi untuk melakukan perhitungan matematika sbb: COUNT : menghitung jumlah baris yang berisi nilai. MIN : menemukan nilai minimum dalam kolom. MAX : menemukan nilai maksimum dalam kolom. SUM : menghitung total nilai dalam kolom. AVG : menghitung nilai rata-rata dalam kolom.
Contoh COUNT menampilkan jumlah vendor dalam tabel PRODUCT: SELECT COUNT (DISTINCT V_CODE) FROM PRODUCT; Contoh MAX menampilkan produk dengan harga tertinggi: SELECT P_CODE, P_DESCRIPT, P_PRICE FROM PRODUCT WHERE P_PRICE = (SELECT MAX(P_PRICE) FROM PRODUCT); Contoh SUM menampilkan total saldo pelanggan: SELECT SUM(CUS_BALANCE) AS TOTBALANCE FROM CUSTOMER; Contoh AVG menampilkan rata-rata harga produk: SELECT AVG(P_PRICE) FROM PRODUCT;
Mengelompokkan Data GROUP BY digunakan untuk mengelompokkan baris dalam tabel, & biasanya digunakan bersamaan dengan fungsi agregasi. Berikut sintaksnya: SELECT columnlist FROM tablelist [WHERE conditionlist] [GROUP BY columnlist] [HAVING conditionlist] [ORDER BY columnlist [ASC | DESC] ]; Contoh GROUP BY menampilkan harga terendah untuk tiap kode penjualan: SELECT P_SALECODE, MIN(P_PRICE) FROM PRODUCT GROUP BY P_SALECODE ORDER BY P_SALECODE;
Perluasan dari GROUP BY: HAVING. HAVING beroperasi seperti WHERE dalam pernyataan SELECT. WHERE diaplikasikan ke kolom & ekspresi untuk baris individu, sementara HAVING diaplikasikan ke output dari operasi GROUP BY. Contoh HAVING menampilkan jumlah produk yang disuplai oleh tiap vendor dengan syarat harga rata-rata di bawah $10: SELECT V_CODE, COUNT(DISTINCT P_CODE), AVG(P_PRICE) FROM PRODUCT GROUP BY V_CODE HAVING AVG(P_PRICE) < 10;
Menggabungkan Tabel Database Join dilakukan ketika data diperoleh dari lebih dari 1 tabel. Natural join hanya menampilkan baris dengan nilai atribut yang sesuai menggunakan WHERE untuk menspesifikasi atribut yang menghubungkan tabel. Join dilakukan dengan perbandingan sama dengan antara FK & PK dari tabel yang akan digabung. Contoh jika ingin menggabungkan tabel VENDOR & PRODUCT. Karena V_CODE adalah FK dalam tabel PRODUCT & PK dalam tabel VENDOR maka hubungan dibangun pada V_CODE: SELECT P_DESCRIPT, P_PRICE, V_NAME, V_CONTACT, V_AREACODE, V_PHONE FROM PRODUCT, VENDOR WHERE PRODUCT.V_CODE = VENDOR.V_CODE;
Menggabungkan Tabel dengan Alias Alias digunakan untuk mengidentifikasi tabel sumber dimana data diambil. Contoh penggunaan alias P untuk tabel PRODUCT & V untuk tabel VENDOR: SELECT P_DESCRIPT, P_PRICE, V_NAME, V_CONTACT, V_AREACODE, V_PHONE FROM PRODUCT P, VENDOR V WHERE P.V_CODE = V.V_CODE ORDER BY P_PRICE;
Recursive Joins Tabel dapat digabungkan dengan dirinya sendiri dalam recursive query menggunakan alias. Contoh menampilkan daftar semua karyawan dengan nama manajernya: SELECT E.EMP_MGR, M.EMP_LNAME, E.EMP_NUM, E.EMP_LNAME FROM EMP E, EMP M WHERE E.EMP_MGR = M.EMP_NUM ORDER BY E.EMP_MGR;
Review Materi Mahasiswa mempraktikkan DML di MySQL.