MySQL-Truy vấn

Truy vấn

F.

Câu lệnh SELECT trong MySQL được sử dụng để truy vấn dữ liệu từ một hoặc nhiều bảng trong cơ sở dữ liệu. Đây là một trong những lệnh cơ bản và quan trọng nhất trong SQL.

Cú pháp cơ bản

SELECT cot1, cot2, ...
FROM ten_bang
WHERE dieu_kien;

Ví dụ đơn giản

Giả sử bạn có một bảng tên là NhanVien với các cột MaNhanVien, HoTen, ChucVu, và Luong. Để lấy tất cả các cột từ bảng NhanVien, bạn có thể sử dụng:

SELECT * FROM NhanVien;

Chọn các cột cụ thể

Nếu bạn chỉ muốn lấy một số cột cụ thể, bạn có thể liệt kê tên các cột:

SELECT HoTen, ChucVu FROM NhanVien;

Sử dụng WHERE để lọc kết quả

Câu lệnh WHERE được sử dụng để lọc các hàng dựa trên điều kiện nào đó:

SELECT * FROM NhanVien
WHERE ChucVu = 'IT';

Ví dụ này sẽ trả về tất cả các nhân viên có chức vụ là “IT”.

Sắp xếp kết quả với ORDER BY

Để sắp xếp kết quả theo thứ tự tăng dần (ASC) hoặc giảm dần (DESC), bạn sử dụng ORDER BY:

SELECT * FROM NhanVien
ORDER BY Luong DESC;

Ví dụ này sắp xếp nhân viên theo lương từ cao xuống thấp.

Giới hạn số lượng kết quả với LIMIT

Bạn có thể giới hạn số lượng hàng trả về bằng cách sử dụng LIMIT:

SELECT * FROM NhanVien
ORDER BY Luong DESC
LIMIT 5;

Ví dụ này sẽ trả về 5 nhân viên có lương cao nhất.

Sử dụng JOIN để kết hợp nhiều bảng

Để kết hợp dữ liệu từ nhiều bảng, bạn có thể sử dụng JOIN. Có nhiều loại JOIN, bao gồm INNER JOIN, LEFT JOIN, RIGHT JOIN, và FULL JOIN.

SELECT NhanVien.HoTen, PhongBan.TenPhong
FROM NhanVien
INNER JOIN PhongBan ON NhanVien.MaPhongBan = PhongBan.MaPhongBan;

Ví dụ này kết hợp dữ liệu từ bảng NhanVienPhongBan để lấy tên nhân viên và tên phòng ban tương ứng.

Sử dụng GROUP BYHAVING

Câu lệnh GROUP BY được sử dụng để nhóm các hàng có giá trị giống nhau và thực hiện các phép tính như SUM, COUNT, AVG:

SELECT ChucVu, COUNT(*) AS SoNhanVien
FROM NhanVien
GROUP BY ChucVu;

Ví dụ này đếm số nhân viên theo từng chức vụ.

Câu lệnh HAVING được sử dụng để lọc các nhóm sau khi đã sử dụng GROUP BY:

SELECT ChucVu, COUNT(*) AS SoNhanVien
FROM NhanVien
GROUP BY ChucVu
HAVING COUNT(*) > 10;

Ví dụ này chỉ hiển thị những chức vụ có hơn 10 nhân viên.

Sử dụng DISTINCT để loại bỏ các bản sao

Nếu bạn muốn loại bỏ các hàng có giá trị trùng lặp, sử dụng DISTINCT:

SELECT DISTINCT ChucVu FROM NhanVien;

Ví dụ này sẽ trả về danh sách các chức vụ khác nhau mà không có giá trị trùng lặp.

Kết hợp nhiều điều kiện với AND, OR, NOT

Bạn có thể kết hợp nhiều điều kiện bằng các toán tử logic:

SELECT * FROM NhanVien
WHERE ChucVu = 'IT' AND Luong > 50000;

Ví dụ này sẽ trả về những nhân viên có chức vụ là “IT” và lương lớn hơn 50,000.

Tóm tắt

Câu lệnh SELECT trong MySQL rất mạnh mẽ và linh hoạt, cho phép bạn truy vấn, lọc, sắp xếp, và nhóm dữ liệu theo nhiều cách khác nhau. Bạn có thể kết hợp các mệnh đề WHERE, ORDER BY, GROUP BY, HAVING, JOIN, và LIMIT để tạo ra các truy vấn phức tạp phù hợp với nhu cầu của mình.

Câu lệnh INSERT trong MySQL được sử dụng để thêm dữ liệu vào một bảng. Dưới đây là các cách sử dụng câu lệnh INSERT:

1. Cú pháp cơ bản

Thêm dữ liệu vào tất cả các cột

INSERT INTO ten_bang (cot1, cot2, cot3, ...)
VALUES (gia_tri1, gia_tri2, gia_tri3, ...);

Ví dụ: Thêm một nhân viên vào bảng NhanVien với các cột HoTen, ChucVu, và Luong:

INSERT INTO NhanVien (HoTen, ChucVu, Luong)
VALUES ('Nguyen Van A', 'Quản lý', 60000);

2. Thêm nhiều bản ghi cùng lúc

Bạn có thể thêm nhiều bản ghi vào một bảng trong một câu lệnh INSERT:

INSERT INTO ten_bang (cot1, cot2, cot3)
VALUES (gia_tri1a, gia_tri2a, gia_tri3a),
       (gia_tri1b, gia_tri2b, gia_tri3b),
       (gia_tri1c, gia_tri2c, gia_tri3c);

Ví dụ: Thêm nhiều nhân viên vào bảng NhanVien:

INSERT INTO NhanVien (HoTen, ChucVu, Luong)
VALUES ('Nguyen Van B', 'Nhân viên', 50000),
       ('Tran Thi C', 'Kế toán', 55000),
       ('Le Van D', 'IT', 65000);

3. Thêm dữ liệu từ một bảng khác

Bạn có thể thêm dữ liệu vào bảng từ một bảng khác bằng cách sử dụng câu lệnh INSERT INTO ... SELECT:

INSERT INTO ten_bang_moi (cot1, cot2)
SELECT cot1, cot2
FROM ten_bang_cu
WHERE dieu_kien;

Ví dụ: Thêm nhân viên từ bảng NhanVienCu vào bảng NhanVienMoi với điều kiện cụ thể:

INSERT INTO NhanVienMoi (HoTen, ChucVu, Luong)
SELECT HoTen, ChucVu, Luong
FROM NhanVienCu
WHERE Luong > 50000;

4. Thêm dữ liệu vào một số cột và để các cột khác sử dụng giá trị mặc định

Nếu bạn không chỉ định một số cột, MySQL sẽ sử dụng giá trị mặc định (nếu có) hoặc NULL (nếu cột đó cho phép NULL).

INSERT INTO ten_bang (cot1, cot2)
VALUES (gia_tri1, gia_tri2);

Ví dụ: Thêm một nhân viên chỉ định HoTenLuong, ChucVu sẽ sử dụng giá trị mặc định (giả sử ChucVu có giá trị mặc định là Nhân viên):

INSERT INTO NhanVien (HoTen, Luong)
VALUES ('Pham Thi E', 55000);

5. Xử lý các lỗi

Nếu bạn muốn bỏ qua các lỗi khi chèn dữ liệu trùng lặp hoặc lỗi khác, bạn có thể sử dụng INSERT IGNORE:

INSERT IGNORE INTO ten_bang (cot1, cot2)
VALUES (gia_tri1, gia_tri2);

Nếu có dữ liệu trùng lặp hoặc lỗi khác, MySQL sẽ bỏ qua dòng đó mà không gây lỗi.

6. Thay thế dữ liệu

Nếu bạn muốn thay thế dữ liệu nếu bản ghi đã tồn tại, bạn có thể sử dụng REPLACE INTO. Lệnh này hoạt động tương tự như INSERT, nhưng nếu bản ghi với khóa chính (primary key) đã tồn tại, nó sẽ xóa bản ghi cũ và chèn bản ghi mới:

REPLACE INTO ten_bang (cot1, cot2)
VALUES (gia_tri1, gia_tri2);

Tóm tắt

  • INSERT INTO được sử dụng để thêm dữ liệu vào bảng.
  • Bạn có thể thêm một hoặc nhiều bản ghi cùng lúc.
  • Bạn có thể thêm dữ liệu từ bảng khác hoặc chỉ định giá trị cho một số cột.
  • Sử dụng INSERT IGNORE để bỏ qua lỗi hoặc REPLACE INTO để thay thế bản ghi cũ nếu cần.

Các cách sử dụng câu lệnh INSERT giúp bạn linh hoạt trong việc quản lý dữ liệu trong cơ sở dữ liệu MySQL.

Câu lệnh UPDATE trong SQL được sử dụng để sửa đổi dữ liệu đã tồn tại trong một bảng. Bạn có thể thay đổi một hoặc nhiều cột trong một hoặc nhiều hàng dựa trên điều kiện cụ thể.

Cú pháp cơ bản

UPDATE ten_bang
SET cot1 = gia_tri1, cot2 = gia_tri2, ...
WHERE dieu_kien;

Ví dụ Cơ Bản

Giả sử bạn có bảng NhanVien với các cột HoTen, ChucVu, và Luong. Bạn muốn cập nhật lương của nhân viên có tên là ‘Nguyen Van A’:

UPDATE NhanVien
SET Luong = 65000
WHERE HoTen = 'Nguyen Van A';

Cập nhật nhiều cột

Bạn có thể cập nhật nhiều cột trong cùng một câu lệnh:

UPDATE NhanVien
SET Luong = 70000, ChucVu = 'Trưởng phòng'
WHERE HoTen = 'Nguyen Van A';

Cập nhật nhiều hàng

Nếu điều kiện WHERE phù hợp với nhiều hàng, tất cả các hàng đó sẽ được cập nhật:

UPDATE NhanVien
SET Luong = Luong * 1.1
WHERE ChucVu = 'Nhân viên';

Ví dụ này sẽ tăng lương của tất cả nhân viên có chức vụ là ‘Nhân viên’ lên 10%.

Cập nhật dựa trên giá trị của cột khác

Bạn có thể cập nhật giá trị của cột dựa trên giá trị của các cột khác:

UPDATE NhanVien
SET Luong = Luong * 1.05
WHERE Luong < 50000;

Ví dụ này sẽ tăng lương của những nhân viên có lương nhỏ hơn 50,000 lên 5%.

Cập nhật bằng giá trị từ một bảng khác

Bạn có thể cập nhật bảng dựa trên giá trị từ một bảng khác bằng cách sử dụng câu lệnh UPDATE kết hợp với JOIN:

UPDATE NhanVien n
JOIN PhongBan p ON n.MaPhongBan = p.MaPhongBan
SET n.Luong = n.Luong + 1000
WHERE p.TenPhong = 'IT';

Ví dụ này sẽ tăng lương của các nhân viên làm việc ở phòng ‘IT’ lên 1,000.

Sử dụng ORDER BY với UPDATE

Trong SQL, bạn không thể sử dụng ORDER BY trực tiếp với câu lệnh UPDATE. Tuy nhiên, bạn có thể sử dụng ORDER BY để xác định cách sắp xếp các bản ghi trước khi cập nhật nếu kết hợp với LIMIT trong một số hệ quản trị cơ sở dữ liệu khác như MySQL.

UPDATE NhanVien
SET Luong = Luong + 500
WHERE HoTen IN (
    SELECT HoTen
    FROM (
        SELECT HoTen
        FROM NhanVien
        ORDER BY Luong DESC
        LIMIT 3
    ) AS TempTable
);

Ví dụ này sẽ tăng lương của 3 nhân viên có lương cao nhất lên 500.

Lưu ý

  • Đảm bảo điều kiện WHERE: Nếu không có điều kiện WHERE, tất cả các hàng trong bảng sẽ bị cập nhật, điều này có thể gây ra lỗi không mong muốn.
  • Sao lưu dữ liệu: Trước khi thực hiện cập nhật quan trọng, nên sao lưu dữ liệu để tránh mất mát dữ liệu.
  • Thực hiện các thay đổi nhỏ trước: Nên kiểm tra các thay đổi bằng cách sử dụng câu lệnh SELECT với cùng điều kiện WHERE để xác nhận các hàng sẽ bị cập nhật trước khi thực hiện câu lệnh UPDATE.

Tóm tắt

  • UPDATE được sử dụng để sửa đổi dữ liệu trong bảng.
  • Bạn có thể cập nhật một hoặc nhiều cột và nhiều hàng cùng lúc.
  • Đảm bảo sử dụng điều kiện WHERE để tránh cập nhật không mong muốn.
  • Sử dụng JOIN để cập nhật dựa trên dữ liệu từ các bảng khác nếu cần.

Câu lệnh DELETE trong SQL được sử dụng để xóa dữ liệu khỏi một bảng. Bạn có thể xóa một hoặc nhiều hàng dựa trên điều kiện cụ thể.

Cú pháp cơ bản

DELETE FROM ten_bang
WHERE dieu_kien;

Ví dụ Cơ Bản

Giả sử bạn có một bảng NhanVien với các cột HoTen, ChucVu, và Luong. Để xóa nhân viên có tên là ‘Nguyen Van A’:

DELETE FROM NhanVien
WHERE HoTen = 'Nguyen Van A';

Xóa nhiều hàng

Nếu điều kiện WHERE phù hợp với nhiều hàng, tất cả các hàng đó sẽ được xóa:

DELETE FROM NhanVien
WHERE ChucVu = 'Nhân viên';

Ví dụ này sẽ xóa tất cả nhân viên có chức vụ là ‘Nhân viên’.

Xóa tất cả dữ liệu trong bảng

Để xóa tất cả dữ liệu trong bảng mà giữ lại cấu trúc bảng, bạn có thể sử dụng câu lệnh DELETE mà không có điều kiện WHERE:

DELETE FROM NhanVien;

Lưu ý: Câu lệnh này sẽ xóa tất cả các hàng trong bảng NhanVien, nhưng cấu trúc bảng và các chỉ mục, khóa ngoại, v.v., sẽ vẫn được giữ nguyên.

Xóa dữ liệu bằng điều kiện phức tạp

Bạn có thể sử dụng các điều kiện phức tạp với toán tử logic như AND, OR, và NOT:

DELETE FROM NhanVien
WHERE (ChucVu = 'Nhân viên' AND Luong < 30000)
   OR ChucVu = 'Thực tập sinh';

Ví dụ này sẽ xóa những nhân viên có chức vụ là ‘Nhân viên’ và lương dưới 30,000, cũng như những nhân viên có chức vụ là ‘Thực tập sinh’.

Xóa dữ liệu từ nhiều bảng

Để xóa dữ liệu từ nhiều bảng, bạn có thể cần phải thực hiện nhiều câu lệnh DELETE, đặc biệt là khi các bảng có quan hệ khóa ngoại:

DELETE FROM ChiTietDonHang
WHERE MaDonHang IN (
    SELECT MaDonHang
    FROM DonHang
    WHERE NgayDat < '2024-01-01'
);

DELETE FROM DonHang
WHERE NgayDat < '2024-01-01';

Ví dụ này đầu tiên xóa các chi tiết đơn hàng liên quan đến các đơn hàng được đặt trước ngày 01/01/2024, sau đó xóa các đơn hàng đó.

Sử dụng LIMIT với DELETE

Bạn có thể sử dụng LIMIT để xóa một số lượng hàng cụ thể, nhưng không phải tất cả các hệ quản trị cơ sở dữ liệu hỗ trợ tính năng này với câu lệnh DELETE. Trong MySQL, bạn có thể sử dụng LIMIT để giới hạn số lượng hàng bị xóa:

DELETE FROM NhanVien
ORDER BY Luong DESC
LIMIT 5;

Ví dụ này sẽ xóa 5 nhân viên có lương cao nhất.

Lưu ý Quan Trọng

  • Đảm bảo điều kiện WHERE: Nếu không có điều kiện WHERE, tất cả các hàng trong bảng sẽ bị xóa, điều này có thể gây ra mất mát dữ liệu nghiêm trọng.
  • Sao lưu dữ liệu: Trước khi thực hiện xóa dữ liệu quan trọng, hãy sao lưu dữ liệu để tránh mất mát không mong muốn.
  • Thực hiện các thay đổi nhỏ trước: Nên kiểm tra các thay đổi bằng cách sử dụng câu lệnh SELECT với cùng điều kiện WHERE để xác nhận các hàng sẽ bị xóa trước khi thực hiện câu lệnh DELETE.

Tóm tắt

  • DELETE được sử dụng để xóa dữ liệu khỏi bảng.
  • Bạn có thể xóa một hoặc nhiều hàng dựa trên điều kiện cụ thể.
  • Sử dụng điều kiện WHERE để tránh xóa toàn bộ dữ liệu không mong muốn.
  • Sử dụng LIMIT để xóa một số lượng hàng cụ thể nếu cần.
  • Đảm bảo sao lưu dữ liệu trước khi thực hiện các thao tác xóa quan trọng.