1. Cài đặt

Trong bài viết này, tôi sử dụng Docker để cài đặt PostgreSQL database, pgAdmin

Nếu máy bạn chưa có Docker, hãy google với từ khóa "docker install" hoặc "hướng dẫn cài đặt Docker"

Đầu tiên, cài đặt PostgreSQL database:

docker run --name db -e POSTGRES_PASSWORD=123 -d -p 5432:5432 postgres:alpine

Sau đó, cài pgAdmin4:

docker run -p 8900:80 \
-e “PGADMIN_DEFAULT_EMAIL=email_cua_ban@gmail.com” \
-e “PGADMIN_DEFAULT_PASSWORD=password_cua_ban” \
-d dpage/pgadmin4

Truy cập vào địa chỉ: http://0.0.0.0:8900, xuất hiện màn hình:

pgAdmin4 login
pgAdmin4 login

Hãy sử dụng username và password mà bạn đã sử dụng ở câu lệnh docker run cài pgAdmin4 ở trên

Sau khi đăng nhập thành công, xuất hiện màn hình:

Click chuột phải vào servers, chọn Create --> Server:

Ở tab General, đặt tên cho server là demo

Chuyển sang tab Connection, cấu hình như sau:

trong đó:

  • Host name/address: Là địa chỉ IP trên máy bạn. Trong hình trên tôi lấy địa chỉ máy tôi là 192.168.1.33
  • Port: 5432
  • Username: postgres
  • Password: 123

Chọn Save --> xuất hiện màn hình:

Click chuột phải vào schema public, sau đó chọn Query Tool:

Ở tab mới xuất hiện, copy paste dòng lệnh sau và nhấn F5 (hoặc biểu tượng tia sét) để chạy code. 2 đoạn SQL này sẽ tạo 2 bảng player và stadium:

CREATE TABLE player (
	id int PRIMARY KEY,
	name text,
	age int,
	club text,
	position text
)
CREATE TABLE stadium (
	id int PRIMARY KEY,
	name text
)

Sau khi tạo xong 2 bảng, copy paste các câu lệnh INSERT dưới đây để tạo dữ liệu cho 2 bảng:

INSERT INTO player values
(1, 'Ronaldo', 33, 'Juventus', 'Tiền đạo'),
(2, 'Messi', 33, 'Barcelona', 'Tiền đạo'),
(3, 'Modric', 33, 'Real Madrid', 'Tiền vệ'),
(4, 'Salah', 33, 'Liverpool', 'Tiền đạo'),
(5, 'Pogba', 33, 'Man Utd', 'Tiền vệ'),
(6, 'Kante', 33, 'Chelsea', 'Tiền vệ'),
(7, 'Neymar', 33, 'PSG', 'Tiền đạo'),
(8, 'Mbappe', 33, 'PSG', 'Tiền đạo'),
(9, 'Kroos', 33, 'Real Madrid', 'Tiền vệ'),
(10, 'Oezil', 33, 'Arsenal', 'Tiền vệ')
INSERT INTO stadium values
(1, 'Old Trafford'),
(2, 'Santiago Bernabeu'),
(3, 'Nou Camp'),
(4, 'Juventus Arena'),
(5, 'Anfield')

Làm đến bước này, các bạn có thể cảm thấy hoang mang. INSERT INTO là cái gì ? CREATE TABLE là cái chi ? VALUES ? PRIMARY KEY ? int, text ? schema public ? Hãy hít một hơi thật sâu và hết sức bình tĩnh. Những khái niệm này sẽ dần dần được diễn giải ở các bài viết sau. Hiện giờ hãy cứ copy paste code đi đã. Chạy được là tốt rồi.

2. Câu lệnh SELECT

Trước khi chạy lệnh SELECT, hãy nhìn vào bảng player mà chúng ta vừa tạo. Ta nhận thấy:

  • Bảng player gồm 10 bản ghi, tương ứng với 10 cầu thủ
  • Các thông tin mà database lưu trữ về 10 cầu thủ này: Tên, tuổi, câu lạc bộ, vị trí thi đấu. Các thông tin này được lưu lần lượt ở các cột: name, age, club, position
  • Mỗi cầu thủ có một ID duy nhất, không trùng lặp với các ID khác. ID này xác định danh tính của cầu thủ, giống như chứng minh nhân dân của chúng ta vậy

OK, vậy thì câu lệnh SELECT giúp chúng ta những gì ?

SELECT dịch ra Tiếng Việt có nghĩa là "chọn ra", "lấy ra", "nhặt ra". Vậy chúng ta lấy ra cái gì ? Chúng ta lấy ra các cột trong 1 (hoặc nhiều) bảng

Điều này lại dẫn đến một câu hỏi: Thế tôi biết lấy các cột đó từ bảng nào ? Để xác định bảng cần lấy dữ liệu, ta sử dụng câu lệnh FROM

Để cho dễ hiểu, hãy bắt đầu bằng một ví dụ: tôi muốn lấy tất cả thông tin của tất cả các cầu thủ

Trước khi viết câu lệnh SELECT, hãy bình tĩnh, lùi bước về sau để thấy yêu cầu rõ hơn:

  • Lấy thông tin của các cầu thủ: ta có 2 bảng, bảng player lưu thông tin cầu thủ còn bảng stadium lưu thông tin sân vận động --> ta cần lấy thông tin từ bảng player
  • Lấy tất cả thông tin: nghĩa là ta cần lấy ra tất cả các cột
  • Tóm lại, ta cần lấy ra tất cả các cột trong bảng player

Câu lệnh SQL giúp ta thực hiện kết luận trên là:

SELECT *
FROM player

trong đó:

  • SELECT *: Lấy ra tất cả các cột ...
  • FROM player: ... Từ bảng player

thu được kết quả:

Như vậy, ta đã lấy ra được thông tin của tất cả các cột của tất cả các bản ghi trong bảng player

Thế nếu như bạn chỉ quan tâm đến tên cầu thủ và câu lạc bộ mà anh ta thi đấu ? Hãy cùng phân tích:

  • Tên cầu thủ và câu lạc bộ của cầu thủ đó: Đây đều là những thông tin liên quan đến cầu thủ --> cần lấy từ bảng player
  • Tên cầu thủ: Được lưu trong cột name
  • Tên câu lạc bộ: Được lưu trong cột club
  • Như vậy, ta cần chọn ra 2 cột name và club từ bảng player

Câu lệnh SQL sẽ là:

SELECT name, club
FROM player

thu được kết quả:

Tổng kết lại, chúng ta rút ra được:

  • Trước khi viết câu lệnh SELECT, hãy xác định xem cần lấy những cột gì, từ bảng nào
  • Khi xác định được các cột cần lấy, sử dụng cú pháp: SELECT [tên_cột_1], [tên_cột_2], ...
  • Khi xác định được bảng cần lấy, sử dụng cú pháp: FROM [tên_bảng]
  • Nếu muốn lấy tất cả các cột, hãy dùng cú pháp: SELECT *. Hoặc bạn cũng có thể liệt kê từng cột ra, nếu muốn

Đến đây, có thể sẽ có bạn bảo: Tôi là một Madridista, tôi chỉ quan tâm đến những cầu thủ của Real Madrid. Làm thế nào để tôi xem được thông tin cầu thủ của Real Madrid mà không cần bận tâm đến cầu thủ của các câu lạc bộ khác ?

Với một fan cuồng Real Madrid như thế này, cần phải sử dụng lệnh WHERE. Chi tiết sử dụng như nào thì xin hẹn các bạn ở bài viết sau.