Bỏ qua đến nội dung
Bỏ qua điều hướng
Đăng nhập
MT.NET.VN

Viewbh Sub Query Trong Sql2023 04 12 11 14 15

Tìm kiếm
Thuộc khóa học · baihoc_sub = 50

MS SQL ( Basic to Pro )

Bài 1 / 1 trong khóa học.

Xem khóa học
100%
Bài trướcĐây là bài đầu tiên Bài sauĐây là bài cuối cùng
MT LEARNING · LESSON

Sub query trong SQL

Sub query trong SQL

Sub query trong SQL

Sub query trong SQL



Sub query trong SQL hoặc truy vấn nội bộ hoặc truy vấn Nested là truy vấn trong một truy vấn SQL khác và được nhúng trong mệnh đề WHERE.

Một sub query được sử dụng để trả về dữ liệu sẽ được sử dụng trong truy vấn chính như một điều kiện để hạn chế hơn nữa dữ liệu được truy xuất.

Sub query có thể được sử dụng với câu lệnh SELECT, INSERT, UPDATE, và DELETE cùng với các toán tử như: =, <,>,> =, <=, IN, BETWEEN, v.v ...

Có một vài quy tắc mà Sub query phải tuân theo:

  • Sub query phải được đặt trong dấu ngoặc đơn.
  • Một sub query có thể chỉ có một cột trong mệnh đề SELECT, trừ khi nhiều cột trong truy vấn chính cho sub query để so sánh các cột đã chọn của nó.
  • Không thể sử dụng lệnh ORDER BY trong sub query, mặc dù truy vấn chính có thể sử dụng ORDER BY. Lệnh GROUP BY có thể được sử dụng để thực hiện chức năng giống như ORDER BY trong một sub query.
  • Sub query trả về nhiều hơn một hàng chỉ có thể được sử dụng với toán tử nhiều giá trị như toán tử IN.
  • Danh sách SELECT không được bao gồm bất kỳ tham chiếu nào đến các giá trị đánh giá BLOB, ARRAY, CLOB hoặc NCLOB.
  • Một sub query không thể được chứa trực tiếp một chức năng set.
  • Toán tử BETWEEN không thể được sử dụng với một sub query. Tuy nhiên, toán tử BETWEEN có thể được sử dụng trong sub query.

Sub query với câu lệnh SELECT

Sub query thường được sử dụng với câu lệnh SELECT. Cú pháp cơ bản như sau:

 SELECT column_name [, column_name ] FROM   table1 [, table2 ] WHERE  column_name OPERATOR    (SELECT column_name [, column_name ]    FROM table1 [, table2 ]    [WHERE]) 

Ví dụ

Hãy xem xét bảng CUSTOMERS có các bản ghi sau đây:

 +----+----------+-----+-----------+----------+ | ID | NAME     | AGE | ADDRESS   | SALARY   | +----+----------+-----+-----------+----------+ |  1 | Ha Anh   |  32 | Da Nang   |  2000.00 | |  2 | Van Ha   |  25 | Ha Noi    |  1500.00 | |  3 | Vu Bang  |  23 | Vinh      |  2000.00 | |  4 | Thu Minh |  25 | Ha Noi    |  6500.00 | |  5 | Hai An   |  27 | Ha Noi    |  8500.00 | |  6 | Hoang    |  22 | Ha Noi    |  4500.00 | |  7 | Binh     |  24 | Ha Noi    | 10000.00 | +----+----------+-----+-----------+----------+ 

Ví dụ về sub query với một câu lệnh SELECT.

 SELECT *     FROM CUSTOMERS     WHERE ID IN (SELECT ID           FROM CUSTOMERS           WHERE SALARY > 4500) ; 

Điều này sẽ tạo ra kết quả sau.

 +----+----------+-----+-----------+----------+ | ID | NAME     | AGE | ADDRESS   | SALARY   | +----+----------+-----+-----------+----------+ |  4 | Thu Minh |  25 | Ha Noi    |  6500.00 | |  5 | Hai An   |  27 | Ha Noi    |  8500.00 | |  7 | Binh     |  24 | Ha Noi    | 10000.00 | +----+----------+-----+-----------+----------+ 


Sub query với câu lệnh INSERT

Sub query cũng có thể được sử dụng với các câu lệnh INSERT. Câu lệnh INSERT sử dụng dữ liệu được trả về từ sub query để chèn vào một bảng khác. Dữ liệu đã chọn trong sub query có thể được sửa đổi bằng bất kỳ ký tự, ngày hoặc số chức năng.

Cú pháp cơ bản như sau.

 INSERT INTO table_name [ (column1 [, column2 ]) ]    SELECT [ *|column1 [, column2 ]    FROM table1 [, table2 ]    [ WHERE VALUE OPERATOR ] 

Ví dụ về sub query với một câu lệnh INSERT

Xem bảng CUSTOMERS_BKP có cấu trúc tương tự như bảng CUSTOMERS. Bây giờ để sao chép bảng CUSTOMERS hoàn chỉnh vào bảng CUSTOMERS_BKP, bạn có thể sử dụng cú pháp sau.

 INSERT INTO CUSTOMERS_BKP    SELECT * FROM CUSTOMERS     WHERE ID IN (SELECT ID     FROM CUSTOMERS) ; 

Sub query với câu lệnh UPDATE

Có thể sử dụng sub query kết hợp với câu lệnh UPDATE. Một hoặc nhiều cột trong một bảng có thể được cập nhật khi sử dụng một sub query với câu lệnh UPDATE.

Cú pháp cơ bản như sau.

 UPDATE table SET column_name = new_value [ WHERE OPERATOR [ VALUE ]    (SELECT COLUMN_NAME    FROM TABLE_NAME)    [ WHERE) ] 

Ví dụ về sub query với một câu lệnh UPDATE

Giả sử, chúng ta có bảng CUSTOMERS_BKP có sẵn là bảng sao lưu của CUSTOMERS. Ví dụ sau cập nhật SALARY gấp 0,25 lần trong bảng CUSTOMERS cho tất cả khách hàng có AGE lớn hơn hoặc bằng 27.

 UPDATE CUSTOMERS    SET SALARY = SALARY * 0.25    WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP       WHERE AGE >= 27 ); 

Điều này sẽ ảnh hưởng đến hai hàng và cuối cùng bảng CUSTOMERS sẽ có các bản ghi sau đây.

 +----+----------+-----+-----------+----------+ | ID | NAME     | AGE | ADDRESS   | SALARY   | +----+----------+-----+-----------+----------+ |  1 | Ha Anh   |  32 | Da Nang   |   125.00 | |  2 | Van Ha   |  25 | Ha Noi    |  1500.00 | |  3 | Vu Bang  |  23 | Vinh      |  2000.00 | |  4 | Thu Minh |  25 | Ha Noi    |  6500.00 | |  5 | Hai An   |  27 | Ha Noi    |  2125.00 | |  6 | Hoang    |  22 | Ha Noi    |  4500.00 | |  7 | Binh     |  24 | Ha Noi    | 10000.00 | +----+----------+-----+-----------+----------+ 


Sub query với câu lệnh DELETE

Sub query có thể được sử dụng kết hợp với câu lệnh DELETE như với bất kỳ câu lệnh nào khác đã đề cập ở trên.

Cú pháp cơ bản như sau.

 DELETE FROM TABLE_NAME [ WHERE OPERATOR [ VALUE ]    (SELECT COLUMN_NAME    FROM TABLE_NAME)    [ WHERE) ] 

Ví dụ về sub query với một câu lệnh DELETE

Giả sử, chúng ta có một bảng CUSTOMERS_BKP có sẵn mà là một bản sao lưu của bảng CUSTOMERS. Ví dụ sau sẽ xóa các bản ghi từ bảng CUSTOMERS cho tất cả khách hàng có AGE lớn hơn hoặc bằng 27.

 DELETE FROM CUSTOMERS    WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP       WHERE AGE >= 27 ); 

Điều này sẽ ảnh hưởng đến hai hàng và cuối cùng là bảng CUSTOMERS sẽ có các bản ghi sau.

 +----+----------+-----+-----------+----------+ | ID | NAME     | AGE | ADDRESS   | SALARY   | +----+----------+-----+-----------+----------+ |  2 | Van Ha   |  25 | Ha Noi    |  1500.00 | |  3 | Vu Bang  |  23 | Vinh      |  2000.00 | |  4 | Thu Minh |  25 | Ha Noi    |  6500.00 | |  6 | Hoang    |  22 | Ha Noi    |  4500.00 | |  7 | Binh     |  24 | Ha Noi    | 10000.00 | +----+----------+-----+-----------+----------+ 
Bài tiếp theo: Sequence trong SQL


ĐÁNH GIÁ NỘI DUNG 0.0/5 0 lượt đánh giá
Bạn thấy nội dung này thế nào?
Mỗi trình duyệt/tài khoản được chấm lại sau 24 giờ.
Báo bài lỗiGiúp MT.Net.VN phát hiện nội dung cần kiểm tra
Báo lỗi được ghi vào hệ thống để Admin kiểm tra. Không dùng chức năng này để gửi hỗ trợ cá nhân.

Bài học liên quan

Các bài khác có cùng khóa học cha theo baihoc_sub.

Home Dịch vụ Khóa học CPanel