Mục lục
SELECT có lẽ là một trong những mệnh đề được sử dụng thường xuyên và phổ biến nhất trong SQL. Nó được sử dụng để truy xuất dữ liệu từ database. Chúng ta có thể lấy toàn bộ bộ các hàng, cột hay một số hàng và cột trong một hay nhiều bảng. Dữ liệu trả về sẽ được lưu trong một bảng thường được gọi là result-set.
Với mệnh đề SELECT chúng ta chỉ định các cột mà chúng ta muốn được hiển thị trong kết quả truy vấn.
Cách sử dụng Select trong SQL
Cú pháp
SELECT column1,column2 FROM table_name column1 , column2: tên các cột mà chúng ta muốn lấy, table_name: tên table muốn lấy dữ liệu
Cho bảng Student có các dữ liệu sau:
Ví dụ lấy toàn bộ dữ liệu trong một bảng
SELECT * FROM Student;
Output
ROLL_NO | NAME | ADDRESS | PHONE | Age |
1 | Ram | Delhi | XXXXXXXXXX | 18 |
2 | RAMESH | GURGAON | XXXXXXXXXX | 18 |
3 | SUJIT | ROHTAK | XXXXXXXXXX | 20 |
4 | SURESH | Delhi | XXXXXXXXXX | 18 |
Lấy các cột ROLL_NO, NAME, AGE từ bảng Student:
SELECT ROLL_NO, NAME, AGE FROM Student;
Output
ROLL_NO | NAME | Age |
1 | Ram | 18 |
2 | RAMESH | 18 |
3 | SUJIT | 20 |
4 | SURESH | 18 |
Trình tự xử lý của câu lệnh Select
Câu lệnh SELECT dùng để lấy các hàng từ database và cho phép lựa chọn một hoặc nhiều hàng hoặc cột từ một hoặc nhiều bảng. Cú pháp đầy đủ của câu lệnh SELECT rất phức tạp, nhưng các mệnh đề chính có thể được tóm tắt như sau:
[ WITH { [ XMLNAMESPACES ,] [ <common_table_expression> ] } ] SELECT select_list [ INTO new_table ] [ FROM table_source ] [ WHERE search_condition ] [ GROUP BY group_by_expression ] [ HAVING search_condition ] [ ORDER BY order_expression [ ASC | DESC ] ]
UNION, EXCEPT, INTERSECT toán tử có thể được sử dụng giữa các truy vấn để kết hợp hoặc so sánh kết quả của chúng với nhau thành một kết quả.
Các bước sau đây cho thấy thứ tự xử lý logic hoặc thứ tự ràng buộc cho câu lệnh SELECT. Cú pháp đầy đủ của một câu truy vấn có thể rất phức tạp gồm nhiều mệnh đề kết hợp với nhau.
Tuy nhiên có một điểm cần hết sức lưu ý cho các bạn mới rằng mệnh đề SELECT không phải là mệnh đề được thực hiện đầu tiên trong câu truy vấn. Rất nhiều bạn nhầm lẫn, ngay cả mình lúc đầu mới học cũng vậy.
Dưới đây là thứ tự thực thi của các mệnh đề khi chúng được kết hợp với nhau.
- FROM
- ON
- JOIN
- WHERE
- GROUP BY
- WITH CUBE or WITH ROLLUP
- HAVING
- SELECT
- DISTINCT
- ORDER BY
- TOP
FROM
Mệnh đề FROM trong SQL được dùng để liệt kê các bảng cần thiết sử dụng trong truy vấn. Chính vì vậy khi thực hiện SELECT thì nó phải biết SELECT từ đâu, nên đương nhiên FROM nó sẽ phải chạy trước để xác định được những bảng cần dùng đến.
Cú pháp
FROM table1 [ { INNER JOIN | LEFT OUTER JOIN | RIGHT OUTER JOIN | FULL OUTER JOIN } table2 ON table1.column1 = table2.column1 ]
ON
Như ở trên ta thấy ON đi kèm với FROM, mục đích là để xác định điều kiện ràng buộc giữa 2 bảng với nhau, nó sẽ khớp với dữ liệu ở 2 bảng theo điều kiện này, thực tế nó sẽ khớp với các khoá chính là chủ yếu tố.
JOIN
Mệnh đề tham gia được sử dụng để kết hợp các bản ghi từ hai hoặc nhiều bảng trong một database Các loại JOIN gồm có: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, SELF JOIN, CARTESIAN.
WHERE
Đây là mệnh đề được dùng để lọc kết quả bởi các điều kiện, kết quả trả về phải đáp ứng các điều kiện trong mệnh đề này. Khi đã có các bảng đích để lấy dữ liệu, thì chắc hẳn mới đến mệnh đề WHERE để lọc lại dữ liệu đó.
Cú pháp
SELECT column1, column2, columnN FROM table_name WHERE [conditions]
GROUP BY
Mệnh đề GROUP BY được sử dụng để kết hợp với câu lệnh SELECT để sắp xếp dữ liệu giống nhau thành các nhóm, nó tuân theo mệnh đề WHERE và đứng trước ORDER BY.
Cú pháp
SELECT column1, column2 FROM table_name WHERE [ conditions ] GROUP BY column1, column2 ORDER BY column1, column2
WITH CUBE or WITH ROLLUP
Đây là mệnh đề mở rộng của GROUP BY, sử dụng để phát sinh các tổng trung gian từ các cột trong GROUP BY. Ở đây bạn có thể tìm hiểu thêm hàm GROUPING khi sử dụng CUBE và ROLLUP. Vì thế hiển nhiên nó sẽ chạy sau mệnh đề GROUP BY.
Cú pháp
SELECT Id, ProductName, AVG(Price) as [AveragePrice] FROM Product GROUP BY Id, ProductName WITH ROLLUP;
HAVING
Mệnh đề này cho phép bạn khả năng để xác định các điều kiện để lọc nhóm kết quả nào sẽ xuất hiện trong kết quả cuối cùng.
Cú pháp
SELECT column1, column2 FROM table1, table2 WHERE [ conditions ] GROUP BY column1, column2 HAVING [ conditions ] ORDER BY column1, column2
SELECT
Dùng để lấy kết quả từ một hay nhiều bảng. Sau khi các truy vấn thực hiện đến các bảng cần sử dụng, các điều kiện lấy giữ liệu, nhóm các dữ liệu, thì SELECT sẽ quyết định lấy về những thông tin nào (các cột) trong những bảng nào.
Cú pháp
SELECT b.Id, b.Name, t.TypeName FROM Books b INNER JOIN Type t ON b.TypeId = t.Id
Ví trụ trên SELECT sẽ lấy ra các thông tin từ bảng Books là: Id, Name và thông tin từ bảng Type là: TypeName
SELECT sẽ kết hợp với các mệnh đề khác để trở thành một câu truy vấn hoàn chỉnh, tuỳ thuộc vào yêu cầu lấy dữ liệu như thế nào.
DISTINCT
Mệnh đề Distinct được dùng kết hợp với SELECT để loại bỏ các bản ghi trùng lặp, chỉ lấy một bản ghi duy nhất trong kết quả trả về.
SELECT DISTINCT b.Id, b.Name, b.Price, t.TypeName FROM Books b INNER JOIN Type t ON b.TypeId = t.Id
Mục đích sử dụng của nó như trên, nên hiển nhiên nó phải chạy sau SELECT rồi, phải SELECT ra được data thì mới có data để mà xét trùng đúng không?
ORDER BY
Mệnh đề này dùng để sắp xếp dữ liệu theo thứ tự tăng dần hoặc giảm dần dựa trên một hoặc nhiều cột. Lệnh ASC được sử dụng để sắp xếp tăng giần, còn lệnh DESC được sử dụng để sắp xếp theo giảm dần. Mặc định ASC nếu không chỉ rõ.
Cú pháp
SELECT column-list FROM table_name [WHERE condition] [ORDER BY column1, column2, .. columnN] [ASC | DESC];
Khi có đủ dữ liệu trả về, thì đúng theo yêu cầu đặt ra, chúng ta mới sắp xếp lại thứ tự của mình.
TOP
Mệnh đề dùng để lấy ra N bản ghi hoặc X phần trăm bản ghi từ kết quả trả về.
SELECT TOP number|percent column_name(s) FROM table_name WHERE [condition]
Nguồn tham khảo
https://www.geeksforgeeks.org/sql-select-query/
https://codelearn.io/sharing/trinh-tu-xu-ly-logic-cau-lenh-select-sql