MySQL - Chèn vào Chọn: Hướng dẫn Toàn diện cho Người Mới Bắt Đầu

Xin chào các nhà法师数据库 tương lai! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của MySQL, cụ thể là tập trung vào câu lệnh mạnh mẽ "Insert Into Select". Đừng lo lắng nếu bạn mới làm quen với lập trình - tôi sẽ là người bạn thân thiện dẫn đường, giải thích từng bước một. Vậy, hãy lấy một tách cà phê, và chúng ta cùng bắt đầu!

MySQL - Insert Into Select

Câu lệnh MySQL Insert Into Select

Hãy tưởng tượng bạn đang sắp xếp kệ sách. Bạn có một đống sách mới (giả sử đây là dữ liệu nguồn), và bạn muốn thêm chúng vào kệ sách đã được sắp xếp (kệ đích). Đó chính là điều mà câu lệnh "Insert Into Select" trong MySQL làm - nó cho phép chúng ta sao chép dữ liệu từ một bảng và chèn vào một bảng khác.

Cú pháp cơ bản trông như này:

INSERT INTO target_table (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM source_table
WHERE condition;

Hãy phân tích nó ra:

  • INSERT INTO target_table: Đây là nơi chúng ta sẽ chèn dữ liệu mới.
  • (column1, column2, ...): Đây là các cột trong bảng đích mà chúng ta sẽ điền.
  • SELECT ...: Đây là nơi chúng ta lấy dữ liệu.
  • FROM source_table: Đây là bảng mà chúng ta đang sao chép.
  • WHERE condition: Đây là tùy chọn, nhưng nó cho phép chúng ta lọc dữ liệu cần sao chép.

Chèn Dữ liệu Yêu cầu từ một Bảng khác sang Bảng Khác

Bây giờ, hãy thử tay vào một đoạn mã thực tế! Giả sử chúng ta có hai bảng: old_booksnew_arrivals. Chúng ta muốn di chuyển tất cả các sách thể loại fantasy từ old_books sang new_arrivals.

INSERT INTO new_arrivals (title, author, genre)
SELECT title, author, genre
FROM old_books
WHERE genre = 'Fantasy';

Trong ví dụ này:

  • Chúng ta đang chèn vào new_arrivals, chỉ định các cột cần điền.
  • Chúng ta đang chọn các cột tương tự từ old_books.
  • Chúng ta chỉ chọn sách có thể loại là 'Fantasy'.

Truy vấn này sẽ sao chép tất cả các sách fantasy từ old_books sang new_arrivals. Đó như thể bạn đang teleport tất cả các sách fantasy của bạn đến một kệ sách mới!

Chèn các Hàng với LIMIT

Đôi khi, chúng ta không muốn di chuyển tất cả cùng một lúc. Có thể chúng ta đang thử nghiệm, hoặc chúng ta chỉ có không gian cho một số ít sách. Đó là khi LIMIT rất hữu ích.

INSERT INTO bestsellers (title, author, sales)
SELECT title, author, sales
FROM all_books
WHERE sales > 1000000
ORDER BY sales DESC
LIMIT 10;

Truy vấn này:

  • Chèn vào bảng bestsellers.
  • Chọn từ all_books những sách có doanh số trên một triệu.
  • Sắp xếp theo doanh số giảm dần.
  • Chỉ lấy 10 hàng đầu.

Đó như thể bạn đang chọn những cuốn sách tốt nhất - chỉ những cuốn sách bán chạy nhất mới được vào kệ sách đặc biệt của bạn!

Chèn Tất cả Các Cột từ một Bảng sang Bảng Khác

Đôi khi, chúng ta muốn sao chép mọi thứ - mọi chi tiết. Chúng ta cũng có thể làm điều đó! Giả sử chúng ta đang lưu trữ toàn bộ dữ liệu doanh số bán hàng của năm 2022:

INSERT INTO sales_archive_2022
SELECT *
FROM current_sales
WHERE YEAR(sale_date) = 2022;

Đây là những gì đang xảy ra:

  • Chúng ta không chỉ định các cột trong phần INSERT INTO.
  • Chúng ta sử dụng SELECT * để chọn tất cả các cột.
  • Chúng ta lọc để chỉ bao gồm doanh số bán hàng của năm 2022.

Đó như thể bạn đang chụp một bức ảnh của toàn bộ kệ sách năm 2022 của bạn và tái tạo nó chính xác tại một địa điểm mới.

Chèn vào Chọn Sử dụng Chương Trình Khách

Bây giờ, hãy nói về cách chúng ta có thể làm điều này ngoài MySQL, sử dụng một chương trình khách. Tôi sẽ cho bạn một ví dụ sử dụng Python, một ngôn ngữ phổ biến cho các hoạt động cơ sở dữ liệu.

import mysql.connector

# Kết nối đến cơ sở dữ liệu
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)

mycursor = mydb.cursor()

# Truy vấn Chèn vào Chọn của chúng ta
sql = """
INSERT INTO new_arrivals (title, author, genre)
SELECT title, author, genre
FROM old_books
WHERE genre = 'Fantasy'
"""

# Thực thi truy vấn
mycursor.execute(sql)

# Ghi nhận thay đổi
mydb.commit()

print(mycursor.rowcount, "records inserted.")

Đoạn mã này:

  1. Kết nối đến cơ sở dữ liệu MySQL của bạn.
  2. Tạo một đối tượng con trỏ để tương tác với cơ sở dữ liệu.
  3. Định nghĩa truy vấn Chèn vào Chọn của chúng ta.
  4. Thực thi truy vấn.
  5. Ghi nhận thay đổi (rất quan trọng!).
  6. In ra số lượng bản ghi đã chèn.

Đó như thể bạn có một trợ lý robot có thể sắp xếp kệ sách cho bạn!

Kết Luận

Và đây bạn đã có, các bạn! Chúng ta đã cùng nhau hành trình qua vùng đất "Chèn vào Chọn" trong MySQL. Từ khái niệm cơ bản đến các ứng dụng thực tế, chúng ta đã bao gồm tất cả. Nhớ rằng, thực hành là cách tốt nhất để thành thạo, vì vậy đừng ngại thử nghiệm với các truy vấn này.

Dưới đây là bảng tham khảo nhanh các phương pháp chúng ta đã thảo luận:

Phương pháp Mô tả Ví dụ
Chèn vào Chọn Cơ bản Sao chép dữ liệu từ một bảng sang bảng khác INSERT INTO target SELECT * FROM source
Chèn Các Cột Cụ Thể Sao chép chỉ một số cột INSERT INTO target (col1, col2) SELECT col1, col2 FROM source
Chèn với Điều Kiện Sao chép dữ liệu thỏa mãn điều kiện cụ thể INSERT INTO target SELECT * FROM source WHERE condition
Chèn với LIMIT Sao chép một số lượng hàng有限的 INSERT INTO target SELECT * FROM source LIMIT 10
Chèn Tất cả Các Cột Sao chép tất cả các cột mà không cần chỉ định INSERT INTO target SELECT * FROM source
Sử dụng Chương Trình Khách Thực thi Chèn vào Chọn từ ngoài MySQL Xem ví dụ Python ở trên

Chúc các bạn thành công trong việc truy vấn, và mong rằng cơ sở dữ liệu của bạn luôn được tổ chức và hiệu quả!

Credits: Image by storyset