24/05/2018, 22:15

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?

0