Truy vấn con lồng nhau: Truy vấn con là một câu lệnh SELECT được lồng trong một câu lệnh SELECT khác và trả về kết quả trung gian. Xem chi tiết.

Bạn đang xem : truy vấn lồng nhau trong sql w3schools

Truy vấn con lồng nhau trong SQL

Cập nhật lần cuối vào ngày 15 tháng 4 năm 2022 10:38:53 (UTC / GMT +8 giờ)

Truy vấn con lồng nhau

Một truy vấn con có thể được lồng vào bên trong các truy vấn con khác. SQL có khả năng lồng các truy vấn vào nhau. Truy vấn con là một câu lệnh SELECT được lồng trong một câu lệnh SELECT khác và trả về kết quả trung gian. SQL thực thi truy vấn con trong cùng đầu tiên, sau đó đến cấp độ tiếp theo. Xem các ví dụ sau:

Ví dụ -1: Truy vấn con lồng nhau

Nếu chúng tôi muốn truy xuất job_id duy nhất đó và có mức lương trung bình từ bảng nhân viên mà job_id duy nhất có mức lương nhỏ hơn (mức trung bình tối đa của min_salary của mỗi job_id duy nhất từ ​​bảng công việc có job_id trong danh sách, chọn từ (bảng job_history nằm trong Department_id 50 và 100)) câu lệnh SQL sau có thể được sử dụng:

Bảng mẫu: nhân viên

Bảng mẫu: việc làm

Mã SQL:

  SELECT job_id, AVG (lương)
TỪ nhân viên
GROUP BY job_id
CÓ AVG (lương) & lt;
(CHỌN TỐI ĐA (AVG (min_salary))
TỪ việc làm
WHERE job_id IN
(CHỌN job_id FROM job_history
WHERE Department_id
GIỮA 50 VÀ 100)
GROUP BY job_id);
 

Đoạn mã trên được thực thi trong Oracle 11g Express Edition.

hoặc

  SELECT job_id, AVG (lương)
SELECT job_id, AVG (lương)
TỪ nhân viên
GROUP BY job_id
CÓ AVG (lương) & lt;
(CHỌN MAX (myavg) từ (select job_id, AVG (min_salary) as myavg
TỪ việc làm
WHERE job_id IN
(CHỌN job_id FROM job_history
WHERE Department_id
GIỮA 50 VÀ 100)
GROUP BY job_id) ss);
 

Đoạn mã trên được thực thi trong PostgreSQL 9.3

Đầu ra

 JOB_ID AVG (LƯƠNG)
---------- -----------
IT_PROG 5760
AC_ACCOUNT 8300
ST_MAN 7280
AD_ASST 4400
SH_CLERK 3215
FI_ACCOUNT 7920
PU_CLERK 2780
SA_REP 8350
MK_REP 6000
ST_CLERK 2785
HR_REP 6500

Giải thích:

Ví dụ này chứa ba truy vấn: truy vấn con lồng nhau, truy vấn con và truy vấn bên ngoài. Các phần truy vấn này được chạy theo thứ tự đó.

Hãy chia ví dụ thành ba phần và quan sát kết quả trả về.

Đầu tiên truy vấn con lồng nhau như sau:

Mã SQL:

  CHỌN job_id TỪ job_history
WHERE Department_id
GIỮA 50 VÀ 100;  

Truy vấn con lồng nhau này truy xuất (các) job_id từ bảng job_history nằm trong Department_id 50 và 100.

Xem Thêm  Cách thay đổi kích thước phông chữ trong CSS - thay đổi kích thước phông chữ css

Đây là kết quả đầu ra.

Đầu ra:

 JOB_ID
----------
ST_CLERK
ST_CLERK
IT_PROG
SA_REP
SA_MAN
AD_ASST
AC_ACCOUNT

Dưới đây là minh họa bằng hình ảnh về kết quả đầu ra ở trên.


Truy vấn con Sql với trong

Bây giờ, truy vấn con nhận đầu ra từ truy vấn con lồng nhau đã nêu ở trên.

 
CHỌN TỐI ĐA (AVG (min_salary))
TỪ việc làm WHERE job_id
IN (..... đầu ra từ truy vấn con lồng nhau ......)
GROUP BY job_id  

Truy vấn con hoạt động nội bộ như sau:

Mã SQL:

  CHỌN TỐI ĐA (AVG (min_salary))
TỪ việc làm
WHERE job_id
TRONG(
'ST_CLERK', 'ST_CLERK', 'IT_PROG',
'SA_REP', 'SA_MAN', 'AD_ASST', '
AC_ACCOUNT ')
GROUP BY job_id;
 

Truy vấn con trả về giá trị trung bình tối đa là min_salary cho mỗi lần trả về job_id duy nhất (tức là ‘ST_CLERK’, ‘ST_CLERK’, ‘IT_PROG’, ‘SA_REP’, ‘SA_MAN’, ‘AD_ASST’, ‘AC_ACCOUNT’) trước đó truy vấn con.

Đây là kết quả đầu ra:

Đầu ra:

 MAX (AVG (MIN_SALARY))
--------------------
               10000

Dưới đây là biểu diễn bằng hình ảnh về cách kết quả ở trên trả về.


Truy vấn phụ Sql với trong

Bây giờ, truy vấn bên ngoài nhận đầu ra từ truy vấn con và cũng nhận đầu ra từ truy vấn con lồng nhau đã nêu ở trên.

  SELECT job_id, AVG (lương)
TỪ nhân viên
GROUP BY job_id
CÓ AVG (lương) & lt;
(..... đầu ra từ truy vấn con (
đầu ra từ truy vấn con lồng nhau) ......)  

Truy vấn bên ngoài hoạt động nội bộ như sau:

Mã SQL:

  SELECT job_id, AVG (lương)
TỪ nhân viên
GROUP BY job_id
CÓ AVG (lương) & lt; 10000;  

Truy vấn bên ngoài trả về job_id, mức lương trung bình của nhân viên thấp hơn mức trung bình tối đa của min_salary mà truy vấn trước đó trả về

Đầu ra:

 JOB_ID AVG (LƯƠNG)
---------- -----------
IT_PROG 5760
AC_ACCOUNT 8300
ST_MAN 7280
AD_ASST 4400
SH_CLERK 3215
FI_ACCOUNT 7920
PU_CLERK 2780
SA_REP 8350
MK_REP 6000
ST_CLERK 2785
HR_REP 6500

Ví dụ -2: Truy vấn con lồng nhau

Đây là một ví dụ khác về truy vấn con lồng nhau.

Bảng mẫu: đơn đặt hàng

Bảng mẫu: khách hàng

Bảng mẫu: các tác nhân

Mã SQL:

  CHỌN ord_num, ord_date, ord_amount, Adv_amount
TỪ đơn đặt hàng
WHERE ord_amount & gt; 2000
AND ord_date & lt; '01 -SEP-08 '
VÀ ADVANCE_AMOUNT & lt;
BẤT KỲ (CHỌN OUTSTANDING_AMT
TỪ KHÁCH HÀNG
WHERE GRADE = 3
VÀ CUST_COUNTRY & lt; & gt; 'Ấn Độ'
VÀ open_amt & lt; 7000
VÀ TỒN TẠI
(LỰA CHỌN *
TỪ đại lý
Hoa hồng WHERE & lt; .12));  

Đầu ra:

 ORD_NUM ORD_DATE ORD_AMOUNT ADVANCE_AMOUNT
---------- --------- ---------- --------------
    200130 30-THÁNG 7-08 2500 400
    200127 20-THÁNG 7-08 2500 400
    200110 15-APR-08 3000 500
    200105 18-THÁNG 7-08 2500 500
    200129 20-THÁNG 7-08 2500 500
    200108 15-FEB-08 4000 600
    200113 10-JUN-08 4000 600
    200106 20-APR-08 2500 700
    200109 30-THÁNG 7-08 3500 800
    200107 30-AUG-08 4500 900
    200101 15-THÁNG 7-08 3000 1000
    200128 20-THÁNG 7-08 3500 1500
    200114 15-AUG-08 3500 2000

Giải thích:

Xem Thêm  Kiểm tra xem một chuỗi có phải là một số trong Python hay không (bao gồm cả Unicode) - python kiểm tra xem một chuỗi có phải là số không

Truy vấn bên trong cuối cùng sẽ tìm nạp các hàng từ bảng đại lý có hoa hồng dưới 0,12%.

Truy vấn nội bộ cuối cùng thứ 2 trả về số tiền chưa thanh toán cho những khách hàng đang học lớp 3 và không thuộc quốc gia Ấn Độ và số tiền mở đầu ký gửi của họ ít hơn 7000 và các đại lý của họ lẽ ra phải kiếm được hoa hồng ít hơn 0,12% .

Truy vấn bên ngoài trả về ord_num, ord_date, ord_amount, Adv_amount cho những đơn đặt hàng từ bảng đơn đặt hàng có số lượng ord_amount lớn hơn 2000 và ord_date trước ’01 -sep-08 ‘và số tiền tạm ứng có thể là số tiền chưa thanh toán cho những khách hàng đang học lớp 3 và không thuộc quốc gia Ấn Độ và số tiền ký quỹ mở ít hơn 7000 và các đại lý của họ lẽ ra phải kiếm được hoa hồng dưới 0,12%.

Hãy phá mã và phân tích điều gì đang xảy ra trong truy vấn bên trong. Đây là mã đầu tiên của truy vấn bên trong có đầu ra:

Mã SQL:

  CHỌN *
TỪ đại lý
Hoa hồng WHERE & lt; .12;  

Đầu ra:

 AGENT_CODE AGENT_NAME WORKING_AREA COMMISSION PHONE_NO COUNTRY
---------- --------------- ----------------- - --------------- ---------
A009 Benjamin Hampshair .11 008-22536178
A002 Mukesh Mumbai .11 029-12358964

Đây là mã thứ hai của truy vấn bên trong (bao gồm cả mã đầu tiên) với đầu ra:

Mã SQL:

  CHỌN OUTSTANDING_AMT
TỪ KHÁCH HÀNG
WHERE GRADE = 3
VÀ CUST_COUNTRY & lt; & gt; 'Ấn Độ'
VÀ open_amt & lt; 7000
VÀ TỒN TẠI (
LỰA CHỌN *
TỪ đại lý
Hoa hồng WHERE & lt; .12);  

Đầu ra:

 OUTSTANDING_AMT
---------------
           6000
           3000
           5000

Xem Cơ sở dữ liệu mô hình của chúng tôi

Bài tập SQL thực hành

Bạn muốn cải thiện bài viết trên? Đóng góp Ghi chú / Nhận xét / Ví dụ của bạn thông qua Disqus.

Trước đó: Truy vấn con có liên quan sử dụng bí danh
Tiếp theo: Union


Xem thêm những thông tin liên quan đến chủ đề các truy vấn lồng nhau trong sql w3schools

[SQL Server] #07 – Truy vấn lồng (SubQuery)

alt

  • Tác giả: HIENLTH Channel
  • Ngày đăng: 2021-09-17
  • Đánh giá: 4 ⭐ ( 7235 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: [SQL Server] 07 – Truy vấn lồng (SubQuery)

    Slide bài giảng: https://bit.ly/slq06-subquery
    Database Script (dùng để dựng lại CSDL): https://bit.ly/qlbanhang-script

    sqlserver subquery hienlth

Các truy vấn lồng nhau

  • Tác giả: text.123docz.net
  • Đánh giá: 5 ⭐ ( 3384 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: – Tại 123doc thư viện tài liệu trực tuyến Việt Nam

Truy vấn con trong SQL

  • Tác giả: vietjack.com
  • Đánh giá: 3 ⭐ ( 4918 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Truy vấn con trong SQL – Học SQL cơ bản nâng cao. Học SQL trực tuyến theo các bước từ Khái niệm về database, Cú pháp SQL, Truy vấn SELECT, Truy vấn INSERT, Lệnh DELETE, Truy vấn UPDATE, Ràng buộc (Constraint), Truy vấn DROP, Lệnh TRUNCATE, Từ khóa DISTINCT, Mệnh đề ORDER BY, Mệnh đề GROUP BY, Mệnh đề WHERE, Sử dụng Join, Sử dụng View, Sử dụng Sequence, Transaction, Hàm xử lý, Bảng tạm, Toán tử.

SQL Server – Truy Vấn Lồng

  • Tác giả: manhdandev.com
  • Đánh giá: 3 ⭐ ( 4953 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Truy vấn lồng là những câu lệnh mà trong thành phần WHERE có chứa thêm một câu lệnh SELECT khác nữa. Câu lệnh này thường gặp khi dữ liệu cần thiết phải duyệ…

[SQLSERVER] Hướng dẫn sử dụng SubQuery (truy vấn lồng) trong sql

  • Tác giả: laptrinhvb.net
  • Đánh giá: 5 ⭐ ( 2281 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bài viết hôm nay, mình sẽ hướng dẫn các bạn sử dụng S

Truy vấn con trong sql – Deft Blog

  • Tác giả: shareprogramming.net
  • Đánh giá: 3 ⭐ ( 8103 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong SQL truy vấn lồng là một câu truy vấn được định nghĩa bên trong một câu truy vấn khác. Câu truy vấn được đặt bên trong một câu truy vấn

NGÔN NGỮ SQL – Các truy vấn lồng nhau

  • Tác giả: 123docz.net
  • Đánh giá: 4 ⭐ ( 3608 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: . nhan_vien); 60 NGÔN NGỮ SQL Các truy vấn lồng nhau Câu ORDER BY không được sử dụng trong một câu truy vấn con mặc dù nó có thể được dùng trong câu truy vấn ngoài. EXISTS. 61 NGÔN NGỮ SQL Các truy vấn lồng nhau Theo ngầm định, các tên cột trong câu truy vấn

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Cách tạo thanh điều hướng đáp ứng bằng HTML và CSS - thiết kế thanh điều hướng html

By ads_php