Bài này cafedev chia sẻ cho ace về cách sử dụng SELECT INTO,INSERT INTO và CASE trong SQL để lấy ra dữ liệu theo ý muốn của mình.

Lưu ý: Các bạn tham khảo bài giới thiệu này để lấy dữ liệu mẫu, cấu trúc và chạy các ví dụ của toàn bộ series này nha. Khi bạn thực hành mà không tìm thấy kết quả và không xảy ra lỗi thì có thể dữ liệu của bạn không tồn tại, vì vậy, bạn có thể insert thêm data vào bảng và thực hành lại nha.

1. SELECT INTO trong SQL

Câu lệnh SELECT INTO sao chép dữ liệu từ một bảng vào một bảng mới.

Cú pháp

SELECT *
INTO newtable [IN externaldb]
FROM oldtable
WHERE condition; 

Chỉ sao chép một số cột vào một bảng mới:

/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/

SELECT column1, column2, column3, ...
INTO newtable [IN externaldb]
FROM oldtable
WHERE condition; 

Bảng mới sẽ được tạo với tên và kiểu cột như đã định nghĩa trong bảng cũ. Bạn có thể tạo tên cột mới bằng mệnh đề AS.

Ví dụ:

  • Câu lệnh SQL sau tạo một bản sao lưu của Customers:
SELECT * INTO CustomersBackup2020
FROM Customers; 
  • Câu lệnh SQL sau sử dụng mệnh đề IN để sao chép bảng vào một bảng mới trong cơ sở dữ liệu khác:
SELECT * INTO CustomersBackup2017 IN 'BackupCafedev.mdb'
FROM Customers; 
  • Câu lệnh SQL sau chỉ sao chép một vài cột vào một bảng mới:
SELECT CustomerName, ContactName INTO CustomersBackup2020
FROM Customers; 
  • Câu lệnh SQL sau chỉ sao chép các khách hàng VN vào một bảng mới:
SELECT * INTO CustomersGermany
FROM Customers
WHERE Country = 'VN';
  • Câu lệnh SQL sau sao chép dữ liệu từ nhiều bảng vào một bảng mới:
SELECT Customers.CustomerName, Orders.OrderID
INTO CustomersOrderBackup2020
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

Mẹo: SELECT INTO cũng có thể được sử dụng để tạo một bảng mới, trống bằng cách sử dụng lược đồ của một bảng khác. Chỉ cần thêm mệnh đề WHERE khiến truy vấn không trả về dữ liệu:

SELECT * INTO newtable
FROM oldtable
WHERE 1 = 0;

2. INSERT INTO trong SQL

Câu lệnh INSERT INTO SELECT sao chép dữ liệu từ một bảng và chèn nó vào một bảng khác.

  • INSERT INTO SELECT yêu cầu các kiểu dữ liệu trong bảng nguồn và bảng đích phải khớp
  • Các dữ liệu hiện có trong bảng đích không bị ảnh hưởng

Cú pháp

Sao chép tất cả các cột từ bảng này sang bảng khác:

INSERT INTO table2
SELECT * FROM table1
WHERE condition; 
  • Chỉ sao chép một số cột từ một bảng sang một bảng khác:
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/

INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition; 

Ví dụ:

Cấu trúc các bản bạn tham khảo tạo đây.

  • Câu lệnh SQL sau sao chép “Suppliers” vào “Customers” (các cột không chứa dữ liệu, sẽ chứa NULL):
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers;
  • Câu lệnh SQL sau sao chép “Suppliers” thành “Customers” (điền vào tất cả các cột):
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
SELECT SupplierName, ContactName, Address, City, PostalCode, Country FROM Suppliers;
  • Câu lệnh SQL sau chỉ sao chép các nhà cung cấp của VN vào “Customers”:
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers
WHERE Country='VN';

3. CASE trong SQL

Câu lệnh CASE đi qua các điều kiện và trả về một giá trị khi điều kiện đầu tiên được đáp ứng (giống như câu lệnh IF-THEN-ELSE). Vì vậy, một khi một điều kiện là đúng, nó sẽ ngừng đọc và trả về kết quả. Nếu không có điều kiện nào là đúng, nó trả về giá trị trong mệnh đề ELSE.

Nếu không có phần ELSE và không có điều kiện nào là đúng, nó trả về NULL.

Cú pháp

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE result
END; 

Ví dụ:

  • SQL sau đi qua các điều kiện và trả về một giá trị khi điều kiện đầu tiên được đáp ứng:
SELECT OrderID, Quantity,
CASE
    WHEN Quantity > 30 THEN 'The quantity is greater than 30'
    WHEN Quantity = 30 THEN 'The quantity is 30'
    ELSE 'The quantity is under 30'
END AS QuantityText
FROM OrderDetails; 
  • SQL sau sẽ sắp xếp các khách hàng theo Thành phố. Tuy nhiên, nếu Thành phố là NULL, thì hãy đặt hàng theo Quốc gia:
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/

SELECT CustomerName, City, Country
FROM Customers
ORDER BY
(CASE
    WHEN City IS NULL THEN Country
    ELSE City
END); 

Lưu ý: Các bạn tham khảo bài giới thiệu này để lấy dữ liệu mẫu và chạy các ví dụ của toàn bộ series này nha. Khi bạn thực hành mà không tìm thấy kết quả và không xảy ra lỗi thì có thể dữ liệu của bạn không tồn tại, vì vậy, bạn có thể insert thêm data vào bảng và thực hành lại nha.

Full series tự học SQL từ cơ bản tới nâng cao tại đây nha.

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!