Kamis, 15 April 2010
Alternate Key
contoh nya :
ini juga bisa di bilang kunci cadangan dalam sebuah date base .
Candidate key
Contoh nya :
Tugas SISTEM BASIS DATA (DML & DDL)
Data Definition Language (DDL)
Data Definition Language (DDL) berisi pernyataan SQL yang digunakan untuk mendefinisikan, mengatur semua atribut dan properti sebuah database. Dengan pernyataan DLL kamu bisa membuat, mengubah dan menghapus tabel dan juga untuk membuat dan menghapus indeks atau view.
1. CREATE TABLE
Syntax:
CREATE TABLE table_name
(column_definition [,column_definition, ...] [, primary_key_constraint])
Digunakan untuk membuat suatu tabel , mendefinisikan kolom-kolomnya, dan mendefinisikan primary key. Untuk database client tunggal, nama tabel yang digunakan harus berada dalam tanda kutip dan memenuhi aturan yang berlaku. Definisi kolom/fields berisi kombinasi nama kolom, tipe data beserta ukurannya (jika ada). Daftar definisi kolom dipisahkan oleh tanda koma dan berada dalam tanda kurung. Jumlah dan jenis ukuran harus disesuaikan dengan tipe kolom. Sedangkan Primary key digunakan untuk membuat indeks utama dari tabel. Pernyataan berikut membuat tabel Paradox bernama employee.db dengan primary key kolom Last_Name dan First_Name :
CREATE TABLE "employee.db"
(Last_Name CHAR(20), First_Name CHAR(15), Salary NUMERIC(10,2), Dept_No SMALLINT,
PRIMARY KEY (Last_Name, First_Name))
Jika kamu ingin membuat tabel dBASE berikan ekstensi .dbf pada waktu pemberian nama, menjadi employee.dbf. Dalam penulisan nama tabel, diperbolehkan untuk tidak menyertakan ekstensinya tetapi tanda kutip harus dihilangkan jika tidak maka nama tabel adalah db/dbf.
Dan jika ingin membuat tabel dengan kolom berkarakter non-alpanumerik atau nama kolom berspasi, kamu harus memasukkan nama kolom tersebut dalam tanda kutip dan sertakan di depan nama kolom tersebut dengan nama tabel (dengan atau tanpa ekstensi). Tetapi sebaiknya hindari nama kolom berspasi, gunakan tanda garis bawah “_”. Berikut ini dua macam cara pembuatan tabel dengan nama kolom berspasi.
CREATE TABLE "abc.db"
(ID CHAR(3), "ABC.db"."Funny Name" CHAR(10))
CREATE TABLE abc
(ID CHAR(3), ABC."Funny Name" CHAR(10))
2. ALTER TABLE
Syntax:
ALTER TABLE table_reference DROP [COLUMN] column_reference
| ADD [COLUMN] column_reference [,reference DROP [COLUMN] column_reference
| ADD [COLUMN] column_reference...]
Pernyataan ini berfungsi untuk menambahkan atau menghapus suatu kolom dari tabel yang telah ada. Dalam pernyataan ALTER TABLE yang sama, diperbolehkan menghapus satu kolom dan menambahkan kolom yang lain. Kata kunci DROP hanya memerlukan nama kolom yang akan dihapus, sedangkan ADD memerlukan kombinasi lengkap dari nama kolom, tipe data dan mungkin ukurannya yang sesuai. Pernyataan berikut menghapus kolom FullName dan menambahkan kolom LastName dalam tabel Names.
ALTER TABLE Names
DROP FullName, ADD LastName CHAR(25)
Pernyataan ini juga memungkinkan penghapusan dan penambahan kolom bernama sama dalam satu pernyataan ALTER TABLE, tetapi data dalam kolom lama tersebut akan hilang.
ALTER TABLE Names
DROP LastName, ADD LastName CHAR(30)
Jika kolom yang dihapus merupakan bagian dari primary key maka indeks utama akan dihapus. Dan jika kolom tersebut adalah kolom berkarakter non-alpanumerik atau nama kolom berspasi, kamu harus memasukkan nama kolom tersebut dalam tanda kutip dan sertakan di depan nama kolom tersebut dengan nama tabel (dengan atau tanpa ekstensi). Perhatikan kode pernyataan berikut ini:
ALTER TABLE "Customer.db"
ADD "Customer.db"."#ID" CHAR(3)
3. DROP TABLE
Syntax:
DROP TABLE table_reference
Digunakan untuk menghapus suatu tabel yang telah ada. Pernyataan berikut ini menghapus suatu tabel
DROP TABLE Employee
4. CREATE INDEX
Syntax:
CREATE [UNIQUE] [ASC | DESC] INDEX index_reference ON
table_reference (column_reference [,column_reference...])
Pernyataan CREATE INDEX digunakan untuk membuat suatu indeks sekunder dari tabel yang telah ada. Nama indeks tidak boleh mengandung spasi. Kata kunci UNIQUE digunakan untuk membuat suatu indeks yang akan membangkitkan pesan kesalahan jika record bernilai sama dimasukkan dalam kolom yang sama. Secara default, indeks tidak unik. Pernyataan ASC (atau ASCENDING) disertakan jika kamu ingin membuat suatu indeks yang mengurutkan data dari yang paling kecil ke yang paling besar, dan jika sebaliknya gunakan kata kunci DESC. Secara default pengurutan data bersifat ascending jika kedua kata kunci tersebut tidak dinyatakan. Indeks sekunder dari suatu tabel Paradox dapat dibuat multi kolom melalui pernyataan berikut :
CREATE INDEX CustDate ON "Orders.db" (CustNo, SaleDate)
Sedangkan untuk tabel dBASE hanya boleh membuat indeks tunggal.
CREATE UNIQUE INDEX Namex ON "Employee.dbf" (Last_Name)
5. DROP INDEX
Syntax:
DROP INDEX table_reference.index_reference | PRIMARY
Pernyataan ini digunakan untuk menghapus suatu indeks utama atau sekunder. Untuk menghapus indeks utama atau sekunder tabel dBASE atau suatu indeks sekunder tabel Paradox, penulisan nama tabel dan nama indek dipisahkan oleh simbol titik (“.”).
DROP INDEX "Employee.dbf".Namex
Untuk menghapus indeks utama tabel Paradox sertakan kata kunci PRIMARY di belakang nama tabel.
DROP INDEX Orders.PRIMARY
Data Manipulation Language (DML)
Data Manipulation Language (DML) berisi pernyataan SQL yang digunakan untuk mencari/menampilkan, menyisipkan/memasukkan, memperbaharui dan menghapus data tabel. Saya membagi pernyataan DML menjadi dua bagian, yaitu Pernyataan dan Klausa.
1. Pernyataan
1.1. SELECT
Syntax:
SELECT [DISTINCT] * | column_list
FROM table_reference
[WHERE predicates]
[GROUP BY group_list]
[HAVING having_condition]
[ORDER BY order_list]
Digunakan untuk mencari/menampilkan record dari tabel. Pernyataan ini bisa menampilkan semua atau sebagian data tabel. Gunakan tanda bintang (“*”) untuk menampilkan nilai dari semua kolom. Kolom yang dideklarasikan dalam klausa SELECT dapat berasal dari satu tabel atau banyak tabel, juga dapat berupa kolom tabel, nilai lateral, dan nilai hasil perhitungan yang dipisahkan oleh tanda koma. Klausa FROM mengidentifikasikan tabel dimana datanya akan ditampilkan. Pernyataan berikut akan menampilkan data dari dua kolom (CustNo dan Company), plus sebuah nilai lateral (“Current”) dan nilai hasil perhitungan untuk semuarecord dari tabel Customer
SELECT
CustNo,
Company,
"Current" AS CURRENT,
CAST(LastInvoiceDate AS DATE)
FROM Customer
Gunakan kata kunci DISTINCT untuk membatasi data yang ditampilkan hanya sekali pada record yang berbeda, artinya data yang sama pada kolom tersebut hanya ditampilkan sekali saja. Kata kunci ini hanya dapat dipakai dengan kolom sederhana bertipe Char dan Integer, tidak dapat dipakai untuk kolom yang bertipe Blob dan Memo. Untuk mendapatkan record dengan suatu kriteria logika, tambahkan klausa WHERE dalam pernyataan tersebut dan untuk mengelompokkan data gunakan klausa GROUP BY. Klausa HAVING digunakan untuk membatasi record yang ditampilkan berdasarkan hasil dari fungsi aggregate, sedangkan untuk mengurutkan data gunakan klausa ORDER BY. Pernyataan SELECT juga dapat digunakan sebagai subquery dalam pernyataan INSERT, DELETE dan UPDATE.
1.2. DELETE
Syntax:
DELETE
FROM table_reference
[WHERE predicates]
Digunakan untuk menghapus satu record atau lebih dari suatu tabel. Klausa WHERE akan membatasi penghapusan tersebut berdasarkan kriteria logika yang dideklarasikan. Jika tidak mendeklarasikan klausa WHERE maka semua record dalam tabel tersebut akan terhapus. Pernyataan berikut akan menghapus semua data tabel Employee.
DELETE
FROM Employee
Dan pernyataan di bawah ini akan menghapus semua baris dalam tabel Employee jika nilai dari kolom Empno ditemukan dalam subquery pencarian data kolom Empno dari tabel Old_Employee.
DELETE
FROM Employee
WHERE (Empno IN (SELECT Empno FROM Old_Employee))
Pernyataan DELETE hanya mendukung subquery SELECT dalam klausa WHERE.
1.3. INSERT
Syntax:
INSERT INTO table_reference
[(columns_list)]
VALUES (update_atoms)
Pernyataan INSERT berfungsi untuk menambahkan record data baru pada suatu tabel. Nama tabel yang dinyatakan dalam klausa INTO merupakan tabel yang akan menerima data. Daftar kolom yang dipisahkan oleh tanda koma dan berada dalam tanda kurung merupakan kolom-kolom dari tabel, sedang klausa VALUES merupakan nilai-nilai yang disisipkan yang dipisahkan oleh tanda koma dan berada dalam tanda kurung. Jika tidak ada kolom yang dideklarasikan, maka nilai yang diberikan disimpan dalam kolom secara berurutan dalam struktur tabel, sehingga nilai pertama dalam klausa VALUES akan dimasukkan dalam kolom pertama tabel, demikian seterusnya.
Jika daftar kolom dinyatakan secara jelas maka nilai yang diberikan akan disimpan sesuai dengan urutan daftar kolom tersebut. Kolom-kolom yang tidak dinyatakan dalam daftar kolom tidak mempunyai nilai (kosong bukan nol). Jumlah kolom yang dinyatakan harus sama dengan jumlah nilai dalam klausa VALUES. Pernyataan berikut hanya memasukkan suatu nilai dalam kolom CustNo dan Company dari tabel Employee, dan nilai kolom-kolom lain adalah kosong.
INSERT INTO Customer
(CustNo, Company)
VALUES (9842, "Inprise Corporation")
Untuk menambahkan record pada satu tabel yang berasal dari tabel lain, hilangkan klausa VALUES dan gunakan subquery sebagai sumber baris baru tersebut.
INSERT INTO Customer
(CustNo, Company)
SELECT CustNo, Company
FROM OldCustomer
Pernyataan INSERT juga hanya mendukung subquery SELECT dalam klausa VALUES.
1.4. UPDATE
Syntax:
UPDATE table_reference
SET column_ref = update_atom
[, column_ref = update_atom...]
[WHERE predicates]
Untuk memodifikasi satu record atau lebih yang telah ada dalam suatu tabel. Nama tabel dalam pernyataan UPDATE merupakan tabel yang akan menerima perubahan data. Setiap ungkapan dalam klausa SET terdiri atas nama kolom, operator penugasan (=), nilai update dari kolom tersebut. Nilai kondisi update_atom dalam pernyataan UPDATE bisa berupa nilai lateral, nilai tunggal (satu record) dari hasil subquery SELECT, atau nilai hasil perhitungan.
UPDATE SalesInfo
SET TaxRate = 0.0825
Jika nilai kondisi update_atom berasal dari suatu subquery SELECT, sebuah pernyataan SELECT harus dibuat untuk setiap kolom yang akan di-update dalam tabel yang dimaksud. Subquery SELECT tersebut harus berada dalam tanda kurung. Pernyataan berikut meng-update dua kolom OnHand dan InventoryDate dalam tabel Inventory, masing-masing dengan subquery SELECT terpisah.
UPDATE Inventory
SET OnHand = OnHand – (SELECT SUM(Orders.QtySold)
FROM Orders
WHERE (Orders.PartNo = Inventory.PartNo)
AND (Orders.OrderDate BETWEEN "10/01/1999"
AND "10/31/1999")),
InventoryDate = OnHand – (SELECT MAX(Orders.OrderDate)
FROM Orders
WHERE (Orders.PartNo = Inventory.PartNo)
AND (Orders.OrderDate BETWEEN "10/01/1999"
AND "10/31/1999"))
Klausa WHERE membatasi update record dalam tabel, jika tidak ada klausa WHERE yang dinyatakan maka semua baris tabel akan di-update dengan menggunakan ungkapan dalam klausa SET.
UPDATE SalesInfo
SET TaxRate = 0.0825
WHERE (State = "CA")
Pernyataan UPDATE hanya mendukung subquery SELECT dalam klausa WHERE.
2. Klausa
2.1. FROM
Syntax:
FROM table_reference [, table_reference...]
Digunakan untuk menetapkan tabel yang datanya akan ditampilkan melalui suatu pernyataan SELECT. Nilai klausa FROM adalah daftar nama tabel yang dipisahkan oleh tanda koma. Nama alias suatu tabel yang didefinisikan dalam klausa FROM dapat digunakan dalam suatu pernyataan. Pada pernyataan SELECT berikut, nama alias Res didefinisikan untuk tabel RERSERVAT
SELECT
Res.ResNo,
Res.Amt_Paid
FROM Reservat Res
WHERE (Res.Pay_Method = "VISA")
Klausa ini diterapkan dalam pernyataan SELECT.
2.2. WHERE
Syntax:
WHERE predicates
Menyatakan kondisi-kondisi penyaringan data dalam pernyataan SELECT dan UPDATE. Nilai klausa WHERE adalah satu ungkapan logika atau lebih, atau predikat, atau penilaian True atau False setiap record tabel. Multi predikat dalam klausa WHERE harus dipisahkan oleh salah satu operator logika OR atau AND dan setiap nilai predikat dapat dinegasikan dengan operator NOT.
Tanda kurung dapat digunakan untuk mengisolasi perbandingan logika dan kelompok pembanding yang menghasilkan kriteria penilaian baris yang berbeda. Sebagai contoh, pernyataan SELECT berikut menampilkan semua record dimana kolom Shape berisi nilai “round” atau “square” tetapi hanya jika kolom Color berisi nilai “red”.
SELECT
Shape,
Color,
Cost
FROM Objects
WHERE ((Shape = "round") OR (Shape = "square"))
AND (Color = "red")
Tetapi jika semua tanda kurung dalam klausa WHERE tersebut dibuang maka hasilnya akan sangat berbeda. Pernyataan tersebut (semua tanda kurung dibuang) akan menampilkan baris dimana kolom Shape berisi nilai “round” tanpa memperhatikan nilai kolom Color, juga akan menampilkan baris dimana kolom Shape berisi nilai “square” tetapi hanya jika kolom Color berisi nilai “red”. Klausa WHERE menyaring data sebelum pengelompokan data oleh klausa GROUP BY.
2.3. ORDER BY
Syntax:
ORDER BY column_reference [, column_reference...] [ASC|DESC]
Mengurutkan record yang ditampilkan oleh pernyataan SELECT berdasarkan nilai satu kolom atau lebih. Nilai dari klausa ini adalah daftar kolom yang dipisahkan oleh tanda koma. Kolom-kolom tersebut dapat berasal dari satu atau banyak tabel. Jika kolom-kolom tersebut berasal dari banyak tabel, tabel-tabel tersebut harus merupakan bagian dari gabungan tabel. Gunakan kata kunci ASC (atau ASCENDING) untuk mengurutkan data dari yang paling kecil ke yang paling besar, dan jika sebaliknya gunakan kata kunci DESC (atau DESCENDING). Jika tidak dinyatakan maka pengurutan data berdasarkan metode ASC. Pernyataan berikut mengurutkan data secara ascending oleh Year yang dikutip dari kolom LastInvoiceDate, selanjutnya secara descending oleh kolom State, dan kemudian secara ascending oleh hasil konversi huruf besar kolom Company.
SELECT
EXTRACT(YEAR FROM LastInvoiceDate) AS YY,
State,
UPPER(Company)
FROM Customer
ORDER BY
YY DESC,
State ASC, 3
2.4. GROUP BY
Syntax:
GROUP BY column_reference [, column reference...]
Mengelompokan data berdasarkan suatu kolom. Sebagai contoh, suatu query dengan fungsi SUM menghasilkanrecord tunggal yang merupakan total seluruh nilai dari kolom dalam fungsi SUM tersebut. Tetapi jika klausa GROUP BY ditambahkan, maka fungsi SUM melakukan penjumlahan sekali untuk masing-masing kelompokrecord. Klausa GROUP BY diperlukan jika kolom aggregate dan non-aggregate dimasukkan dalam pernyataan SELECT yang sama.
Setiap kolom yang dinyatakan dalam klausa ini merupakan bagian dari tabel yang ditetapkan dalam klausa FROM query, juga terdaftar dalam klausa SELECT query dan tidak mempunya fungsi aggregate yang diberlakukan dalam klausa SELECT. Dalam pernyataan SELECT berikut, nilai kolom Sales dikelompokan berdasarkan nilai-nilai dalam kolom Company. Hasilnya adalah total penjualan untuk setiap perusahaan.
SELECT
C.Company,
SUM(O.ItemsTotal) AS TotalSales
FROM Customer C, Orders O
WHERE C.CustNo = O.CustNo
GROUP BY C.Company
ORDER BY C.Company
Nama kolom yang dinyatakan dalam klausa GROUP BY dapat berupa nama korelasi kolom, seperti contoh berikut ini :
SELECT
C.Company Co,
SUM(O.ItemsTotal) AS TotalSales
FROM Customer C, Orders O
WHERE C.CustNo = O.CustNo
GROUP BY Co
ORDER BY 1
Nilai hasil perhitungan tidak dapat dinyatakan dalam klausa GROUP BY. Dan klausa ini hanya dapat diterapkan dalam pernyataan SELECT.
2.5. HAVING
Syntax:
HAVING predicates
Untuk membatasi record yang ditampilkan oleh pernyataan SELECT dimana nilai-nilai kolom yang telah dikumpulkan memenuhi kriteria yang ditetapkan. Klausa HAVING hanya dapat digunakan dalam pernyataan SELECT jika pernyataan tersebut mempunyai klausa GROUP BY dan satu kolom atau lebih menjadi subjek fungsi aggregate. Nilai klausa HAVING adalah satu ekpresi logika atau lebih, atau predikat yang menilai True atau False tiap record aggregate dari tabel. Sebagai contoh, pernyataan SELECT di bawah menampilkan semua baris dimana total penjualan untuk perusahaan melebihi 1,000.
SELECT
Company,
SUM(sales) AS TOTALSALES
FROM Sales1998
GROUP BY Company
HAVING (SUM(sales) >= 1000)
ORDER BY Company
Pernyataan multi predikat harus dipisahkan oleh salah satu operator logika OR atau AND dan setiap predikat dapat dinegasikan dengan operator NOT. Tanda kurung dapat digunakan untuk mengisolasi perbandingan logika dan kelompok pembanding yang menghasilkan kriteria penilaian record yang berbeda.
Pernyataan SELECT dapat terdiri atas klausa WHERE dan HAVING. Klausa WHERE menyaring data yang dikumpulkan dan menggunakan kolom yang bukan subjek fungsi aggregate. Sedang klausa HAVING melanjutkan penyaring data setelah dikumpulkan dan kolom yang digunakan adalah subjek dari fungsi aggregate. Perhatikan contoh berikut ini, sama dengan contoh terdahulu tetapi data yang ditampilkan jika nilai kolom State adalah “CA”.
SELECT
Company,
SUM(sales) AS TOTALSALES
FROM Sales1998
WHERE (State = "CA")
GROUP BY Company
HAVING (SUM(sales) >= 1000)
ORDER BY Company
Pernyataan berikut menggunakan subquery yang menjumlah semua penjualan untuk California (“CA”) dan menghitung nilai total yang dibagi dua. Nilai perhitungan ini kemudian digunakan untuk membatasi data hasil fungsi aggregate dimana subtotal (didasarkan pada nomor pelanggan) dikelompokkan pada lebih dari atau sama dengan nilai hasil perhitungan tersebut.
SELECT
O.CustNo,
SUM(O.ItemsTotal)
FROM Orders O
GROUP BY O.CustNo
HAVING SUM(O.ItemsTotal) >= (SELECT SUM(O2.ItemsTotal) / 2
FROM Customer C,Orders O2
WHERE (C.CustNo = O2.CustNo) AND (C.State = "CA"))
Jadi klausa HAVING menyaring data setelah pengumpulan oleh klausa GROUP BY, dan untuk menyaring data sebelum pengumpulan data gunakan klausa WHERE.