Câu lệnh SQL `SELECT` trong PostgreSQL là một trong bốn lệnh SQL cơ bản, chúng có nhiệm vụ truy vấn và trích xuất dữ liệu từ bảng trong cơ sở dữ liệu. Đây là một trong những câu lệnh SQL phổ biến nhất mà bạn sẽ sử dụng thường xuyên khi làm việc với cơ sở dữ liệu.
Bên cạnh việc sử dụng cơ bản, câu lệnh `SELECT` còn có thể kết hợp với các điều kiện như `WHERE`, nhóm dữ liệu bằng `GROUP BY`, và nhiều tính năng khác để phục vụ các mục đích cụ thể khi bạn cần truy xuất dữ liệu từ cơ sở dữ liệu. Dưới đây là một số ví dụ về cách kết hợp câu lệnh `SELECT` với các điều kiện và mệnh đề khác:
- DISTINCT: Đảm bảo dữ liệu truy vấn không bị trùng lặp (Trong trường hợp truy vấp join các bảng hoặc chỉ lấy 1 số cột nhất định)
- WHERE: Truy vấn với điều kiện
- ORDER BY: Sắp xếp dữ liệu trả về
- GROUP BY: Nhóm dữ liệu theo một hoặc nhiều cột
- HAVING: Đi kèm với GROUP BY và truy vấn có điều kiện với các cột trong GROUP
- JOIN, INNER JOIN, LEFT JOIN, RIGHT JOIN: Ghép dữ liệu giữa các bảng với nhau
- …
Cú pháp lệnh của SELECT
[ WITH [ RECURSIVE ] with_query [, ...] ] SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] [ * | expression [ [ AS ] output_name ] [, ...] ] [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY grouping_element [, ...] ] [ HAVING condition [, ...] ] [ WINDOW window_name AS ( window_definition ) [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ] [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ] [ LIMIT { count | ALL } ] [ OFFSET start [ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ] [ FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } [ OF table_name [, ...] ] [ NOWAIT | SKIP LOCKED ] [...] ]
Các ví dụ sử dụng lệnh SELECT
Giả sử chúng ta có bảng users với dữ liệu như sau:
Dưới đây là 1 số ví dụ sử dụng câu SQL SELECT để lấy dữ liệu của bảng staff.
1. Lấy dữ liệu với SELECT
Lấy toàn bộ dữ liệu của 1 bảng với tất cả các cột
SELECT * FROM staff;
Query với 1 số cột nhất định
SELECT staff_id, fullname, position FROM staff;
Lấy tổng số bản ghi (row) của bảng
SELECT count(*) FROM staff;
2. Giới hạn dữ liệu sử dụng LIMIT / OFFSET
Lấy 5 bản ghi đầu tiên của bảng staff
SELECT * FROM staff LIMIT 5;
Lấy 5 bản ghi đầu tiên, bắt đầu từ bản ghi thứ 4
SELECT * FROM staff LIMIT 5 OFFSET 3;
3. Lấy dữ liệu với điều kiện WHERE
Tìm các ông đang làm admin ở vinasupport.com ( Có position là admin )
SELECT * FROM staff WHERE position = 'admin';
Tìm người đang làm design và developer website vinasupport.com (Kêt hợp nhiều điều kiện tìm kiếm)
SELECT * FROM staff WHERE position = 'developer' OR position = 'design'
4. Sắp xếp dữ liệu với ORDER BY
Sắp xếp dữ liệu theo 1 cột
SELECT position, staff_id, fullname FROM staff ORDER BY position;
Sắp xếp dữ liệu theo nhiều cột
SELECT position, staff_id, fullname FROM staff ORDER BY position, staff_id;
5. Nhóm dữ liệu sử dụng GROUP BY và HAVING
Lấy số lượng staff theo theo position
SELECT position, count(*) as count FROM staff GROUP BY position;
Lấy số lượng staff theo theo position, có số lượng > 3
SELECT position, count(*) as count FROM staff GROUP BY position HAVING count(*) > 3;
6. Query dữ liệu với JOIN
Có rất nhiều loại join được hỗ trợ bởi PostgreSQL: INNER JOIN, LEFT JOIN, FULL OUTER JOIN, CROSS JOIN, NATURAL JOIN.