P. 1
46535281-Materi-SQL

46535281-Materi-SQL

|Views: 31|Likes:
Published by Anto Raditya

More info:

Published by: Anto Raditya on Feb 07, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

11/29/2011

pdf

text

original

Materi SQL

Sejarah SQL dimulai dari artikel seorang peneliti dari IBM bernama EF Codd yang membahas tentang ide pembuatan basis data relasional pada bulan Juni1970. Artikel ini juga membahas kemungkinan pembuatan bahasa standar untuk mengakses data dalam basis data tersebut. Bahasa tersebut kemudian diberi nama SEQUEL (Structured English Query Language). Setelah terbitnya artikel tersebut, IBM mengadakan proyek pembuatan basis data relasional berbasis bahasa SEQUEL. Akan tetapi, karena permasalahan hukum mengenai penamaan SEQUEL, IBM pun mengubahnya menjadi SQL. Implementasi basis data relasional dikenal dengan System/R. Di akhir tahun 1970-an, muncul perusahaan bernama Oracle yang membuat server basis data populer yang bernama sama dengan nama perusahaannya. Dengan naiknya kepopuleran Oracle, maka SQL juga ikut populer sehingga saat ini menjadi standar de facto bahasa dalam manajemen basis data. Secara umum, SQL terdiri dari dua bahasa, yaitu Data Definition Language (DDL) dan Data Manipulation Language (DML). Implementasi DDL dan DML berbeda untuk tiap sistem manajemen basis data (SMBD)[1], namun secara umum implementasi tiap bahasa ini memiliki bentuk standar yang ditetapkan ANSI. Artikel ini akan menggunakan bentuk paling umum yang dapat digunakan pada kebanyakan SMBD.

Data Definition Language
DDL digunakan untuk mendefinisikan, mengubah, serta menghapus basis data dan objek-objek yang diperlukan dalam basis data, misalnya tabel, view, user, dan sebagainya. Secara umum, DDL yang digunakan adalah CREATE untuk membuat objek baru, USE untuk menggunakan objek, ALTER untuk mengubah objek yang sudah ada, dan DROP untuk menghapus objek. DDL biasanya digunakan oleh administrator basis data dalam pembuatan sebuah aplikasi basis data.
CREATE CREATE digunakan untuk membuat basis data maupun objek-objek basis data. SQL yang umum

digunakan adalah:
CREATE DATABASE nama_basis_data CREATE DATABASE membuat sebuah basis data baru. CREATE TABLE nama_tabel CREATE TABLE membuat tabel baru pada basis data yang sedang aktif. Secara umum, perintah ini

memiliki bentuk
CREATE TABLE [nama_tabel]

tanggal_lahir DATETIME ). . Beberapa sistem manajemen basis data mengizinkan penggunaan spasi dan karakter nonhuruf pada nama kolom. misalnya NOT NULL. Ini dapat digunakan untuk mendefinisikan kunci primer (primary key) dan kunci asing (foreign key). Satu tabel boleh tidak memiliki kunci primer sama sekali..( nama_field1 tipe_data [constraints][. ENUM. namun sangat disarankan mendefinisikan paling tidak satu kolom sebagai kunci primer. BLOB. tipe_data tergantung implementasi sistem manajemen basis data. dan sebagainya. tipe data dapat berupa VARCHAR.] [CONSTRAINT nama_field constraints] ) dengan: nama_field adalah nama kolom (field) yang akan dibuat.] ) atau CREATE TABLE [nama_tabel] ( nama_field1 tipe_data [. . constraints adalah batasan-batasan yang diberikan untuk tiap kolom. dan sebagainya. UNIQUE. Data Manipulation Language DML digunakan untuk memanipulasi data yang ada dalam suatu tabel. Contoh: CREATE TABLE user ( username VARCHAR(30) CONSTRAINT PRIMARY KEY. Perintah yang umum dilakukan adalah: y y y y SELECT INSERT UPDATE DELETE untuk menampilkan data untuk menambahkan data baru untuk mengubah data yang sudah ada untuk menghapus data . Ini juga tergantung implementasi sistem manajemen basis data.. Misalnya.. passwd VARCHAR(20) NOT NULL. TEXT. nama_field2 tipe_data. pada MySQL.. nama_field2 tipe_data.

misalnya AND.... Secara umum. nama_field2... dan sebagainya. OR.000 Contoh 1: Tampilkan seluruh data. Contoh: Diasumsikan terdapat tabel user yang berisi data sebagai berikut. . perintah SELECT memiliki bentuk lengkap: ( QUERY BUDIN ) Cilegon. . nama_tabel3 [AS alias3]. .] [WHERE kondisi] [ORDER BY nama_field1 [ASC|DESC][. SELECT [nama_tabel|alias.] FROM nama_tabel1 [AS alias1] [INNER|LEFT|RIGHT JOIN tabel2 kondisi_penghubung] [. kondisi_aggregat adalah syarat khusus untuk fungsi aggregat.]nama_field1 [AS alias1] [.000. . SELECT * FROM user WHERE total_transaksi = 0 Contoh 3: Tampilkan username pengguna yang bertransaksi kurang dari 10 dan nilainya lebih dari 1. Kondisi dapat dihubungkan dengan operator logika... sehingga terkadang istilah query dirujukkan pada perintah SELECT.. nama_field2 [ASC|DESC]. SELECT * FROM user Contoh 2: Tampilkan pengguna yang tidak pernah bertransaksi. username passwd tanggal_lahir jml_transaksi total_transaksi Aris 6487AD5EF 09-09-1987 6 10.000 Budi 97AD4erD 01-01-1994 0 0 Charlie 548794654 06-12-1965 24 312. SELECT digunakan untuk menampilkan data dari satu atau lebih tabel.]] [HAVING kondisi_aggregat] ON dengan: y y kondisi adalah syarat yang harus dipenuhi suatu data agar ditampilkan.]] [GROUP BY nama_field1[. nama_field2. biasanya dalam sebuah basis data yang sama. .150 Daniel FLKH947HF 24-04-1980 3 0 Erik 94RER54 17-08-1945 34 50.SELECT SELECT adalah perintah yang paling sering digunakan pada SQL.

SELECT SUM(total_transaksi) AS total_nominal_transaksi FROM user Contoh 5: Tampilkan seluruh data diurutkan berdasarkan jumlah transaksi terbesar ke terkecil. Contoh: Tampilkan username pengguna yang memiliki jumlah transaksi terbesar. Fungsi aggregat digunakan pada bagian SELECT. bukan WHERE. Beberapa SMBD mengizinkan penggunaan subquery.SELECT username FROM user WHERE jml_transakai < 10 AND total_transaksi > 1000 Contoh 4: Tampilkan total nominal transaksi yang sudah terjadi. yaitu fungsi-fungsi khusus yang melibatkan sekelompok data (aggregat). Subquery Ada kalanya query dapat menjadi kompleks. SELECT username FROM user WHERE jml_transaksi = ( SELECT MAX(jml_transaksi) FROM user ) INSERT Untuk menyimpan data dalam tabel dipergunakan sintaks: INSERT INTO [NAMA_TABLE] ([DAFTAR_FIELD]) VALUES ([DAFTAR_NILAI]) . Secara umum fungsi aggregat adalah: y y y y SUM untuk menghitung total nominal data COUNT untuk menghitung jumlah kemunculan data AVG untuk menghitung rata-rata sekelompok data MAX dan MIN untuk mendapatkan nilai maksimum/minimum dari sekelompok data. terutama jika melibatkan lebih dari satu tabel dan/atau fungsi aggregat. SELECT * FROM user ORDER BY jml_transaksi DESC Fungsi aggregat Beberapa SMBD memiliki fungsi aggregat. Syarat untuk fungsi aggregat diletakkan pada bagian HAVING.

'pass'). PASSWORD) VALUES ('test'. . ALAMAT. 'alamat'.Contoh: INSERT INTO TEST (NAMA. UPDATE Untuk mengubah data menggunakan sintaks: UPDATE [NAMA_TABLE] SET [NAMA_KOLOM]=[NILAI] WHERE [KONDISI] Contoh: UPDATE Msuser set password="123456" where username="abc" DELETE Untuk menghapus data dipergunakan sintaks: DELETE FROM [NAMA_TABLE] [KONDISI] Contoh: DELETE FROM TEST WHERE NAMA='test'.

kodemk = matakuliah. ( SELECT kodekuliah. a. berisi daftar dosen pengampu kuliah mahasiswa(nim.kodekuliah GROUP BY nim Penjelasan: Pada query ini kita menampilkan jumlah SKS yang telah diselesaikan oleh masing-masing mahasiswa bila matakuliah yang diulang semua masuk dalam perhitungan. nama. kodekuliah. kuliah. kita . SUM( sks ) jumlahsks FROM peserta. nilai yang diikutkan untuk perhitungan IP adalah nilai terakhir matakuliah dikatakan lulus bila nilai yang diperoleh minimal D Berikut ini adalah contoh-contoh query dalam MySQL: 1. berisi kuliah yang diikuti mahasiswa beserta nilainya dalam huruf Dalam pembahasan kali ini diasumsikan: y y y matakuliah hanya ditawarkan sekali dalam setahun. Pertama-tama. nama). berisi daftar mahasiswa kuliah(kodekuliah. Menampilkan banyaknya SKS yang telah diselesaikan oleh masing-masing mahasiswa Bila matakuliah yang diulang semua masuk dalam perhitungan SELECT nim.Contoh-contoh query SQL Pada kesempatan kali ini saya akan menjelaskan contoh-contoh query dalam MySQL.kodekuliah = A. berisi daftar matakuliah dan dosen pengampu peserta(nim. sks). sks FROM kuliah. matakuliah WHERE kuliah. thnakademik.kodemk )A WHERE peserta. yaitu pada semester 1 (ganjil) saja atau semester 2 (genap) saja dan tidak kedua-duanya. dosenpembimbing). namamk. nip.kodemk. bila pernah mengulang matakuliah. kodemk. berisi daftar matakuliah yang ditawarkan dosen(nip. semester). Tabeltabel yang akan kita gunakan adalah sebagai berikut: y y y y y matakuliah(kodemk. nilai).

kuliah. Pertama-tama kita melakukan join tabel peserta dengan tabel kuliah pada kondisi kodekuliah pada tabel peserta sama dengan kodekuliah pada tabel kuliah untuk mendapatkan nim dan kodemk.kodemk.kodemk = matakuliah. Selanjutnya.kodekuliah )P.kodemk )A « Lalu hasil join tersebut diberi alias A. «( SELECT kodekuliah.kodemk GROUP BY nim Penjelasan: Pada query ini kita menampilkan jumlah SKS yang telah diselesaikan oleh masing-masing mahasiswa bila matakuliah yang diulang hanya dihitung sekali. Bila matakuliah yang diulang hanya yang sesuai dengan asumsi yang masuk dalam perhitungan SELECT nim. kodemk dan sks. tabel A tadi kita join-kan dengan tabel peserta pada kondisi kodekuliah pada tabel peserta sama dengan kodekuliah pada tabelA untuk mendapatkan nim dan sks yang selanjutnya kita menjumlahkan sks dengan SUM(sks) yang dikelompokkan berdasarkan nim menggunakan GROUP BY nim. b. sks FROM kuliah. matakuliah WHERE kuliah.melakukan join tabel kuliah dengan tabel matakuliah pada kondisi kodemk pada tabel kuliah sama dengan kodemk pada tabel matakuliah untuk mendapatkankodekuliah.kodekuliah = kuliah. . matakuliah WHERE P. kuliah WHERE peserta.kodemk = matakuliah. kodemk FROM peserta. SUM( sks ) totalsks FROM ( SELECT DISTINCT nim.

kodekuliah = peserta.kodekuliah = peserta.kodemk = matakuliah. kuliah.kodemk AND ( nim.«( SELECT DISTINCT nim.kodemk. nilai.kodekuliah GROUP BY nim. Menampilkan data-data yang bisa untuk melakukan perhitungan IPK (berdasar asumsi di atas) SELECT nim. kuliah WHERE kuliah. kodemk. kodemk ) . kuliah. thnakademik ) IN ( SELECT nim.kodemk. sks FROM peserta.kodekuliah )P « Kata DISTINCT setelah SELECT digunakan untuk menghilangkan pengulangan record yang mempunyai nim dan kodemk yang sama agar matakuliah yang diulang oleh seorang mahasiswa hanya muncul sekali. kuliah WHERE peserta. 2.kodekuliah AND kuliah. matakuliah.kodekuliah = kuliah. Lalu tabel P kita join-kan dengan tabel matakuliah pada kondisi kodemk pada tabel P sama dengan kodemk pada tabel matakuliah untuk mendapatkan nim dan sks yang dijumlahkan dengan SUM(sks) setelah dikelompokkan berdasarkan GROUP BY nim. MAX( thnakademik ) thnterakhir FROM peserta. kodemk FROM peserta. Hasil join tersebut diberi alias P. kuliah WHERE kuliah.

kuliah WHERE kuliah. « AND ( nim. kita melakukan join pada tabel peserta dan tabel kuliah dengan kondisi kodekuliah pada tabel kuliahsama dengan kodekuliah pada tabel peserta.kodemk. 3. kuliah. kodemk. Setelah itu kita lakukan operasi intersection dengan query yang menampilkan tahun terakhir menyelesaikan suatu matakuliah.kodekuliah GROUP BY nim. Lalu untuk mencari tahun terakhir digunakan fungsi MAX(thnakademik) setelah dikelompokkan berdasarkan nim dan kodemk denganGROUP BY nim.kodekuliah = peserta. Lalu operasi intersection dilakukan dengan memeriksa apakah record nim. yaitu peserta.Penjelasan: Pada query ini kita melakukan join pada tiga tabel. thnakademik dari hasil join tiga tabel ada pada hasil query untuk menampilkan tahun terakhir menyelesaikan suatu matakuliah. ( SELECT kodekuliah. matakuliah dan kuliah dengan kondisi kodekuliah pada tabel kuliah sama dengan kodekuliah pada tabelpeserta dan kodemk pada tabel kuliah sama dengan kodemk pada tabel matakuliah. COUNT( * ) jumlahpeserta FROM peserta . kodemk ) Pada query untuk menampilkan tahun terakhir menyelesaikan suatu matakuliah. thnakademik ) IN ( SELECT nim. MAX( thnakademik ) thnterakhir FROM peserta. kodemk. kodemk. Menampilkan dosen yang pernah mengampu kelas matakuliah yang pesertanya tidak lebih dari 15 mahasiswa SELECT DISTINCT nip FROM kuliah.

Menampilkan nama mahasiswa yang telah lulus lebih dari 100 SKS SELECT nama FROM ( SELECT nim.kodekuliah = banyakpeserta. Pada query utama kita menampilkan nip yang di dahului dengan kataDISTINCT agar nip yang ditampilkan tidak ada perulangan. kita hitung dahulu jumlah peserta dari setiap kuliah dengan menggunakan COUNT(*) setelah dikelompokkan berdasarkan kodekuliah dengan GROUP BY kodekuliah. matakuliah . 4.GROUP BY kodekuliah ) banyakpeserta WHERE kuliah. Awalnya menggunakan tabel peserta. Lalu pada query utama kita melakukan join pada tabel banyakpeserta dengan tabel kuliah pada kondisi kodekuliah pada tabelkuliah sama dengan kodekuliah pada tabel banyakpeserta serta menambahkan kondisi jumlahpeserta <= 15. COUNT( * ) jumlahpeserta FROM peserta GROUP BY kodekuliah ) banyakpeserta « Setelah itu query tersebut diberi alias banyakpeserta.kodekuliah AND jumlahpeserta <=15 Penjelasan: Pada query ini kita akan menampilkan dosen yang pernah mengampu matakuliah yang pesertanya <= 15 mahasiswa. «( SELECT kodekuliah. SUM( sks ) jumlahsks FROM peserta. kuliah.

«( SELECT nim. Query tersebut diberi alias jumlahlulus. mahasiswa WHERE jumlahsks >100 AND yanglulus.kodekuliah AND kuliah.kodemk = matakuliah.kodemk GROUP BY nim ) yanglulus « .kodekuliah AND kuliah.kodekuliah = peserta. kuliah.kodemk = matakuliah. Mula-mula kita menghitung jumlah SKS dari matakuliah yang lulus untuk masing-masing mahasiswa. SUM( sks ) jumlahsks FROM peserta. matakuliah WHERE nilai < 'E' AND kuliah. Lalu sks yang memenuhi kondisi dijumlahkan dengan SUM(sks) yang diberi alias jumlahsks setelah dikelompokkan berdasarkan nim dengan GROUP BY nim.kodemk GROUP BY nim ) yanglulus. kuliah dan matakuliah dengan kondisi kodekuliah pada tabel kuliah sama dengan kodekuliah pada tabel peserta dan kodemk pada tabel kuliah sama dengan kodemk pada tabel matakuliah disertai dengan kondisi nilai < µE¶ yang berarti nilai >= µE¶ tidak diikutkan.nim = mahasiswa.kodekuliah = peserta. Kita melakukan join pada tiga tabel peserta.WHERE nilai < 'E' AND kuliah.nim Penjelasan: Pada query ini kita akan menampilkan nama mahasiswa yang telah lulus > 100 SKS.

sks FROM peserta.kodekuliah .Pada query utama kita melakukan join pada tabel yanglulus dengan mahasiswa dengan kondisi nim pada tabel yanglulus sama dengan nim pada tabel mahasiswa disertai kondisijumlahsks > 100 untuk menampilkan nama mahasiswa yang telah lulus > 100 SKS. Pertama-tama kita melakukan join pada tabel peserta dankuliah dengan kondisi kodekuliah pada tabel kuliah sama dengan kodekuliah pada tabel peserta untuk mendapatkan nilai dan kodemk. kuliah WHERE kuliah. ( SUM( nilaisks ) / SUM( sks ) ) ip FROM mahasiswa.kodekuliah AND kodemk = 'M0012' Penjelasan: Pada query kali ini kita akan menampilkan jumlah mahasiswa yang telah lulus tugas akhir bila kode matakuliah tugas akhir = µM0012¶. nama.kodekuliah = peserta. kuliah. Lalu hasil join tersebut kita saring dengan kondisi nilai < µE¶ dan kodemk = µM0012¶ yang selanjutnya setelah disaring kita hitung dengan COUNT(*) dan diberi alias lulusTA untuk menghitung jumlah mahasiswa yang telah lulus tugas akhir. kuliah WHERE nilai < 'E' AND kuliah. ( SELECT nim.nim. 5.kodekuliah = peserta. Menampilkan banyaknya siswa yang telah lulus tugas akhir bila kode matakuliah untuk tugas akhir adalah µM0012¶ SELECT COUNT( * ) lulusTA FROM peserta. matakuliah.kodemk. 6. ( ( 69 ± ASCII( UPPER( nilai ) ) ) * sks ) nilaisks. Menampilkan daftar nomor dan nama mahasiswa beserta IP berdasar dua asumsi di atas SELECT buatip.

MAX( thnakademik ) thnterakhir FROM peserta.AND kuliah. «( SELECT nim. kuliah WHERE kuliah. kuliah WHERE kuliah. thnakademik ) IN ( SELECT nim. kuliah. ( ( 69 ± ASCII( UPPER( nilai ) ) ) * sks ) nilaisks.kodekuliah GROUP BY nim.kodemk = matakuliah.kodekuliah = peserta. matakuliah.kodemk = matakuliah.kodemk .kodemk AND ( nim. kodemk.kodemk.kodemk dan nilai yang sudah dikali sks.kodekuliah = peserta.kodemk. sks FROM peserta. kodemk ) )buatip WHERE mahasiswa. Query ini mirip seperti query yang dijelaskan pada nomor 2 dengan sedikit perubahan. kuliah.nim GROUP BY nim Penjelasan: Pada query yang cukup panjang ini. Pada awalnya kita membuat query untuk menampilkan nim.nim = buatip. kita akan menampilkan nomor dan nama mahasiswa beserta IP berdasar dua asumsi di atas.kodekuliah AND kuliah.

Hasil query tersebut diberi alias buatip. kita menjumlahkan semua nilaisks dan membaginya dengan jumlah sks dengan SUM(nilaisks) / SUM(sks) setelah dikelompokkan menurut nim-nya dengan menggunakan GROUP BY nim. kuliah WHERE kuliah. 7. thnakademik ) IN ( SELECT nim. kodemk. Selanjutnya untuk menghitung IP. Menghitung IP bila asumsi kedua di atas diganti bahwa nilai yang dipakai untuk penentuan IP adalah nilai yang terbaik (dari serangkaian mengulang matakuliah) SELECT nim.kodekuliah = peserta.AND ( nim. MAX( thnakademik ) thnterakhir FROM peserta.kodekuliah GROUP BY nim. kuliah. ( ( 69 ± ASCII( UPPER( nilaimax ) ) ) * sks )nilaimaxsks. ( SUM( nilaimaxsks ) / SUM( sks ) )ip FROM ( SELECT nim. sks FROM matakuliah.kodemk. Lalu kita melakukan join pada tabel buatip dan tabel nama dengan kondisi nim pada tabel mahasiswa sama dengan nim pada tabel buatip untuk mendapatkan nama. kodemk ) ) buatip Bagian yang ditebalkan merupakan perubahan yang dilakukan untuk query kali ini. ( .

nilaimaxsks yang merupakan nilaimax dikali sks serta sks. kodemk.kodekuliah = peserta. Lalu kita mencari nilai terbaik dari setiap matakuliah untuk masing-masing mahasiswa dengan MIN(nilai) setelah dikelompokkan berdasarkan nim dan kodemk dengan menggunakan GROUP BY nim.kodekuliah GROUP BY nim.kodemk )buatip GROUP BY nim Penjelasan: Pada query ini kita akan menampilkan IP dengan asumsi kedua diganti menjadi nilai yang dipakai untuk menghitung IP adalah nilai yang terbaik. kodemk ) nilaiterbaik WHERE nilaiterbaik. Mula-mula kita mencari nilai terbaik pada setiap matakuliah untuk masing-masing mahasiswa. MIN( nilai ) nilaimax FROM peserta.kodekuliah = peserta. MIN( nilai ) nilaimax FROM peserta. kodemk karena nilai ascii µA¶ < µB¶ < µC¶ < µD¶ < µE¶. kuliah WHERE kuliah. kodemk ) nilaiterbaik « Hasil query tersebut diberi alias nilaiterbaik. . Selanjutnya ditampilkan nim. kuliah WHERE kuliah.kodemk = matakuliah.kodekuliah GROUP BY nim. «( SELECT nim. Kita melakukan join pada tabel peserta dengan tabel kuliah pada kondisi kodekuliah pada tabel kuliah sama dengan kodekuliah pada tabel peserta untuk mendapatkan kodemk dan nilai.SELECT nim. Setelah itu kita melakukan join tabel nilaiterbaik dengan tabel matakuliah pada kondisi kodemk pada tabel nilaiterbaik sama dengan kodemk pada tabel kuliah untuk mendapatkan sks. kodemk.

sks FROM matakuliah. ( SELECT nim.kodemk )buatip « Hasil query tersebut diberi alias buatip.kodekuliah = peserta. Kemudian kita menghitung IP seperti query pada nomor 6 yaitu SUM(nilaimaxsks) / SUM(sks) setelah dikelompokkan berdasarkan nimdengan menggunakan GROUP BY nim. kodemk ) nilaiterbaik WHERE nilaiterbaik. . kodemk.kodemk = matakuliah. MIN( nilai ) nilaimax FROM peserta. kuliah WHERE kuliah. ( ( 69 ± ASCII( UPPER( nilaimax ) ) ) * sks )nilaimaxsks.kodekuliah GROUP BY nim.«( SELECT nim.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->