SQL Server: SELECT

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Tổng quan

Câu lệnh SELECT được xem là câu lệnh nền tảng dùng để truy cập dữ liệu trong SQL. Đầu ra của câu lệnh SELECT là một tập kết quả được thể hiện dưới dạng một bảng ảo.

Câu lệnh SELECT trong một truy vấn sẽ hiển thị thông tin cần thiết trong bảng, nó sẽ lấy dữ liệu trên các hàng và cột từ một hoặc nhiều bảng.

SELECT còn nối hai bảng hoặc lấy một tập hợp con các cột từ một hoặc nhiều bảng. Nó cũng cho phép định nghĩa các cột được sử dụng cho một truy vấn. Cú pháp của SELECT có thể bao gồm một loạt các biểu thức cách nhau bằng dấu phẩy. Mỗi biểu thức trong câu lệnh sẽ là một cột trong tập kết quả. Các cột sẽ xuất hiện trong tập kết quả theo cùng một trình tự giống như thứ tự của biểu thức tương ứng trong câu lệnh truy vấn.

SELECT lấy các hàng từ cơ sở dữ liệu và cho phép lựa chọn một hoặc nhiều hàng hoặc cột từ một bảng. Dưới đây ta sẽ tìm hiểu các cú pháp khác nhau của câu lệnh SELECT.

SELECT không có FROM

Kể từ phiên bản SQL Server 2005 trở đi thì bạn có thể sử dụng SELECT mà không cần phải sử dụng mệnh đề FROM. Dưới đây là một số ví dụ thể hiện:

SELECT LEFT(N'Việt Nam',4); --Lấy 4 ký tự đầu tiên của chuỗi
SELECT RIGHT(N'Việt Nam',3); --Lấy 3 ký tự cuối của chuỗi
SELECT N'Môn học SQL', GETDATE(); --Hiển thị chuỗi có dấu và ngày tháng hiện thời

Giải thích:

Hàm LEFT() có tác dụng lấy 4 ký tự bên trái của chuỗi tương ứng, hàm RIGHT() lấy 3 ký tự bên phải chuỗi, hàm GETDATE() dùng để lấy ngày tháng và thời gian hiện tại, trong đó phần thời gian là giây được lấy với độ chính xác 3 con số.

Hiển thị tất cả các cột

Nếu bạn muốn hiển thị tất cả các cột của bảng thì bạn dùng dấu (*). Dấu này được dùng như một cách viết tắt để liệt kê toàn bộ các cột của bảng tương ứng trong mệnh đề FROM.

Cú pháp:

SELECT * FROM Tên_bảng;
Hoặc:
SELECT Tên_bảng.* FROM Tên_bảng;

, trong đó, Tên_bảng là tên của bảng mà bạn muốn lấy thông tin. Bạn có thể đưa vào số lượng bảng tuỳ ý, khi đó ta dùng dấu (,) để phân cách giữa các bảng. Có lưu ý là khi hai hoặc nhiều bảng được sử dụng thì hàng của môi bảng sẽ được ánh xạ với hàng của các bảng khác, và hoạt động này sẽ dân đến tốn rất nhiều thời gian truy xuất. Lời khuyên ở đây là bạn nên sử dụng cú pháp này kèm theo một điều kiện (sử dụng mệnh đề WHERE).

Ví dụ: Giả sử bạn muốn lấy thông tin của toàn bộ bảng Customer thì bạn làm như sau:

SELECT * FROM Costomer; --hoặc SELECT Costomer.* FROM Costomer;

Hiển thị các cột mong muốn

Nếu bạn chỉ muốn hiện thị những cột mà bạn muốn của bảng thôi thì bạn sử dụng cú pháp sau đây để thực hiện.

Cú pháp:

SELECT Các_cột FROM Tên bảng;

Ví dụ: Bạn chỉ muốn hiển thị cột Name (tên) và cột Gender (giới tính) của bảng Customer thôi thì bạn làm như sau:

SELECT name,gender FROM Customer;

Nối chuỗi trong tập kết quả

Trong tập kết quả bạn có thể nối các chuỗi để có được kết quả hiển thị thân thiện hoặc dễ hiểu hơn. Bạn sử dụng phép toán '+' để ghép nối chuỗi.

Lưu ý là khi ghép chuỗi với cột có kiểu không phải chuỗi thì bạn cần chuyển sang kiểu chuỗi đối với cột đó bằng cách dùng hàm sau: STR(Tên_cột).

Ví dụ:

select N'Mã khách hàng:' + STR(Customerid) + N', Họ và tên: ' + Name from Customer;

Tính giá trị trong tập kết quả

Trong tập kết quả hiển thị bạn cũng có thể tính giá trị của các cột (có kiểu số) bằng các phép toán như +, -, *, /, ... Ví dụ:

SELECT Mark,Mark*0.12 AS N'Điểm thưởng' FROM Marks;

SELECT với AS (Alias - Bí danh)

Câu lệnh SELECT dùng để hiển thị dữ liệu trong đó các cột hiển thị sẽ được đặt bí danh hay tên riêng. Bí danh có thể là từ khoá, chứa ký tự có dấu, dấu cách cũng như các ký tự bất kỳ khác. Việc đặt bí danh sẽ giúp người dùng quan sát kết quả được dễ hiểu hơn và dữ liệu có được cũng trở nên có ý nghĩa hơn khi hiển thị.

Nếu bí danh có dấu cách hoặc chứa ký tự có dấu thì nên đặt trong cặp ngoặc vuông hoặc cặp nháy đơn, ví dụ như [Mã sinh viên], N'Họ và tên'. Nếu bí danh đặt trong cặp nháy đơn có chứa ký tự có dấu thì cần đặt tiền tố N phía trước cặp nháy đơn.

Có hai cách đặt bí danh cho cột:

Cách 1: Sử dụng AS

SELECT Cột1 AS Bí_danh1, Cột2 AS Bí_danh2, ... FROM Tên_bảng;

Ví dụ:

SELECT studentid AS [Mã sinh viên], studentname AS N'Họ và tên', dateofbirth AS N'Ngày sinh' FROM Student.

Cách 2: Bỏ qua AS

SELECT Cột1 Bí_danh1, Cột2 Bí_danh2, ... FROM Tên_bảng;

Ví dụ:

SELECT studentid [Mã sinh viên], studentname N'Họ và tên', dateofbirth N'Ngày sinh' FROM Student.

Sử dụng mệnh đề DISTINCT

DISTINCT dùng để lấy một bản ghi trong những bản ghi giống nhau trong tập kết quả. Trong tập kết quả nếu có nhiều bản ghi (hàng dữ liệu) giống hệt nhau thì DISTINCT sẽ chỉ lấy lại một bản ghi trong những bản ghi giống nhau đó. Hay nói cách khác là DISTINCT sẽ ngăn chặn việc lấy ra các bản ghi trùng lặp.

Cú pháp:

SELECT DISTINCT <phần câu lệnh tiếp theo>;

Lưu ý rằng DISTINCT phải nằm ngay sau SELECT.

Ví dụ:

SELECT DISTINCT studentname FROM Student;

Kết quả của câu lệnh này là chỉ có một bản ghi sinh viên duy nhất được hiển thị, cho dùng bảng Student có thể có nhiều sinh viên trùng tên.

SELECT với JOIN

Loại câu lệnh này dùng để lấy dữ liệu từ hai bảng có liên quan hoặc liên kết với nhau. Ví dụ, bảng Student chứa thông tin sinh viên, bảng Marks chứa điểm sinh viên, hai bảng này có cột chung là studentid. Vậy nếu muốn biết các sinh viên có điểm số như thế nào thì cần sử dụng JOIN trong câu lệnh SELECT.

Cú pháp lấy tất cả các cột của hai bảng

SELECT * FROM Bảng1 Bí_danh1 JOIN Bảng2 Bí_danh2 ON Bí_danh1.Cột_chung=Bí_danh2.Cột_chung;

Ví dụ:

SELECT * FROM Student a JOIN Marks b ON a.studentid=b.studentid;

Cú pháp lấy một số cột từ hai bảng

SELECT Các_cột FROM Bảng1 Bí_danh1 JOIN Bảng2 Bí_danh2 ON Bí_danh1.Cột_chung=Bí_danh2.Cột_chung;

Ví dụ:

SELECT studentname,mark FROM Student a JOIN Marks b ON a.studentid=b.studentid;

Nếu trong Các_cột mà có cột nào có tên trùng nhau ở cả hai bảng thì cần phải nói rõ cột đó là của bảng nào bằng cú pháp:

Bí_danh.Cột_chung

Ví dụ cột studentid đều nằm ở cả hai bảng thì nếu muốn lấy cột studentid trong tập kết quả ta làm như sau:

SELECT a.studentid,studentname,mark FROM Student a JOIN Marks b ON a.studentid=b.studentid;

SELECT với nhiều JOIN

Câu lệnh SELECT với nhiều JOIN dùng để lấy dữ liệu từ ba bảng dữ liệu có liên quan hoặc liên kết với nhau trở lên.

Ví dụ bảng Student chứa thông tin sinh viên, bảng Marks chứa điểm sinh viên và bảng Subjects chứa môn học, thì nếu muốn biết các sinh viên có điểm số của mỗi môn học như thế nào ta cần sử dụng nhiều JOIN trong câu lệnh SELECT.

Cú pháp:

- Lấy tất cả các cột của các bảng

SELECT * FROM Bảng1 Bí_danh1 JOIN Bảng2 Bí_danh2 ON Bí_danh1.Cột_chung=Bí_danh2.Cột_chung JOIN Bảng3 Bí_danh3 ON Bí_danh2.Cột_chung1=Bí_danh3.Cột_chung1;

Ví dụ:

SELECT * FROM Student a JOIN Marks b ON a.studentid=b.studentid JOIN Subjects c ON b.subjectid=c.subjectid;

- Lấy một số cột từ các bảng

SELECT Các_cột FROM Bảng1 Bí_danh1 JOIN Bảng2 Bí_danh2 ON Bí_danh1.Cột_chung=Bí_danh2.Cột_chung JOIN Bảng3 Bí_danh3 ON Bí_danh2.Cột_chung1=Bí_danh3.Cột_chung1;

Ví dụ:

SELECT studentname,subjectname,mark FROM Student a JOIN Marks b ON a.studentid=b.studentid JOIN Subjects c ON b.subjectid=c.subjectid;

Ví dụ cột studentid đều nằm ở hai bảng Student và Marks và cột subjectid đều nằm ở hai bảng Marks và Subjects thì nếu muốn lấy cột studentid và subjectid trong tập kết quả ta làm như sau:

SELECT a.studentid,studentname,c.subjectid,subjectname,mark FROM Student a JOIN Marks b ON a.studentid=b.studentid JOIN Subject c on b.subjectid=c.subjectid;

SELECT với INTO

Cú pháp:

SELECT Các_cột INTO Tên_bảng_mới FROM Các_bảng_liên_kết [where Điều_kiện];

Ý nghĩa:

Dùng để tạo một bảng mới có tên là Tên_bảng_mới, trong đó các cột của bảng mới chính là Các_cột, còn các hàng dữ liệu của bảng mới chính là tập kết quả có được qua câu lệnh SELECT. Ví dụ:

SELECT a.studentid, studentname, subjectname, mark INTO Student8 from Student a JOIN Marks b ON a.studentid=b.studentid JOIN Subjects c ON b.subjectid=c.subjectid WHERE mark>=8;

Câu lệnh trên sẽ tạo ra một bảng mới có tên Student8, bảng này có các cột là studentid, studentname, subjectname và mark; các hàng của bảng Student8 chính là tập kết quả của câu lệnh SELECT.

» Tiếp: SELECT với AS (Alias)
« Trước: INSERT với SELECT
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!