iamyuu.dev

SQL

Ditulis tanggal September 24, 2020

database yang di gunakan maria db versi 10 (kode asalnya dari mysql).

users -> posts => has many (1 orang punya banyak pos).


CHAR vs VARCHAR -> ukuran penyimpanan

data CHAR(5) VARCHAR(5)
‘du ’ 5 byte 3 byte
‘dunia’ 5 byte 6 byte

CHAR -> cocok buat kolom yang karakternya tetap (mis. KTP). VARCHAR -> cocok buat kolom yang karakternya tidak tetap (mis. nama).


TINYTEXT vs TEXT vs MEDIUMTEXT vs LONGTEXT

Tipe Data Ukuran Maksimum Jumlah Karakter Maksimum
TINYTEXT 255 byte 255
TEXT 65.535 byte (64 KB) 6.5535
MEDIUMTEXT 16.777.215 byte (16MB) 16.777.215
LONGTEXT 4.294.967.295 (4GB) 4.294.967.295

catatan: sama kaya VARCHAR jumlah yang bakal di simpan menyesuaikan dengan jumlah karakternya.

-- buat database dengan nama `dms`
CREATE DATABASE dms;

-- membuktikan udah di buat
SHOW DATABASES;

-- pake database `dms`
USE dms;

--  buat tabel `user`
CREATE TABLE users (
	id INT AUTO_INCREMENT PRIMARY KEY,
	name VARCHAR(100)
);

-- membuat table `posts` yang berelasi ke table `users`
CREATE TABLE posts (
	id INT AUTO_INCREMENT PRIMARY KEY,
	author_id INT,
	title VARCHAR(100),
	body TEXT,
	published_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
	FOREIGN KEY (author_id) REFERENCES users (id)
);

-- nambahin data ke table `posts`
INSERT INTO posts (author_id, title, body)
		VALUES(2, 'Post One', 'This is post one'), (3, 'Post Two', 'This is post two'), (2, 'Post Three', 'This is post three')

-- membuktikan udah di buat
SHOW TABLES;

-- ubah table `users` tambahin `email` tipe datanya varchar panjang maksimalnya 50
ALTER TABLE users ADD email VARCHAR(50);

-- ubah table `users` modifikasi kolom `email` jadi tipe datanya varchar panjang maksimalnya jadi 100 dan harus unik
ALTER TABLE users MODIFY COLUMN email VARCHAR(100) UNIQUE;

-- nambahin data ke table `users`
INSERT INTO users (name, email) values ('Brad', 'brad@gmail.com');

-- nambahin beberapa data sekaligus ke table `users`
INSERT INTO users (name, email) values ('Fred', 'fred@gmail.com'), ('Sara', 'sara@gmail.com');

-- ambil semua data dari table users
SELECT * FROM users;

-- ambil name dari table users yang punya email `sara@gmail.com`
SELECT name FROM users WHERE email = 'sara@gmail.com';

-- perbaharui isi table users atur email jadi freddy@gmail.com yang punya id 2
UPDATE users SET email = 'freddy@gmail.com' WHERE id = 2;

-- hapus dari table users yang punya id 1
DELETE FROM users WHERE id = 1;

-- ambil nama, judul dan format published_at jadi d-m-Y dari table `users` di gabung sama table posts di mana user id sama dengna post id lalu urutkan berdasarkan published_at secara menurun atau dari yang paling baru
SELECT
	users.name,
	posts.title,
	DATE_FORMAT(posts.published_at, '%d-%m-%Y') AS published_at
FROM
	users
	INNER JOIN posts ON users.id = posts.author_id
	ORDER BY posts.published_at DESC;

--  hapus table `posts`
DROP TABLE posts;
#sql