Bí danh SQL là một tính năng nhỏ hay của SQL cho phép bạn viết mã ngắn gọn hơn và tạo tên cột khi không tồn tại tên cột.
Có hai kiểu bí danh SQL; bí danh cột và bí danh bảng. Trong bài viết này, tôi cung cấp một cái nhìn tổng quan về cả hai.
Bí danh trong SQL là gì?
Trong SQL, bí danh là một tính năng cho phép chúng ta tạm thời gán một tên khác cho một cột hoặc bảng trong các truy vấn SQL của chúng ta. Điều này cho phép chúng tôi giảm số lượng mã trong các truy vấn của mình, điều này có thể đặc biệt có lợi trong các truy vấn phức tạp.
Nó cũng cho phép chúng tôi cung cấp tên cột cho các ứng dụng khách khi không tồn tại tên cột (ví dụ:khi sử dụng trường được tính toán).
Lợi ích của Bí danh SQL
Một số lợi ích chính của bí danh SQL bao gồm:
- Cho phép bạn cung cấp các tên dễ đọc hơn cho các tiêu đề cột khi chúng được hiển thị trong kết quả
- Cho phép các ứng dụng khách tham chiếu đến một trường được tính toán theo tên mà không tồn tại tên cột
- Cho phép bạn giảm bớt mã và làm cho các truy vấn của bạn ngắn gọn hơn
- Có thể được sử dụng như một kỹ thuật xáo trộn để bảo vệ tên của các cột bên dưới của một truy vấn
Tôi nên chỉ ra rằng việc gán bí danh không thực sự đổi tên cột hoặc bảng. Nó chỉ đơn giản là cung cấp một tên thay thế có thể được sử dụng để chỉ nó.
Cú pháp bí danh
Để tạo bí danh trong SQL, chỉ cần theo dõi cột hoặc tên bảng với bí danh bạn đã chọn. Bạn có thể tùy ý sử dụng AS
từ khóa giữa tên cột / bảng và bí danh của bạn.
Như thế này cho các cột:
SELECT Column1 AS Alias1
...
or
SELECT Column1 Alias1
...
Hoặc như thế này cho các bảng:
...
FROM Table1 AS Alias1
...
or
...
FROM Table1 Alias1
...
Các ví dụ sau đây sẽ minh họa điều này rõ hơn.
Bí danh cột
Có lẽ bí danh được sử dụng phổ biến nhất là bí danh cột. Bí danh cột cho phép bạn cung cấp tên tạm thời cho các cột của mình.
Nó cũng cho phép bạn cung cấp tên cột ở những nơi không tồn tại tên cột.
Hai ví dụ sau cho thấy cùng một truy vấn được viết có và không có bí danh cột.
Không có bí danh cột
Đây là một truy vấn SQL đơn giản không sử dụng bí danh cột.
SELECT
f_name,
l_name
FROM customers;
Kết quả:
+----------+----------+ | f_name | l_name | |----------+----------| | Homer | Connery | | Bart | Pitt | | Nancy | Simpson | | Boris | Trump | +----------+----------+
Trong trường hợp này, tôi không cung cấp bất kỳ bí danh cột nào và do đó, tên cột cơ bản thực tế được trình bày dưới dạng tiêu đề cột trong kết quả.
Với Bí danh Cột
Đây là cùng một truy vấn, ngoại trừ lần này tôi sử dụng bí danh cột.
SELECT
f_name AS FirstName,
l_name AS LastName
FROM customers;
Kết quả:
+-------------+------------+ | FirstName | LastName | |-------------+------------| | Homer | Connery | | Bart | Pitt | | Nancy | Simpson | | Boris | Trump | +-------------+------------+
Lưu ý rằng bí danh cột đã được sử dụng làm tiêu đề cột trong kết quả.
Bí danh cột trên các trường được tính toán
Bí danh cột cũng có thể được sử dụng trên các trường được tính toán mà không tồn tại tên cột. Ý tôi không phải là trên các cột được tính toán, nơi có tên cột, mà là trên các trường mà giá trị được lấy từ một biểu thức khác với giá trị của một cột đơn giản.
"Làm thế nào có thể không có tên cột?" bạn có thể hỏi.
Chà, có nhiều trường hợp bạn có thể thấy rằng không có tên cột nào được trả về trong một truy vấn. Bạn đã bao giờ thấy (No column name)
làm tiêu đề cột trong kết quả truy vấn của bạn?
Có rất nhiều tình huống mà điều này có thể xảy ra.
Không có Bí danh cột
Dưới đây là một ví dụ về truy vấn không trả về tiêu đề cột.
SELECT
f_name + ' ' + l_name
FROM customers;
Kết quả:
+--------------------+ | (No column name) | |--------------------| | Homer Connery | | Bart Pitt | | Nancy Simpson | | Boris Trump | +--------------------+
Ví dụ này kết hợp họ và tên của mỗi khách hàng và trình bày kết quả dưới dạng một cột. Chỉ có một vấn đề là DBMS không biết phải gọi cột là gì.
Đây là một cơ hội hoàn hảo cho một bí danh!
Với bí danh cột
Đây là ví dụ tương tự, ngoại trừ bây giờ tôi chỉ định bí danh cột cho kết quả.
SELECT
f_name + ' ' + l_name AS FullName
FROM customers;
Kết quả:
+---------------+ | FullName | |---------------| | Homer Connery | | Bart Pitt | | Nancy Simpson | | Boris Trump | +---------------+
Điều tốt về điều này là, bất kỳ ứng dụng khách nào hiện có thể lấy các kết quả này và tham chiếu đến trường được tính toán theo bí danh của nó.
Lưu ý rằng ví dụ trên sử dụng toán tử nối chuỗi SQL Server (+
). Trong DB2, Oracle, PostgreSQL và SQLite, bạn sẽ cần sử dụng ||
. Và trong MySQL và MariaDB, hãy sử dụng CONCAT()
hàm số. Mặc dù điều này không liên quan gì đến bí danh SQL, tôi chỉ nghĩ rằng tôi sẽ đề cập đến nó 🙂
Bí danh với Spaces
Cũng có thể tạo bí danh với dấu cách.
Khi bạn làm điều này, đặt bí danh bằng dấu ngoặc kép. Trong một số DBMS, bạn có thể tùy ý sử dụng các ký tự khác (chẳng hạn như dấu ngoặc vuông []
trong SQL Server).
SELECT
f_name + ' ' + l_name AS "Full Name"
FROM customers;
Kết quả:
+---------------+ | Full Name | |---------------| | Homer Connery | | Bart Pitt | | Nancy Simpson | | Boris Trump | +---------------+
Xin lưu ý rằng việc có khoảng trắng trong bí danh thường không được coi là phương pháp hay. Dấu cách có thể gây ra tất cả các loại vấn đề cho các ứng dụng khách và vì lý do đó, bạn thường nên tránh bao gồm khoảng trắng trong bí danh cột của mình.
Bỏ qua AS
Từ khóa
Như đã đề cập, AS
từ khóa là tùy chọn. Do đó, chúng tôi có thể viết lại bất kỳ ví dụ nào trước đó mà không có AS
từ khóa.
Đây là một ví dụ.
SELECT
f_name FirstName,
l_name LastName
FROM customers;
Kết quả:
+-------------+------------+ | FirstName | LastName | |-------------+------------| | Homer | Connery | | Bart | Pitt | | Nancy | Simpson | | Boris | Trump | +-------------+------------+
Mặc dù bạn có thể bỏ qua AS
từ khóa, một số chuyên gia SQL muốn luôn bao gồm nó, vì lý do dễ đọc.
Cho dù bạn thích sử dụng cú pháp nào, tôi khuyên bạn nên giữ nó nhất quán. Nếu bạn chọn bỏ AS
từ khóa, sau đó bỏ qua nó ở mọi nơi. Nếu bạn chọn đưa nó vào, thì hãy bao gồm nó ở mọi nơi.
Bí danh bảng
Bí danh bảng tương tự như bí danh cột, nhưng như tên cho thấy, bí danh bảng dành cho bảng.
Bí danh bảng còn được gọi là tên tương quan .
Bí danh bảng thường được sử dụng khi thực hiện phép nối. Nó có thể đặc biệt hữu ích trong các truy vấn phức tạp, vì nó có thể giúp giữ cho mã ngắn gọn hơn và dễ đọc hơn.
Dưới đây là hai ví dụ; một không có bí danh bảng và một có bí danh bảng.
Ví dụ không có bí danh bảng
Dưới đây là ví dụ cơ bản về truy vấn thực hiện phép nối bên trái giữa hai bảng.
SELECT
PetTypes.PetType,
COUNT(Pets.PetTypeId) AS Count
FROM Pets
LEFT JOIN PetTypes
ON Pets.PetTypeId = PetTypes.PetTypeId
GROUP BY PetTypes.PetType
ORDER BY Count DESC, PetTypes.PetType;
Kết quả:
+-----------+---------+ | PetType | Count | |-----------+---------| | Dog | 4 | | Cat | 3 | | Bird | 1 | +-----------+---------+
Lưu ý rằng chúng tôi đánh vần tên của mỗi bảng khi chúng tôi cần tham chiếu đến nó.
Ví dụ với bí danh bảng
Đây là ví dụ tương tự, ngoại trừ với bí danh bảng.
SELECT
pt.PetType,
COUNT(p.PetTypeId) AS Count
FROM Pets AS p
LEFT JOIN PetTypes AS pt
ON p.PetTypeId = pt.PetTypeId
GROUP BY pt.PetType
ORDER BY Count DESC, pt.PetType;
Kết quả:
+-----------+---------+ | PetType | Count | |-----------+---------| | Dog | 4 | | Cat | 3 | | Bird | 1 | +-----------+---------+
Cũng như bí danh cột, AS
từ khóa là tùy chọn với bí danh bảng. Trong Oracle, AS
từ khóa thậm chí không được hỗ trợ với bí danh bảng (mặc dù nó được hỗ trợ với bí danh cột).
Do đó, chúng tôi có thể viết lại ví dụ của mình thành như sau.
SELECT
pt.PetType,
COUNT(p.PetTypeId) AS Count
FROM Pets p
LEFT JOIN PetTypes pt
ON p.PetTypeId = pt.PetTypeId
GROUP BY pt.PetType
ORDER BY Count DESC, pt.PetType;
Kết quả:
+-----------+---------+ | PetType | Count | |-----------+---------| | Dog | 4 | | Cat | 3 | | Bird | 1 | +-----------+---------+
Dù bằng cách nào, cùng một kết quả.