Một số dạng truy vấn khác và câu lệnh cập nhật dữ liệu
Truy vấn con ở mệnh đề From Kết quả trả về của một câu truy vấn phụ là một bảng Bảng trung gian trong quá trình truy vấnKhông có lưu trữ thật sựCú pháp SELECT <danh sách các cột> FROM R1, R2, ( <truy vấn ...
Truy vấn con ở mệnh đề From
Kết quả trả về của một câu truy vấn phụ là một bảngBảng trung gian trong quá trình truy vấnKhông có lưu trữ thật sựCú phápSELECT <danh sách các cột>FROM R1, R2, (<truy vấn con>) AS tên_bảngWHERE <điều kiện>
Ví dụ: trong cơ sở dữ liệu quản lý vật tư, chúng ta muốn hiển thị tên những nhân viên đã xuất vật tư trong ngày ‘12/08/2008’, câu lệnh truy vấn sau sẽ thực hiện yêu cầu trên.
SELECT nv.ten_nv FROM nhan_vien As nv, (SELECT manv_xuat FROM phieu_xuat WHERE ngay_xuat = ‘08/12/2008’) As Temp
WHERE nv.ma_nv = Temp.manv_xuat
Điều kiện kết nối ở mệnh đề From
Kết nối bằng
SELECT <danh sách các cột>FROM R1 [INNER] JOIN R2 ON <biểu thức>WHERE <điều kiện>
INNER JOIN : trả về tất cả các hàng từ hai bảng khi điều kiện được so trùng. Nếu các hàng trong bảng R1 không so trùng trong bảng R2, hàng đó sẽ không được chọn ra.
Kết nối ngoài
SELECT <danh sách các cột>FROM R1 LEFT|RIGHT [OUTER] JOIN R2 ON <biểu thức>WHERE <điều kiện>
LEFT JOIN: Trả về tất cả các hàng từ bảng thứ nhất R1, cho dù nó không được so trùng trong bảng thứ hai R2. Nếu các hàng trong bảng R1không so trùng trong bảngR2, những hàng này cũng được liệt kê (thay thế bởi giá trị NULL).
RIGHTJOIN:Trả về tất cả các hàng từ bảng thứ nhất R2, cho dù nó không được so trùng trong bảng thứ hai R1. Nếu các hàng trong bảng R2không so trùng trong bảngR1, những hàng này cũng được liệt kê (thay thế bởi giá trị NULL).
Câu lệnh thêm dữ liệu (insert)
Câu lệnh INSERT INTO được dùng để chèn dòng mới vào bảng.
Cú pháp:
INSERT INTO tên_bảng VALUES (giá_trị_1, giá_trị_2,....)
Bạn cũng có thể chỉ rõ các cột/trường nào cần chèn dữ liệu:
INSERT INTO tên_bảng (cột_1, cột_2,...) VALUES (giá_trị_1, giá_trị_2,....)
Chèn 1 dòng mới
Ta có bảng Persons như sau:
LastName | FirstName | Address | City |
Pettersen | Kari | Storgt 20 | Stavanger |
Câu lệnh SQL sau:
INSERT INTO Persons VALUES ('Hetland', 'Camilla', 'Hagabakka 24', 'Sandnes')
sẽ tạo ra kết quả trong bảng Persons như sau:
LastName | FirstName | Address | City |
Pettersen | Kari | Storgt 20 | Stavanger |
Hetland | Camilla | Hagabakka 24 | Stavanger |
Chèn dữ liệu vào các cột/trường cụ thể
Với bảng Persons như trên, câu lệnh SQL sau:
INSERT INTO Persons (LastName, Address)VALUES ('Rasmussen', 'Storgt 67')
Sẽ tạo ra kết quả:
LastName | FirstName | Address | City |
Pettersen | Kari | Storgt 20 | Stavanger |
Hetland | Camilla | Hagabakka 24 | Stavanger |
Rasmussen | Storgt 67 |
Câu lệnh sử đổi dữ liệu (update)
Câu lệnh UPDATE được sử dụng để cập nhật/sửa đổi dữ liệu đã có trong bảng.
Cú pháp:
UPDATE tên_bảngSET tên_cột = giá_trị_mớiWHERE tên_cột = giá_trị
Ví dụ: bảng Person của ta như sau:
LastName | FirstName | Address | City |
Nilsen | Fred | Kirkegt 56 | Stavanger |
Rasmussen | Storgt 67 |
Cập nhật 1 cột trên 1 dòng
Giả sử ta muốn bổ xung thêm phần tên cho người có họ là Rasmussen:
UPDATE Person SET FirstName = 'Nina'WHERE LastName = 'Rasmussen'
Ta sẽ có kết quả như sau:
LastName | FirstName | Address | City |
Nilsen | Fred | Kirkegt 56 | Stavanger |
Rasmussen | Nina | Storgt 67 |
Cập nhật nhiều cột trên 1 dòng
Bây giờ ta lại muốn đổi tên và địa chỉ:
UPDATE PersonSET Address = 'Stien 12', City = 'Stavanger'WHERE LastName = 'Rasmussen'
Kết quả sẽ là:
LastName | FirstName | Address | City |
Nilsen | Fred | Kirkegt 56 | Stavanger |
Rasmussen | Nina | Stien 12 | Stavanger |
Câu lệnh xóa dữ liệu (delete)
Câu lệnh DELETE được dùng để xoá các dòng ra khỏi bảng.
Cú pháp:
DELETE FROM tên_bảngWHERE tên_cột = giá_trị
Ví dụ: Bảng Person của ta như sau:
LastName | FirstName | Address | City |
Nilsen | Fred | Kirkegt 56 | Stavanger |
Rasmussen | Nina | Stien 12 | Stavanger |
Xoá 1 dòng:
Ta xoá người có tên là Nina Rasmussen:
DELETE FROM Person WHERE LastName = 'Rasmussen'
Kết quả sau khi xoá:
LastName | FirstName | Address | City |
Nilsen | Fred | Kirkegt 56 | Stavanger |
Xoá tất cả các dòng:
Đôi khi ta muốn xoá tất cả dữ liệu trong bảng nhưng vẫn giữ lại bảng cùng với cấu trúc và tất cả các thuộc tính của bảng, ta có thể dùng câu lệnh:
DELETE FROM table_name
1. Hãy viết câu lệnh tạo bảng và chèn dữ liệu cho bảng he_dtao, nganh_hoc, lop_hoc, sinh_vien, mon_hoc, bang_diem với các dữ liệu dưới đây
He_dtao | Ma_dtao | Ten_dtao |
1 | Hệ đại học | |
6 | Hệ cao đẳng | |
A | Hệ trung cấp | |
Nganh_hoc | Ma_nganh | Ten_nganh |
01 | Công nghệ Thông tin | |
02 | Điện – điện tử | |
Lop_hoc | Ma_lop | Ten_lop | Nkhoa_tu | Nkhoa_den | Ma_dtao | Ma_nganh |
101031 | TK1 | 2003 | 2007 | 1 | 01 | |
601031 | TK33 | 2003 | 2006 | 6 | Null | |
701041 | TK34L | 2004 | 2006 | 7 | 01 | |
E01061 | TK4LT | 2006 | 2009 | Null | 01 | |
Sinh_vien | Ma_sv | Ten_sv | gtinh | namsinh | dchi | Ma_lop |
101031001 | Pham Thi Hang | Nu | 1986 | Hung yen | 101031 | |
101031002 | Pham Lan Anh | Nu | 1985 | Thai binh | 101031 | |
101031003 | Nguyen Van Nam | Nam | 1986 | Hung yen | 101031 | |
101031004 | Bui Viet Nam | Nam | 1985 | Hai duong | 101031 | |
Mon_hoc | Ma_mon | Ten_mon | SoHT | |||
01 | Cau truc du lieu | 4 | ||||
02 | Co so du lieu | 3 | ||||
03 | Lap trinh HDT | 5 | ||||
04 | Project1 | 5 | ||||
Bang_diem | Ma_mon | Ma_sv | Dieml1 | Dieml2 | ||
01 | 101031001 | 8 | ||||
02 | 101031001 | 6 | ||||
03 | 101031001 | 5 | ||||
04 | 101031001 | 6 | ||||
01 | 101031002 | 3 | ||||
02 | 101031002 | 7 | ||||
03 | 101031002 | 8 | ||||
04 | 101031002 | 4 | ||||
01 | 101031003 | 5 | ||||
02 | 101031003 | 2 | ||||
03 | 101031003 | 6 | ||||
04 | 101031003 | 4 | ||||
01 | 101031004 | 7 | ||||
02 | 101031004 | 8 | ||||
03 | 101031004 | 9 | ||||
04 | 101031004 | 6 |
2. Hiển thị thông tin bao gồm Mã lớp, tên lớp, tên nghành và tên hệ đào tạo của tất cả các lớp ( sử dụng phép kết nối bằng – inner join và kết nối ngoài – outer join sau đó so sánh kết quả của hai cách này)
3. Hiển thị thông tin bao gồm: Ma_sv, ten_sv, gtinh, namsinh, dieml1 ứng với môn có tên là Cau truc du lieu của tất cả sinh viên đã học môn đó.
4. Hiển thị thông tin bao gồm: Ma_sv, ten_sv, gtinh, namsinh, điểm trung bình lần 1 của tất cả sinh viên
5. Hiển thị thông tin bao gồm: Ma_sv, ten_sv, gtinh, namsinh, điểm trung bình lần 1 của những sinh viên có điểm trung bình lần 1 lớn hơn 7.
6. Hiển thị thông tin bao gồm: Ma_sv, ten_sv, gtinh, namsinh, ten_lop của những sinh viên chưa phải thi lại môn nào?
7(*). Hiển thị thông tin bao gồm: Ma_sv, ten_sv, gtinh, namsinh, điểm trung bình lần 1 của những sinh viên có điểm trung bình lần 1cao nhất?