Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Cách kết hợp kết quả của hai truy vấn trong SQL

Vấn đề:

Bạn muốn hiển thị dữ liệu từ các cột nhất định (có kiểu dữ liệu tương tự) từ hai bảng trong SQL.

Ví dụ:

Có hai bảng trong cơ sở dữ liệu của chúng tôi:employeecustomer .

employee bảng chứa dữ liệu trong các cột sau: id , first_name , last_name tuổi .

id first_name last_name tuổi
1 Tom Miller 22
2 John Smith 26
3 Lisa Williams 30
4 Charles Davis 21
5 James Moore 22

customer bảng chứa dữ liệu trong các cột sau: id , first_name , last_name tuổi .

id first_name last_name tuổi
1 Milan Smith 45
2 Charles Davis 21
3 Đánh dấu Người ủng hộ 19

Trong một tập hợp kết quả, hãy hiển thị tên, họ và tuổi cho tất cả mọi người trong cơ sở dữ liệu, cả nhân viên và khách hàng.

Giải pháp 1:

Chúng tôi sẽ sử dụng UNION ALL để nối dữ liệu từ các cột trong hai bảng.

Đây là truy vấn bạn sẽ viết:

SELECT first_name, last_name, age FROM employee
UNION ALL
SELECT first_name, last_name, age FROM customer;

Đây là kết quả:

first_name last_name tuổi
Tom Miller 22
John Smith 26
Lisa Williams 30
Charles Davis 21
James Moore 28
Milan Smith 45
Charles Davis 21
Đánh dấu Người ủng hộ 19

Thảo luận:

Sử dụng mệnh đề UNION ALL để nối dữ liệu từ các cột trong hai hoặc nhiều bảng. Trong ví dụ của chúng tôi, chúng tôi kết hợp dữ liệu từ employeecustomer những cái bàn. Ở bên trái của từ khóa UNION ALL, hãy đặt câu lệnh SELECT đầu tiên để lấy dữ liệu từ bảng đầu tiên (trong ví dụ của chúng tôi là bảng employee ). Ở bên phải, sử dụng một câu lệnh SELECT khác để lấy dữ liệu từ bảng thứ hai (trong ví dụ của chúng tôi là customer ).

Hãy nhớ rằng dữ liệu đã chọn trong cả hai bảng phải có cùng kiểu dữ liệu trong mỗi cột. Ví dụ:nếu cột đầu tiên trong SELECT đầu tiên là kiểu dữ liệu chuỗi, thì cột đầu tiên trong SELECT thứ hai cũng phải là kiểu dữ liệu chuỗi. Nếu cột thứ hai trong câu lệnh SELECT đầu tiên là một số nguyên thì cột thứ hai trong bảng thứ hai cũng phải là một kiểu số nguyên.

Trong truy vấn đầu tiên, chúng tôi đã chọn tuổi (tuổi của nhân viên, là một kiểu dữ liệu số nguyên) cho cột thứ ba. Do đó, cột thứ ba trong SELECT thứ hai cũng là một giá trị nguyên; đó là tuổi của khách hàng.

Các cột thứ hai trong cả hai câu lệnh SELECT có cùng kiểu dữ liệu. Tuy nhiên, nếu các giá trị giống nhau trong cả hai bảng, chúng sẽ được hiển thị nhiều lần; ví dụ:‘Charles Davis 21’ được hiển thị hai lần trong tập kết quả.

Điều gì xảy ra nếu bạn không muốn có nhiều bản ghi giống nhau trong bảng kết quả? Trong trường hợp này, hãy sử dụng UNION . Nó tương tự như UNION ALL , nhưng nó loại bỏ các bản ghi trùng lặp. Hãy xem ví dụ sau.

Giải pháp 2:

Đây là truy vấn tránh các bản ghi trùng lặp:

SELECT first_name, last_name FROM employee
UNION 
SELECT first_name, last_name FROM customer;

Đây là kết quả của truy vấn trên:

first_name last_name
Đánh dấu Người ủng hộ
James Moore
John Smith
Charles Davis
Milan Smith
Tom Miller
Lisa Williams

Lưu ý:

UNION ALL nhanh hơn UNION , nhưng UNION loại bỏ các hàng trùng lặp. Sự lựa chọn phụ thuộc vào dữ liệu kết quả mà chúng ta cần.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo bảng cơ sở dữ liệu bằng SQL

  2. Cách phân loại, tìm và che giấu PII trong cơ sở dữ liệu…

  3. Mô hình dữ liệu cửa hàng sửa chữa ô tô

  4. CHẾ ĐỘ XEM SQL

  5. Bảng tham chiếu SQL:Cách tạo và viết các truy vấn cơ bản