Xin chào Kris, tôi hy vọng bạn sẽ có thể hỗ trợ. Tôi đã xem bài viết của bạn với hy vọng nó sẽ giải quyết vấn đề truy vấn của tôi. Tôi có truy vấn theo đó tôi thích các kết quả được định dạng cụ thể. Tôi đã hy vọng một truy vấn con sẽ giúp
Vì vậy, hiện tại tôi hiểu, có thể hiểu được vì tôi đang sử dụng phép nối để trả về kết quả
Cổ phiếu # Cổ phiếu Số lượng Cổ phiếu Số lượng Cổ phiếu Giá trị Cổ phiếu
Mặt hàng 1 20 10 20. 00 400. 00
Mục1 20 10 20. 00 400. 00
Tuy nhiên, những gì tôi đang cố gắng đạt được là một đầu ra được định dạng như sau
Cổ phiếu # Cổ phiếu Số lượng Cổ phiếu Số lượng Cổ phiếu Giá trị Cổ phiếu
Mặt hàng 1 20 10 20. 00 400. 00
Mục1 10 20. 00
Tôi nghĩ rằng tôi có thể chạy truy vấn phụ để trả về StockTotQty cho mỗi mã hàng cũng như StockValue nhưng theo tôi hiểu thì truy vấn phụ trong câu lệnh Chọn chỉ có thể trả về một giá trị duy nhất và StockTotQty của tôi là các giá trị khác nhau. Điều tương tự cũng xảy ra với Giá trị cổ phiếu
Bạn có thể sử dụng truy vấn con trong câu lệnh CHỌN, CHÈN, XÓA hoặc CẬP NHẬT để thực hiện các tác vụ sau
- So sánh một biểu thức với kết quả của truy vấn
- Xác định xem một biểu thức có được bao gồm trong kết quả của truy vấn không
- Kiểm tra xem truy vấn có chọn bất kỳ hàng nào không
cú pháp
- Truy vấn con [truy vấn bên trong] thực thi một lần trước khi truy vấn chính [truy vấn bên ngoài] thực hiện
- Truy vấn chính [truy vấn bên ngoài] sử dụng kết quả truy vấn phụ
Ví dụ truy vấn con SQL
Trong phần này, bạn sẽ tìm hiểu các yêu cầu của việc sử dụng truy vấn con. Chúng tôi có hai bảng 'student' và 'marks' sau đây với trường chung 'StudentID'
Điểm của học sinh
Bây giờ chúng ta muốn viết một truy vấn để xác định tất cả các sinh viên đạt điểm cao hơn điểm của sinh viên có ID sinh viên là 'V002', nhưng chúng ta không biết điểm của 'V002'.
- Để giải quyết vấn đề, chúng tôi yêu cầu hai truy vấn. Một truy vấn trả về điểm [được lưu trữ trong trường Total_marks] của 'V002' và truy vấn thứ hai xác định những học sinh đạt điểm cao hơn kết quả của truy vấn đầu tiên.
truy vấn đầu tiên
SELECT *
FROM `marks`
WHERE studentid = 'V002';
kết quả truy vấn
Kết quả của truy vấn là 80.
- Sử dụng kết quả của truy vấn này, ở đây chúng tôi đã viết một truy vấn khác để xác định những sinh viên đạt điểm cao hơn 80. Đây là truy vấn.
Truy vấn thứ hai
SELECT a.studentid, a.name, b.total_marks
FROM student a, marks b
WHERE a.studentid = b.studentid
AND b.total_marks >80;
Biểu thức đại số quan hệ
Cây đại số quan hệ
kết quả truy vấn
Hai truy vấn trên đã xác định những sinh viên nhận được số tốt hơn sinh viên có ID sinh viên là 'V002' [Abhay]
Bạn có thể kết hợp hai truy vấn trên bằng cách đặt một truy vấn bên trong truy vấn kia. Truy vấn con [còn được gọi là 'truy vấn bên trong'] là truy vấn bên trong dấu ngoặc đơn. Xem đoạn mã sau và kết quả truy vấn
Mã SQL
SELECT a.studentid, a.name, b.total_marks
FROM student a, marks b
WHERE a.studentid = b.studentid AND b.total_marks >
[SELECT total_marks
FROM marks
WHERE studentid = 'V002'];
kết quả truy vấn
Trình bày bằng hình ảnh của Truy vấn con SQL
truy vấn con. Quy tắc chung
Câu lệnh SELECT của truy vấn con gần giống với câu lệnh SELECT và nó được dùng để bắt đầu một truy vấn thông thường hoặc truy vấn bên ngoài. Đây là cú pháp của một truy vấn con
cú pháp
[SELECT [DISTINCT] subquery_select_argument FROM {table_name | view_name} {table_name | view_name} ... [WHERE search_conditions] [GROUP BY aggregate_expression [, aggregate_expression] ...] [HAVING search_conditions]]
truy vấn con. hướng dẫn
Có một số nguyên tắc cần xem xét khi sử dụng truy vấn con
- Một truy vấn con phải được đặt trong dấu ngoặc đơn.
- Một truy vấn con phải được đặt ở phía bên phải của toán tử so sánh.
- Truy vấn con không thể thao túng kết quả của chúng bên trong, do đó mệnh đề ORDER BY không thể được thêm vào truy vấn con. Bạn có thể sử dụng mệnh đề ORDER BY trong câu lệnh SELECT chính [truy vấn bên ngoài], đây sẽ là mệnh đề cuối cùng
- Sử dụng toán tử một hàng với truy vấn con một hàng.
- Nếu truy vấn con [truy vấn bên trong] trả về giá trị null cho truy vấn bên ngoài, thì truy vấn bên ngoài sẽ không trả về bất kỳ hàng nào khi sử dụng các toán tử so sánh nhất định trong mệnh đề WHERE
Loại truy vấn phụ
- Truy vấn con một hàng. Trả về số không hoặc một hàng
- Truy vấn con nhiều hàng. Trả về một hoặc nhiều hàng
- Truy vấn con nhiều cột. Trả về một hoặc nhiều cột
- truy vấn con tương quan. Tham chiếu một hoặc nhiều cột trong câu lệnh SQL bên ngoài. Truy vấn con được gọi là truy vấn con tương quan vì truy vấn con có liên quan đến câu lệnh SQL bên ngoài
- Truy vấn con lồng nhau. Truy vấn con được đặt trong một truy vấn con khác
Trong phần tiếp theo, chúng tôi đã thảo luận kỹ lưỡng về các chủ đề trên. Ngoài loại truy vấn con ở trên, bạn có thể sử dụng truy vấn con bên trong câu lệnh INSERT, UPDATE và DELETE. Đây là một cuộc thảo luận ngắn gọn
Truy vấn con với câu lệnh INSERT
Câu lệnh INSERT có thể được sử dụng với truy vấn con. Dưới đây là cú pháp và ví dụ về truy vấn con sử dụng câu lệnh INSERT
cú pháp
INSERT INTO table_name [ [column1 [, column2 ]] ] SELECT [ *|column1 [, column2 ] FROM table1 [, table2 ] [ WHERE VALUE OPERATOR ];
Nếu chúng tôi muốn chèn các đơn đặt hàng đó từ bảng 'đơn đặt hàng' có số lượng tạm ứng 2000 hoặc 5000 vào bảng 'đơn đặt hàng mới' thì có thể sử dụng SQL sau
bảng mẫu. mệnh lệnh
Mã SQL
INSERT INTO neworder
SELECT * FROM orders
WHERE advance_amount in[2000,5000];
đầu ra
Để xem thêm chi tiết về các truy vấn con sử dụng câu lệnh INSERT, hãy nhấp vào đây
Truy vấn con với câu lệnh CẬP NHẬT
Trong câu lệnh CẬP NHẬT, bạn có thể đặt giá trị cột mới bằng với kết quả được trả về bởi truy vấn con một hàng. Dưới đây là cú pháp và ví dụ về truy vấn con sử dụng câu lệnh CẬP NHẬT
cú pháp
UPDATE table SET column_name = new_value [ WHERE OPERATOR [ VALUE ] [SELECT COLUMN_NAME FROM TABLE_NAME] [ WHERE] ]
Nếu chúng tôi muốn cập nhật ord_date đó trong bảng 'neworder' với ' 15-JAN-10 ' có chênh lệch giữa ord_amount và .
bảng mẫu. đơn hàng mới
Mã SQL
UPDATE neworder
SET ord_date='15-JAN-10'
WHERE ord_amount-advance_amount<
[SELECT MIN[ord_amount] FROM orders];
đầu ra
Để xem thêm chi tiết về các truy vấn con sử dụng câu lệnh CẬP NHẬT, hãy nhấp vào đây
Truy vấn con với câu lệnh DELETE
Câu lệnh DELETE có thể được sử dụng với truy vấn con. Dưới đây là cú pháp và ví dụ về truy vấn con sử dụng câu lệnh DELETE
cú pháp
________số 8Nếu chúng tôi muốn xóa các đơn đặt hàng đó khỏi bảng 'neworder' có số lượng tạm ứng nhỏ hơn số lượng tạm ứng tối đa của bảng 'đơn đặt hàng', thì có thể sử dụng câu lệnh SQL sau
bảng mẫu. đơn hàng mới
Mã SQL
DELETE FROM neworder
WHERE advance_amount<
[SELECT MAX[advance_amount] FROM orders];
đầu ra
Để xem thêm chi tiết về truy vấn con sử dụng câu lệnh DELETE bấm vào đây
Tiếp theo là gì?
- Truy vấn con SQL - Bản trình bày Slide
- Truy vấn một hàng con
- Truy vấn con nhiều hàng và cột
- Truy vấn con tương quan sử dụng bí danh
- Truy vấn con lồng nhau
Ghi chú. Đầu ra của câu lệnh SQL đã nói ở đây được lấy bằng cách sử dụng Cơ sở dữ liệu Oracle 10g Express Edition