Thay đổi tên cột
Chúng ta cũng cần xử lý các tên cột. Mặt khác, chúng tôi lặp lại tên và id, nhưng chúng chứa dữ liệu khác nhau. Mặt khác, có cột id đầu tiên và cột employee_id chứa cùng một dữ liệu.
Hãy viết một truy vấn, trong đó sẽ chỉ có các cột cần thiết, đồng thời đổi tên các cột có cùng tên:
SELECT
task.id AS task_id,
task.name AS task_desc,
task.deadline AS deadline,
emploee.id AS emploee_id,
emploee.name AS emp_name,
emploee.occupation AS
emp_occupation
FROM employee, task
WHERE emploee.id = task.emploee_id
Và kết quả của truy vấn này:
task_id | task_desc | thời hạn | nhân viên_id | emp_name | emp_occupation |
---|---|---|---|---|---|
1 | Sửa lỗi ở frontend | 2022-06-01 | 1 | Ivanov Ivan | lập trình viên |
2 | Sửa lỗi trên backend | 2022-06-15 | 2 | Petrov Petr | lập trình viên |
7 | Tận hưởng cuộc sống | (VÔ GIÁ TRỊ) | 4 | Rabinovich Moisha | Giám đốc |
3 | Mua cà phê | 2022-07-01 | 5 | kirienko anastasia | Quản lý văn phòng |
4 | Mua cà phê | 2022-08-01 | 5 | kirienko anastasia | Quản lý văn phòng |
5 | Mua cà phê | 2022-09-01 | 5 | kirienko anastasia | Quản lý văn phòng |
số 8 | Tận hưởng cuộc sống | (VÔ GIÁ TRỊ) | 6 | Vaska | con mèo |
Tuyệt vời, vấn đề với các tên cột khó hiểu đã được giải quyết thành công. Truy vấn hơi dài, nhưng mọi thứ đều rõ ràng trong bảng kết quả. Và không có cột phụ.
Bí danh bảng
Đôi khi tên bảng quá dài và chiếm nhiều dung lượng trong truy vấn. Do đó, những người tạo SQL, để cải thiện khả năng đọc, như trong trường hợp cột, đã cung cấp khả năng chỉ định bí danh bảng.
Dạng chung của bí danh (bí danh bảng) như sau:
FROM table1 alias1, table2 alias2
Hãy viết lại truy vấn trước đó của chúng ta với bí danh ngắn:
SELECT
t.id AS task_id,
t.name AS task_desc,
t.deadline AS deadline,
e.id AS emploee_id,
e.name AS emp_name,
e.occupation AS emp_occupation
FROM employee e, task t
WHERE e.id = t.emploee_id
Khả năng đọc đã giảm nhẹ, nhưng điều này là do tên của các bảng ban đầu đơn giản và rõ ràng. Nó cũng có thể là như thế này:
SELECT
task.id AS task_id,
task.name AS task_desc,
task.deadline AS deadline,
emploee.id AS emploee_id,
emploee.name AS emp_name,
emploee.occupation AS
emp_occupation
FROM
Microsoft_it_department_employee employee,
Year2022_priority_task task
WHERE emploee.id = task.emploee_id
Và trong trường hợp này, bí danh đã hữu ích, phải không? ;)
khóa chính
Và một thông tin quan trọng nữa về các bảng. Hãy nhớ rằng chúng tôi đã có một cột employee_id trong bảng nhiệm vụ? Với nó, chúng tôi đã tham chiếu ID nhân viên từ bảng nhân viên.
Nếu chúng ta muốn tham chiếu từ một bảng đến các hàng của một bảng khác, thì bảng được tham chiếu phải có một cột có ID, còn được gọi là khóa chính - PRIMARY KEY .
Thông thường, đây là cột được thêm đặc biệt có loại giá trị là int . Khi thêm các bản ghi vào một bảng, SQL sẽ tự động đặt giá trị của cột này.
Sau đó, rất nhiều thứ được gắn với các phím này:
- liên kết các bảng khác nhau với nhau;
- tìm kiếm và lọc nhanh theo id;
- tính toàn vẹn của dữ liệu trong cơ sở dữ liệu (không có tham chiếu đến id không tồn tại);
- xóa dữ liệu mà không ai đề cập đến;
- và nhiều nhiều người khác.
Nhân tiện, có những tình huống khi một bảng có cái gọi là khóa tự nhiên . Đây là khi có một cột có nội dung ngụ ý tính duy nhất. Ví dụ: chúng tôi quyết định thêm vào bảng nhân viên:
- Thứ tự họ đến công ty;
- Số thuế;
- Số và sê-ri của hộ chiếu.
Đôi khi các nhà thiết kế cơ sở dữ liệu sử dụng khóa tự nhiên làm khóa chính, nhưng thường thì chúng được sử dụng riêng. Rốt cuộc, các bản ghi có thể bị xóa, thay đổi, v.v.
Tôi cho rằng bạn đã đọc những câu chuyện trên Internet khi các thừa phát lại treo các khoản nợ mang tên đầy đủ của anh ta lên một người? Điều này chỉ liên quan đến khái niệm khóa duy nhất. Rất thuận tiện cho các ngân hàng và thừa phát lại tìm kiếm một người theo họ tên và năm sinh. Và trong 99% trường hợp, điều này là đủ để xác định một người.
Nhưng <1% còn lại là trùng tên, trùng năm sinh. Trong cuộc đời của mỗi chúng ta, rất có thể không có những người như vậy, nhưng trên phạm vi cả nước thì có. Nói chung, nếu bạn đang viết phần mềm hoặc thiết kế cơ sở dữ liệu, thì sẽ rất hữu ích khi biết rằng đây cũng có thể là trường hợp.