Cơ sở dữ liệu là phần không thể thiếu đối với bất cứ lập trình viên nào. Viết bài blog, đăng nhập, đăng ký, lưu trữ dữ liệu, đăng tin tức... tất cả cần dùng đến cơ sở dữ liệu (database). Bài giảng này sẽ tập trung vào một trong những database được sử dụng phổ biến nhất hiện nay: Postgresql.

Dù mỗi database đều có tính năng riêng biệt giúp phân biệt chúng với nhau, tất cả đều có chung những câu truy vấn cơ bản mà nếu ta học một cái có thể áp dụng sang cái khác một cách dễ dàng. Cách tốt nhất để bạn thành thạo với truy vấn cơ sở dữ liệu là luyện tập nhiều, viết thật nhiều. Có những trang web hỗ trợ rất tốt để bạn tự rèn luyện là hackerrank. Nhưng trước hết để đạt được đến trình độ đó ta cần phải làm quen với những câu lệnh căn bản trước.

 

Select

Giả sử bạn có bảng thông tin danh sách user, bạn muốn hiển thị thông tin của cả bảng thì chỉ cần một câu lệnh đơn giản sau đây

Select * from user;

Ta sẽ được bảng sau

 

Tuy nhiên, vì lý do nào đó bạn chỉ quan tâm đến tên firstname, tuổi của người dùng và bỏ qua các cột không cần thiết khác trong danh sách trên. Bạn có thể chỉ định cụ thể tên các cột bạn muốn hiển thị như trong câu lệnh sau:

Select first_name, age from user

Kết quả hiển thị

 

Bạn có thể chọn một hoặc nhiều cột mà mình muốn hiển thị, thậm chí có thể chọn tất cả như

SELECT id, first_name, last_name, age, email, position FROM user

Kết quả vẫn hiển thị như

SELECT * FROM user

 

Hoặc nếu bạn muốn hiển thị đầy đủ họ tên (last_name nối tiếp first_name) của người dùng trong một cột và đi kèm một số thông tin khác như tuổi chẳng hạn, thì có thể bằng câu lệnh sau:

SELECT last_name || '' || first_name, age FROM user

Kết quả hiển thị:

 

Tuy nhiên bạn có thể thấy đoạn text cột last_name dính chặt vào first_name, trông không giống với cách hiển thị tên thông thường. Điều ta cần làm là chèn một ký tự vào giữa, ở đây ta sẽ chèn dấu cách bằng cách đơn giản là thêm ký tự dấu cách vào trong dấu ngoặc ‘ ’  giữa đoạn || ‘’ || để hiển thị tên đúng như ta thường gặp:

SELECT last_name || ' ' || first_name, age FROM user

Giờ tên hiển thị đã như mong muốn

 

Nhưng còn một điều nữa trước khi chuyển sang phần khác, tên cột khi bạn ghép 2 cột của bảng database vào với nhau hiển thị ra tên rất kỳ quái “?column?”, bạn có thể thay đổi hiển thị tên cột thành full_name như sau:

SELECT last_name || ' ' || first_name as full_name, age FROM user

Kết quả hiển thị

 

Where

Bạn đã nắm được cách gọi lấy toàn bộ dữ liệu từ một bảng database, như bạn có thể thấy khi lấy dữ liệu ra thông tin rất ngắn gọn dễ hiểu. Nhưng hãy tưởng tượng giờ danh sách trên không chỉ có 4 mà có tận 100 - 1000 người, và bạn chỉ muốn hiển thị những người nào đang có position là intern (thực tập sinh) chẳng hạn. Lúc này mệnh đề WHERE bắt đầu cần mang vào sử dụng.

SELECT * FROM user where position = 'intern'

Kết quả hiển thị

 

Như bạn có thể thấy danh sách đã được lọc chỉ còn 2 người ở vị trí thực tập sinh. Bạn cũng có thể áp dụng tương tự khi muốn hiển thị ra những người có độ tuổi > 25.

SELECT * FROM user WHERE age > 25

Kết quả hiển thị

 

Hoặc bạn cũng có thể lọc chỉ hiển thị những người có đủ 2 yếu tố: độ tuổi > 25 và vị trí thực tập sinh như sau:

SELECT * FROM user where age > 25 AND position = 'intern'

Kết quả hiển thị

 

Order By

Giờ bạn không chỉ muốn lấy dữ liệu từ bảng database, mà bạn còn muốn sắp xếp nó theo trật tự nhất định, như theo độ tuổi chẳng hạn. Lúc này bạn cần dùng đến order by:

SELECT * FROM user Order By age

Kết quả hiển thị

 

Trường hợp bạn muốn sắp xếp theo thứ tự giảm dần có thể dùng ‘desc’

SELECT * FROM user Order By age desc

Kết quả bạn có thể dễ dàng hình dung ra

 

Nếu thay ‘desc’ trong câu lệnh trên bằng 'asc' sẽ lại sắp xếp theo thứ tự tăng dần, ‘asc’ sẽ là mặc định khi không điền gì.

Nếu dữ liệu của cột là text thì sẽ sắp xếp theo bảng chữ cái. 

 

Kết luận

Tóm tắt những gì ta đã học trong bài học này:

  • Hiển thị dữ liệu toàn bộ bảng database cho trước.
  • Cách để chỉ truy vấn một số cột nhất định, ghép cột và thay đổi tên cột theo mong muốn
  • Lọc dữ liệu từ bảng theo tiêu chí đề ra
  • Sắp xếp dữ liệu theo cột bất kỳ

Phần sau ta sẽ được hướng dẫn cách tạo bảng và chèn dữ liệu vào bảng

 

Giải quyết các bài tập không hơn gì là áp dụng kiến thức, lắp ghép, vận dụng linh hoạt những gì ta đã học được. Nếu giảng viên có cho bạn một bảng tương tự nhưng với 100 - 1000 dữ liệu, nếu hiểu bản chất thì bạn vẫn có thể làm được.
Hoặc bạn có thể tự nghĩ ra bài tập để áp dụng tất cả kiến thức trên, chẳng hạn đối với bảng phía trên hãy thử viết câu truy vấn vừa lọc theo vị trí intern vừa sắp xếp theo tuổi rồi đổi tên cột để hiển thị ra kết quả như sau.

Bạn sẽ làm được chứ?