Bạn muốn nối các bảng trên nhiều cột bằng cách sử dụng khóa ghép chính trong một bảng và khóa ghép ngoại trong bảng khác
Thí dụ
Cơ sở dữ liệu của chúng tôi có ba bảng tên là
SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
1, SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
2 và SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
3. Bảng SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
1 có dữ liệu trong các cột sau. SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
5 [khóa chính], SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
6 và SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
7idfirst_namelast_name1EllieWillson2TomBrown3SandraMillerBảng
SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
2 có dữ liệu trong các cột sau. khóa chính [SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
9 và SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
10], SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
11 và SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
12student_idcourse_codeis_activestart_date1GD03true2020-01-201AP01false2020-03-102SL01true2020-05-053SL01true2020-06-01Bảng
SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
3 có dữ liệu trong các cột sau. khóa ngoại [SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
9 và SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
10, khóa chính của bảng SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
2], SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
17 và SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
18student_idcourse_codestatusamount1GD03pay2301AP01pending1002SL01pending803SL01pending110Hãy hiển thị tên, mã khóa học, trạng thái và số tiền thanh toán của từng sinh viên
Dung dịch
SELECT s.last_name, s.first_name, p.course_code, p.status, p.amount FROM enrollment e JOIN student s ON s.id=e.student_id JOIN payment p ON p.course_code=e.course_code AND p.student_id=e.student_id;last_namefirst_namecourse_codestatusamountWillsonEllieGD03đã thanh toán230WillsonEllieAP01đang chờ xử lý100BrownTomSL01đang chờ xử lý80MillerSandraSL01đang chờ xử lý110
Thảo luận
Nếu bạn muốn lấy dữ liệu được lưu trữ trong các bảng được nối bằng một khóa phức hợp, là khóa chính trong một bảng và khóa ngoại trong một bảng khác, chỉ cần sử dụng điều kiện nối trên nhiều cột
Trong một bảng đã nối [trong ví dụ của chúng tôi,
SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
2], chúng tôi có một khóa chính được tạo từ hai cột [SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
9 và SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
10]. Trong bảng thứ hai [SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
3], chúng tôi có các cột là khóa ghép ngoại [SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
9 và SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
10]. Làm thế nào chúng ta có thể nối các bảng với các phím ghép này?Dễ. Chúng ta chỉ cần sử dụng mệnh đề
SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
25 với nhiều hơn một điều kiện bằng cách sử dụng toán tử AND sau điều kiện đầu tiên. Trong ví dụ của chúng tôi, chúng tôi sử dụng điều kiện nàySELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
26Trong phần đầu tiên, chúng tôi sử dụng cột
SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
9 từ bảng SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
2 và SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
9 từ bảng SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
3. Ở điều kiện tiếp theo, chúng ta lấy cột SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
10 từ bảng SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
2 và SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
10 từ bảng SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
3Lưu ý rằng các cột
SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
9 và SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
10 tạo thành khóa chính trong bảng SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
2. Do đó, chúng được sử dụng trong bảng SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
3 làm khóa ngoại Trong SQL, nhiều trường cũng có thể được thêm vào với mệnh đề DISTINCT. DISTINCT sẽ loại bỏ những hàng có tất cả các trường đã chọn giống hệt nhau
nội dung
- Câu lệnh Select mẫu
- Chọn với sự khác biệt trên hai cột
- Chọn với sự khác biệt trên ba cột
- Chọn khác biệt trên tất cả các cột của truy vấn đầu tiên
- Chọn với sự khác biệt trên nhiều cột và sắp xếp theo mệnh đề
- Hàm Count[] và chọn khác biệt trên nhiều cột
Thí dụ. Câu lệnh CHỌN mẫu
Đây là một truy vấn đơn giản trên một số cột đã chọn trong bảng đơn đặt hàng trong đó agent_code='A002'
Mã SQL
SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
Biểu thức đại số quan hệ
Cây đại số quan hệ
bảng mẫu. mệnh lệnh
đầu ra
AGENT_CODE ORD_AMOUNT CUST_CODE ORD_NUM ---------- ---------- ---------- ---------- A002 2500 C00005 200106 A002 500 C00022 200123 A002 500 C00009 200120 A002 500 C00022 200126 A002 3500 C00009 200128 A002 1200 C00009 200133 A002 4000 C00022 200113
Kết quả trên cho thấy cùng một agent_code, ord_amount và cust_code xuất hiện nhiều lần trong bảng đơn hàng
Thí dụ. CHỌN với DISTINCT trên hai cột
Để lấy các hàng giống hệt nhau [dựa trên hai cột agent_code và ord_amount] một lần từ bảng đơn hàng, có thể sử dụng câu lệnh SQL sau
Mã SQL
SELECT DISTINCT agent_code,ord_amount
FROM orders
WHERE agent_code='A002';
Biểu thức đại số quan hệ
Cây đại số quan hệ
đầu ra
AGENT_CODE ORD_AMOUNT ---------- ---------- A002 3500 A002 1200 A002 4000 A002 500 A002 2500
trình bày bằng hình ảnh
Thí dụ. CHỌN với DISTINCT trên ba cột
Để lấy các hàng giống hệt nhau [dựa trên ba cộtagent_code, ord_amount và cust_code] một lần từ bảng đơn hàng, có thể sử dụng câu lệnh SQL sau
Mã SQL
SELECT DISTINCT agent_code, ord_amount,cust_code
FROM orders
WHERE agent_code='A002';
Biểu thức đại số quan hệ
Cây đại số quan hệ
đầu ra
AGENT_CODE ORD_AMOUNT CUST_CODE ---------- ---------- ---------- A002 500 C00022 A002 3500 C00009 A002 2500 C00005 A002 500 C00009 A002 4000 C00022 A002 1200 C00009
trình bày bằng hình ảnh
Thí dụ. CHỌN với DISTINCT trên tất cả các cột của truy vấn đầu tiên
Để lấy các hàng giống hệt nhau [trên bốn cột agent_code, ord_amount, cust_code và ord_num] một lần từ bảng đơn hàng, có thể sử dụng câu lệnh SQL sau
Mã SQL
SELECT DISTINCT agent_code,ord_amount,cust_code,ord_num
FROM orders
WHERE agent_code='A002';
Biểu thức đại số quan hệ
Cây đại số quan hệ
đầu ra
________số 8Trong kết quả ở trên, tất cả các hàng có agent_code là 'A002' đã trả về vì không có hàng nào giống nhau trên agent_code, ord_amount, cust_code và ord_num. Xem phần trình bày sau.
trình bày bằng hình ảnh
CHỌN với DISTINCT trên nhiều cột và mệnh đề ORDER BY
Bạn có thể sử dụng mệnh đề theo thứ tự trong câu lệnh chọn với sự khác biệt trên nhiều cột. Đây là một ví dụ
Mã SQL
SELECT DISTINCT agent_code,ord_amount
FROM orders
WHERE agent_code='A002'
ORDER BY ord_amount;
Biểu thức đại số quan hệ
Cây đại số quan hệ
đầu ra
SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders
WHERE agent_code='A002';
0trình bày bằng hình ảnh
Hàm COUNT[] và CHỌN với DISTINCT trên nhiều cột
Bạn có thể sử dụng hàm đếm [] trong một câu lệnh chọn có sự khác biệt trên nhiều cột để đếm các hàng riêng biệt. Đây là một ví dụ