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 NhanVien
và PhongBan
để lấy tên nhân viên và tên phòng ban tương ứng.
Sử dụng GROUP BY
và HAVING
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 HoTen
và Luong
, 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ặcREPLACE 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ệnWHERE
, 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ệnWHERE
để xác nhận các hàng sẽ bị cập nhật trước khi thực hiện câu lệnhUPDATE
.
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ệnWHERE
, 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ệnWHERE
để xác nhận các hàng sẽ bị xóa trước khi thực hiện câu lệnhDELETE
.
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.