660 likes | 842 Views
Laboratorium Perancangan / Pemrograman Basis Data Komposisi oleh Budi Prayitno Februari 2012 Batam. SQL Server :: Transact– SQL #1. Daftar SQL Statement. SELECT Statement Dasar. SELECT * | {[DISTINCT] column | expression [alias], ...} FROM table;
E N D
LaboratoriumPerancangan/Pemrograman Basis Data Komposisioleh Budi Prayitno Februari 2012 Batam SQL Server :: Transact–SQL #1
SELECT Statement Dasar SELECT * | {[DISTINCT] column | expression [alias], ...} FROM table; • SELECT berisi column yang ditampilkan • FROM berisi table dari mana column terkait dipilih
Memilih Semua Column SELECT * FROM departments;
Memilih Column Tertentu SELECT department_id, location_id FROM departments;
Kaidah Penulisan SQL • Tidak case–sensitive kecuali diapit tanda petik tunggal “’”atau petik ganda “”” • Dapat dituliskan dalam satu atau lebih baris • Kata kunci tidak dapat disingkat atau dipisah • Clause biasanya ditulis dalam baris terpisah • Indentasi digunakan untuk mempermudah pembacaan • SQL statement dapat diakhiri dengan “;”
Ekspresi Aritmatika • + Penambahan • – Pengurangan • * Perkalian • / Pembagian Presedensi: [* /] [+ –]
Penggunaan Operator Aritmatika SELECT first_name, last_name, salary, salary + 300 FROM employees;
Pendefinisian Column Alias • Mengubah tampilan header • Dapat digunakan terhadap ekspresi/kalkulasi • Digunakan menggunakan kata kunci “AS” atau langsung mengikuti nama column • Memerlukan tanda petik ganda “”” jika alias mengandung spasi, karakter khusus atau ketika dimaksudkan sebagai case–sensitive
Penggunaan Column Alias SELECT first_name nama, comission_pct AS komisi FROM employees; SELECT first_name AS “Nama”, salary * 12 “Gaji Tahunan” FROM employees;
Operator Konkatenasi • Menghubungkan column atau string dengan column atau string lain • Direpresentasikan dengan “+” • Menghasilkan string SELECT first_name + ‘adalah seorang’ + job_id FROM employees;
Duplikasi Row SELECT department_id FROM employees; SELECT DISTINCT department_id FROM employees;
WHERE Clause • Membatasi pemilihan row pada SELECT menggunakan WHERE clause SELECT * | {[DISTINCT]} column | expression [alias], ...} FROM table [WHERE condition(s)]; • WHERE clause diposisikan tepat setelah FROM clause
Penggunaan WHERE SELECT employee_id, first_name, job_id, department_id FROM employees WHERE department_id = 90;
Penggunaan Operator Perbandingan SELECT first_name, salary FROM empoyees WHERE salary <= 3500 AND salary >= 2500; memberikan hasil yang sama dengan: SELECT first_name, salary FROM empoyees WHERE salary BETWEEN 2500 AND 3500;
Operator IN SELECT employee_id, first_name || last_name emp_name, salary, manager_id FROM employees WHERE manager_id IN (100, 101, 201);
Operator LIKE SELECT first_name, last_name FROM employees WHERE first_name LIKE ‘S%’ AND last_name NOT LIKE ‘_a%’;
Operator IS NULL SELECT employee_id, manager_id FROM employees WHERE manager_id IS NULL;
Penggunaan Operator Logika SELECT employee_id, FROM employees WHERE salary >= 10000 AND (job_id LIKE ‘%MGR%’ OR job_id LIKE ‘%MAN%’) AND departement_id NOT IN (50, 80);
ORDER BY Clause • Berguna untuk mengurutkan row yang dipilih berdasarkan column yang ditentukan pada ORDER BY clause • ASC: membesar, merupakan nilai default DESC: mengecil • Diposisikan paling akhir pada SELECT statement
ORDER BY Clause SELECT * | {[DISTINCT] column | expression [alias], ...} FROM table; [WHERE condition(s)] [ORDER BY {column, expression, alias} [ASC | DESC]];
Penggunaan ORDER BY Clause SELECT first_name, job_id, department_id, hire_date, salary * 12 annual_salary FROM employees WHERE 1 = 1 ORDER BY hire_date DESC, annual_salary;
Penggunaan Character Function SELECT employee_id, first_name + last_name AS name, job_id, LEN (last_name), PATINDEX (‘%a%’, last_name) FROM employees WHERE SUBSTRING (job_id, 4, 3) = ‘REP’;
Nested Function • Fungsi dapat bersarang hingga kedalaman tidak terhingga • Fungsi bersarang dievaluasi mulai hingga yang terdalam hingga terluar F3 ({F2 ({F1 ({arg1, ...}), ...}), ...}) LOWER (CONCAT (SUBSTR (first_name, 1, 1), last_name))
Group Function • AVG • COUNT • MAX • MIN • STDEV • SUM • VAR
Penggunaan Group Function SELECT AVG (salary), MAX (salary), MIN (salary), SUM (salary) FROM employees WHERE job_id LIKE ‘%REP%’ • MIN dan MAX dapat digunakan untuk tipe data numeric, string dan date
COUNT Function SELECT COUNT (*) FROM employees WHERE department_id = 50; SELECT COUNT (comission_pct) FROM employees WHERE department_id = 80; SELECT COUNT (DISTINCT department_id) FROM employees;
NULL pada Group Function • Group function mengabaikan nilai NULL pada column SELECT AVG (comission_pct) FROM employees; • Untuk menyertakan column bernilai NULL, gunakan NVL SELECT AVG (NVL (comission_pct, 0)) FROM employees;
GROUP BY Clause • Mengakomodasi keberadaan group function, namun tidak mandatory SELECT [column,] group_function (column), ... FROM table [WHERE condition] [GROUP BY column] [ORDER BY column];
Penggunaan GROUP BY Clause SELECT department_id, AVG (salary) ... columnpada GROUP BY clausetidakmandatorypada SELECT clause SELECT AVG (salary) FROM employees GROUP BY department_id ORDER BY department_id;
Penggunaan GROUP BY Clause • Menggunakan lebih dari satu column pada GROUP BY clause: SELECT department_id dept_id, job_id, SUM (salary) FROM employees GROUP BY department_id, job_id;
Penggunaan GROUP BY Clause • Column yang bukan group function pada SELECT clause mandatory didefinisikan pada GROUP BY clause: SELECT department_id, COUNT (employee_id) FROM employees; ERROR at line 1: ORA-00937: not a single–group group function
Penggunaan GROUP BY Clause • Group function tidak dapat digunakan pada WHERE clause: SELECT department_id, AVG (salary) FROM employees WHERE AVG (salary) > 8000 GROUP BY department_id; ERROR at line 3: ORA-00934: group function is not allowed here
HAVING Clause SELECT [column,] group_function (column), ... FROM table [WHERE condition] [GROUP BY column] [HAVING group_condition] [ORDER BY column];
HAVING Clause 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 job_id;
Nested Group Function SELECT MAX (AVG (salary)) FROM employees GROUP BY department_id;
Jenis JOIN • INNER JOIN sama dengan JOIN • LEFT OUTER JOIN sama dengan LEFT JOIN • RIGHT OUTER JOIN sama dengan RIGHT JOIN • FULL OUTER JOIN sama dengan FULL JOIN • CROSS JOIN
JOIN Clause SELECT table1.column, table2.column FROM table1 [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];
NATURAL JOIN • Didasarkan pada semua column pada kedua table yang memiliki nama yang sama • Menampilkan row dari kedua table yang memiliki nilai yang sama pada column yang didefinisikan • Jika terdapat column dengan nama yang sama namun tipe data yang berbeda, maka terjadi error
NATURAL JOIN SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations;
USING Clause • Digunakan untuk memodifikasi NATURAL JOIN untuk mendefinisikan column yang digunakan untuk equijoin seandainya terdapat column dengan nama yang sama namun tidak digunakan
USING dan ON Clause SELECT d.department_id, d.department_name, d.location_id, l.city FROM departments d JOIN locations l USING (location_id); memberikan hasil yang sama dengan: ON (d.location_id = l.location_id);