Anda di halaman 1dari 23

SQL

Modifikasi object data base

Setelah objek database dibuat , mungkin perlu untuk mengubah sifat-


sifatnya untuk memenuhi perubahan kebutuhan bisnis . Drop dan create objek
adalah salah satu cara untuk mencapai modifikasi ini, namun , drop objeck
memiliki efek samping yang buruk .
Cara yang lebih baik untuk memodifikasi objek database adalah dengan
menggunakan pernyataan ALTER SQL Misalnya , dengan asumsi Anda ingin
mengubah definisi tabel sehingga NULLs tidak diperbolehkan untuk kolom
tertentu , Anda dapat mencoba pernyataan SQL ini :

alter table myTable alter column col1 set not null

Menambahkan field gaji

Tabeldosen

RENAME objek database

Setelah objek database dibuat , dapat diganti namanya dengan menggunakan


pernyataan SQL , RENAME . Untuk merubah nama objek database
menggunakan sintaks SQL berikut :

RENAME <object type> <object name> to <new name>

Dimana object type dapat diisi sebagai contoh table, table space, atau
index. Tidak semua objek database dapat direname setelah di create

Dian Eka R Sistem Basis Data : SQL Page 1


Untuk mengubah nama kolom , pernyataan ALTER TABLE SQL harus
digunakan dalam hubungannya dengan RENAME . Sebagai contoh:

ALTER TABLE <table name> RENAME COLUMN <column name>


TO <new name>

Dian Eka R Sistem Basis Data : SQL Page 2


Inserting data

Untuk insert data pada table dipergunakan statemen INSERT.


Ada beberapa cara untuk insert data. Sebagai contoh dapat insert per
baris atau banyak .
Contoh insert per baris pada myTable:

insert into myTable values (1);


insert into myTable values (1, ‘myName’, ‘2010-01-
01’);

Contoh insert 3 baris pada myTable


insert into myTable values (1),(2),(3);
insert into myTable values (1, ‘myName1’,’2010-01-
01’),
(2, ‘myName2’,’2010-02-01’),
(3, ‘myName3’,’2010-03-01’);

Deleting data

DELETE dipergunakan untuk menghapus baris pada tabel. Satu atau


lebih baris pada tabel dapat dihapus dengan 1 statemen

Contoh : menghapus semua baris where col1 > 1000 pada Tabel
myTable

DELETE FROM myTable WHERE col1 > 1000

Jika WHERE clause tidak dipergunakan, DELETE akan menghapus


semua baris pada Tabel .

Updating data

UPDATE statement untuk melakukan update data pada table. Satu atau
lebih baris pada tabel dapat diupdate dengan 1 statemen
menggunakan WHERE clause. For each row selected for update, the
statement can update one or more columns.

For example:
UPDATE myTable SET col1 = -1 WHERE col2 < 0
UPDATE myTable SET col1 = -1,
col2 = ‘a’,

Dian Eka R Sistem Basis Data : SQL Page 3


col3 = ‘2010-01-01’
WHERE col4 = ‘0’

Jika update tanpa WHERE clause, semua baris pad Tabel akan diupdate.

Table joins

Ada 2 tipe SQL statements:


1. Inner join
2. Outer join

Inner joins classified into:


Equi-join
Cross join
Equi-join

SELECT *
FROM student, enrollment
WHERE student.enrollment_no=enrollment.enrollment_no
OR
SELECT *
FROM student
INNER JOIN enrollment
ON student.enrollment_no=enrollment.enrollment_no

Outer joins Outer join adalah bentuk khusus dari join digunakan dalam
pernyataan SQL . Tabel pertama ditentukan dalam pernyataan SQL
dalam klausa FROM disebut sebagai tabel KIRI dan tabel disebut
sebagai tabel KANAN.

An outer join is of the following three types:


Left outer join
Right outer join
Full outer join

Dian Eka R Sistem Basis Data : SQL Page 4


Left outer join

Hasil set merupakan gabungan dari hasil suatu equi - join , termasuk baris yang
gak match dari tabel kiri .

SELECT *
FROM STUDENT
LEFT OUTER JOIN ENROLLMENT
ON STUDENT.ENROLLMENT_NO = ENROLLMENT_NO

Right outer join

Dian Eka R Sistem Basis Data : SQL Page 5


Hasil set merupakan gabungan dari hasil suatu equi - join , termasuk baris yang
gak match dari tabel kanan .

SELECT *
FROM STUDENT
RIGHT OUTER JOIN ENROLLMENT

SELECT *
FROM STUDENT
RIGHT OUTER JOIN ENROLLMENT
ON STUDENT.ENROLLMENT_NO = ENROLLMENT_NO

Full outer join

Hasil set merupakan gabungan dari hasil suatu equi - join , termasuk baris yang
gak match dari tabel kiri dan tabel kanan

SELECT *
FROM STUDENT
FULL OUTER JOIN ENROLLMENT
ON STUDENT.ENROLLMENT_NO = ENROLLMENT_NO

Union, intersection, and difference operations

Union
Operator Union dapat digunakan untuk join yang mempunyai definisi
colom yang sama dan urutan kolom yang sama. Operator UNION
adanya hasil dengan baris yang sama (duplicate)

Dian Eka R Sistem Basis Data : SQL Page 6


SELECT * FROM student_table_a
UNION
SELECT * FROM student_table_b

Intersection

INTERSECT mengembalikan nilai yang memenuhi kedua


syarat

select * from student_table_a


INTERSECT
select * from student_table_b

Difference (Except)

(EXCEPT) mengembalikan nilai pada tabel kiri setelah dikurangi yang


kanan

A EXCEPT B = A MINUS [A INTERSECT B]


For example:

Dian Eka R Sistem Basis Data : SQL Page 7


select * from student_table_a
EXCEPT
select * from student_table_b

Relational operators
Relational operators meliputi :
 Basic mathematical operations like ‘+’, ‘-‘, ‘*’ and ‘/’
 Logical operators like ‘AND’, ‘OR’ and ‘NOT’
 String manipulation operators like ‘CONCATENATE’, ‘LENGTH’,
‘SUBSTRING’
 Comparative operators like ‘=’, ‘<’, ‘>’, ‘>=’, ‘<=’ and ‘!=’
 Grouping and aggregate operators
 Other miscellaneous operations like DISTINCT

Sub-queries

Ketika suatu query diaplikan dengan query, query yang di luar sebagai query
utama atau parent query sedangkan internal query disebut sebagai sub-query
atau inner query . Sub query ini dapat mengembalikan nilai skalar , tunggal atau
ganda tupel , atau kumpulan data NULL . Sub - query dieksekusi pertama, dan
kemudian parent query dijalankan dengan menggunakan data yang
dikembalikan oleh sub - query .

Sub-queries returning a scalar value


Nilai skalar merupakan nilai tunggal dari setiap atribut, misalnya Nama , Umur ,
Course , Tahun , dan sebagainya .

SELECT name FROM students_enrollment


WHERE age = ( SELECT min(age) FROM students )

Query di atas mengembalikan nama siswa yang termuda di antara semua siswa .
Sub-query " SELECT min ( usia ) DARI siswa " mengembalikan nilai skalar
yang menunjukkan usia minimum siswa . Parent query mengembalikan daftar
semua siswa yang usianya sama dengan nilai yang dikembalikan oleh sub -
query.

Dian Eka R Sistem Basis Data : SQL Page 8


Sub-queries returning vector values

Ketika sub-query mengembalikan kumpulan data yang mewakili beberapa nilai


untuk kolom ( seperti daftar nama ) atau array nilai untuk beberapa kolom (
seperti Nama , umur dan tanggal lahir untuk semua siswa ) , maka sub - query
dikatakan kembali nilai-nilai vektor .
Misalnya , untuk mendapatkan daftar siswa yang diterima di program studi yang
ditawarkan oleh departemen ilmu komputer , kita akan menggunakan nested
query berikut :

SELECT name FROM students


WHERE course_enrolled IN
(
SELECT distinct course_name
FROM courses
WHERE department_name = ‘Computer Science’
)

Dari perintah di atas, sub-query mengembalikan daftar semua course yang


ditawarkan di departemen " Computer Science”, sedangkan parent query
mengembalikan daftar semua mahasiswa yang terdaftar dalam course dari sub-
query hasil set .

Correlated sub-query

Ketika sub-query dijalankan untuk setiap baris dari tabel induk , bukan sekali (
seperti yang ditunjukkan pada contoh di atas ) maka sub-query disebut sebagai
berkorelasi sub - query. Sebagai contoh:

SELECT dept, name, marks


FROM final_result a WHERE marks =
(
SELECT max(marks) FROM final_result WHERE dept =
a.dept
)

Pernyataan di atas mencari daftar siswa dengan departemennya , yang


mempunyai nilai maksimal di setiap departemen . Untuk setiap baris pada Tabel
kiri , sub-query menemukan max ( nilai ) untuk departemen dari baris saat ini
dan jika nilai-nilai tanda di baris saat ini sama dengan sub-query set hasil , maka
akan ditambahkan ke hasil permintaan luar ditetapkan .

Dian Eka R Sistem Basis Data : SQL Page 9


Sub-query in FROM Clauses
sub-query dapat dipergunakan pada FROM clause dengan baik, contoh
:

SELECT dept, max_marks, min_marks, avg_marks


FROM
(
SELECT dept,
max(marks) as max_marks,
min(marks) as min_marks,
avg(marks) as avg_marks
FROM final_result GROUP BY dept
)
WHERE (max_marks – min_marks) > 50 and avg_marks < 50

The sub-query mengembalikan maximum, minimum and rata-rata nilai


pad setiap departemen. Outer query menggunakan hasil ini dan
memfilter data dengan menambah syarat kondisi pada WHERE clause
di outer query.

Struktur Query :

Select (daftaratribut)

From (daftar table/relasi)

Where (kondisi)

Group by (atribut yang dipergunakanuntukpengelompokan)

Having (kondisi/syaratuntukpengelompokkan(group by)

Order by (daftaratribut)

Dengan menggunakan database Company yang terdiridari6 tabel yakni Tabel


Employee, bekerja, keluarga, project, departemen, dandep_lokasi

Dian Eka R Sistem Basis Data : SQL Page 10


1. Tampilkan Nama dan alamat pegawai yang bekerja di Departemen
Research. Melibatkan 2 tabel, Employee dan Departemen Research

Select E.nama, E.alamat_Efrom employee E


join departemen D on
E.DNO = D.DNumber and D.DNama='Research';
atau
select E.nama, E.alamat_Efrom employee E,departemen D
whereE.DNO = D.DNumber and D.DNama='Research';

2. Untuk setiap proyek yang berlokasi di Mlg.,tampilkan nomor, nama dan


lokasi proyek, No Departemen yang mengontrolnya, serta Manager SSN.
Melibatkan 2 tabel->Tabel Proyek dan Tabel Departemen.

Select P.PNumber, P.PName,P.Lokasi_P, P.DNUM, D.MGRSSN from


project1 P, Departemen D where P.DNum=D.DNumber and
P.Lokasi_Plike'%alang';

Dian Eka R Sistem Basis Data : SQL Page 11


3. Untuk setiap proyek yang berlokasi di Mlg.,tampilkan nomor proyek, No
Departemen yang mengontrolnya, dan Nama manager.Melibatkan 3
tabel->Tabel Proyek danTabel Departemen dan table employee

Select P.PNumber, P.PName,P.Lokasi_P, P.DNUM, E.nama from project1


P, Departemen D, employee E
Where P.DNum=D.DNumber and D.MGRSSN=E.SSN and
P.Lokasi_Plike'%alang';

Sebelum

update employee
set Alamat_E ='Malang'
where Alamat_E='malang';

Hasil

Dian Eka R Sistem Basis Data : SQL Page 12


Tampilkan nama dan alamat pegawai yang punya keluarga dan
tinggal di Malang
select E.Nama, E.Alamat_E
from employee E
where E.SSN in(select K.ESSN from keluarga K
where E.SSN=K.ESSN and E.Alamat_E like
'Malang');

Pada SQL nama yang sama bisa dipergunakan untuk 2 atau lebih atribut selama
atributnya ada pada relasi yang berbeda. Jika pada suatu kasus ,suatu query
menunjuk ke 2/ lebih atribut dengan nama yang sama, kita harus menyertakan
nama relasi sebelum nama atribut untuk mencegah ambiguitas.

4. Tampilkan nama pegawai dan nama supervisornya. Nama pegawai dan nama
supervisor ada pada satu table yakni Employee

Select E.Nama,S.nama from employee E,employee S


where E.SuperSSn=S.SSN;

Disini E dan S merupakan alternative relasiatau yang disebutjuga


alias.Bisaditulis Employee E atau Employee as E.

5. Tampilkan Nama proyek yang nama pekerjanya John Smith, perlu 3 tabel
: Employee (Nama pegawai), bekerjadan project(Nama project)

selectP.PNamefrom employee E, bekerjaB, Project1 P

Dian Eka R Sistem Basis Data : SQL Page 13


where E.SSN=B.ESSN andB.Pno =P.PNumberandE.namalike'John
Smith';

6. Menampilkan ESSN darisemuapegawai yang mempunyai jam kerja =


pegawai yang mempunyai SSN 333445555

select distinct ESSN from bekerja where jam in (select jam


from bekerja where ESSN='333445555');

7. Menampilkan Nama, gaji dan DNo dari pegawai yang mempunyai


gaji>pegawai gaji semua pegawai yang ada di Departemen 5

select E.SSN from employee E where gaji > all(select gaji


from employee where DNO = 5);

SQL langsung menggunakan beberapa operasi himpunan(set) seperti pada


Aljabar Relasional. Yakni UNION, difference (EXCEPT) dan intekseksi
(INTERSECT). Karena operasi himpunanhanyamengaplikasikan union-
compatible relasi, makarelasi yang dipergunakan harus mempunyai atribut yang
sama dengan urutan yang sama pula.

8. Menampilkan pegawai yang tidak menjadi supervisor

Dian Eka R Sistem Basis Data : SQL Page 14


9. Menampilkan kode pegawai yang tidak punya keluarga

select SSN from employee


except
select ESSN fromkeluarga;

select E.Nama from employee E where E.SSN in(


select E.SSN from employee E
except
select K.ESSN from keluarga K)

10. Menampilkan kode pegawai yang bekrja di No Proyek 1


dan 2

select B.ESSN from bekerja B where B.PNO = 1


intersect
select B.ESSN from bekerja B where B.PNO = 2;

11. Menampilkan kode pegawai yang bekrja di No Proyek 1,2


dan 3

select B.ESSN from bekerja B where B.PNO = 1

Dian Eka R Sistem Basis Data : SQL Page 15


intersect
select B.ESSN from bekerja B where B.PNO = 2
intersect
select B.ESSN from bekerja B where B.PNO = 3;

EXISTS DAN NOT EXISTS

EXISTS(Q) : untukmencekapakahhasildari query adalahkosongatautidak.


EXISTS akan mengembalikan true jika paling tidak ada 1 tuple yang
memenuhi. Sebaliknya jika tidak ada tuple yang memenuhi ,akan
mengembalikan false.

NOT EXISTS (Q): mengembalikan true jika tidak ada tuple yang memnuhi
query Q.

12.Menampilkan semua pegawai yang mempunyai keluarga

select E.SSN from employee E where exists (select K.ESSN


from keluarga K
where E.SSN=K.ESSN)

13.Untuk menampilkan semua pegawai yang tidak mempunyai keluarga

select E.SSN from employee E where not exists (select


K.ESSN from keluarga K
where E.SSN=K.ESSN)

Dian Eka R Sistem Basis Data : SQL Page 16


14. Menampilkan nama pegawai yang tidak punya
keluarga

select E.nama from employee E where not exists (select


K.ESSN from keluarga K
where E.SSN=K.ESSN)

15.Menampilkan manager yang sekurang-kurangnya mempunyai


satuanggota keluarga

select E.nama from employee E


where exists (select * from Departemen D where D.MGRSSN
=E.SSN )
and exists (select * from keluarga K where E.SSn=K.ESSN);

Fungsi Aggregate

16.Menampilkan No Departemen, jumlah pegawai pada setiap


departemen dan rata-rata gaji pada setipa departemen

select DNO, count(*) as Jumlah_Peg_Dep,avg(gaji)as


Rata2_Gaji
from employee
group by DNO

Dian Eka R Sistem Basis Data : SQL Page 17


Tanda * menunjukkan baris/tuple, sehingga COUNT(*) akan
mengembalikan jumlah baris hasil dari query

GROUP BY :dipergunakan untuk mengelompokkan tuple pada relasi berdasar


pada beberapa nilaia tribut/atribut tertentu

Pada group by, group diaplikasikan setelah join kedua relasi. Sering kita ingin
menampilkan nilai dari fungsi hanya untuk grup yang memenuhi kondisi
tertentu.

17. Menampilkan kode pegawai yang mempunyai keluarga dan jumlah


anggota keluarganya
select ESSN, count(*) as jumlah_anggota from keluarga
group by ESSN

select ESSN, count(*) as jumlah_anggota from keluarga


group by ESSN having count(*) > 2;

18.Tampilkan untuk pegawai yang bekerja lebih dari 1 proyek : kode


pegawai, lama bekerja di semua proyek dan jumlah proyek yang
dikerjakan

select ESSN , sum(jam) as total_jam , count(PNO) as


jumlah_proyek from bekerja group by ESSN
having count(PNO) > 1;

Dian Eka R Sistem Basis Data : SQL Page 18


19.Menampilkan kode pegawai dan jumlah proyeknya yang diurutkan mulai
yang jumlah proyeknya terbanyak

select ESSN, count(PNO) as jum_proyek from bekerja


group by ESSN
order by jum_proyek desc;

20.Menampilkan kode pegawai yang jumlah proyeknya paling banyak

select ESSN, count(PNO) as jum_proyekfrombekerjagroupby ESSN


order by jum_proyek desc
fetch first 1 rows only;

Contoh dari query … di atas hanya ingin ditampilkan grup proyek dengan
jumlah pekerja >2. Hal ini bisa diatasi dengan menggunakan HAVING.
Having hanya akan menampilkan grup yang memenuhi kondisi tertentu
tersebut.

Dian Eka R Sistem Basis Data : SQL Page 19


Contoh :

21.Tampilkan jumlah pegawai dari setiap departemen yang gajinya> 30000,


dimana hanya departemen yang jumlah pegawainya > =2 saja

select DNama,count(*)as Jumlah


from departemen, employee
where DNumber=DNO and gaji >30000 and
DNO in (select DNO from employee
group by DNO having count(*)>=2)
group by DNama
order by DNama DESC;

Perbandingan substring,operator aritmatika

Like :perbandingan kondisi pada bagian dari string/substring. Bagian dari string
dispesifikasikan dengan menggunakan ‘%’ . ‘_‘ mengganti single karakter.

Pada nilai numeric bisa dilakukan operasi aritmatika( +, -, *,/)

Menampilkan gaji, kenaikan gaji dan gaji sekarang

select P.PNumber,P.PName, count(B.ESSN) as "Jumlah Pegawai


", count(B.ESSN) * 2000 as "Total Pengeluaran Proyek"
from project1 P, bekerja B
where P.PNumber=B.PNO
Dian Eka R Sistem Basis Data : SQL Page 20
group by P.PNumber,P.PName;

22. Menampilkan pegawai yang gajinya antara 30000 dan 70000

Order by

Order by: untuk mengurutkan tupel hasil dari query berdasarkan satu atau lebih
atribut,

Defaultnya ascending.

Ada 2 yakni ASC(Ascending) dan DESC(Descending)

query

23. Menampilkan Nama departemen, Nama pegawai dan Nama


proyek dari pegawai tersebut

select DNama, Nama, PName


from departemen D, Employee E, project1 P, bekerja B
where E.SSN=B.ESSN and B.PNO=P.PNUmber and D.DNumber =
E.DNO
order by DNama, Nama;

Dian Eka R Sistem Basis Data : SQL Page 21


24. Menampilkan No Proyek, nama Proyek dan jumlah pegawai pada
setiap proyek

select P.PNumber,P.PName, count(*) as Jumlah_Peg_Proyek


from project1 P, bekerja B
where P.PNumber=B.PNO
group by P.PNumber,P.PName;

Buat view

create view dep_1(Nama_Dep,Jum_Peg, Total_Gaji)


as select DNama, count(*), sum(Gaji)
from employee E, departemen D
where D.DNumber=E.DNO
group by D.DNama;

select * from dep_1;

Dian Eka R Sistem Basis Data : SQL Page 22


create view ManKel1
as select E.nama from employee E
where exists (select * from Departemen D where D.MGRSSN
=E.SSN )
and exists (select * from keluarga K where E.SSn=K.ESSN) ;

select * from ManKel1;

Dian Eka R Sistem Basis Data : SQL Page 23

Anda mungkin juga menyukai