sql

23
Head First SQL Theory 1. Place for everything Create, Insert, Drop adalah command buat database dan table. Format insert into table 1. Insert into admin (user, pass) values ('user','pass') 2. Insert into admin values ('user','pass') 3. Insert into admin (user) values ('user') 2. Select Statement Select : for retrieve data from database. WHERE : untuk specific kondisi data di database AND & OR : untuk specific kondisi di database BETWEEN : untuk kondisi diantara, misalnya ''%'' and "_". Contohnya adalah ' where name like '_im' untuk nama : Kim, lim, Tim DKK. 3. Delete and Update DELETE : perintah SQL buat hapus data di database tergantung where clause-nya. UPDATE : perintah SQL buat mengganti data yang salah, dengan menggunakan where clause juga, agar datanya specific SET : perintah SQL buat nilai baru yang akan mengganti nilai lama waktu update data di database.

Upload: yuhariz-aldyan

Post on 13-Dec-2015

7 views

Category:

Documents


1 download

DESCRIPTION

Head First SQL

TRANSCRIPT

Page 1: SQL

Head First SQL Theory

1. Place for everything

Create, Insert, Drop adalah command buat database dan table.

Format insert into table

1. Insert into admin (user, pass) values ('user','pass')

2. Insert into admin values ('user','pass')

3. Insert into admin (user) values ('user')

2. Select Statement

Select : for retrieve data from database.

WHERE : untuk specific kondisi data di database

AND & OR : untuk specific kondisi di database

BETWEEN : untuk kondisi diantara, misalnya ''%'' and "_". Contohnya adalah ' where name

like '_im' untuk nama : Kim, lim, Tim DKK.

3. Delete and Update

DELETE : perintah SQL buat hapus data di database tergantung where clause-nya.

UPDATE : perintah SQL buat mengganti data yang salah, dengan menggunakan where clause

juga, agar datanya specific

SET : perintah SQL buat nilai baru yang akan mengganti nilai lama waktu update data di

database.

4. Smart Table Design

Atomic Data : bagian terkecil dari data yang tidak bisa di bagi2 lagi. Contohnya kodepos,

Kalau nama bisa di bagi jadi first name dan last name, alamat juga bisa di bagi jadi, Jalan,

gang, RW, RT dst.

Page 2: SQL

Analisa sederhana untuk menentukan apa yang perlu di simpan di dalam tabel kita.

1. Apa yang ingin dijelaskan dari table ini ? Objeknya, pekerjaan atau alamat, orang dst.

2. Bagaimana data ini akan digunakan ? Membuat query jadi lebih sederhana.

3. Apakah tabel kita punya atomic data agar query ke tabel lebih singkat dan to the point.

Membuat data yang bersifat atomic adalah jalan agar database kita NORMAL.

Keuntungan NORMAL tabel.

1. Tidak memiliki duplicate data, akan mengurangi size dari database.

2. Dengan semakin sedikit data yang di cari, maka query akan semakin cepat.

FIRST NORMAL FORM atau INF

1. Tiap baris harus mengandung atomic data.

2. Tiap baris harus memiliki primary key.

5. Alter Rewriting The Past

Alter table : mengganti name sampe struktur table beserta isinya.

Alter with Add : menambahkan kolom ke tabel.

Alter with Drop : remove kolom dari tabel.

Alter with Modify : hanya mengganti tipe data dari kolom yang lama.

Alter with Change : mengganti nama dan tipe data dari existing kolom.

String Function : copy beberapa kata dari data di kolom dan yang aslinya tetep valid.

Misalnya Right (location, 2) maksudnya ambil dua kata dari data di kolom location dari

posisi sebelah kanan.

6. Advanced Select

Page 3: SQL

Select dilakukan dengan specific data, data dikelompokkan, data digabungkan dan fungsi

aritmatika untuk data.

1. Fungsi Order By : untuk mengurutkan data, select * from pegawai order by

name (ASC/DESC). Semua data pegawai akan ditampilkan tetapi berdasarkan

namanya defaultnya mengurutkan low to high, atau istilah SQL nya adalah ASC, dan

DESC yang merupakan lawan dari ASC. Seperti contoh SQL command diatas yang

diletakkan di akhir script sql. Contoh lainnya, kita juga bisa order by dengan lebih

dari satu kolom. Misalnya, select title, harga from tabel_film order by title ASC,

harga DESC. Ini kondisinya adalah data akan diurutkan berdasar title dari high to

low dan harga dari low to high, pertama dia mengurutkan title dulu, setelah itu baru

harga.

2. Group By : untuk pengelompokkan data, biasanya di kombinasikan dengan fungsi

agregat.

3. Fungsi SUM : untuk menghitung jumlah nilai pada data tabel yang dikelompokkan

dan biasanya juga menggunakan Group By. Contohnya, select first_name, SUM(jual)

from tabel_film group by first_name order by SUM(jual) DESC. Hasilnya adalah,

data yang merupakan nama orang dan diurutkan dari penjualan kecil ke besar, dan

merupakan akumulasi, cara menakumulasinya adalah berdasarkan first_name.

4. Fungsi AVG : untuk rata-rata nilai. Contohnya, select first_name, AVG(jual) from

tabel_jual group by first_name. Hasilnya, kumpulan nama dengan rata-rata nilai

penjualan tanpa terurut abjad.

5. Fungsi MIN : mencari nilai minimum. Contohnya, select first_name, MIN(jual)

from tabel_jual group by first_name.

6. Fungsi MAX : mencari nilai maksimum. Contohnya, select first_name, MAX(jual)

from tabel_jual group by first_name.

7. Fungsi COUNT : untuk hitung jumlah baris. Contohnya, select count(name) where

address like '%jakarta%'. Jumlah nama yang punya alamat di Jakarta, hasilnya

cuma angka atau nilai tunggal, misalnya 2.

8. Fungsi DISTINCT : hanya menampilkan data yang sama sekali, tidak ada

pengulangan data. Contohnya, select distinct sale_date from history_sale order by

sale_date. Hasilnya, adalah tanggal penjualan produk, tapi tanggal yang sama hanya

Page 4: SQL

sekali ditampilkan. Contoh lain, select count(distinct sale_date) from history_jual

order by sale_date. Hanya menghitung jumlah tanggal yang berbeda, tanggal yang

sama hanya dihitung sekali.

9. Fungsi LIMIT : untuk membatasi jumlah hasil pencarian. Contohnya, select

first_name, SUM(sales) from history_jual group by first_name order by

SUM(sales) DESC LIMIT 2.

10. Fungsi LIMIT var1, var2. Contohnya, sql script LIMIT O,4. Hasilnya adalah

menampilkan jumlah 3, karena lebih besar dari 0 dan lebih kecil dari 4.

Sebenarnya LIMIT, untuk mengatur berapa jumlah data yang dikembalikan dan dari

baris berapa ke berapa akan dikembalikan.

7. Multi Table Database Design - Out Growing Your Table

Create atomic data, struktur tabel mesti dinormalisasi agar sifatnya atomic dan bisa

disebut Normal Tabel. Ada item interest dengan nilai, Animal, horseback riding. Kalo ada

tabel yang tidak atomic mesti dipecah menjadi tabel baru itu item, dengan menyertakan

primary key sebagai foreign key di tabel yang baru itu, tabel anak dari tabel utama. Contoh.

Create table interest ( int_id int not null auto increment primary key, interest

varchar(50) not null, contact_id int not null, constraint my_contact_id_fk foreign key

(contact_Id) references my_contacts (contact_id);)

Pattern of Data (Pola Data)

Untuk menjelaskan relasi antar tabel.

1. One To One

Punya minimal satu data yang matching antara tabel A dan tabel B.

Tabel Employee.

1. employe_id

2. first_name

3. last_name

Page 5: SQL

Tabel Salary.

1. SSN

2. salary_level

3. employee_id

Ciri-Ciri Kapan Menggunakan One To One.

1. Memisahkan data bisa mempercepat query.

2. Ingin membuat data anda less accessible.

3. Kalo punya data yang besar, lebih baik dipisahkan ke beberapa tabel.

One To One : exactly one row of a parent table is related to one row of child

table.

2. One To Many

One record in a table A can have many matching records in table B, but a record in

table B only can have one match data Professional.

Table Professional

1. prof_id (primary key)

2. profesi

Table my_contacts

1. contact_id (primary_key)

2. last name

3. first name

4. phone

5. email

6. gender

7. birthday

8. prof_id (foreign key)

9. city

Page 6: SQL

10. state

11. status

12. seeking

Tiap orang bisa memiliki profesi yang sama, tetapi tiap orang hanya memiliki

satu profesi.

3. Many to Many

Tiap data di tabel A memiliki banyak data yang bersesuaian dengan Tabel B, dan begitu pula

sebaliknya. Misalnya, Tabel karyawan dan kesukaan atau hobby, mirip dengan contoh diatas.

Contohnya, tabel my_contacts di atas dengan tabel interest.

Tabel interest hanya terdiri dari,

1. Kolom interest_id

2. Kolom interest.

Tapi masih ada masalah kalo kita langsung membuat relasi antara my_contact dengan

interest. Akan banyak foreign key yang merupakan primary key di tabel my_contact.

Maksudnya karena interest yang sama dapat dimiliki oleh banyak karyawan, maka akan ada

redudansi data. Sehingga disarankan untuk membuat junction table yang menjadi

penghubung kedua tabel utama tadi.

Junction tabel, contact_interest, fieldnya, primary key contact_id dan primary key interest id.

Tabel akan menghasilkan primary key contact id yang sama tapi beda interest id, jadinya

yang akan digunakan but searching atau sorting kemungkinan adalah junction tabel.

PATTERN of DATA : Fixing.

Fixing di sini, maksudnya adalah dengan normalisasi tabel.

1. First Normal Norm (1 INF)

Page 7: SQL

1. Data bersifat atomic

2. Tidak boleh ada redudansi dalam satu kolom data.

Misalnya ada tabel mainan, dengan toy_id, toy, color.

toy_id. toy. color.

5. A. Red, blue, black

6. B. Yellow, blue, brown

7. C. Black, blue, grey

IS NOT 1 INF.

The answer are.

Primary key.

toy_id. toy

5. A

6. B

7. C

Foreign key

toy_id. Color

5. Red

5. Blue

5. Black

6. Yellow

6. Blue

6. Brown.

dst.

Kombinasi dua colom antara toy_id dan color, akan menjadi unique combination, key

yang merupakan gabungan beberapa kolom disebut composite key. Composite key

adalah primary key yang merupakan kombinasi banyak kolom yang bersifat unique

Page 8: SQL

Functional Dependent.

Ketergantungan atau keterkaitan antara satu kolom dengan kolom yang lainnya

dalam sebuah tabel, seandainya satu kolom berubah, maka kolom yang bergantung

padanya ikut berubah. Misalnya, kolom Full name berubah, maka kolom last name

dan first name juga harus berubah nilainya. Tapi ada juga beberapa kolom yang

bersifat independent, jika sebuah kolom berubah, dia tidak ikut berubah, misalnya

Jenis Kelamin.

Partial Functionality Dependent.

Kondisi ini terjadi jikalau misalnya, sebuah tabel tidak mempunyai primary key

tunggal, tapi memiliki composite primary key, yang merupakan kombinasi dari 2

kolom tabel atau lebih. Contohnya, di tabel Pahlawan, ada 2 kolom yang menjadi

composite key, yaitu kolom name dan power, dan ada kolom yang memiliki

ketergantungan pade mereka, yaitu kolom initial, cuma initial hanya bergantung

pada name saja, tidak pada power, inilah yang dimaksud partial dependency. Kalo

name berubah, initial berubah, tapi kalo power di modify, maka initial tidak mesti di

berubah.

Transitive Dependency.

Ini kondisi dimana kita mesti modify kolom yang memiliki dependency, jikalau kolom

tempat dependency itu di modify juga, cuma yang specialnya adalah dependency ini

terjadi antar kolom non-key, bukan kolom dari salah satu composite key, misalnya,

kota dan provinsi di alamatmu akan berubah jikalau kamu pindah rumah, padahal

alamat bukan salah satu dari composite key.

Second Normal Form(2NF)

Normalisasi tingkat 2 ini fokus pada bagaimana data yang ada di tiap tabel, memiliki

keterkaitan dengan primary key.

Syarat Berlakunya 2NF.

1. Sudah dalam format 1NF.

Page 9: SQL

2. Tidak boleh ada partial dependency, bener2 harus bergantung pada primary key tunggal,

atau berupa composite primary key, dan totally bergantung pada semua kolom yang

berkombinasi untuk menciptakan primary key.

Ada 2 tabel yang masih mentah.

Tabel toy.

toy_id

toy. (nama toy).

Tabel toy_ inventory

toy_id

store_id

color

inventory (jumlah barang di gudang)

store_address (alamat gudang )

Kalo kita melihat struktur tabelnya, banyak terdapat kolom yang akan mengalami redudansi.

Sehingga mesti disederhanakan struktur tabelnya, dengan normalisasi. Misalnya, kolom color

and store_ address.

Hasil Normalisasi terdapat 3 buah tabel.

Tabel toy_info

- toy_id (primary key)

- toy

- color

- cost

- weight

Tabel store_info

Page 10: SQL

- store_id (primary key)

- address

- phone

- manager

Tabel store_inventory

- toy_id (composite primary key)

- store_id (composite primary key)

- inventory

Third Normal Form (3NF)

1. Sudah dalam format 2NF

3. Tidak boleh ada transitive dependency

Kasus tabel my_contact.

Table my_contact

- contact_I'd

- last name

- first name

- phone

- email

- gender

- birthday

- prof_id (foreign key)

- status_id (foreign key)

- zip_code (foreign key)

Tabel profesi.

- prof_id (primary key)

- profesi

Page 11: SQL

Tabel Status.

- status_id (primary key)

- status.

Tabel zip_code.

- zip_code (primary key)

- state

- city

Tabel seeking.

- seeking_id (primary key)

- seeking

Tabel interest.

- interest_id (primary key)

- interest

Tabel contact_interest.

- contact_id (foreign key)

- interest_id (foreign key)

Jadi keduanya, composite primary.

Tabel contact_seeking.

- contact_id (foreign key)

- seeking_id (foreign key)

Jadi keduanya, composite primary key.

8. Joins And Multi Table Design

Page 12: SQL

Fungsi AS atau aliases di SQL adalah untuk menyerupakan mungkin kata yang tepatnya.

Contohnya,

Create table profession ( id int not null auto_increment, profession varchar (20) ) AS

select profesi from my_contact group by profesi order by profesi.

Hasilnya dari sql diatas adalah tabel baru dengan nama profession, terdapat 2 kolom, yaitu

kolom id dan profesi. Data dari tabel itu merupakan data select di tabel my_contacts.

Alias berikutnya adalah alias buat nama tabel, nama kolom, dan alias hanya bersifat

temporary. Contohnya, kolom profesi dibuat alias, profesi AS prof order by prof group

by prof. Nama prof hanya berlaku untuk sql script saja, jikalau ingin eksekusi sql lain,

kita perlu bikin alias ulang, karena pada intinya, kolom tetap punya nama yang sama

yaitu profesi human prof.

Untuk tabel begitu juga, from my_ contact as con, sebenarnya untuk lebih singkat bisa

menggunakan my_contact con, sql itu sudah benar.

Inner Join Functional.

Ada yang namanya cross join, seandainya anda punya dua tabel, tabel nama anak dan tabel

mainan, lalu kita cross join kan mereka, dengan sql, select t.toy, b.boy from toy t cross join boy

b, hasilnya adalah tiap anak di tabel boys berhak memiliki semua mainan di tabel toy, begitu

juga sebaliknya. Simpulannya, cross join akan memetakan data pada tiap baris di tabel A ke

tiap baris di tabel B. Itulah cross join.

Inner join adalah cross join yang beberapa data di remove akibat query tertentu. Jadi tidak

semua data dipetakan seperti pada cross join. Contoh querynya adalah select mc.lastname,

mc.firstname, mc.profesi from my_contact as mc inner join profession as p on

mc.contact_id = p.prof_id. Kondisi setelah on itu yang membuat beberapa data harus di

remove dari tabel basil query.

Inner join juga adalah proses kombinasi data dari 2 tabel yang didasarkan atas kondisi

perbandingan operator.

Page 13: SQL

Natural Join adalah inner join yang memetakan data antara dua tabel yang persis sama

berdasarkan primary key atau kondisi tertentu.

9. Sub Queries (Queries Within Queries)

Adalah query di dalam query.

Sub-query dengan Natural Join.

1. Contoh sql untuk sub-queries, select mc.firstname, mc.lastname, mc.phone, jc.title from

my_contact mc natural join job_current where jc.title IN (select title from job_listing).

2. Contoh berikutnya untuk mengetahui siapa yang penjualannya paling oke. SQL query-nya,

select mc.firstname, mc.lastname, mc.phone, jc.salary from my_contact mc natural join

jub_current jc where jc.salary IN (select max (jc.salary) from job_current jc).

Sub-query sebagai kolom.

Contohnya, select mc.firstname, mc.lastname, (select state from zip_code where

mc.zip_code = zip_code) AS state from my_contact mc.

Non correlated sub query.

Adalah query yang antara outer query tidak ada keterkaitan dengan inner query yang

merupakan sub query dari outer query.

Selain IN, ada juga command NOT IN yang berfungsi sama dengan IN sebagai representasi

dari sub query, hanya saja value nya berbeda.

Fungsi selanjutnya adalah fungsi NOT EXIST, hanya saja yang di select adalah data yang ada

di outer query dan tidak ada di inner query.

Fungsi berikutnya adalah EXIST, yang tujuannya sama saja dengan fungsi IN.

10. Outer Joins, Self Joins and Unions

Page 14: SQL

Left outer join adalah membandingkan data pada tiap baris tabel kiri dengan baris di tabel

kanan. Hasilnya adalah, data yang matching antara kiri dan kanan akan ditampilkan secara

normal, sedangkan yang tidak ada di kiri dan ada di kanan, akan ditampilkan dengan nilai

NULL. Karena ini left outer join, maka semua data yang ada di tabel kanan akan ditampilkan,

sedangkan yang ada di tabel kiri dan tidak ditemukan di tabel kanan, akan di kasih nilai

NULL, sederhananya, menampilkan data berdasar pada tabel kanan.

Right outer join, memiliki fungsi yang sama dengan left outer join, hanya saja yang memiliki

nilai NULL nantinya adalah tabel sebelah kanan.

Self join adalah melakukan inner join pada tabel yang sama, misalnya ada tabel contact, self

join melakukan inner join pada tabel contact terhadap tabel contact juga.

UNION, adalah fungsi untuk menggabungkan atau mengkombinasikan data pada banyak

tabel, jadi data yang akan dikombinasikan itu muncul dan dijadikan 1 tabel. Semua data

pada semua tabel akan ditulis, tapi tidak sampai menampilkan redudansi data. Syarat

mutlak, adalah hanya bisa memiliki 1 order by pada akhir query statement, karena

merupakan kombinasi lebih dari 2 tabel.

INTERSECT, menampilkan irisan data pada dua tabel atau lebih, jadi data yang ada di semua

tabel akan ditampilkan.

EXCEPT, hanya menampilkan data yang ada di tabel A dan tidak untuk data yang ada di

tabel B, dan yang ada di media tabel.

11. Constraints, Views, Transaction

Constrain adalah cara untuk mengontrol apa saja nilai atau data yang bisa di-input dalam

tabel di database dan apa yang tidak, sebelumnya kita sdh mempunyai atau memakai sejenis

constraint, seperti NOT NULL, Primary Key, Foreign Key, UNIQUE.

Page 15: SQL

Kali ini kita akan kembali membahas mengenai constraint, hanya saja namanya berbeda,

yaitu CHECK constraint. Contoh, sql-nya adalah,

Alter table my_contacts add constrains CHECK gender IN ('M','F'), maksudnya ini, kita

tidak akan bisa lagi menginput nilai atau data selain M dan F untuk kolom gender, jika kita

memaksa, maka akan keluar error. Jadi intinya, kita akan mengontrol nilai data yang di-

input.

Atau contoh lain,

Create table my_coin ( id int not null auto_increment, coin char(1) CHECK ( coin IN

('P','K','H') ) ).

Functional of View.

View adalah semacam virtual tabel, yang berfungsi layaknya tabel nyata, view tidak

tersimpan di database, dia akan muncul ketika dipanggil dan akan hilang setelah selesai

dipanggil.

Contoh, create view web_designer AS select mc.lastname, mc.first name, mc.phone,

mc.email from my_contact mc natural join job_desired jd where jd.title='Web Designer'.

Cara memanggilnya juga gampang, mirip dengan cara kita memanggil tabel, yaitu Select *

from web_designer. Dengan begitu, semua informasi tentang web_designer akan kita

dapatkan tanpa perlu retype lagi.

Keuntungan menggunakan View.

1. Kita bisa tetap mengontrol perubahan di database kita dari aplikasi yang mungkin saja

akan merusak data.

2. Kita menyederhanakan proses query ke database dengan perintah SQL yang lebih simple

dan mudah.

3. Kita menyembunyikan data yang sebenernya tidak boleh diketahui oleh user, intinya user

hanya perlu memakai view yang kita buat, tanpa perlu tahu apa yang dilakukan query dalam

Page 16: SQL

view itu juga membantu untuk hide data tabel apa saja yang bekerja sama, baik nama

tabelnya, maupun kolom-kolom di tabel itu.

View juga bisa di update, bukan hanya di select dari database, namun ada syarat yang mesti

dipenuhi, yaitu semua kolom yang ada di view merupakan kolom yang di setting untuk NOT

NULL constraint.

Transaction adalah sekumpulan unit untuk satu pekerjaan tertentu. Transaction dapat

diterapkan jika kita telah setting database engine dengan benar dan tepat, sebab yang

mendukung transactions adalah BDB dan InnoDB saja, studi kasus database adalah MySql.

Contoh transaction dengan akhir yang berbeda ada di bawah ini.

1. Start transaction

Update piggy_bank set coin='Q' where coin='P' ;

Rollback ;

Update data batal, karena rollback, dan data tidak berubah sama sekali, tapi kalo diakhiri

dengan COMMIT, maka data akan diupdate sesuai dengan sql command-nya.

12. Security

Kita harus bisa menjaga data, agar tidak di akses oleh sembarang orang, agar tidak

seenaknya di acak2 data yang kita punyai. Beberapa cara yang bisa dilakukan, antara lain.

1. Ganti password buat user root.

Set password 'root' @ 'localhost' = PASSWORD ('1234567');

2. Membuat user baru.

Create user Elsie identified by ('1234567');

3. Menentukan tabel mana saja yang berhak diakses oleh tiap-tiap user.

Grant select on my_contacts TO Elsie, Elsie berhak untuk melakukan select data di tabel

my_contacts, tapi tidak dengan user lain, atau query jenis lain semacam update dan delete.

Macam-Macam ketentuan GRANT.

Page 17: SQL

1. Dalam satu grant bisa terdapat banyak user, yang artinya user itu semua mempunyai hak

yang sama.

2. With Grant Option, user yang mempunyai hak terhadap suatu tabel punya keleluasaan

untuk memberi hak akses yang sama pada user lain.

3. Dengan GRANT ALL, semua hak akses untuk melakukan query diserahkan sepenuhnya

pada user, insert, update, delete, dan select .

Untuk remove privillages query dari elsie.

-Revoke select on clown_info from Elsie.

Untuk remove privillages grant option.

- revoke grant option on delete on my_contact from nia, akan.

Seandainya root memberikan grant option delete ke agus, lalu agus memberikan ke iman,

tiba2 root berubah pikiran dan remove grant option dari agus, maka grant option iman juga

akan lenyap. Itu merupakan konsekuensinya. Seandainya kita tidak ingin iman juga hilang,

maka sql query mesti di ubah. Contohnya,

Revoke delete on my_contact from agus cascade, cascade menyebabkan remove hanya

berlaku tunggal ke target yang dituju, tidak dengan anak-anaknya.

Selanjutnya, ada sql query lain.

Revoke delete on my_contact from agus restrict, ini akan menimbulkan error karena agus

telah mewariskan ke iman.

Jika kita memiliki banyak database administrator, maka kita bisa membuat ROLE, dan role

ini akan diberi grant oleh root, selanjutnya role ini akan di assign ke user tersebut.

Create ROLE date_entry;

Grant insert, update, delete, select on my_contact TO data_entry;

Assign ROLE, Grant data_entry to doc.

Page 18: SQL

Remove ROLE, drop role data_entry.

Role punya fungsi mirip ' with grant option ', yaitu ' with admin option ', yaitu untuk

mewariskan role ke user lainnya.

Grant data_entry to doc with admin option, fungsi untuk remove dan lainnya, sama

dengan yang dimiliki grant, commandnya juga sama, untuk cascade dan restrict.

Combine create user dan grant,

Grant select on my_contact to agus identified by ('12345');

Catatan.

Tulisan ini didokumentasikan oleh Yuhariz Aldyan. Tidak ada tujuan lain selain untuk

belajar, karena dengan bahasa Indonesia dan telah diringkas, maka dokumen ini bisa

memudahkan kalo diperlukan sewaktu-waktu. Seluruh materi ini telah diringkas dan

ditulis ulang oleh Yuhariz Aldyan. Tidak ada tujuan komersil apapun, seandainya saya

upload pun itu hanya untuk berbagi, kalau saja ada yang perlu materi tentang SQL, dalam

bahasa Indonesia yang memudahkan untuk belajar. Terima kasih.