Query Database Ramdzy
Query Database Ramdzy
USE RAMDZY;
id INT,
nama VARCHAR(100),
harga INT,
jumlah INT
);
/*STRUKTUR TABLE---------------------------------------------------------------------------------*/
DESC barang;
/*DEFAULT VALUE----------------------------------------------------------------------------*/
/*
id INT,
nama VARCHAR(100),
*/
/*
id INT,
nama VARCHAR(100),
*/
/*truncate nama_tabel*/
TRUNCATE barang;
/*NEW TABLE------------------------------------------------------------------------------------------------*/
CREATE TABLE products (
descriptions TEXT,
) ENGINE = InnoDB;
/*INSERT TABEL---------------------------------------------------------------------------------------------*/
use ramdzy;
('P002', 'Mie Ayam Original', 'Mie ayam Bakso + Bakso', 20000, 100),
/* WHERE CLAUSE*/
/* UPDATE(HARUS HATI HATI, JIKA WHERENYA SALAH DIKIT MAKA DATANYA AKAN KE UPDATE
SEMUA) */
UPDATE PRODUCTS
WHERE ID = 'P001';
UPDATE PRODUCTS
DESCRIPTIONS = 'BEBEK'
WHERE ID = 'P003';
UPDATE PRODUCTS
WHERE ID = 'P005';
/* DELETE */
SELECT ID AS 'KODE',
NAME AS 'NAMA',
CATEGORY AS 'KATEGORI',
PRICE AS 'HARGA',
QUANTITY AS 'JUMLAH'
FROM PRODUCTS;
/* ALIAS TABLE */
P.NAME AS 'NAMA',
P.CATEGORY AS 'KATEGORI',
P.PRICE AS 'HARGA',
P.QUANTITY AS 'JUMLAH'
FROM PRODUCTS AS P;
/* ADD VALUES*/
('P007','Makanan', 'Mie Ayam Original', 'Mie ayam Bakso + Bakso', 20000, 100),
/* WHERE OPERATOR*/
SELECT * FROM PRODUCTS WHERE CATEGORY != 'MAKANAN'; /* SELAIN (TIDAK SAMA DENGAN*/
SELECT * FROM PRODUCTS WHERE CATEGORY <> 'Minuman'; /* SELAIN (TIDAK SAMA DENGAN*/
/* AND*/
/* OR*/
/* COMBNE OR AND */
SELECT * FROM PRODUCTS WHERE (CATEGORY= 'MAKANAN' OR QUANTITY= '500') AND PRICE >
'20000';
SELECT * FROM PRODUCTS WHERE name LIKE '%mie%'; /* mengandung 100% mie */
UPDATE PRODUCTS
WHERE ID = 'P008';
/* NULL OPERATOR */
SELECT * FROM PRODUCTS WHERE DESCRIPTIONS IS NOT NULL; /* MENAMPILKAN TIDAK ADA
NULL*/
SELECT * FROM PRODUCTS WHERE PRICE BETWEEN 10000 AND 20000; /* RENTANG 10K - 20K*/
SELECT * FROM PRODUCTS WHERE PRICE NOT BETWEEN 10000 AND 20000;
DEFAULT : ASC
*/
SELECT ID, CATEGORY, NAME, PRICE FROM PRODUCTS ORDER BY CATEGORY ASC, PRICE DESC;
/* LIMIT CLAUSE */
*/
SELECT * FROM PRODUCTS ORDER BY ID LIMIT 5; /* SELECT * FROM PRODUCTS ORDER BY ID LIMIT
0, 5;*/
/* OFFSET */
SELECT * FROM PRODUCTS ORDER BY ID LIMIT 5,5; /* KITA HIRAUKAN 5 DATA PERTAMANYA DAN
RESULTNYA P005 SAMPAI P0010*/
SELECT * FROM PRODUCTS ORDER BY ID LIMIT 15,5; /* RESULT : P0015 SAMPAI P0020 */
/* JGN KHAWATIR, MEMANG ADA PROBLEM DI STRUKTUR DATANNYA JADI ORDER BYNYA TIDAK
MAKSIMAL
/* SELECT DISTINCT*/
SELECT ID, NAME, PRICE FROM PRODUCTS WHERE PRICE DIV 1000 > 15; /*MENAMPILKAN PRICE
JIKA HASIL PEMBAGIAN 1000-NYA LEBH DARI 15, CONTOHNYA 16,
JADI HANYA NAMPILIN NILAI APA YG JIKA DIBAGI 1000
HASILNYA LEBIH DARI 15*/
) ENGINE = InnoDB;
desc admin;
VALUES ('EKO','kHANEDY'),
('BUDI','NUGRAHA'),
('JOKO','MORRO');
VALUES ('RAMD','ZAKY'); /* ID 3 DI HAPUS, MAKA INSERT SELANJUTNYA DIMULAI DARI NOMOR 4*/
VALUES ('RULLY','HIDAYAT');
FROM PRODUCTS;
FROM PRODUCTS;
SELECT ID,
CATEGORY,
CASE CATEGORY
ELSE 'KOCAK'
END AS 'CATEGORY'
FROM PRODUCTS;
SELECT ID,
PRICE,
IF(PRICE <= 15000, 'MURAH', IF(PRICE <= 20000, 'MAHAL', 'MAHAL BANGET')) AS 'MAHAL?'
FROM PRODUCTS; /* IF KEDUA MERUPAKAN KONDISI ELSE DARI IF YANG PERTAMA, JADI IFNYA
1 KALIMAT*/
/* IFNULL */
/* GROUP BY HANYA BISA UTK AGGREGATE FUNCTION (MATCH KONDISI PER KRITERIA)*/
/* KONSEP HAVING SAMA KYAK WHERE CLAUSE, CUMA INI DIPAKAI KETIKA BANYAK FUNCTION*/
FROM PRODUCTS
GROUP BY ID_CATEGORY
/* CONSTRAINT */
LAST_NAME VARCHAR(100),
) ENGINE = InnoDB;
/*
- TUJUAN PENAMBAHAN TEKS CONSTRAINT : Biasa dilakukan agar lebih mudah menghapus,
mengubah, atau debug constraint-nya
FOREIGN KEY
UNIQUE
NOT NULL
CHECK
DEFAULT
*/
DESC CUSTOMERS;
SELECT * FROM CUSTOMERS; /* KNP IDNYA 3? KRN UDAH DIPAKE SLOTNYA SAMA DATA YANG
DUPLIKAT*/
/* CHECK CONSTRAINT, */
/* CONTOH CHECK CONSTRAINT, JIKA ADA KONDISI DILUAR DARI YANG DITETAPKAN CONSRAINT
CHECK, MAKA VALUENYA KAN DITOLAK*/
descriptions TEXT,
) ENGINE = InnoDB;*/
ADD CONSTRAINT PRICE_CHECK CHECK (PRICE >= 1000 AND PRICE <= 9000); /* RENTANG VALUE
YANG INGIN DI CONSTRAINKAN */
/* INDEX */
/* 1. (DEFINISI)
- Secara default, MySQL akan menyimpan data di dalam disk seperti tabel biasanya
- Hal ini menyebabkan, ketika kita mencari data, maka MySQL akan melakukan pencarian dari baris
pertama sampai terakhir, yang artinya semakin banyak datanya, maka akan semakin lambat proses
pencarian datanya
- Saat kita membuat index, MySQL akan menyimpan data dalam struktur data B-Tree :
https://en.wikipedia.org/wiki/B-tree
- Tidak hanya akan mempermudah kita saat melakukan pencarian, index juga akan mempermudah
kita ketika melakukan pengurutan menggunakan ORDER BY
- https://dev.mysql.com/doc/refman/8.0/en/optimization-indexes.html
- Kita bisa membuat lebih dari satu index di table, dan setiap kita membuat index, kita bisa membuat
index untuk beberapa kolom sekaligus
- Index mungkin akan mempercepat untuk proses pencarian dan query data
- Namun, saat kita membuat index, artinya MySQL akan melakukan proses update data di index tiap
kali kita menambah, mengubah atau menghapus data di table
- Artinya Index membuat proses pencarian dan query lebih cepat, tapi memperlambat proses
manipulasi data
- Saat kita membuat PRIMARY KEY dan UNIQUE constraint, kita tidak perlu menambahkan lagi index
- Hal ini dikarenakan MySQL secara otomatis akan menambahkan index pada kolom PRIMARY KEY
dan UNIQUE constraint*/
/* TABLE DENGAN INDEX*/
) ENGINE = InnoDB;
DESC SELLERS;
) ENGINE = InnoDB;
/* RELASI TABEL*/
/* FOREIGN KEY*/
/* TIPE KOLOM FOREIGN KEY HARUS SAMA DENGAN PRIMARY KEY DI TABEL UTAMA*/
/* FK : FOREIGN KEY*/
DESCRIPTIONS TEXT,
CONSTRAINT FK_WISHLIST_PRODUCT
) ENGINE = InnoDB;
/* REFERENCES ITU TABEL LAIN YAITU TABEL PRODUCTS MEREFRENSIKAN KE TABEL PRODUCTS*/
DESC PRODUCTS;
DESC WISHLIST;
/* ALTER TABLENYA*/
/* KALO NAMBAHIN DATA KE TABLE WISHLIST JIKA TERNYATA DATA PRODUKNYA TIDAK ADA ID NYA
MAKA DIA AKAN ERROR/DITOLAK(MUNGKIN KRN ADA CONSTRAINTNYA TP GTAU COBA RISET
LAGI*/
/* KEUNTUNGAN FOREIGN KEY */
/* - Foreign key memastikan bahwa data yang kita masukkan ke kolom tersebut harus tersedia di
tabel reference nya
- Selain itu saat kita menghapus data di tabel reference, MySQL akan mengecek apakah id nya
digunakan di foreign key di tabel lain, jika digunakan, maka secara otomatis MySQL akan menolak
proses delete data di tabel reference tersebut
*/
/* KETIKA MENGHAPUS TABEL YANG BERELASI MAKA SECARA OTOMATIS MYSQL AKAN MENOLAK*/
Tidak boleh menghapus atau mengubah baris di tabel induk (parent table) jika masih ada baris yang
merujuk ke sana di tabel anak (child table).
*/
FROM WISHLIST
FROM WISHLIST AS W
SELECT
W.ID AS ID_WISHLIST,
P.ID AS ID_PRODUCT,
P.NAME AS PRODUCT_NAME,
W.DESCRIPTIONS AS WISHLIST_DESCRIPTIONS
FROM WISHLIST AS W
DESC WISHLIST;
DESC CUSTOMERS;
SET ID_CUSTOMER = 1
WHERE ID = 1;
FROM WISHLIST
FROM WISHLIST AS W
/* ONE TO MANY DI DEFINISIKAN BERDASARKAN ID DATA DUPLIKAT ATAU ENGGA, KLAU BISA
DUPLIKAT IDNYA
CONSTRAINT FK_WALLET_CUSTOMER
) ENGINE = InnoDB;
/* FK ITU NAMA DARI FUNCTION FOREIGN KEY, ID CUSTOMER UNIQUE JUGA NAMA FUNCTION
DESC WALLET;
FROM WALLET
/* TABLE ONE-NYA-----------------*/
) ENGINE = InnoDB;
DESC CATEGORIES;
ALTER TABLE PRODUCTS
/* TABEL MANY : TABEL YANG BISA BERTAMBAH TRUS DGN KODE unik YG SAMA
VALUES ('C001','MAKANAN'),
('C002','MINUMAN'),
('C003','LAIN-LAIN');
UPDATE PRODUCTS
UPDATE PRODUCTS
FROM PRODUCTS
FROM CATEGORIES
DESC ORDERS;
) ENGINE = InnoDB;
DESC ORDERS_DETAIL;
VALUES (50000); /* KENAPA 50000 ADA 3, KARNA INSERT INTONYA DI EXCUTE 3 KALI*/
use ramdzy;
SELECT*FROM ORDERS_DETAIL;
/* INNER JOIN------------------*/
/* data dummy--*/
VALUES ('C004','Oleh-oleh'),
('C005','Gadget');
/**/
UPDATE PRODUCTS
WHERE ID = 'X003';
/* PRODUK YANG TIDAK PUNYA KATEGORI(DI TABLE KATEGORI) MAKA TIDAK MASUK JOIN*/
/* AS CP : CATEGORI PRODUCT*/
/* SET OPERATOR----------------------*/
CONTENT TEXT,
) ENGINE = InnoDB;
/* SET OPERATOR-------------------------*/
/* UNION --------------------*/
UNION
/* UNION ALL-----------------*/
UNION ALL
/* duplikat EKO*/
/* NO DISTINCT*/
SELECT EMAIL FROM CUSTOMERS
UNION ALL
UNION ALL
GROUP BY EMAILS.EMAIL;
/* INTERSECT---------------------*/
/*
- INTERSECT adalah operasi menggabungkan dua query, namun yang diambil hanya data yang
terdapat pada hasil query pertama dan query kedua
- Data yang tidak hanya ada di salah satu query, akan dihapus di hasil operasi INTERSECT
- Sayangnya, MySQL tidak memiliki operator INTERSECT, dengan demikian untuk melakukan operasi
INTERSECT, kita harus lakukan secara manual menggunakan JOIN atau SUBQUERY
*/
/* VERSI JOIN--*/
/* MINUS ------------------*/
/*
- MINUS adalah operasi dimana query pertama akan dihilangkan oleh query kedua
- Artinya jika ada data di query pertama yang sama dengan data yang ada di query kedua,
- Sayang nya, di MySQL juga tidak ada operator MINUS, namun hal ini bisa kita lakukan menggunakan
JOIN
*/
/*
Database transaction adalah fitur di DBMS dimana kita bisa memungkinan beberapa perintah
dianggap menjadi sebuah kesatuan perintah yang kita sebut transaction
Jika terdapat satu saja proses gagal di transaction, maka secara otomatis perintah-perintah
sebelumnya akan dibatalkan
Jika sebuah transaction sukses, maka semua perintah akan dipastikan sukses
*/
/*
*/
/*
*/
START TRANSACTION;
ROLLBACK;
COMMIT;
/* LOCKING ----------------------------------------*/
/*
- Karena pada kenyataannya, aplikasi yang akan kita buat pasti digunakan oleh banyak pengguna, dan
banyak pengguna tersebut bisa saja akan mengakses data yang sama, jika tidak ada proses locking,
bisa dipastikan akan terjadi RACE CONDITION, yaitu proses balapan ketika mengubah data yang sama
- Contoh saja, ketika kita belanja di toko online, kita akan balapan membeli barang yang sama, jika
data tidak terjaga, bisa jadi kita salah mengupdate stock karena pada saat yang bersamaan banyak
yang melakukan perubahan stock barang
- Saat kita melakukan proses TRANSACTION, lalu kita melakukan prose perubahan data, data yang
kita ubah tersebut akan secara otomatis di LOCK
- Oleh karena itu, sangat disarankan untuk selalu menggunakan fitur TRANSACTION ketika
memanipulasi data di database, terutama ketika perintah manipulasinya lebih dari satu kali
- Locking ini akan membuat sebuah proses perubahan yang dilakukan oleh pihak lain akan diminta
untuk menunggu
- Data akan di lock sampai kita melakukan COMMIT atau ROLLBACK transaksi tersebut
- Selain secara otomatis, kadang saat kita membuat aplikasi, kita juga sering melakukan SELECT query
terlebih dahulu sebelum melakukan proses UPDATE misalnya.
- Jika kita ingin melakukan locking sebuah data secara manual, kita bisa tambahkan perintah FOR
UPDATE di belakang query SELECT
- Saat kita lock record yang kita select, maka jika ada proses lain akan melakukan UPDATE, DELETE
atau SELECT FOR UPDATE lagi, maka proses lain diminta menunggu sampai kita selesai melakukan
COMMIT atau ROLLBACK transaction
*/
/*
*/
/*
- Selain secara otomatis, kadang saat kita membuat aplikasi, kita juga sering melakukan SELECT query
terlebih dahulu sebelum melakukan proses UPDATE misalnya.
- Jika kita ingin melakukan locking sebuah data secara manual, kita bisa tambahkan perintah FOR
UPDATE di belakang query SELECT
- Saat kita lock record yang kita select, maka jika ada proses lain akan melakukan UPDATE, DELETE
atau SELECT FOR UPDATE lagi, maka proses lain diminta menunggu sampai kita selesai melakukan
COMMIT atau ROLLBACK transaction
*/
/* SIMULASINYA*/
/* FOR UPDATE-------------*/
UPDATE PRODUCTS
WHERE ID = 'P001';
COMMIT;
/* DEADLOCK*/
/*
- Saat kita terlalu banyak melakukan proses Locking, hati-hati akan masalah yang bisa terjadi, yaitu
DEADLOCK
- Deadlock adalah situasi ada 2 proses yang saling menunggu satu sama lain, namun data yang
ditunggu dua-duanya di lock oleh proses lainnya, sehingga proses menunggunya ini tidak akan
pernah selesai.
*/
/*
- Proses 2 melakukan SELECT FOR UPDATE untuk data 001, diminta menunggu karena di lock oleh
Proses 1
- Deadlock terjadi
*/
/*
- Jika kita me lock table, artinya satu seluruh data di tabel tersebut akan di lock
- Setelah selesai melakukan lock table, kita bisa melakukan unlock dengan perintah : UNLOCK
TABLES;
*/
/*
READ : SI PEMBBUAT HANYA BISA MELAKUKAN READ, USER LAIN HANYA BISA READ
WRITE : SI PEMBUAT BISA MELAKUKAN READ & WRITE, USER LAIN TIDAK BISA READ DAN WRITE
*/
/* SIMULASI*/
/*
- Lock instance adalah perintah locking yang akan membuat perintah DDL (data definition language)
akan diminta menunggu sampai proses unlock instance
- Biasanya proses locking instance ini terjadi ketika misal kita ingin melakukan backup data, agar tidak
terjadi perubahan terhadap struktur tabel misalnya, kita bisa melakukan locking instance
- Setelah proses backup selesai, baru kita unlock lagi instance nya
- UNLOCK INSTANCE;
*/
/* SIMULASI*/
/* JIKA MAU LIHAT USER INI MEMILIKI HAK AKSES APA AJA*/
- mysql -ueko -p
- mysql -ukhannedy -p
- clear
- exit
*/
/* RESEARCHH*/
use ramdzy;