Home > MySQL, SQL > Menguasai Structured Query Language (SQL)

Menguasai Structured Query Language (SQL)

(My)SQL geek

Image by lilit via Flickr

Database, tabel, baris, dan kolom

Dalam konteks bahasa SQL, pada umumnya informasi tersimpan dalam tabel-tabel yang secara logik merupakan struktur 2 dimensi yang terdiri dari baris-baris data (row atau record) yang berada dalam satu atau lebih kolom (column). Baris pada tabel sering disebut sebagai instance dari data sedangkan kolom sering disebut sebagai attributes atau field.

Keseluruhan tabel-tabel itu dihimpun dalam satu kesatuan yang disebut database.

Gambar 1 Database, tabel, kolom, dan baris

Gambar 1 Database, tabel, kolom, dan baris

Type data pada MySQL

Berikut ini tabel data type yang dapat digunakan untuk field-field tabel pada database MySQL.

Tabel 1 Type data field pada MySQL

Name Keterangan Ukuran
TINYINT[(M)] [UNSIGNED] [ZEROFILL] Signed range -128 – 127

Unsigned range 0 – 255.

1
SMALLINT[(M)]. [UNSIGNED] [ZEROFILL] Signed range -32768 – 32767

Unsigned range 0 – 65535.

2
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] Signed range -8388608-8388607

Unsigned range 0 – 16777215.

3
INT[(M)] [UNSIGNED] [ZEROFILL] Signed range -2147483648 – 2147483647

Unsigned range 0 – 4294967295.

4
BIGINT[(M)] [UNSIGNED] [ZEROFILL] Signed range -9223372036854775808 – 9223372036854775807

Unsigned Range 0 – 18446744073709551615.

8
FLOAT(Precision) Angka floating point. Presisi boleh 4 atau 8. FLOAT(4) adalah single precision dan FLOAT(8) adalah double precision (lihat juga DOUBLE).

Range -3.402823466E+38F – -1.175494351E-38, 0, -1.175494351E-38 – 3.402823466E+38F.

4
FLOAT[(M,D)] Angka floating point kecil. Tidak boleh unsigned.

Range -3.402823466E+38F – -1.175494351E-38, 0, -1.175494351E-38 – 3.402823466E+38F.

4
DOUBLE PRECISION[(M,D)] Angka floating point normal. Tidak boleh unsigned.

Range -1.7976931348623157E+308 – -2.2250738585072014E-308, 0, 2.2250738585072014E-308 – 1.7976931348623157E+308.

8
REAL[(M,D)] Sama seperti DOUBLE 8
DECIMAL [(M,D)] Angka unpacked floating point. Tidak boleh unsigned. Range sama seperti DOUBLE.

Berkelakuan seperti CHAR

M+D
NUMERIC [(M,D)] Sama seperti DECIMAL M+D
TIMESTAMP [(M)] Timestamp otomatis. Berisi waktu pada saat tabel diakses, dalam UNIX time. 4
DATE Untuk menyimpan informasi tanggal.

Format : ‘YY-MM-DD’, ‘YYYY-MM-DD‘, dan ‘YYMMDD’.

Range 0000-00-00 to 9999-12-31.

4
TIME Untuk menyimpan informasi waktu

Format : ‘HH:MM:SS, ‘HHMMSS’, ‘HHMM’, ‘HH’.

3
DATETIME Untuk menyimpan informasi tanggal dan waktu.

Format “YYYY-MM-DD HH:MM:SS”.

Range ’0000-01-01 00:00:00′ – ’9999-12-31 23:59:59′.

8
CHAR(M) [binary] String dengan panjang tetap, selalu tersimpan sesuai dengan panjang yang ditentukan.

Range 1 – 255 characters.

Seluruh space akhiran dibuang saat di-retriev.

Di-sortir dan dibandingkan secara case insensitive kecuali jika diberikan binary keyword.

M
VARCHAR(M) [binary] String dengan panjang variabel, tersimpan sesuai dengan panjangnya saat itu.

Range 1 – 255 characters.

Seluruh space akhiran dibuang saat di-retriev.

Di-sortir dan dibandingkan secara case insensitive kecuali jika diberikan binary keyword.

L+1
TINYTEXT and TINYBLOB TEXT/BLOB dengan panjang maksimum 255 karakter. L+1
TEXT and BLOB TEXT/BLOB dengan panjang maksimum 65535 karakter. L+2
MEDIUMTEXT and MEDIUMBLOB TEXT/BLOB dengan panjang maksimum 16777216 karakter. L+3
LONGTEXT and LONGBLOB TEXT/BLOB dengan panjang maksimum 4294967295 karakter. L+4
ENUM(‘value’,'value2′,…) Objeck string yang hanya boleh memiliki satu nilai dari nilai yang dimungkinkan (atau NULL). 1 or 2
SET(‘value’,'value2′,…) Objeck string yang boleh memiliki lebih dari satu nilai dari nilai yang dimungkinkan (atau NULL). 1-8

Membuat database

Pada modul ini kita akan membuat database dengan nama shopping yang terdiri dari tabel-tabel:

  • publishers , berisi daftar nama penerbit buku
  • titles, berisi daftar judul buku

Gunakan perintah di bawah ini untuk membuat database pada MySQL server.

# mysqladmin create <nama-database>

Contohnya

# mysqladmin create shopping

Database “shopping” created.

Membuat tabel

Setelah database terbuat, anda harus membuat tabel yang akan menyimpan data yang anda butuhkan. Sebagai contoh kita akan membuat tabel daftar penerbit buku (publishers). Tabel ini berisi field-field sebagai berikut:

Tabel 2 Struktur tabel publishers

Field Type Panjang Keterangan
pub_id char 3 berisi nomor identifikasi penerbit, primary key tabel ini
pub_name char 20 berisi nama penerbit
city char 10 berisi nama kota tempat penerbit berada
state char 10 nama provinsi tempat penerbit berada

Gunakan perintah mysql <nama-database> untuk membuat tabel yang dimaksud di atas.

# mysql shopping
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 403 to server version: 3.22.10-beta
Type 'help' for help.
mysql>

Prompt mysql> merupakan tempat anda memasukkan perintah-perintah MySQL yang akan kita pelajari sebentar lagi. Setiap perintah SQL pada MySQL harus diakhiri dengan tanda titik-koma (;). Untuk keluar dari prompt mysql> gunakan perintah quit.

Pada prompt mysql ketikkan perintah-perintah untuk membuat tabel publishers, sebagai berikut

mysql> create table publishers (
-> pub_id int,
-> pub_name char(20),
-> city char(10),
-> state char(10)
-> );
Query OK, 0 rows affected (0.06 sec)

Setelah itu, pada database shopping akan terdapat tabel publishers yang belum terisi data.

Latihan

Buat tabel – tabel di bawah ini pada database shopping.

Tabel 3 Struktur tabel authors

Field Type Panjang Keterangan
au_id integer Nomor identifikasi penulis buku
au_fname char 20 First name penulis
au_lname char 20 Last Name penulis
city char 10 Berisi nama kota tempat penerbit berada
state char 10 Nama provinsi tempat penerbit berada

Tabel 4 Struktur tabel titles

Field Type Panjang Keterangan
title_id char 6 Identifikasi judul buku, primary key
title char 80 Judul buku
type char 15 Jenis kategori buku
pub_id char 3 Identifikasi penerbit, foreign key ke tabel publishers
price integer Harga judul buku ini
advance integer
royalty integer Royalti
ytd_sales integer
notes char 200 Catatan tentang judul ini
pubdate int Tahun penerbitan

Insert Query

Untuk mengisi data pada suatu tabel, gunakan perintah SQL INSERT. Syntaksnya adalah:

INSERT INTO nama-tabel (kolom1,kolom2, …) VALUES (nilai1, nilai2, …);

Contohnya jika anda ingin mengisi tabel publishers dengan data sebagai berikut:

  • Nomor kode; 1
  • Nama penerbit: Gramedia
  • Kota : Jakarta
  • State: Indonesia

Maka perintah SQL INSERT yang harus anda ketikkan adalah sebagai berikut:

mysql> INSERT INTO publishers (pub_id, pub_name, city, state)
-> VALUES
-> (1, ‘Gramedia’, ‘Jakarta’, ‘Indonesia’);
Query OK, 1 row affected (0.01 sec)

Selain melalui prompt mysql, anda dapat juga mengisi data pada database melalui file yang telah berisi data, tentunya dalam format syntaks SQL yang benar. Contohnya, buat file dengan nama PUBLISHER.SQL dengan ini sebagai berikut:

INSERT INTO publishers VALUES ('100','Addison-Wesley','MA','USA');
INSERT INTO publishers VALUES ('101','BANTAM BOOK','MA','USA');
INSERT INTO publishers VALUES ('102','Harper Business','MA','USA');
INSERT INTO publishers VALUES ('103','Hewlett Packard','MA','USA');
INSERT INTO publishers VALUES ('104','John Wiley & Sons, Inc','MA','USA');
INSERT INTO publishers VALUES ('105','Macmillan Publishing Company','MA','USA');
INSERT INTO publishers VALUES ('106','McGraw Hill','MA','USA');
INSERT INTO publishers VALUES ('107','O\'Reilly & Associates, inc','MA','USA');
INSERT INTO publishers VALUES ('108','Osborne McGraw-Hill','MA','USA');
INSERT INTO publishers VALUES ('109','Prentice Hall','MA','USA');
INSERT INTO publishers VALUES ('110','Sams','MA','USA');
INSERT INTO publishers VALUES ('111','Wiley','MA','USA');
INSERT INTO publishers VALUES ('112','Microsoft','MA','USA');

Lalu , dari prompt Linux, ketikkan perintah:

# mysql shopping < PUBLISHERS.SQL

Perhatikan bahwa pada sintaks INSERT, untuk semua field yang bertype char, data yang dimasukkan harus diapit oleh tanda petik ‘’, sedangkan untuk type integer tidak.

Latihan

  • Isikan data pada tabel authors dan titles dengan file AUTHORS.SQL dan TITLES.SQL yang dapat anda download dari alamat sini.

Menggunakan Query SELECT

Perintah SELECT digunakan untuk melihat data dari satu atau beberapa tabel. Syntasknya secara sederhana adalah:

SELECT kolom-kolom

FROM nama-tabel

Menampilkan kolom tertentu

Misalnya, untuk melihat nama-nama pengarang buku yang terdapat pada tabel authors, dapat anda gunakan perintah:

SELECT au_lname, au_fname
FROM authors

Hasilnya akan terlihat daftar nama yang tediri dari dua kolom , masing-masing au_lname dan au_fname, seperti berikut ini:

+------------+----------+
| au_lname   | au_fname |
+------------+----------+
| Purbo      | Onno     |
| Daniel     | Akhmad   |
| Arif       | Aulia    |
| Nursasono  | Rudi     |
+------------+----------+
8 rows in set (0.00 sec)

Ekspression pada query

Tampilan kolom hasil query dapat kita modifikasi sehingga mengeluarkan informasi yang kita butuhkan. Misalnya untuk menampilkan harga discount dari harga normal pada tabel title, anda dapat menggunakan:

SELECT title_id, type, price , price * 0.1
FROM titles

Hasilnya adalah kolom-kolom nomor buku, jenis buku, harga, dan harga discount yang merupakan perkalian harga dengan 0.1.

+----------+----------------------+-------+-------------+
| title_id | type                 | price | price * .1  |
+----------+----------------------+-------+-------------+
...
| PR2807   | PROGRAMMING          | 4     | 0.4         |
| IN7709   | INTERNET             | 65    | 6.5         |
| UN6462   | UNIX                 | 18    | 1.8         |
| CO0175   | COMMUNICATION        | 97    | 9.7         |
| IN2467   | INTERNET             | 28    | 2.8         |
| IN9823   | INTERNET             | 49    | 4.9         |
| IN8724   | INTERNET             | 62    | 6.2         |
| MA5142   | MARKETING            | 64    | 6.4         |
| UN9539   | UNIX                 | 35    | 3.5         |
| IN9247   | INTERNET             | 83    | 8.3         |
| UN1623   | UNIX                 | 10    | 1.0         |
| NE5367   | NETWORKING           | 2     | 0.2         |
| UN2956   | UNIX                 | 77    | 7.7         |
| MA8688   | MARKETING            | 80    | 8.0         |
| IN3551   | INFOSYS              | 71    | 7.1         |
| UN9725   | UNIX                 | 13    | 1.3         |
| PR6948   | PROGRAMMING          | 55    | 5.5         |
+----------+----------------------+-------+-------------+
174 rows in set (0.02 sec)

Distinct

Keyword DISTINCT dapat anda gunakan untuk menghilangkan record-record yang duplikasi. Misalnya jalankan query berikut ini.

SELECT type FROM titles

Hasilnya

+----------------------+
| type                 |
+----------------------+
...
| INTERNET             |
| MARKETING            |
| UNIX                 |
| INTERNET             |
| UNIX                 |
| NETWORKING           |
| UNIX                 |
| MARKETING            |
| INFOSYS              |
| UNIX                 |
| PROGRAMMING          |
+----------------------+
174 rows in set (0.02 sec)

Pada contoh di atas, jika ingin menampilkan kolom type yang tidak duplikasi, maka perintah querynya adalah sebagai berikut

SELECT DISTINCT type FROM titles

dan hasilnya adalah sebagai berikut

+----------------------+
| type |
+----------------------+
...
| DATABASE |
| ELECTRONICS |
| ENVIRONMENT |
| FINANCE |
| INFOSYS |
| INTERNET |
| INVESTMENT |
| MANAGEMENT |
| MARKETING |
| MISC |
| NETWORKING |
| PROGRAMMING |
| QUALITY ASSURANCE |
| SOFTWARE |
| UNIX |
| USER'S MANUAL |
+----------------------+
18 rows in set (0.02 sec)

Jika ada lebih dari satu kolom, maka keyword DISTINCT hanya akan menghilangkan record yang seluruh kolomnya sama.

SELECT *

Untuk melihat seluruh isi kolom dari suatu tabel anda dapat menggunakan query SELECT *. Contohnya :

SELECT * FROM authors

Hasilnya adalah

+-------+------------+----------+----------+-----------+
| au_id | au_lname   | au_fname | city     | state     |
+-------+------------+----------+----------+-----------+
| 1     | White      | Johnson  | US       | CA        |
| 2     | Purbo      | Onno     | Bandung  | Indonesia |
| 3     | Daniel     | Akhmad   | Bandung  | Indonesia |
| 4     | Zamfarra   | Zilmy    | Bandung  | Indonesia |
| 5     | Arif       | Aulia    | Bandung  | Indonesia |
| 5     | Suhardiman | Basuki   | Surabaya | Indonesia |
| 6     | Straight   | Dean     | MA       | USA       |
| 7     | Nursasono  | Rudi     | Jakarta  | Indonesia |
+-------+------------+----------+----------+-----------+
8 rows in set (0.04 sec)

Mem-filter hasil query dengan where

Anda dapat membatasi hasil query dengan keyword WHERE sehingga record-record yang dikeluarkan hanyalah record yang sesuai dengan kriteria yang anda inginkan. Misalnya jika anda ingin menampilkan seluruh judul buku yang berharga di bawah 10, maka querynya adalah

SELECT title, price
FROM titles
WHERE price < 3

Hasilnya adalah

+----------------------------------------------------+-------+
| title                                              | price |
+----------------------------------------------------+-------+
| CPU 16                                             | 1     |
| Understanding DCE                                  | 1     |
| 15th Arrl andTapr Digital Communications Conferenc | 2     |
| TCP/IP Netwrok Administrator                       | 2     |
+----------------------------------------------------+-------+
4 rows in set (0.01 sec)

Equality dan inequality

Pada contoh sebelumnya kita melihat sebuah operator < yang digunakan untuk membandingkan apakah operand sebelah kiri lebih kecil daripada operand sebelah kanan. Pada SQL, terdapat operator equality dan inequality lain yaitu:

Tabel 5 Operator equality dan inequality

Operator Guna
= operand kiri sama dengan operand kanan
<> atau != operand kiri tidak sama dengan operand kanan
>= operand kiri lebih besar atau sama dengan operand kanan
<= operand kiri lebih kecil atau sama dengan operand kanan

Operator logic AND dan OR

Operator ini digunakan untuk menggabungkan dua atau lebih kondisi. Misalnya untuk melihat buku yang berjenis “Database” harganya kurang dari $3 , dapat anda gunakan query berikut ini

SELECT title, type, price
FROM titles
WHERE type = ‘DATABASE’ AND price < 50

Hasilnya adalah

+---------------------------+-------+
| title                     | price |
+---------------------------+-------+
| Oracle PL/SQL Programming | 42    |
| Database Developer        | 8     |
+---------------------------+-------+
2 rows in set (0.01 sec)

Between

Keyword BETWEEN dapat anda gunakan untuk membatasi suatu kolom berada pada suatu batas nilai tertentu. Misalnya untuk mencari buku yang harganya berkisar antara $2 hingga $5, dapat anda gunakan query:

SELECT title, price, type
FROM titles
WHERE price BETWEEN 30 AND 100

Hasilnya

+---------------------------+-------+----------+
| title                     | price | type     |
+---------------------------+-------+----------+
| Oracle PL/SQL Programming | 42    | DATABASE |
| Oracle PL/SQL Programming | 62    | DATABASE |
| Oracle Performance Tuning | 83    | DATABASE |
+---------------------------+-------+----------+
3 rows in set (0.01 sec)

Like

Keyword LIKE digunakan u ntuk mencari data yang memiliki pola tertentu. Misalnya untuk mencari buku yang judulnya mengandung kata UNIX, dapat anda gunakan query;

SELECT title, price
FROM titles
WHERE title LIKE ‘%windows%’

Hasilnya adalah

+---------------------------------+-------+
| title                           | price |
+---------------------------------+-------+
| Connectic Quick Cam for Windows | 25    |
| Borland Delphi for Windows      | 55    |
+---------------------------------+-------+
2 rows in set (0.01 sec)

Pada keyword LIKE dapat anda gunakan tanda-tanda khusus (wildcard) sebagai berikut ini:

Tabel 6 Wildcard pada keyword LIKE

Tanda Arti
% Sembarang nol atau lebih karakter
_ Sembarang satu karaker
[ ] Sembarang karakter yang berada dalam tanda kurung siku

Misalnya untuk mencari judul buku yang berawalan dengan huruf A, maka digunakan query

SELECT title FROM titles
WHERE title LIKE ‘A%’

Untuk mencari judul buku yang memiliki kode BU1234, BI1234, dan BW1234, maka digunakan query

SELECT title FROM titles
WHERE title like ‘B[UIW]1234’

Men-sortir data

Hasil query dapat anda sortir sesuai dengan kebutuhan anda dengan keyword ORDER BY. Misalnya untuk menampilkan daftar judul buku sesuai dengan urutan abjad, gunakan query

SELECT title, price
FROM titles
ORDER BY title

Untuk men-sortir dengan urutan terbalik, gunakan keyowrd tambahan DESC, seperti ini

SELECT title, price
FROM titles
ORDER BY title DESC

Anda dapat mensortir lebih dari satu kolom , misalnya query berikut ini

SELECT title, price
FROM titles
ORDER BY title, price

akan menghasilkan tampilan daftar buku yang terurut berdasarkan abjad dan harganya.

Agregate Function

Selain dari pengolahan record-record, SQL juga menyediakan fungsi-fungsi yang dapat digunakan untuk menghitung hasil tampilan. Fungsi-fungsi itu adalah seperti berikut ini.

Tabel 7 Fungsi-fungsi agregate

Nama Fungsi Guna
sum() menghitung jumlah ekspesi numerik
avg() menghiting rata-rata ekspesi numerik
min() menghitung angka minimal ekspesi numerik
max() menghitung angka maksimal ekspesi numerik
count() menghitung jumlah non-null ekspesi
count(*) menghitung jumlah baris

Misalnya untuk mengetahui harga rata-rata dari buku yang ada di daftar yang anda miliki, gunakan query

SELECT avg(price)
FROM titles

Hasilnya

+------------+
| avg(price) |
+------------+
| 49.1149    |
+------------+
1 row in set (0.00 sec)

Untuk mengetahui jumlah buku yang ada pada daftar, dapat anda gunakan query

SELECT count(*)
FROM titles

Hasilnya

+----------+
| count(*) |
+----------+
| 174      |
+----------+
1 row in set (0.00 sec)

Sub agregate dengan Group By

Fungsi count(*) dapat digunakan untuk mengetahui jumlah seluruh buku yang anda miliki. Untuk mengetahui jumlah buku dan harga rata-rata setiap jenis buku, anda harus menggunakan GROUP BY yang dikombinasikan dengan sum() dan avg() seperti berikut ini.

SELECT type, AVG(price) , SUM(price)
FROM titles
GROUP BY type

Hasilnya

+----------------------+------------+------------+
| type                 | avg(price) | sum(price) |
+----------------------+------------+------------+
| COMMUNICATION        | 76.8000    | 384        |
| COMPUTER ENGINEERING | 28.6667    | 86         |
| DATABASE             | 48.7500    | 195        |
| ELECTRONICS          | 50.6667    | 608        |
| ENVIRONMENT          | 41.3636    | 455        |
| FINANCE              | 51.0000    | 357        |
| INFOSYS              | 57.5455    | 633        |
| INTERNET             | 55.5556    | 1000       |
| INVESTMENT           | 41.5000    | 166        |
| MANAGEMENT           | 73.5000    | 147        |
| MARKETING            | 60.6667    | 182        |
| MISC                 | 38.3333    | 115        |
| NETWORKING           | 15.5000    | 31         |
| PROGRAMMING          | 47.7727    | 1051       |
| QUALITY ASSURANCE    | 80.0000    | 80         |
| SOFTWARE             | 37.1429    | 260        |
| UNIX                 | 45.5849    | 2416       |
| USER'S MANUAL        | 63.3333    | 380        |
+----------------------+------------+------------+
18 rows in set (0.02 sec)

Mem-filter hasil agregate function

Untuk mem-filter tampilan setelah dilakukan fungsi agregate, digunakan keyword HAVING. Misalnya untuk menampilkan jenis kategori yang harga rata-ratanya di atas $60, digunakan query

SELECT type, AVG(price)
FROM titles
GROUP BY type
HAVING AVG(price)>60

Hasilnya

+-------------------+------------+
| type              | avg(price) |
+-------------------+------------+
| COMMUNICATION     | 76.8000    |
| MANAGEMENT        | 73.5000    |
| MARKETING         | 60.6667    |
| QUALITY ASSURANCE | 80.0000    |
| USER'S MANUAL     | 63.3333    |
+-------------------+------------+
5 rows in set (0.02 sec)

Bandingkan jika anda menggunakan query

SELECT type, AVG(price)
FROM titles
WHERE price > 60
GROUP BY type

dimana proses filtering terjadi sebelum dirata-ratakan, artinya yang dirata-ratakan adalah buku yang memiliki harga di atas $60, maka hasilnya adalah

+-------------------+------------+
| type              | avg(price) |
+-------------------+------------+
| COMMUNICATION     | 76.8000    |
| DATABASE          | 72.5000    |
| ELECTRONICS       | 74.2000    |
| ENVIRONMENT       | 78.0000    |
| FINANCE           | 78.0000    |
| INFOSYS           | 76.5000    |
| INTERNET          | 75.1111    |
| INVESTMENT        | 84.0000    |
| MANAGEMENT        | 73.5000    |
| MARKETING         | 72.0000    |
| MISC              | 63.0000    |
| PROGRAMMING       | 74.0000    |
| QUALITY ASSURANCE | 80.0000    |
| UNIX              | 79.8421    |
| USER'S MANUAL     | 77.2500    |
+-------------------+------------+
15 rows in set (0.02 sec)

Join

Pada contoh-contoh sebelumnya kita hanya menggunakan sat tabel pada satu saat. Umumnya aplikasi dengan SQL server melakukan query dengan menggunakan lebih dari satu tabel pada satu saat.

Sekarang kita akan mencoba untuk melakukan query dengan tabel publishers digabungkan dengan tabel titles, dimana kita akan menampilkan daftar buku dan penerbitnya dalam satu query. Untuk hal ini kita memerlukan informasi baik dari tabel titles maupun tabel publishers. Proses penggabungan lebih dari satu tabel ini disebut join, sedangkan hubungan keduanya disebut relation.

Untuk melakukan join, tabel-tabel itu harus memiliki common key atau join key yang menentukan bagaimana baris-baris antar kedua tabel tersebut saling berhubungan. Contohnya pada tabel publishers dan titles, kedua tabel ini saling berbagi common key yang bernama pub_id. Pada tabel publishers, pub_id secara unik mengindetifikasi suatu baris pada tabel itu. Pada tabel titles, suatu nilai pub_id secara unik mengidentifikasi suatu baris pada tabel publishers. Ini berarti bahwa judul buku dengan pub_id ini diterbitkan oleh penerbit yang tercantum pada baris yang ditunjukkan oleh pub_id pada tabel publishers.

Secara diagram, hubungan kedua tabel tersebut dapat digambarkan sebagai berikut:

Gambar 2 Relasi tabel publishers dan titles

Gambar 2 Relasi tabel publishers dan titles

Saat menggabung dua tabel, SQL server tidak langsung mengerti hubungan antar dua tabel tersebut. Artinya anda harus menuliskan common key yang digunakan dalam penggabungan ini. Contohnya, untuk menampilkan daftar buku dan penerbitnya dari tabel titles dan publishers, dapat anda gunakan query berikut ini.

SELECT title, pub_name
FROM titles, publishers
WHERE titles.pub_id = publishers.pub_id

Hasilnya adalah sebagai berikut:

+----------------------------------------------------+----------------+
| title                                              | pub_name       |
+----------------------------------------------------+----------------+
...
| PSD                                                | Prentice Hall  |
| The Java Solution Guide                            | Prentice Hall  |
| 13th Arrl Digital Communications Conference        | Prentice Hall  |
| 15th Arrl and Tapr Digital Communications Conferen | Prentice Hall  |
| Unix Networking Programming                        | Sams           |
| Termcap & terminfo                                 | Sams           |
| Using C on the Unix System                         | Sams           |
| SCO in a Nitshell                                  | Sams           |
| Radio Communication                                | Sams           |
| The Programming Language                           | Sams           |
| Z80 Apllication                                    | Sams           |
| The New IEEE Standard Dictionary of Electrical and | Sams           |
| Wireless Digital Communicators Design and Theory   | Sams           |
| Building A Sucessful Software Business             | Sams           |
| Mathcad 4.0                                        | Sams           |
| 15th Arrl andTapr Digital Communications Conferenc | Sams           |
+----------------------------------------------------+----------------+
174 rows in set (0.03 sec)

Jika anda lupa untuk mencantumkan common key pada join, anda akan mendapatkan hasil yang sangat banyak yang merupakan daftar yang berisi iterasi judul buku untuk setiap baris penerbit.

Menghapus record dengan Delele Query

Untuk menghapus suatu record dengan kriteria tertentu, gunakan query berikut ini

DELETE FROM nama-tabel WHERE kriteria

Misalnya jika anda hendak menghapus record judul buku pada tabel titles yang memiliki harga di bawah $20, gunakan query berikut ini:

DELETE FROM titles WHERE price < 20

Untuk medelete seluruh record pada suatu tabel, gunakan perintah DELETE tanpa menentukan kriterianya, seperti :

DELETE FROM nama-table

Modifikasi record dengan Update query

Untuk memodifikasi nilai kolom dari suatu record, gunakan query UPDATE seperti berikut ini.

UPDATE nama-tabel
SET nama-kolom1=nilai-baru1, nama-kolom2=nilai-baru2,...
WHERE kriteria

Contohnya jika anda hendak memodifikasi nilai harga buku menjadi 50% untuk buku yang harganya masih berada di bawah $20, gunakan query

UPDATE titles
SET price=price * 1.5
WHERE price < 20

Untuk memodifikasi nilai suatu kolom secara keseluruhan, gunakan query UPDATE tanpa kriteria, misalnya

UPDATE titles
SET price=100

Query ini akan meneybabkan seluruh harga buku pada tabel titles menjadi $100.

Menambah record dengan INSERT

Untuk menambah record pada suatu tabel, gunakan query INSERT berikut ini

INSERT INTO nama-tabel
(kolom1, kolom2, ... kolomn)
VALUES (nilai1, nilai2, ... nilain)

Misalnya untuk menambahkan data berikut ini

  • Nomor Indentifikasi Buku PE0034
  • Judul Buku “Visual C++ 5.0, The Complete Refference”
  • Jenis Buku “PEMROGRAMAN”
  • Penerbit Osborne (kode 102)

Maka pada tabel titles, gunakan query berikut ini:

INSERT INTO titles
(title_id, title, type, pub_id, price, advance, royalty, ytd_sales, notes, pubdate)
VALUES
('PE0034', 'Visual C++ 5.0, The Complete Refference', 'PEMROGRAMAN', '102',34,0,0,0,' ', 1998)

Insert query dapat juga dituliskan tanpa nama-nama field seperti di atas, asalkan jumlah field parameter yang anda cantumkan pada keyword VALUES sama dengan jumlah field yang ada ada tabel yang sedang anda insertkan. Misalnya

INSERT INTO titles VALUES
('PE0034', 'Visual C++ 5.0, The Complete Refference', 'PEMROGRAMAN', '102',34,0,0,0,' ', 1998)
Reblog this post [with Zemanta]

  • Share/Bookmark
This site uses a Hackadelic PlugIn, Hackadelic SEO Table Of Contents 1.6.0.