View - fir A rif
Download
Report
Transcript View - fir A rif
© 2010
© 2010
Rizki Arif Firdaus
http://firarif.wordpress.com/praktikum/
Subquery
merupakan bentuk query yang
berada dalam query lain atau disebut juga
nested query atau subselect.
Dengan
kata lain, dimungkinkan terdapat
statement SELECT di dalam statement SQL
lainnya.
Contoh:
• Tampilkan nama mahasiswa dengan angkatan tertua
Dengan Query select biasa:
SELECT nama FROM mahasiswa WHERE angkatan =
MIN(angkatan);
dalam klausa WHERE tidak boleh ada fungsi AGGREGATE
Dengan Subquery:
SELECT nama FROM mahasiswa WHERE angkatan = (
SELECT MIN(angkatan) FROM mahasiswa);
Latihan
1
• Tampilkan nama mahasiswa yang lahir setelah ‘Cici’
SELECT nama FROM mahasiswa
WHERE tanggal_lahir > (
SELECT tanggal_lahir FROM mahasiswa
WHERE nama = 'Cici' );
Latihan
2
• Tampilkan kode dan nama matakuliah yang jumlah
sksnya lebih besar dari matakuliah dengan kode
‘MMS2401’ dan disediakan pada semester yang sama
dengan matakuliah “Teknik Digital”
Latihan
2
SELECT kode_mata_kuliah,nama FROM mata_kuliah
WHERE sks > (
SELECT sks FROM mata_kuliah
WHERE kode_mata_kuliah = ‘MMS2401' )
AND semester = (
SELECT semester from mata_kuliah
WHERE nama = ‘Teknik Digital’);
Syntax :
operand IN (subquery)
operand comparison_operator ANY (subquery)
operand comparison_operator ALL (subquery)
EXISTS (subquery)
Comparison_operator :
=, >, <, >=, <=, <>, !=, <=>
Contoh
1
• Tampilkan nama program studi yang terdapat
mahasiswanya.
SELECT nama FROM program_studi
WHERE kode_prodi IN
(SELECT DISTINCT kode_prodi
FROM mahasiswa);
Contoh
1 lagi
• Tampilkan nama program studi yang tidak punya
mahasiswa.
SELECT nama FROM program_studi
WHERE kode_prodi NOT IN
(SELECT DISTINCT kode_prodi
FROM mahasiswa);
Contoh
2
• Tampilkan data mahasiswa yang berusia lebih muda
dari SEMBARANG mahasiswa dengan kode prodi ‘IKP’.
Data mahasiswa yang ditampilkan yaitu niu, nama,
usia, kode prodi.
Contoh
2
SELECT niu, nama,
ROUND(DATEDIFF(NOW(),tanggal_lahir)/365, 0) AS usia,
kode_prodi
FROM mahasiswa
WHERE tanggal_lahir > ANY(
SELECT tanggal_lahir
FROM mahasiswa
WHERE kode_prodi = 'IKP');
Contoh
3
• Tampilkan data mahasiswa yang berusia lebih muda
dari SEMUA mahasiswa dengan kode prodi ‘IKP’.
Data mahasiswa yang ditampilkan yaitu niu, nama,
usia, kode prodi.
Contoh
3
SELECT niu, nama,
ROUND(DATEDIFF(NOW(),tanggal_lahir)/365, 0) AS usia,
kode_prodi
FROM mahasiswa
WHERE tanggal_lahir > ALL(
SELECT tanggal_lahir
FROM mahasiswa
WHERE kode_prodi = 'IKP');
Contoh
4
• Tampilkan nama prodi dan kode jurusan yang prodinya
terdapat dalam tabel mahasiswa.
SELECT nama, kode_jurusan
FROM program_studi
WHERE EXISTS (
SELECT * FROM mahasiswa
WHERE mahasiswa.kode_prodi =
program_studi.kode_prodi);
View
merupakan query yang disimpan. Ketika
dipanggil, view akan menampilkan hasil query
yang disimpan tersebut.
View
berperan sebagai virtual tabel.
Syntax:
CREATE [or REPLACE] VIEW view_name
AS select_statement
ALTER [or REPLACE] VIEW view_name
AS select_statement
DROP VIEW view_name
SELECT * FROM view_name
Contoh:
• CREATE VIEW usia
AS SELECT niu, nama,
ROUND(DATEDIFF(NOW(),tanggal_lahir)/365,0)
FROM mahasiswa;
• ALTER VIEW usia
AS SELECT niu, nama,
ROUND(DATEDIFF(NOW(),tanggal_lahir)/365,0)
AS usia
FROM mahasiswa;
Latihan 1
• Buat view untuk menampilkan data mahasiswa
yang berisi nama dan nim. Format nim: [kode prodi] [nif], misal: ‘TEI-3’.
CREATE VIEW namanim
AS SELECT nama,CONCAT(kode_prodi,'-',nif) AS nim
FROM mahasiswa;
Latihan 2
• Ubahlah view pada latihan 1 dengan format nim:
[angkatan] / [niu] / [kode prodi] / [nif], misal:
’09/2/IKP/2’.
ALTER VIEW namanim
AS SELECT nama,CONCAT(SUBSTRING(angkatan,3,2),
'/',niu,'/',kode_prodi,'/',nif) AS nim
FROM mahasiswa;
Digunakan untuk menampilkan data dari banyak
tabel (lebih dari satu tabel).
Macam-macam join:
• [INNER | CROSS] JOIN
• {LEFT | RIGHT} [OUTER] JOIN
• NATURAL {LEFT | RIGHT} [OUTER] JOIN
Dalam MySQL, INNER JOIN = CROSS JOIN
INNER JOIN juga dapat diganti dengan koma (,) +
klausa WHERE
Contoh INNER JOIN:
• Gabungkan semua data pada tabel mahasiswa dan tabel
program_studi
SELECT * FROM mahasiswa
INNER JOIN program_studi
ON mahasiswa.kode_prodi = program_studi.kode_prodi;
atau
SELECT * FROM mahasiswa
INNER JOIN program_studi USING (kode_prodi);
Contoh LEFT JOIN:
• Gabungkan semua data pada tabel mahasiswa dan tabel
program_studi
SELECT * FROM mahasiswa
LEFT JOIN program_studi
ON mahasiswa.kode_prodi = program_studi.kode_prodi;
atau
SELECT * FROM mahasiswa
LEFT JOIN program_studi USING(kode_prodi);
Contoh NATURAL LEFT JOIN:
• Gabungkan semua data pada tabel jurusan dan tabel
program_studi
SELECT * FROM jurusan
NATURAL LEFT JOIN program_studi;
Kesimpulan:
Dengan klausa ON, INNER JOIN = CROSS JOIN = JOIN.
Jika klausa ON diganti dengan klausa WHERE,
INNER JOIN = tanda koma (,).
Penggunaan klausa USING dapat digunakan untuk
menghilangkan redundansi kolom (kolom yang sama).
Pada INNER JOIN, data mengikuti operand kiri sedangkan
urutan baris mengikuti operand kanan.
Pada LEFT JOIN, data dan urutan mengikuti operand kiri.
Pada RIGHT JOIN, data dan urutan mengikuti operand
kanan.
Kesimpulan (lanjutan):
Pada NATURAL {LEFT | RIGHT} JOIN, tidak perlu
digunakan klausa ON, WHERE, atau USING karena
kolom yang sama ditampilkan satu kali saja.
Pada NATURAL JOIN, yang ditampilkan hanya baris
yang memiliki data yang sama pada kolom yang sama.
Pada NATURAL LEFT JOIN, urutan kolom mengikuti
operand kiri sedangkan data mengikuti operand kanan.
Pada NATURAL RIGHT JOIN, urutan kolom mengikuti
operand kanan sedangkan data mengikuti operand kiri.
Latihan 1
• Tampilkan nama mahasiswa beserta nama matakuliah yang
diambil.
SELECT mahasiswa.nama AS mahasiswa, mata_kuliah.nama
AS ‘mata kuliah’
FROM mahasiswa, krs, mata_kuliah
WHERE mahasiswa.niu = krs.niu
AND kode_mk = kode_mata_kuliah;
Latihan 2
• Tampilkan nama dan nim mahasiswa dengan format nim:
[angkatan]/[niu]/[kode fakultas]/[nif], misal : 08/3/PA/3
SELECT mahasiswa.nama, concat( substring( angkatan, 3, 2 ) ,
'/', niu, '/', jurusan.kode_fakultas, '/', nif ) AS nim
FROM mahasiswa, program_studi, jurusan
WHERE mahasiswa.kode_prodi = program_studi.kode_prodi
AND program_studi.kode_jurusan = jurusan.kode_jurusan;
Latihan 3
• Tampilkan nama mahasiswa beserta nama program studi, nama
jurusan, dan nama fakultas.
SELECT mahasiswa.nama AS mahasiswa, program_studi.nama
AS 'program studi', jurusan.nama AS jurusan, fakultas.nama
AS fakultas
FROM mahasiswa, program_studi, jurusan, fakultas
WHERE mahasiswa.kode_prodi = program_studi.kode_prodi
AND program_studi.kode_jurusan = jurusan.kode_jurusan
AND jurusan.kode_fakultas = fakultas.kode_fakultas;