Code Tu Tam

Cách sử dung MySQL Alias trong MySQL

Rate this post

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.

MySQL alias columns

Đô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 employeesbả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 BYGROUP BYvà 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á.

MySQL alias tables

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 employeesbí 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 JOINRIGHT JOIN và trong các subqueries.

Hãy nhìn vào customersvà ordersbảng:

Cả hai bảng đều có cùng tên cột: . customerNumberNếu không sử dụng bí danh bảng để xác định customerNumbercộ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 customersvà 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 customersvà 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

Tổng kết

Bài viết liên quan:

Các bạn có thể xem thêm ở đây: https://www.mysqltutorial.org/mysql-alias/

Exit mobile version