Anda di halaman 1dari 19

SQL

A. Tipe data
1. Number
a. Int “jumlah angka maksimal 11 karakter”
Tipe Fixed Point MySQL:
b. DECIMAL
Tipe data fixed point adalah tipe data angka pecahan (desimal), dimana jumlah angka
pecahan (angka di belakang koma) sudah di tentukan dari awal.
Contoh DEC [6,2] akan mendefiniskan suatu kolom agar memuat 6 digit angka,
dengan 4 angka di depan koma, dan 2 digit angka di belakang koma.

Deklarasi Jangkauan
DECIMAL (4,1) -999,9 to 999,9
DECIMAL (6,2) -9999,99 to 9999,99
DECIMAL (3,2) -9,99 to 9,99
DECIMAL (8,2) -999999,99 to 999999,99

c. FLOAT dan DOUBLE

FLOAT menggunakan single-precision, sedangkan DOUBLE


menggunakan  double-precision.
Field   | Type                          | Null | Key | Default | Extra |
+---------+-------------------------------+------+-----+---------+-------+
| satuan  | float(3,2)                    | YES  |     | NULL    |       |
| puluhan | float(4,2)                    | YES  |     | NULL    |       |
| ribuan  | float(5,2)                    | YES  |     | NULL    |       |
| positif | double unsigned zerofill      | YES  |     | NULL    |       |
| cantik  | double(8,2) unsigned zerofill | YES  |     | NULL    |       |
+---------+-------------------------------+------+-----+---------+-------+
5 rows in set (0.04 sec)
 
mysql> INSERT INTO contoh_float values ((1.3), (55.32), (523.77),
(7832.3), (150000.45));
 
Query OK, 1 row affected (0.15 sec)
 
mysql> SELECT * FROM contoh_float;
+--------+---------+--------+------------------------+-----------+
| satuan | puluhan | ribuan | positif                | cantik    |
+--------+---------+--------+------------------------+-----------+
|   1.30 |   55.32 | 523.77 | 00000000000000007832.3 | 150000.45 |
+--------+---------+--------+------------------------+-----------+
1 row in set (0.00 sec)

2. String (text atau gabungan dari angka dan text)

Tipe data Ket Jenis data


Char Nilai maksimal 255 karakter, jika Tidak membedakan
kita mendefiniskan sebuah tabel dengan hurus baik kecil
kolom bertipe CHAR(5), walaupun huruf
atau karakter yang kita inputkan hanya 1 maupun besar.
karakter, MySQL tetap menyimpan kolom
tersebut untuk 5 karakter
Varchar Nilai maksimal 65.535 karakter,
jika kita definiskan sebagai VARCHAR(5),
dan kita menginput data dengan jumlah
karakter 2, maka ukuran penyimpanan
hanya akan menggunakan 2 karakter,
sehingga VARCHAR lebih fleksibel dan
efisien.
Binary Nilai maksimal 255 karakter, jika Membedakan
kita mendefiniskan sebuah tabel dengan hurus baik kecil
kolom bertipe CHAR(5), walaupun huruf
atau karakter yang kita inputkan hanya 1 maupun besar.
karakter, MySQL tetap menyimpan kolom
tersebut untuk 5 karakter
Varbinary Nilai maksimal 65.535 karakter,
jika kita definiskan sebagai VARCHAR(5),
dan kita menginput data dengan jumlah
karakter 2, maka ukuran penyimpanan
hanya akan menggunakan 2 karakter,
sehingga VARCHAR lebih fleksibel dan
efisien.
Text Setiap tipe data text disimpan berdasarkan Tidak membedakan
berapa data yang diinput, sama seperti
VARCHAR, dimana jika kita mendefinisikan hurus baik kecil
suatu kolom sebagai LONGTEXT, dan hanya maupun besar.
berisi 100 karakter, ukuran penyimpanan
yang digunakan sekitar 100 byte, bukan 4GB
BLOB Tipe data BLOB adalah tipe data versi binary Membedakan
dari TEXT, dimana karakter akan disimpan
dalam bit. Dan untuk karakter huruf, huruf hurus baik kecil
besar dan kecil akan dibedakan (‘A’ tidak maupun besar.
sama dengan ‘a’). Sama seperty TEXT, BLOB
juga memiliki beberapa tipe : TINY BLOB,
BLOB, MEDIUM BLOB, dan LONGBLOB.
B. Atribut tipe data MYSQL
AUTO_INCREMENT, BINARY, DEFAULT, NOT NULL, NULL, SIGNED, UNSIGNED, dan ZEROFILL.

Atribut AUTO_INCREMENT

Atribut AUTO_INCREMENT digunakan untuk tipe data numerik (biasanya tipe data INT),
dimana jika kita menetapkan sebuah kolom dengan atribut AUTO_INCREMENT, maka setiap
kali kita menginputkan data, nilai pada kolom ini akan bertambah 1. Nilai pada kolom tersebut
juga akan bertambah jika kita input dengan NULL  atau nilai 0.

Pada sebuah tabel, hanya 1 kolom yang dapat dikenai atribut AUTO_INCREMENT. Setiap
kolom AUTO_INCREMENT juga akan dikenakan atribut NOT NULL secara otomatis. Kolom
AUTO_INCREMENT juga harus digunakan sebagai KEY (biasanya PRIMARY KEY)

Atribut BINARY

Atribut BINARY digunakan untuk tipe data huruf, seperti CHAR dan VARCHAR. Tipe data
CHAR, VARCHAR dan TEXT tidak membedakan antara huruf besar dan kecil (case-
insensitive), namun jika diberikan atribut BINARY, maka kolom tersebut akan membedakan
antara huruf besar dan kecil (case-sensitive)

Atribut DEFAULT

Atribut DEFAULT dapat digunakan pada hampir semua tipe data. Fungsinya untuk
menyediakan nilai bawaan untuk kolom seandainya tidak ada data yang diinput kepada kolom
tersebut.

Atribut NOT NULL

Atribut NOT NULL dapat digunakan pada hampir semua tipe data, Fungsinya untuk
memastikan bahwa nilai pada kolom tersebut tidak boleh kosong. Jika kita menginput data,
namun tidak memberikan nilai untuk kolom tersebut, akan menghasilkan error pada MySQL.

Atribut NULL

Atribut NULL berkebalikan dengan NOT NULL, dimana jika sebuah kolom didefinisikan
dengan NULL, maka kolom tersebut tidak harus berisi nilai.
Atribut SIGNED

Atribut SIGNED digunakan untuk tipe data numerik. Berlawanan dengan atribut UNSIGNED,
dimana atribut ini berfungsi agar kolom dapat menampung nilai negatif. Atribut SIGNED
biasanya dicantumkan hanya untuk menegaskan bahwa kolom tersebut mendukung nilai negatif,
karena MySQL sendiri telah menyediakan nilai negatif secara default untuk seluruh tipe
numerik.

Atribut UNSIGNED

Atribut UNSIGNED digunakan untuk tipe data numerik, namun berbeda sifatnya untuk tipe data
INT,DECIMAL dan FLOAT. Untuk tipe data INT, atribut UNSIGNED berfungsi
mengorbankan nilai negatif, untuk mendapatkan jangkauan nilai positif yang lebih tinggi.
Namun untuk tipe data DECIMAL dan FLOAT, atribut UNSIGNED hanya akan menhilangkan
nilai negatif, tanpa menambah jangkauan data.

Atribut ZEROFILL

Atribut ZEROFILL digunakan untuk tipe data numerik, dimana berfungsi untuk tampilan
format data yang akan mengisi nilai 0 di sebelah kanan dari data. Jika kita menggunakan atribut
ZEROFILL untuk suatu kolom, secara otomatis kolom tersebut juga dikenakan attribut
UNSIGNED.

Contoh query untuk penggunaan attribut :

1 mysql> CREATE TABLE contoh_att (no int AUTO_INCREMENT,


nama VARCHAR(30) NOT NULL,umur TINYINT UNSIGNED DEFAULT '10',
2 kodepos CHAR(5) NULL,PRIMARY KEY(no));
3 Query OK, 0 rows affected (0.13 sec)
4  
5 mysql> DESCRIBE contoh_att;
6 +---------+---------------------+------+-----+---------+----------------+
7 | Field   | Type                | Null | Key | Default | Extra          |
+---------+---------------------+------+-----+---------+----------------+
8
| no      | int(11)             | NO   | PRI | NULL    | auto_increment |
9
| nama    | varchar(30)         | NO   |     | NULL    |                |
1 | umur    | tinyint(3) unsigned | YES  |     | 10      |                |
0
| kodepos | char(5)             | YES  |     | NULL    |                |
1 +---------+---------------------+------+-----+---------+----------------+
1 4 rows in set (0.01 sec)
1  
2 mysql> INSERT INTO contoh_att VALUES (NULL,'Joko',NULL,20155);
1 Query OK, 1 row affected (0.00 sec)
3  
1 mysql> INSERT INTO contoh_att VALUES (0,'Amir',23,27118);
Query OK, 1 row affected (0.05 sec)
4
1  
mysql> INSERT INTO contoh_att VALUES (6,'Thasya',24,30012);
5 Query OK, 1 row affected (0.04 sec)
1  
6 mysql> INSERT INTO contoh_att VALUES (9,NULL,32,10099);
1 ERROR 1048 (23000): Column 'nama' cannot be null
7  
1 mysql> INSERT INTO contoh_att VALUES (NULL,'Rina',21,10889);
Query OK, 1 row affected (0.05 sec)
8
1  
mysql> SELECT * FROM contoh_att;
9 +----+--------+------+---------+
2 | no | nama   | umur | kodepos |
0 +----+--------+------+---------+
2 |  1 | Joko   | NULL | 20155   |
|  2 | Amir   |   23 | 27118   |
1 |  6 | Thasya |   24 | 30012   |
2 |  7 | Rina   |   21 | 10889   |
2 +----+--------+------+---------+
2 4 rows in set (0.00 sec)
3
2
4
2
5
2
6
2
7
2
8
2
9
3
0
3
1
3
2
3
3
3
4
3
5
3
6
3
7
3
8
3
9
4
0
4
1

Dapat kita lihat bahwa jika kita memberikan nilai NULL kepada kolom nama yang telah
diberikan atribut NOT NULL, MySQL akan memberikan error. Juga pada kolom no, dimana
kita lompat dengan memberikan nilai 6, namun untuk kolom selanjutnya, akan tetap ditambah
sebanyak 1, karena dikenai atribut AUTO_INCREMENT.

1. Membuat dan menghapus database


Sql> CREATE DATABASE db_mahasiswa;
Sql> DROP DATABASE db_mahasiswa;

2. Membuat dan menghapus tabel


Sql> CREATE TABLE mahasiswa (nip char(10), nama varchar(20), jurusan varchar(15), spp
int(12));
Sql> DROP TABLE mahasiswa;
Melihat table ada berapa banya Sql>show tables;
Melihat struktur tabel Sql>describe mahasiswa;
Menampilkan seluruh isi dalam tabel Sql> select * from mahasiswa;
Menampilkan isi tabel perkolom Sql>select * from mahasiswa where nama = ‘romi’;

3. Merubah tabel
a. Merubah tipe data kolom MYSqL

mysql> ALTER TABLE daftar_jurusan MODIFY jumlah_mahasiswa MEDIUMINT;


Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> DESC daftar_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat           | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

b. Merubah nama kolom tabel MYSQL


mysql> ALTER TABLE daftar_jurusan CHANGE alamat alamat_jurusan
VARCHAR(100);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
mysql> DESC daftar_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat_jurusan   | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

c. Merubah nama tabel

CARA PERTAMA MENGGUNAKAN ALTER TABLE

mysql> ALTER TABLE daftar_jurusan RENAME TO tabel_jurusan;


Query OK, 0 rows affected (0.06 sec)
 
mysql> DESC daftar_jurusan;
ERROR 1146 (42S02): Table 'mahasiswa.daftar_jurusan' doesn't exist
 
mysql> DESC tabel_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat_jurusan   | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

CARA KEDUA MENGGUNAKAN RENAME

mysql> RENAME TABLE tabel_jurusan TO daftar_jurusan;


Query OK, 0 rows affected (0.07 sec)
 
mysql> DESC tabel_jurusan;
ERROR 1146 (42S02): Table 'mahasiswa.tabel_jurusan' doesn't exist
 
mysql> DESC daftar_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat_jurusan   | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

d. Menambahkan kolom tabel

mysql> ALTER TABLE daftar_jurusan ADD ketua_jurusan VARCHAR(50);


Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
mysql> DESC daftar_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat_jurusan   | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
| ketua_jurusan    | varchar(50)  | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

e. Menghapus kolom tabel


mysql> ALTER TABLE daftar_jurusan DROP ketua_jurusan;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
mysql> DESC daftar_jurusan;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| kode_jurusan     | char(5)      | YES  |     | NULL    |       |
| nama_jurusan     | varchar(20)  | YES  |     | NULL    |       |
| alamat_jurusan   | varchar(100) | YES  |     | NULL    |       |
| jumlah_mahasiswa | mediumint(9) | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

4. Memasukkan data kedalam tabel

mysql> INSERT INTO mata_kuliah VALUES ('KIMDA','Kimia Dasar',2,' Kimia');


Query OK, 1 row affected (0.06 sec)
 
mysql> select * from mata_kuliah;
+-------------+-------------+------------+--------------+
| kode_matkul | nama_matkul | jumlah_SKS | nama_jurusan |
+-------------+-------------+------------+--------------+
| KIMDA       | Kimia Dasar |          2 |  Kimia       |
+-------------+-------------+------------+--------------+
1 row in set (0.00 sec)

Jika kita ingin langsung memasukkan 2 baris data atau lebih dalam satu perintah query INSERT
MySQL, tinggal menambahkan isi data untuk baris berikutnya dibelakang perintah dengan
format penulisan sebagai berikut:

mysql> INSERT INTO mata_kuliah VALUES


('MMDAS','Matematika Dasar',4,'Matematika'),
('JRKOM','Jaringan Komputer',2,'Ilmu Komputer');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0
 
mysql> select * from mata_kuliah;
+-------------+-------------------+------------+---------------+
| kode_matkul | nama_matkul       | jumlah_SKS | nama_jurusan  |
+-------------+-------------------+------------+---------------+
| JRKOM       | Jaringan Komputer |          2 | Ilmu Komputer |
| KIMDA       | Kimia Dasar       |          2 |  Kimia        |
| MMDAS       | Matematika Dasar  |          4 | Matematika    |
+-------------+-------------------+------------+---------------+
3 rows in set (0.00 sec)

TRUNCATE digunakan untuk mengapus isi tabel


mysql> TRUNCATE mata_kuliah;

Untuk situasi dimana kolom yang akan diisi tidak diketahui urutannya, atau kita hanya akan
mengisi sebagian kolom saja, maka kita harus mendefenisikan kolom-kolom mana saja yang
akan digunakan. Untuk keperluan tersebut, MySQL menyediakan variasi query INSERT

mysql> INSERT INTO mata_kuliah


(kode_matkul,nama_matkul,jumlah_SKS,nama_jurusan)
VALUES ('MMDAS','Matematika Dasar',4,'Matematika');
Query OK, 1 row affected (0.05 sec)
 
mysql> select * from mata_kuliah;
+-------------+------------------+------------+--------------+
| kode_matkul | nama_matkul      | jumlah_SKS | nama_jurusan |
+-------------+------------------+------------+--------------+
| MMDAS       | Matematika Dasar |          4 | Matematika   |
+-------------+------------------+------------+--------------+
1 row in set (0.00 sec)
Bagaimana kalau urutan kolom kita acak? Selama perintah MySQL yang kita input sesuai
dengan urutan kolom yang ditulis, hal tersebut tidak menjadi masalah.

mysql> INSERT INTO mata_kuliah


(nama_jurusan, kode_matkul, jumlah_SKS, nama_matkul)
VALUES ('Ilmu Komputer', 'JRKOM',2,'Jaringan Komputer');
Query OK, 1 row affected (0.04 sec)
 
mysql> select * from mata_kuliah;
+-------------+-------------------+------------+---------------+
| kode_matkul | nama_matkul       | jumlah_SKS | nama_jurusan  |
+-------------+-------------------+------------+---------------+
| JRKOM       | Jaringan Komputer |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar  |          4 | Matematika    |
+-------------+-------------------+------------+---------------+
2 rows in set (0.00 sec)

Input data tidak boleh ada double penginputan primary key karena akan terjadi error, tapi untuk
menghilangkan error tersebut bisa menggunakan IGNORE

mysql> select * from mata_kuliah;


+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengolahan CITRA   |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
+-------------+--------------------+------------+---------------+
5 rows in set (0.00 sec)
 
mysql> INSERT IGNORE INTO mata_kuliah
(kode_matkul,nama_matkul, jumlah_SKS ,nama_jurusan) VALUES
('CITRA','Pengantar CITRA',4,'Ilmu Komputer'),
('STATS','Statistika',4,'Matematika');
Query OK, 1 row affected (0.04 sec)
Records: 2  Duplicates: 1  Warnings: 0
 
mysql> select * from mata_kuliah;
+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengolahan CITRA   |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
| STATS       | Statistika         |          4 | Matematika    |
+-------------+--------------------+------------+---------------+
6 rows in set (0.00 sec)
Pada contoh query berikut ini saya akan mencoba menambahkan kode_matkul: ‘CITRA’, dan
jika terdapat kode matkul yang sama, saya ingin merubah nama_matkul. Instruksi ini dapat
dilakukan dengan menambahkan perintah ON DUPLICATE KEY UPDATE pada akhir query
INSERT. Berikut adalah contoh penggunaannya:

mysql> select * from mata_kuliah;


+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengolahan CITRA   |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
| STATS       | Statistika         |          4 | Matematika    |
+-------------+--------------------+------------+---------------+
6 rows in set (0.00 sec)
 
mysql> INSERT INTO mata_kuliah
(kode_matkul,nama_matkul, jumlah_SKS ,nama_jurusan)
VALUES ('CITRA','Pengantar CITRA',4,'Ilmu Komputer')
ON DUPLICATE KEY UPDATE nama_matkul='Pengantar CITRA';
Query OK, 2 rows affected (0.13 sec)
 
mysql> select * from mata_kuliah;
+-------------+--------------------+------------+---------------+
| kode_matkul | nama_matkul        | jumlah_SKS | nama_jurusan  |
+-------------+--------------------+------------+---------------+
| CITRA       | Pengantar CITRA    |          2 | Ilmu Komputer |
| FIDAS       | Fisika Dasar       |          2 | Fisika        |
| JRKOM       | Jaringan Komputer  |          2 | Ilmu Komputer |
| MMDAS       | Matematika Dasar   |          4 | Matematika    |
| PBASE       | Pengantar Database |          2 | Ilmu Komputer |
| STATS       | Statistika         |          4 | Matematika    |
+-------------+--------------------+------------+---------------+
6 rows in set (0.00 sec)

5. Menampilkan isi tabel


a. Semua isi tabel
mysql> SELECT * FROM daftar_dosen;
b. Menampilkan kolom tertentu
mysql> SELECT nama_dosen, alamat FROM daftar_dosen;
+----------------+-----------+
| nama_dosen     | alamat    |
+----------------+-----------+
| Sabrina Sari   | Pekanbaru |
| Maya Ari Putri | Palembang |
| Susi Indriani  | Bogor     |
| Tia Santrini   | Padang    |
| M. Siddiq      | Jakarta   |
| Rubin Hadi     | Papua     |
| Mustalifah     | Aceh      |
| Arif Budiman   | Makasar   |
+----------------+-----------+
8 rows in set (0.05 sec)
c. Memfilter/menyeleksi data dari tabel
mysql> SELECT NIP,nama_dosen FROM daftar_dosen WHERE alamat='Padang';
+------------+--------------+
| NIP        | nama_dosen   |
+------------+--------------+
| 0480432066 | Tia Santrini |
+------------+--------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM mata_kuliah WHERE semester >= 4;


+-------------+------------------+------------+----------+------------+
| kode_matkul | nama_matkul      | jumlah_SKS | semester | NIP_dosen  |
+-------------+------------------+------------+----------+------------+
| DTBASE      | Database         |          4 |        4 | 0275430005 |
| MIKROP      | Mikro Prosesor   |          2 |        5 | 0480432066 |
| SISOPR      | Sistem Operasi   |          2 |        4 | 0160436012 |
| TEKKOM      | Teknik Kompilasi |          2 |        6 | 0480432066 |
+-------------+------------------+------------+----------+------------+
4 rows in set (0.00 sec)

mysql> SELECT * FROM mata_kuliah WHERE jumlah_SKS=2 AND semester < 5;


+-------------+----------------+------------+----------+------------+
| kode_matkul | nama_matkul    | jumlah_SKS | semester | NIP_dosen  |
+-------------+----------------+------------+----------+------------+
| FISDAS      | Fisika Dasar   |          2 |        1 | 0480432066 |
| SISOPR      | Sistem Operasi |          2 |        4 | 0160436012 |
+-------------+----------------+------------+----------+------------+
2 rows in set (0.07 sec)
d. Mengurutkan hasil tampilan data
kita menginginkan tampilan mata kuliah dengan jumlah SKS lebih dari 2 secara
berurutan dari yang paling kecil, maka querynya:

mysql> SELECT * FROM mata_kuliah WHERE jumlah_SKS > 2 ORDER BY jumlah_SKS;


+-------------+-------------------+------------+----------+------------+
| kode_matkul | nama_matkul       | jumlah_SKS | semester | NIP_dosen  |
+-------------+-------------------+------------+----------+------------+
| JARKOM      | Jaringan Komputer |          3 |        3 | 0770435006 |
| DTBASE      | Database           |          4 |        4 | 0275430005 |
| MATDAS      | Matematika Dasar  |          4 |        1 | 0160436012 |
+-------------+-------------------+------------+----------+------------+
3 rows in set (0.06 sec)

kita ingin menampilkan seluruh dosen pada tabel daftar_dosen dan diurutan kolom alamat
secara abjad, maka querynya adalah sebagai berikut:

mysql> SELECT * FROM daftar_dosen ORDER BY alamat ASC;


+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
+------------+----------------+------------+-----------+
8 rows in set (0.00 sec)

e. Membatasi Hasil query

Misalkan kita ingin menampilkan data 5 nama dosen paling atas yang dirutkan
berdasarkan nama, maka querynya adalah:
mysql> SELECT * FROM mata_kuliah ORDER BY nama_matkul LIMIT 5;
+-------------+-------------------+------------+----------+------------+
| kode_matkul | nama_matkul       | jumlah_SKS | semester | NIP_dosen  |
+-------------+-------------------+------------+----------+------------+
| DTBASE      | Database          |          4 |        4 | 0275430005 |
| FISDAS      | Fisika Dasar      |          2 |        1 | 0480432066 |
| JARKOM      | Jaringan Komputer |          3 |        3 | 0770435006 |
| MATDAS      | Matematika Dasar  |          4 |        1 | 0160436012 |
| MIKROP      | Mikro Prosesor    |          2 |        5 | 0480432066 |
+-------------+-------------------+------------+----------+------------+
5 rows in set (0.00 sec)

f. Menampilkan isi tabel dengan Like

langsung saja kita gunakan untuk pencarian nama_dosen yang diawali dengan huruf ‘S’:

mysql> SELECT * FROM daftar_dosen WHERE nama_dosen LIKE 'S%';


+------------+---------------+------------+-----------+
| NIP        | nama_dosen    | no_hp      | alamat    |
+------------+---------------+------------+-----------+
| 0160436012 | Sabrina Sari  | 0812349900 | Pekanbaru |
| 0275430005 | Susi Indriani | 0812656532 | Bogor     |
+------------+---------------+------------+-----------+
2 rows in set (0.00 sec)

 ‘S%’ : Cocok dengan kata yang diawali dengan S, dan diikuti dengan karakter apa saja,
contoh: ‘S’, ‘Sa’, ‘Si’, ‘Saaaaaa’, ‘Susi’, dan ‘Sabrina Sari’.
 ‘S_’: Cocok dengan kata yang diawali dengan S, dan diikuti dengan satu karakter apa
saja, contoh: ‘Si’, ‘Sa’, ‘Su’, ‘Se’, dan ‘St’.
 ‘A__i’: Cocok dengan kata yang diawali dengan ‘A’, diikuti oleh 2 karakter bebas,
namun diakhiri dengan i, contoh: ‘Andi’, ‘ardi’, ‘aaai’.
 ‘%e’: Cocok dengan seluruh kata dengan panjang berapapun yang diakhiri dengan huruf
‘e’, contoh: ‘Kece’, ‘Kue’, dan ‘mie’.
 ‘%dia%’: Cocok dengan seluruh kata yang mengandung kata ‘dia’, contoh: ‘media’,
‘kemudian’, ‘dia’, dan  ‘diaaaa’.

Kita juga dapat menggabungkan operasi LIKE dengan operator logika OR atau AND untuk
pencarian yang lebih kompleks. Misalkan saya ingin mencari kolom nama_dosen yang diakhiri
huruf ‘i’ atau kolom alamat yang diawali dengan huruf ‘m’. Querynya adalah sebagai berikut:

mysql> SELECT * FROM daftar_dosen WHERE nama_dosen LIKE '%i'


OR alamat LIKE 'm%';
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
+------------+----------------+------------+-----------+
6 rows in set (0.00 sec)

g. Cara Menghapus Record dengan Query DELETE


mysql> DELETE from daftar_dosen WHERE nama_dosen = 'Sabrina Sari';
Query OK, 1 row affected (1.73 sec)

Atau menggunakan or atau and untuk menghapus lebih dari satu baris

mysql> DELETE from daftar_dosen WHERE nama_dosen = 'Maya Ari Putri'


OR nama_dosen='Tia Santrini';
Query OK, 2 rows affected (0.15 sec)
 
mysql> SELECT * FROM daftar_dosen;
+------------+---------------+------------+---------+
| NIP_dosen  | nama_dosen    | no_hp      | alamat  |
+------------+---------------+------------+---------+
| 0275430005 | Susi Indriani | 0812656532 | Bogor   |
| 0576431001 | M. Siddiq     | 0812979005 | Jakarta |
| 0770435006 | Rubin Hadi    | 0812567678 | Papua   |
| 0869437003 | Mustalifah    | 0812338877 | Aceh    |
| 1080432007 | Arif Budiman  | 0812456345 | Makasar |
+------------+---------------+------------+---------+
5 rows in set (0.06 sec)

Sebagai contoh untuk tabel daftar_dosen, misalkan kita ingin menghapus 3 baris terakhir dari
tabel daftar_dosen yang dimulai dari abjad terakhir dari nama dosen. Untuk keperluan ini,
pertama-tama kita harus mengurutkan tabel daftar_dosen dengan menggunakan kolom nama
dosen secara terbalik, lalu menghapus 3 record paling awal.

mysql> DELETE FROM daftar_dosen;


Query OK, 5 rows affected (0.04 sec)
 
mysql> LOAD DATA INFILE 'D:\MySQL\daftar_dosen.txt'
    -> INTO TABLE daftar_dosen
    -> FIELDS TERMINATED BY ','  LINES TERMINATED BY '\r\n';
Query OK, 8 rows affected (0.04 sec)
Records: 8  Deleted: 0  Skipped: 0  Warnings: 0
 
mysql> SELECT * FROM daftar_dosen ORDER BY nama_dosen;
+------------+----------------+------------+-----------+
| NIP_dosen  | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
+------------+----------------+------------+-----------+
8 rows in set (0.00 sec)
 
mysql> DELETE from daftar_dosen ORDER BY nama_dosen DESC LIMIT 3;
Query OK, 3 rows affected (0.04 sec)
 
mysql> SELECT * FROM daftar_dosen ORDER BY nama_dosen;
+------------+----------------+------------+-----------+
| NIP_dosen  | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
+------------+----------------+------------+-----------+
5 rows in set (0.00 sec)

h. Menghapus seluruh isi tabel


mysql> DELETE FROM daftar_dosen;
Query OK, 5 rows affected (0.04 sec)
Dari query diatas, MySQL juga menampilkan jumlah record/baris yang telah dihapus, hal ini
cukup berguna sebagai informasi kepada pengguna.

Namun jika informasi tersebut tidak kita butuhkan, MySQL menyediakan query TRUNCATE
seperti contoh berikut:

mysql> TRUNCATE TABLE daftar_dosen;


Query OK, 0 rows affected (0.04 sec)
 
mysql> SELECT * FROM daftar_dosen;
Empty set (0.00 sec)

Secara internal, TRUNCATE dijalankan dengan cara menghapus tabel menggunakan DROP,
lalu membuat ulang tabel itu kembali. Cara ini akan lebih cepat dari pada perintah DELETE
yang menghapus baris satu persatu. Perbedaan kecepatan eksekusi ini baru terasa jika tabel
tersebut memiliki jumlah record yang banyak.

i. Cara Mengupdate isi (data) tabel


mysql> SELECT * FROM daftar_dosen WHERE nama_dosen='Sabrina Sari';
+------------+--------------+------------+-----------+
| NIP_dosen  | nama_dosen   | no_hp      | alamat    |
+------------+--------------+------------+-----------+
| 0160436012 | Sabrina Sari | 0812349900 | Pekanbaru |
+------------+--------------+------------+-----------+
1 row in set (0.08 sec)
 
mysql> UPDATE daftar_dosen SET no_hp ='085298710065'
WHERE nama_dosen='Sabrina Sari';
Query OK, 1 row affected (0.07 sec)
Rows matched: 1  Changed: 1  Warnings: 0
 
mysql> SELECT * FROM daftar_dosen WHERE nama_dosen='Sabrina Sari';
+------------+--------------+--------------+-----------+
| NIP_dosen  | nama_dosen   | no_hp        | alamat    |
+------------+--------------+--------------+-----------+
| 0160436012 | Sabrina Sari | 085298710065 | Pekanbaru |
+------------+--------------+--------------+-----------+
1 row in set (0.00 sec)

j. Cara Mengupdate Lebih dari 1 Baris menggunakan Or dan And


mysql> UPDATE daftar_dosen SET alamat ='Surabaya' WHERE
nama_dosen='Rubin Hadi' OR NIP_dosen='1080432007'
OR no_hp='0812345234';
Query OK, 3 rows affected (0.16 sec)
Rows matched: 3  Changed: 3  Warnings: 0
 
mysql> SELECT * FROM daftar_dosen;
+------------+----------------+------------+-----------+
| NIP_dosen  | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0260432002 | Maya Ari Putri | 0812345234 | Surabaya  |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0770435006 | Rubin Hadi     | 0812567678 | Surabaya  |
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 1080432007 | Arif Budiman   | 0812456345 | Surabaya  |
+------------+----------------+------------+-----------+
8 rows in set (0.00 sec)

k. Contoh sederhana penggunaan tabel alias adalah sebagai berikut:

mysql> SELECT ds.nama_dosen, ds.no_hp, ds.alamat FROM


daftar_dosen AS ds;
 
+----------------+------------+-----------+
| nama_dosen     | no_hp      | alamat    |
+----------------+------------+-----------+
| Sabrina Sari   | 0812349900 | Pekanbaru |
| Maya Ari Putri | 0812345234 | Palembang |
| Susi Indriani  | 0812656532 | Bogor     |
| Tia Santrini   | 0812451177 | Padang    |
| M. Siddiq      | 0812979005 | Jakarta   |
| Rubin Hadi     | 0812567678 | Papua     |
| Mustalifah     | 0812338877 | Aceh      |
| Arif Budiman   | 0812456345 | Makasar   |
+----------------+------------+-----------+
8 rows in set (0.00 sec)

l. Cara Menggunakan Query DISTINCT Untuk Menghapus Duplikasi

Penekanan untuk judul diatas, query DISTINCT digunakan hanya untuk memanipulasi
tampilan hasil dari tabel. Duplikasi yang dihapus adalah untuk tampilan data, bukan tabel asli
dari MySQL.

Misalkan dari tabel daftar_dosen, kita ingin menampilkan hanya asal kota dari seluruh dosen
yang ada. Maka querynya adalah sebagai berikut:

mysql> SELECT alamat FROM daftar_dosen ORDER BY alamat;


+-----------+
| alamat    |
+-----------+
| Aceh      |
| Bogor     |
| Jakarta   |
| Jakarta   |
| Jakarta   |
| Makasar   |
| Padang    |
| Padang    |
| Palembang |
| Palembang |
| Papua     |
| Pekanbaru |
+-----------+
12 rows in set (0.00 sec)

Saya menambahkan perintah ORDER BY agar tampilan lebih rapi dengan diurutkan
berdasarkan alamat.

Dari hasil query tersebut, dapat dilihat bahwa nama kota yang sama akan tampil lebih dari sekali.
Hal ini terjadi karena terdapat beberapa dosen yang kebetulan beralamat di kota yang sama
dengan dosen lainnya. Jika yang kita inginkan bahwa untuk setiap kota yang sama, hasil query
harus muncul 1 kali saja, kita akan memerlukan perintah DISTINCT.

Cara Penulisan Query DISTINCT

Format dasar penulisan query DISTINCT adalah sebagai berikut:

SELECT DISTINCT nama_kolom FROM nama_tabel;

 Nama_kolom adalah nama kolom yang akan ditampilkan.


 Nama_tabel adalah nama tabel untuk kolom yang akan ditampilkan.

Sehingga untuk contoh kasus kita sebelumnya untuk menampilkan seluruh kota 1 kali saja, maka
querynya:

mysql> SELECT DISTINCT alamat FROM daftar_dosen ORDER BY alamat;


+-----------+
| alamat    |
+-----------+
| Aceh      |
| Bogor     |
| Jakarta   |
| Makasar   |
| Padang    |
| Palembang |
| Papua     |
| Pekanbaru |
+-----------+
8 rows in set (0.00 sec)

C. GRANT DAN REVOKE

Grant adalah pemberian hak akses ke database kepada user

1. Hak Akses Global (*.*)

Hak akses ini berarti user dapat memiliki hak akses untuk seluruh database yang terdapat di
dalam MySQL. Contoh penulisan query GRANT untuk level ini adalah:
GRANT SELECT ON *.* TO 'user'@'localhost';

Perhatikan cara penulisan nama_database.nama_tabel, dimana kita menulisnya dengan *.*,


sehingga user tersebut dapat mengakses seluruh tabel pada seluruh database.

2. Hak Akses Level Database (nama_database.*)

Hak akses ini berarti user memiliki hak akses penuh untuk sebuah database. Contoh penulisan
query GRANT untuk level database ini adalah:

GRANT SELECT ON universitas.* TO 'user'@'localhost';

Untuk penulisan nama_database.nama_tabel, kita membatasi nama database, namun


memberikan hak akses untuk seluruh tabel, penulisannya adalah nama_database.*

3. Hak Akses Level Tabel (nama_database.nama_tabel)

Hak akses ini berarti user memiliki hak akses untuk sebuah tabel yang berada pada sebuah
database. Contoh penulisan query GRANT untuk level ini adalah:

GRANT SELECT ON universitas.mahasiswa_ilkom TO 'user'@'localhost';

Hak akses yang dimiliki user hanya terbatas pada level sebuah tabel saja.

4. Hak Akses Level Kolom (nama_kolom)

Hak akses ini adalah hak akses paling kecil yang dapat diberikan kepada sebuah user. Dengan
hak akses level kolom, user hanya memiliki hak akses untuk beberapa kolom pada sebuah tabel.
Contoh penulisan query GRANT untuk level kolom ini adalah:

GRANT SELECT (nama,umur) ON universitas.mahasiswa_ilkom TO 'user'@'localhost';

Level paling akhir ini kita membatasi hak akses user hanya untuk kolom tertentu saja. Penulisan
kolom yang diperbolehkan diletakkan di dalam tanda kurung.

Anda mungkin juga menyukai