Mysql Oleh Ir.Hartono
Konsep Database Data Informasi Database Sistem informasi Sistem Database Database Relasional DBMS RDBMS nilai yang memiliki suatu arti data yang berguna kumpulan data yang terorganisasi sinergi unsur-unsur pengelolaan database untuk menyediakan informasi sinergi unsur-unsur penyimpanan dan pengelolaan data model database yang tabel-tabelnya memiliki hubungan dengan definisi tertentu DataBase Management System adalah perangkat lunak untuk mengelola sistem database Relational DataBase Management System adalah DBMS untuk database realsional 2
Hirarki Data Nilai Dosen file database phrase Mahasiswa NIM Nama Tgl. Lahir 110011 Salma Hayek 1-Mar-1970 110012 Laetita Casta 21-Des-1974 110013 Arnold Sgarbuger 5-Jun-1960 Nama field word field karakter 5 Database 4 File Table 3 Phrase (kalimat) Record (Row) 2 Word (kata) Item Field (Column) 1 Character (huruf) Character 3
Tipe-file File (1/2) File Induk (master file) File Induk Acuan (reference master file) file induk yang recordnya relatif statis, jarang berubah nilainya. Misalnya file daftar gaji, file mata pelajaran. File Induk Dinamik (dynamic master file) file induk yang nilai dari record-recordnya sering berubah atau sering dimutakhirkan (update) sebagai hasil dari suatu transaksi. Misalnya file induk data barang, yang setiap saat harus di up-date bila terjadi transaksi. File Transaksi (transaction file) File ini bisa disebut file input; digunakan untuk merekam data hasil dari transaksi yang terjadi. Misalnya file penjualan yang berisi data hasil transaksi penjualan. 4
Tipe-file File (2/2) File Laporan (report file) File ini bisa disebut output file, yaitu file yang berisi informasi yang akan ditampilkan. File Sejarah (history file) File ini bisa disebut file arsip (archival file), merupakan file yang berisi data masa lalu yang sudah tidak aktif lagi, tetapi masih disimpan sebagai arsip. File Pelindung (backup file) File ini merupakan salinan dari file-file yang masih aktif di dalam database pada suatu saat tertentu. File ini digunakan sebagai pelindung atau cadangan bila filedatabase yang aktif mengalami kerusakan atau hilang. 5
Kelompok Perintah-Perintah SQL Data Definition Language (DDL) CREATE ALTER DROP Data Manipulation Language (DML) SELECT INSERT UPDATE DELETE Data Control Language (DCL) GRANT DENY REVOKE 6
Membuat Database Perintah SQL untuk membuat database adalah CREATE Sintaks : CREATE DATABASE nama_database ( Spesifikasi_kolom 1,, ) Spesifikasi_kolom n 7
Tabel Tabel adalah objek untuk menyimpan data yang terdiri dari row (record) dan column (field) Sintaks untuk membuat tabel : CREATE TABLE nama_tabel ( nama_kolom 1 tipe_data, nama_kolom n tipe_data ) 8
Perbedaan Char dan Varchar Char memiliki panjang tetap Varchar memiliki panjang sesuai panjang datanya Char(5) b o b b o b disimpan VarChar(5) b o b b o b Catatan : direkomendasikan menggunakan tipe data Char untuk kolom Primary Key dari pada Varchar 9
Contoh CREATE TABLE pelanggan ( kode_pelangan CHAR(5), nama_pelanggan VARCHAR(25), alamat VARCHAR(50), telepon VARCHAR(15), umur INT(2), tgl_lahir DATE ) 10
Modifikasi Definisi Tabel --menambah kolom ALTER TABLE pelanggan ADD hobi VARCHAR(250) --mengubah spec kolom ALTER TABLE pelanggan ALTER COLUMN hobi VARCHAR(100) --menghapus kolom ALTER TABLE pelanggan DROP COLUMN hobi --menghapus tabel DROP TABLE pelanggan --mengubah nama kolom SP_RENAME pelanggan.alamat, domisili, COLUMN 11
Input Data Sintaks perintah penginputan data ke tabel : INSERT [INTO] nama_tabel [( nama_kolom 1 [,, nama_kolom n ] )] VALUES ( nilai 1 [,, nilai n ] ) Data bertipe karakter (char, varchar, text) dan datetime (smalldatetime, datetime) harus diapit dengan tanda petik satu. Format standard yang digunakan untuk datetime adalah 31 May 2015 atau 05/31/2015. 12
Contoh INSERT INTO pelanggan VALUES( P0001, Budiaji Chan, Ilir, 08128149909, 20, 28 Nov 2005 ) Memasukkan sebuah record ke dalam table Pelanggan dimana semua column diisi. INSERT INTO pelanggan (kode_pelanggan, nama_pelanggan) VALUES( P0002, Julyana Anggreini ) Memasukkan sebuah record ke dalam table Pelanggan dimana hanya column Kode_Pelanggan dan Nama_Pelanggan yang diisi. NOTE: selain column yang diisi oleh perintah INSERT, akan berisi data NULL. 13
Contoh INSERT INTO pelanggan VALUES(NULL, NULL, NULL, NULL, NULL, NULL) Memasukkan sebuah record ke dalam table Pelanggan dimana semua column diisi dengan data NULL INSERT INTO pelanggan VALUES(,,,,, ) Memasukkan sebuah record ke dalam table Pelanggan dimana semua column diisi dengan EMPTY STRING. Column bertipe karakter akan berisi karakter kosong. Column bertipe bilangan akan berisi nilai NOL. Column bertipe tanggal akan berisi tanggal awal, yaitu: 1 Jan 1753 (untuk datetime) dan 1 Jan 1900 (untuk smalldatetime) 14
Update Data UPDATE pelanggan SET kode_pelanggan = P0003 WHERE kode_pelanggan = mengubah data pada column Kode_Pelanggan menjadi P0003 bila column Kode_Pelanggan berisi karakter kosong. Perintah tersebut untuk UPDATE pelanggan SET Nama_pelanggan = Hengky WHERE kode_pelanggan IS NULL mengubah data pada column Nama_Pelanggan menjadi Hengky bila column Kode_Pelanggan berisi data NULL. UPDATE pelanggan SET umur = 21 mengubah SEMUA data pada column Umur menjadi 21. NOTE: bila perintah UPDATE tidak memiliki WHERE clause, maka semua record akan diubah sesuai dengan nilai baru pada SET. 15
Delete Data DELETE FROM pelanggan WHERE kode_pelanggan IS NULL menghapus record bila column Kode_Pelanggan berisi data NULL. DELETE FROM pelanggan WHERE kode_pelanggan = P0003 AND nama_pelanggan = menghapus record bila column Kode_Pelanggan berisi data P0003 dan column Nama_Pelanggan berisi karakter kosong. DELETE FROM pelanggan menghapus SEMUA record dari table Pelanggan. NOTE: bila perintah DELETE tidak memiliki WHERE clause, maka semua record akan di-hapus. 16
Select Data SELECT * FROM customers Menampilkan semua data & semua column dari table Customers. SELECT contactname, contacttitle FROM customers Menampilkan column ContactName dan ContactTitle dari table Customers. Tanda koma setelah select menunjukkan pergantian column. SELECT contactname AS Name, contacttitle AS Title FROM customers Menampilkan column ContactName dengan judul Name dan column ContactTitle dengan judul Title dari table Customers. SELECT Name = contactname, Title = contacttitle FROM customers SELECT contactname AS Contact Name, contacttitle AS [Contact Title] FROM customers Menampilkan column ContactName dengan judul Contact Name dan column ContactTitle dengan judul Contact Title dari table Customers. Jadi, bila kita ingin menggabungkan dua kata, dapat menggunakan tanda atau [ ]. 17
Filtering SELECT TOP 10 * FROM customers Menampilkan hanya 10 record teratas dari table Customers. SELECT TOP 30 PERCENT * FROM customers Menampilkan hanya 30 percent record teratas dari table Customers. SELECT contacttitle FROM customers Menampilkan hanya column ContactTitle dari table Customers. Data yang ditampilkan akan berulang karena ada beberapa record dimana column ContactTitle tersebut berisikan data yang sama. Bila hanya ingin ditampilkan data yang berbeda saja, maka dapat digunakan keyword DISTINCT. SELECT DISTINCT contacttitle FROM customers menampilkan column ContactTitle yang berisikan data berbeda dari table Customers 18
Filtering : Where SELECT * FROM customers WHERE region IS NOT NULL Menampilkan record dari table Customers dimana column Region tidak berisikan NULL. SELECT * FROM customers WHERE region <> Menampilkan record dari table Customers dimana column Region tidak berisikan empty string. SELECT * FROM customers WHERE country = Germany Menampilkan record dari table Customers yang memenuhi kondisi tersebut, yaitu: colum country berisikan Germany. SELECT * FROM products WHERE unitprice > 10 Menampilkan record dari table Products dimana column UnitPrice berisikan data lebih besar dari 10. 19
Logical Operators SELECT * FROM products WHERE unitprice > 10 AND UNITSINSTOCK < 10 Menampilkan record dari table Products dimana column UnitPrice berisikan data lebih besar dari 10 dan column UnitsInPrice kecil dari 10. NOTE: Operator AND hanya bersifat BENAR bila kedua syarat/kondisi yang ada bernilai BENAR. SELECT * FROM products WHERE unitprice > 10 OR unitsinstock < 10 Menampilkan record dari table Products dimana column UnitPrice berisikan data lebih besar dari 10 atau column UnitsInPrice kecil dari 10. NOTE: Operator OR hanya bersifat BENAR bila salah satu atau kedua syarat/kondisi bersifat BENAR. 20
Operator BETWEEN Operator BETWEEN dapat digunakan untuk membuat kondisi/syarat yang bersifat range atau suatu jangkauan. SELECT * FROM products WHERE unitprice BETWEEN 10 AND 20 Menampilkan record dari table Products dimana column UnitPrice bernilai antara 10 sampai 20. Perintah sinonim : SELECT * FROM products WHERE unitprice >= 10 AND unitprice <= 20 SELECT * FROM products WHERE unitprice NOT BETWEEN 10 AND 20 Menampilkan record dari table Products dimana column UnitPrice tidak bernilai antara 10 sampai 20. Perintah sinonim : SELECT * FROM products WHERE unitprice < 10 OR unitprice > 20 21
Operator LIKE Karakter wildcard yang dapat digunakan adalah: % : sembarang karakter, banyaknya minimal 0 _ : sembarang karakter, banyaknya harus 1 [ ] : sembarang karakter di dalam tanda kurung tersebut [^ ] : sembarang karakter selain yang terdapat dalam tanda kurung tersebut SELECT * FROM customers WHERE custname LIKE MAR%S% Menampilkan record dari table Customers dimana column CustName berisi data yang sesuai dengan pola Mar%s% SELECT * FROM customers WHERE custname LIKE A% Menampilkan record dari table Customers dimana column CustName berisi data yang sesuai dengan pola a%, yaitu: karakter ketiga adalah huruf a. SELECT * FROM customers WHERE custname LIKE [STUV]% Menampilkan record dari table Customers dimana column CustName berisi data yang sesuai dengan pola [STUV]%, yaitu: karakter pertama adalah S, T, U, atau V 22
Operator Perbandingan (1/3) Operator Arti Contoh = Sama dengan SELECT fname, lname FROM employees WHERE lname = 'Smith' <> atau!= Tidak sama dengan SELECT fname, lname FROM employees WHERE status <> 'Active' > Lebih dari SELECT fname, lname FROM employees WHERE hire_date > '12/31/90' < kurang dari SELECT fname, lname FROM employees WHERE job_lvl < 100 >= atau!< Lebih atau sama dengan SELECT au_lname FROM authors WHERE au_lname >= 'T' <= atau!> Kurang atau sama dengan SELECT fname, lname FROM employees WHERE hire_date <= '01/01/95' 23
Operator Perbandingan (2/3) Operator Arti Contoh BETWEEN expr1 AND expr2 jangkauan SELECT fname, lname FROM employees WHERE hire_date BETWEEN '12/31/90' AND '12/31/91' IS [NOT] NULL Apakah berisi NULL SELECT fname, lname FROM employees WHERE photo_on_file IS NULL [NOT] LIKE Apakah sstring cocok dengan pola SELECT fname, lname FROM employees WHERE lname LIKE ('MAC%') 24
Operator Perbandingan (3/3) Operator Arti Contoh expr1 [NOT] IN (val1, val2,...) atau expr1 [NOT] IN (subquery) Apakah ada di dalam daftar SELECT fname, lname FROM employees WHERE sales_region IN ('SW', 'SE') SELECT product_name FROM products WHERE supplier_id IN (SELECT supplier_id FROM supplier WHERE (country = 'Sweden')) ANY (SOME) Hasil subquery sesuai SELECT au_lname, au_fname FROM authors where city dengan kriteria <> any (SELECT city FROM publishers) ALL Apakah semua hasil subquery sesuai dengan kriteria SELECT title FROM titles where advance > all (SELECT advance FROM publishers,titles where titles.pub_id = publishers.pub_id AND pub_name = 'Alogdata Infosystems') [NOT] EXISTS Apakah subquery mendapatkan data SELECT product_name FROM products WHERE EXISTS (SELECT * FROM orders, products WHERE orders.prod_id = products.prod_id) 25
Fungsi String SELECT * FROM customers WHERE LEFT(custname,2) = MI Menampilkan record dari table Customers dimana dua karakter paling kiri dari column CustName adalah Mi SELECT contacttitle, RIGHT(contacttitle,3) AS KANAN FROM customers Menampilkan column ContactTitle dan tiga karakter paling kanan column ContactTtile dari table Customers. SELECT * FROM customers WHERE SUBSTRING(custname,2,3) = sam SELECT * FROM customers WHERE LEN(custname) = 10 Menampilkan record dari table Customers dimana column CustName berisikan 10 karakter 26
Fungsi Waktu SELECT GETDATE() Menampilkan tanggal yang tersimpan pada SQL Server dengan format datetime. SELECT * FROM employees WHERE DATEDIFF(YEAR, birthdate, GETDATE()) > 50) Menampilkan record dari table Employees dimana selisih column BirthDate dan sekarang lebih besar dari 50 tahun. SELECT LASTNAME, DAY(birthdate), MONTH(birthdate) FROM employees Menampilkan column LastName, tanggal dari column BirthDate dan bulan dari column BirthDate 27
Pengurutan SELECT * FROM customers ORDER BY contactname Menampilkan record table Customers diurutkan berdasarkan column ContactName SELECT * FROM customers ORDER BY contactname DESC Menampilkan record table Customers diurutkan berdasarkan column ContactName secara menurun 28
Fungsi Agregat SELECT MAX(contactname), MIN(contactname) FROM customers Menampilkan nilai maksimum dan minimum column ContactName dari table Customers. NOTE: Fungsi Max() dan Min() berlaku untuk column bertipe apa saja. SELECT SUM(unitinstock), AVG(unitinstock) FROM products Menampilkan total dan rata-rata column UnitInStock dari table Products. NOTE: Fungsi Sum() dan Avg() hanya berlaku untuk column bertipe bilangan, seperti: integer, decimal, dan money. SELECT COUNT(*) FROM customers Menampilkan jumlah record dari table Customers SELECT COUNT(region) FROM customers Menampilkan jumlah data column REGION dari table Customers. NOTE: Data NULL tidak dihitung 29
GROUP BY SELECT country FROM customers GROUP BY country Menampilkan column Country dengan pengelompokkan berdasarkan column Country SELECT country, COUNT(*) FROM customers GROUP BY country Menampilkan column Country dan jumlah record dengan pengelompokkan berdasarkan column Country SELECT country, MAX(contactname) FROM customers GROUP BY country ORDER BY MAX(contactname) Menampilkan column Country dan maksimum ContactName dengan pengelompokkan berdasarkan column Country yang diurutkan berdasarkan ContactName. 30
Fungsi IsNull() IsNull adalah fungsi untuk mengecek apakah tidak ada data (NULL) atau ada, kemudian jika tidak ada data maka pada hasil query ditampilkan data penggantinya Contoh : SELECT title, type, price FROM titles SELECT title, type, ISNULL(price,0) FROM titles 31
Manfaat IsNull() Soal : buatlah rata-rata harga (price) dari tabel titles pada database Pubs Jawaban : SELECT AVG(price) FROM titles Bandingkan dengan hasil query di bawah ini : SELECT AVG(price), AVG(ISNULL(price,0)) FROM titles SELECT COUNT(price), COUNT(ISNULL(price,0)) FROM titles SELECT SUM(price), SUM(ISNULL(price,0)) FROM titles 32
Join Join adalah operasi untuk menampilkan data dari dua atau lebih database yang memiliki relationship Jenis Join Inner join Outer join Left join Right join Full join Cross join Self join 33
Join Tabel_A Tabel_B NIP Nama NIP Gaji 001 Ali 002 Budi 003 Buce 004 Cici 005 Dedi 006 Fifi 001 1000000 002 2000000 003 3000000 004 4000000 007 5000000 008 6000000 34
Inner Join Menampilkan data dari tabel-tabel yang data dari satu tabel dengan tabel lainnya memiliki relasi SELECT tabel_a.nip, tabel_a.nama, tabel_b.gaji FROM tabel_a INNER JOIN tabel_b ON tabel_a.nip = tabel_b.nip 35
Left Join Menampilkan semua data pada semua tabel sebelah kiri Data pada tabel kanan yang tidak memiliki relasi dengan data pada tabel kiri akan ditampilkan dengan NULL SELECT tabel_a.nip, tabel_a.nama, tabel_b.gaji FROM tabel_a LEFT JOIN tabel_b ON tabel_a.nip = tabel_b.nip 36
Right Join Menampilkan semua data pada semua tabel sebelah kanan Data pada tabel kiri yang tidak memiliki relasi dengan data pada tabel kanan akan ditampilkan dengan NULL SELECT tabel_a.nip, tabel_a.nama, tabel_b.gaji FROM tabel_a RIGHT JOIN tabel_b ON tabel_a.nip = tabel_b.nip 37
Full Join Menampilkan semua data pada semua tabel Data yang tidak memiliki relasi akan ditampilkan dengan NULL SELECT tabel_a.nip, tabel_a.nama, tabel_b.gaji FROM tabel_a FULL JOIN tabel_b ON tabel_a.nip = tabel_b.nip 38
Cross Join Menghasilkan cartesian product dan jarang dipergunakan Setiap data pada semua tabel akan dipetakan satu per satu SELECT tabel_a.nip, tabel_a.nama, tabel_b.gaji FROM tabel_a CROSS JOIN tabel_b 39
Self Join Tabel Pegawai NIP Nama Bos 001 Joni 001 002 Budi 001 003 Tuti 001 004 Amir 002 SELECT a.nip, a.nama, b.nama AS Nama Bos FROM pegawai a INNER JOIN pegawai b ON a.bos = b.nip 40 Hasil query NIP Nama Nama Bos 001 Joni Joni 002 Budi Joni 003 Tuti Joni 004 Amir Budi
Latihan Join #1 Gunakan database Northwind untuk menampilkan data pemesanan barang yang terdiri dari OrderID, ContactName, nama pegawai, dan OrderDate Petunjuk : Tabel yang dipergunakan : Orders Customers Employees 41
Latihan Join #2 Tampilkan data pemesanan yang dihasilkan pada Latihan Join #1 yang khusus memesan produk Singaporean Hokkien Fried Mee Petunjuk : Tabel yang dipergunakan : Orders Customers Employees Order Details Products 42
Constraint Constraint merupakan objek yang dipergunakan untuk menjaga integritas data Jenis constraint : Primary key Foreign key Unique Default Check 43
Integritas Data Entity integrity (table level) : Identity column Unique Domain integrity (column level) Default Check Referential integrity (relational level) : Primary key Foreign key 44
Primary Key Primary Key adalah satu atau gabungan beberapa kolom yang datanya unik Dalam satu table maksimal ada satu primary key Kolom yang menjadi PK harus NOT NULL Contoh pembuatan tabel dengan kolom dijadikan primary key : CREATE TABLE pelanggan( kdpelanggan CHAR(10) CONSTRAINT pk_kdpelanggan PRIMARY KEY, nmpelanggan VARCHAR(25), nomor_ktp VARCHAR(20), kota VARCHAR(15) ) 45
Menambah dan Menghapus PK ALTER TABLE pelanggan ADD CONSTRAINT pk_kdpelanggan PRIMARY KEY (kdpelanggan) Menambah constraint PK ALTER TABLE pelanggan DROP CONSTRAINT pk_kdpelanggan NOTE: sebuah Primary Key hanya dapat dihapus jika tidak ada Foreign Key yang mengacu pada Primary Key tersebut sp_helpconstraint nama_tabel Melihat informasi constraint pada suatu tabel 46
Foreign Key Foreign Key adalah satu atau gabungan beberapa kolom yang datanya ada di dalam dalam kolom primary key pada tabel lain Foreign key datanya tidak unik Foreign key menghubungkan tabel anak ke tabel induk Tipe data antara PK dan FK harus sama CREATE TABLE transaksi( kdtransaksi CHAR(6), kdpelanggan CHAR(10) CONSTRAINT fk_trplg FOREIGN KEY REFERENCES pelanggan(kdpelanggan), tgltransaksi DATETIME ) 47