Trong bài viết này, bạn sẽ học cách sử dụng MySQL Alias để cải thiện khả năng đọc các truy vấn.
MySQL hỗ trợ hai loại bí danh (alias): bí danh cột và bí danh bảng.
Đôi khi, tên cột quá dài, kỹ thuật khiến đầu ra của truy vấn rất khó hiểu. Để đặt tên mô tả cho cột, bạn có thể sử dụng MySQL alias columns.
Câu lệnh sau đây minh họa cách sử dụng bí danh (alias) cột:
SELECT [column_1 | expression] AS descriptive_name FROM table_name;
Để gán bí danh cho một cột, bạn sử dụng từ khóa AS
theo sau bí danh. Nếu bí danh chứa dấu cách, bạn phải viết nó như sau:
SELECT [column_1 | expression] AS `descriptive name` FROM table_name;
Vì từ khóa AS
là tùy chọn nên bạn có thể thêm hoặc không thêm nó trong câu lệnh. Lưu ý rằng bạn cũng có thể đặt bí danh cho một biểu thức.
Hãy xem employees
bảng trong cơ sở dữ liệu mẫu.
Truy vấn sau đây chọn tên và họ của nhân viên. Nó sử dụng CONCAT_WS()
chức năng để ghép tên và họ thành tên đầy đủ.
SELECT CONCAT_WS(', ', lastName, firstname) FROM employees;
Kết quả:
Tiêu đề cột khá khó đọc. Để giải quyết vấn đề này, bạn có thể gán tiêu đề cột của đầu ra một bí danh cột như được hiển thị trong truy vấn sau:
SELECT CONCAT_WS(', ', lastName, firstname) AS `Full name` FROM employees;
Kết quả:
Trong MySQL, bạn có thể sử dụng bí danh cột trong mệnh đề ORDER BY
, GROUP BY
và HAVING
để tham chiếu đến cột.
Truy vấn sau sử dụng bí danh cột trong mệnh đề ORDER BY
để sắp xếp tên đầy đủ của nhân viên theo thứ tự bảng chữ cái:
SELECT CONCAT_WS(', ', lastName, firstname) `Full name` FROM employees ORDER BY `Full name`;
Kết quả:
Câu lệnh sau đây sẽ lấy ra các đơn đặt hàng có tổng số tiền lớn hơn 60000. Nó sử dụng bí danh cột trong mệnh đề GROUP BY
và mệnh đề HAVING
.
SELECT orderNumber `Order no.`, SUM(priceEach * quantityOrdered) total FROM orderDetails GROUP BY `Order no.` HAVING total > 60000;
Kết quả:
Lưu ý: rằng bạn không thể sử dụng bí danh cột trong WHERE mệnh đề. Lý do là khi MySQL đánh giá mệnh đề WHERE, các giá trị của các cột được chỉ định trong mệnh đề SELECT chưa được đánh giá.
Bạn có thể sử dụng bí danh để đặt tên khác cho bảng. Bạn gán một bí danh cho bảng bằng cách sử dụng từ khóa AS
theo cú pháp sau:
table_name AS table_alias
Bí danh cho một bảng được gọi là bí danh bảng. Giống như bí danh cột, từ khóa AS
là tùy chọn không bắt buộc nên bạn có thể bỏ qua.
Truy vấn này cho biết cách gán employees
bí danh bảng là e:
SELECT * FROM employees e;
Sau khi một bảng được gán bí danh, bạn có thể tham khảo các cột của bảng bằng cú pháp sau:
table_alias.column_name
Ví dụ:
SELECT e.firstName, e.lastName FROM employees e ORDER BY e.firstName;
Bí danh bảng thường được sử dụng trong câu lệnh có chứa các mệnh đề INNER JOIN,
LEFT JOIN
RIGHT JOIN
và trong các subqueries.
Hãy nhìn vào customers
và orders
bảng:
Cả hai bảng đều có cùng tên cột: . customerNumber
Nếu không sử dụng bí danh bảng để xác định customerNumber
cột, bạn sẽ nhận được thông báo lỗi như sau:
Error Code: 1052. Column 'customerNumber' in on clause is ambiguous
Để tránh lỗi này, bạn sử dụng bí danh bảng để đặt lại tên cho cột customerNumber
:
SELECT customerName, COUNT(o.orderNumber) total FROM customers c INNER JOIN orders o ON c.customerNumber = o.customerNumber GROUP BY customerName ORDER BY total DESC;
Kết quả:
Truy vấn trên lấy ra tên khách hàng và số lượng đơn đặt hàng từ các bảng customers
và orders
. Nó sử dụng c
làm bí danh bảng cho bảng customers
và o
làm bí danh bảng cho bảng orders
. Các cột trong bảng customers
và orders
được tham chiếu thông qua bí danh bảng.
Nếu bạn không sử dụng bí danh trong truy vấn ở trên, bạn phải sử dụng tên bảng để chỉ các cột của nó, điều này làm cho truy vấn dài và khó đọc hơn như sau:
SELECT customers.customerName, COUNT(orders.orderNumber) total FROM customers INNER JOIN orders ON customers.customerNumber = orders.customerNumber GROUP BY customerName ORDER BY total DESC
Bài viết liên quan:
Các bạn có thể xem thêm ở đây: https://www.mysqltutorial.org/mysql-alias/
Bình luận: