Fill ra 1 cột max điểm trung bình sql năm 2024

Một phép nối bằng(equi-join) là một phép nối trong đó giá trị của các cột được sử dụng để nối được so sánh với nhau dựa trên tiêu chuẩn bằng và tất cả các cột trong các bảng tham gia nối đều được đưa ra trong kết quả.

Câu lệnh dưới đây thực hiện phép nối bằng giữa hai bảng LOP và KHOA

SELECT * FROM lop,khoa WHERE lop.makhoa=khoa.makhoa

Trong kết quả của câu lệnh trên, cột makhoa (mã khoa) xuất hiện hai lần trong kết quả phép nối (cột makhoa của bảng khoa và cột makhoa của bảng lop) và như vậy là không cần thiết. Ta có thể loại bỏ bớt đi những cột trùng tên trong kết quả truy vấn bằng cách chỉ định danh sách cột cần được hiển thị trong danh sách chọn của câu lệnh.

Một dạng đặc biệt của phép nối bằng được sử dụng nhiều là phép nối tự nhiên (natural-join). Trong phép nối tự nhiên, điều kiện nối giữa hai bảng chính là điều kiện bằng giữa khoá ngoài và khoá chính của hai bảng. Và trong danh sách chọn của câu lệnh chỉ giữ lại một cột trong hai cột tham gia vào điều kiện của phép nối

Để thực hiện phép nối tự nhiên, câu lệnh trong ví dụ 2.25 được viết lại như sau

SELECT malop,tenlop,khoa,hedaotao,namnhaphoc, siso,lop.makhoa,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa

hoặc viết dưới dạng ngắn gọn hơn:

SELECT lop.*,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa

Phép nối với các điều kiện bổ sung

Trong các câu lệnh nối, ngoài điều kiện của phép nối được chỉ định trong mệnh đề WHERE còn có thể chỉ định các điều kiện tìm kiếm dữ liệu khác (điều kiện chọn) . Thông thường, các điều kiện này được kết hợp với điều kiện nối thông qua toán tử AND.

Câu lệnh dưới đây hiển thị họ tên và ngày sinh của các sinh viên Khoa Công nghệ Thông tin

SELECT hodem,ten,ngaysinh FROM sinhvien,lop,khoa WHERE tenkhoa='Khoa Công nghệ Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa

Phép tự nối và các bí danh

Phép tự nối là phép nối mà trong đó điều kiện nối được chỉ định liên quan đến các cột của cùng một bảng. Trong trường hợp này, sẽ có sự xuất hiện tên của cùng một bảng hiều lần trong mệnh đề FROM và do đó các bảng cần phải được đặt bí danh.

Để biết được họ tên và ngày sinh của các sinh viên có cùng ngày sinh với sinh viên Trần Thị Kim Anh, ta phải thực hiện phép tự nối ngay trên chính bảng sinhvien.

Trong câu lệnh nối, bảng sinhvien xuất hiện trong mệnh đề FROM với bí danh là a và b . Bảng sinhvien với bí danh là a sử dụng để chọn ra sinh viên có họ tên là Trần Thị Kim Anh và bảng sinhvien với bí danh là b sử dụng để xác định các sinh viên trùng ngày sinh với sinh viên Trần Thị Kim Anh.

Câu lệnh được viết như sau:

SELECT b.hodem,b.ten,b.ngaysinh FROM sinhvien a, sinhvien b WHERE a.hodem='Trần Thị Kim' AND a.ten='Anh' AND a.ngaysinh=b.ngaysinh AND a.masv<>b.masv

Phép nối không dựa trên tiêu chuẩn bằng

Trong phép nối này, điều kiện để thực hiện phép nối giữa các bảng dữ liệu không phải là điều kiện so sành bằng giữa các cột. Loại phép nối này trong thực tế thường ít được sử dụng.

Phép nối ngoài (outer-join)

Trong các phép nối đã đề cập ở trên, chỉ những dòng có giá trị trong các cột được chỉ định thoả mãn điều kiện kết nối mới được hiển thị trong kết quả truy vấn, và được gọi là phép nối trong (inner join) Theo một nghĩa nào đó, những phép nối này loại bỏ thông tin chứa trong những dòng không thoả mãn điều kiện nối. Tuy nhiên, đôi khi ta cũng cần giữ lại những thông tin này bằng cách cho phép những dòng không thoả mãn điều kiện nối có mặt trong kết quả của phép nối. Để làm điều này, ta có thể sử dụng phép nối ngoài .

SQL cung cấp các loại phép nối ngoài sau đây:

• Phép nối ngoài trái(ký hiệu: *=): Phép nối này hiển thị trong kết quả truy vấn tất cả các dòng dữ liệu của bảng nằm bên trái trong điều kiện nối cho dù những dòng này không thoả mãn điều kiện của phép nối

• Phép nối ngoài phải>(ký hiệu: =*): Phép nối này hiển thị trong kết quả truy vấn tất cả các dòng dữ liệu của bảng nằm bên phải trong điều kiện nối cho

dù những dòng này không thoả điều kiện của phép nối.

Giả sử ta có hai bảng DONVI và NHANVIEN như sau:

Fill ra 1 cột max điểm trung bình sql năm 2024

Câu lệnh:

SELECT * FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv

có kết quả là:

Fill ra 1 cột max điểm trung bình sql năm 2024

Nếu thực hiện phép nối ngoài trái giữa bảng NHANVIEN và bảng DONVI:

SELECT FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv

kết quả của câu lệnh sẽ là:

Fill ra 1 cột max điểm trung bình sql năm 2024

Và kết quả của phép nối ngoài phải:

select * from nhanvien,donvi where nhanvien.madv=*donvi.madv

như sau:

Fill ra 1 cột max điểm trung bình sql năm 2024

Phép nối và các giá trị NULL

Nếu trong các cột của các bảng tham gia vào điều kiện của phép nối có các giá trị NULL thì các giá trị NULL được xem như là không bằng nhau.

Giả sử ta có hai bảng TABLE1 và TABLE2 như sau:

Câu lệnh:

SELECT FROM table1, table2 WHERE A = C

Có kết quả là:

A B C D 1 b1 NULL NULL NULL b2 NULL NULL 4 b3 4 d2

Sử dụng phép nối trong SQL2

Ở phần trước đã đề cập đến phương pháp sử dụng phép nối trong và phép nối ngoài trong truy vấn SQL. Như đã trình bày, điều kiện của phép nối trong câu lệnh được chỉ định trong mệnh đề WHERE thông qua các biểu thức so sánh giữa các bảng tham gia truy vấn.

Chuẩn SQL2 (SQL-92) đưa ra một cách khác để biểu diễn cho phép nối, trong cách biểu diễn này, điều kiện của phép nối không được chỉ định trong mệnh đề WHERE mà được chỉ định ngay trong mệnh đề FROM của câu lệnh. Cách sử dụng phép nối này cho phép ta biểu diễn phép nối cũng như điều kiện nối được rõ ràng, đặc biệt là trong trường hợp phép nối được thực hiện trên ba bảng trở lên.

Phép nối trong

Điều kiện để thực hiện phép nối trong được chỉ định trong mệnh đề FROM theo cú pháp như sau:

`SELECT malop,tenlop,khoa,hedaotao,namnhaphoc, siso,lop.makhoa,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`0

Để hiển thị họ tên và ngày sinh của các sinh viên lớp TinK24, thay vì sử dụng câu lệnh:

`SELECT malop,tenlop,khoa,hedaotao,namnhaphoc, siso,lop.makhoa,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`1

ta có thể sử dụng câu lệnh như sau:

`SELECT malop,tenlop,khoa,hedaotao,namnhaphoc, siso,lop.makhoa,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`2

Phép nối ngoài

SQL2 cung cấp các phép nối ngoài sau đây:

• Phép nối ngoài trái (LEFT OUTER JOIN)

• Phép nối ngoài phải (RIGHT OUTER JOIN)

• Phép nối ngoài đầy đủ (FULL OUTER JOIN)

Cũng tương tự như phép nối trong, điều kiện của phép nối ngoài cũng được chỉ định ngay trong mệnh đề FROM theo cú pháp:

`SELECT malop,tenlop,khoa,hedaotao,namnhaphoc, siso,lop.makhoa,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`3

Giả sử ta có hai bảng dữ liệu như sau:

Bảng DONVI Bảng NHANVIEN

Fill ra 1 cột max điểm trung bình sql năm 2024

Phép nối ngoài trái giữa hai bảng NHANVIEN và DONVI được biểu diễn bởi câu lệnh:

`SELECT malop,tenlop,khoa,hedaotao,namnhaphoc, siso,lop.makhoa,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`4

có kết quả là:

Fill ra 1 cột max điểm trung bình sql năm 2024

Câu lệnh:

`SELECT malop,tenlop,khoa,hedaotao,namnhaphoc, siso,lop.makhoa,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`5

thực hiện phép nối ngoài phải giữa hai bảng NHANVIEN và DONVI, và có kết quả là:

Fill ra 1 cột max điểm trung bình sql năm 2024

Nếu phép nối ngoài trái (tương ứng phải) hiển thị trong kết quả truy vấn cả những dòng dữ liệu không thoả điều kiện nối của bảng bên trái (tương ứng phải) trong phép nối thì phép nối ngoài đầy đủ hiển thị trong kết quả truy vấn cả những dòng dữ liệu không thoả điều kiện nối của cả hai bảng tham gia vào phép nối.

Với hai bảng NHANVIEN và DONVI như ở trên, câu lệnh

`SELECT malop,tenlop,khoa,hedaotao,namnhaphoc, siso,lop.makhoa,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`6

cho kết quả là:

Fill ra 1 cột max điểm trung bình sql năm 2024

Thực hiện phép nối trên nhiều bảng

Một đặc điểm nổi bật của SQL2 là cho phép biểu diễn phép nối trên nhiều bảng dữ liệu một cách rõ ràng. Thứ tự thực hiện phép nối giữa các bảng được xác định theo nghĩa kết quả của phép nối này được sử dụng trong một phép nối khác.

Câu lệnh dưới đây hiển thị họ tên và ngày sinh của các sinh viên thuộc

Khoa Công nghệ Thông Tin

`SELECT malop,tenlop,khoa,hedaotao,namnhaphoc, siso,lop.makhoa,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`7

Trong câu lệnh trên, thứ tự thực hiện phép nối giữa các bảng được chỉ định rõ ràng: phép nối giữa hai bảng sinhvien và lop được thực hiện trước và kết quả của phép nối này lại tiếp tục được nối với bảng khoa.

Thống kê dữ liệu với GROUP BY

Ngoài khả năng thực hiện các yêu cầu truy vấn dữ liệu thông thường (chiếu, chọn, nối,…) như đã đề cập như ở các phần trước, câu lệnh SELECT còn cho phép thực hiện các thao tác truy vấn và tính toán thống kê trên dữ liệu như: cho biết tổng số tiết dạy của mỗi giáo viên,điểm trung bình các môn học của mỗi sinh viên,…

Mệnh đề GROUP BY sử dụng trong câu lệnh SELECT nhằm phân hoạch các dòng dữ liệu trong bảng thành các nhóm dữ liệu, và trên mỗi nhóm dữ liệu thực hiện tính toán các giá trị thống kê như tính tổng, tính giá trị trung bình,...

Các hàm gộp được sử dụng để tính giá trị thống kê cho toàn bảng hoặc trên mỗi nhóm dữ liệu. Chúng có thể được sử dụng như là các cột trong danh sách chọn của câu lệnh SELECT hoặc xuất hiện trong mệnh đề HAVING, nhưng không được phép xuất hiện trong mệnh đề WHERE

SQL cung cấp các hàm gộp dưới đây:

Hàm gộp C h ứ c n ă n g SUM([ALL | DISTINCT] biểu_thức) Tính tổng các giá trị. AVG([ALL | DISTINCT] biểu_thức) Tính trung bình của các giá trị COUNT([ALL | DISTINCT] biểu_thức) Đếm số các giá trị trong biểu thức. COUNT(*) Đếm số các dòng được chọn MAX(biểu_thức) Tính giá trị lớn nhất MIN(biểu_thức) Tính giá trị nhỏ nhất

Trong đó:

• Hàm SUM và AVG chỉ làm việc với các biểu thức số.

• Hàm SUM, AVG, COUNT, MIN và MAX bỏ qua các giá trị NULL khi tính toán.

• Hàm COUNT(*) không bỏ qua các giá trị NULL.

Mặc định, các hàm gộp thực hiện tính toán thống kê trên toàn bộ dữ liệu. Trong trường hợp cần loại bỏ bớt các giá trị trùng nhau (chỉ giữ lại một giá trị), ta chỉ định thêm từ khoá DISTINCT ở trước biểu thức là đối số của hàm.

Thống kê trên toàn bộ dữ liệu

Khi cần tính toán giá trị thống kê trên toàn bộ dữ liệu, ta sử dụng các hàm gộp trong danh sách chọn của câu lệnh SELECT. Trong trường hợp này, trong danh sách chọn không được sử dụng bất kỳ một tên cột hay biểu thức nào ngoài các hàm gộp.

Để thống kê trung bình điểm lần 1 của tất cả các môn học, ta sử dụng câu lệnh như sau:

`SELECT malop,tenlop,khoa,hedaotao,namnhaphoc, siso,lop.makhoa,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`8

còn câu lệnh dưới đây cho biết tuổi lớn nhất, tuổi nhỏ nhất và độ tuổi trung bình của tất cả các sinh viên sinh tại Huế:

`SELECT malop,tenlop,khoa,hedaotao,namnhaphoc, siso,lop.makhoa,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`9

Thống kê dữ liệu trên các nhóm

Trong trường hợp cần thực hiện tính toán các giá trị thống kê trên các nhóm dữ liệu, ta sử dụng mệnh đề GROUP BY để phân hoạch dữ liệu vào trong các nhóm. Các hàm gộp được sử dụng sẽ thực hiện thao tác tính toán trên mỗi nhóm và cho biết giá trị thống kê theo các nhóm dữ liệu.

Câu lệnh dưới đây cho biết sĩ số (số lượng sinh viên) của mỗi lớp

`SELECT lop.*,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`0

và có kết quả là

Fill ra 1 cột max điểm trung bình sql năm 2024

còn câu lệnh:

`SELECT lop.*,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`1

cho biết trung bình điểm thi lần 1 các môn học của các sinh viên

Lưu ý : Trong trường hợp danh sách chọn của câu lệnh SELECT có cả các hàm gộp và những biểu thức không phải là hàm gộp thì những biểu thức này phải có mặt đầy đủ trong mệnh đề GROUP BY, nếu không câu lệnh sẽ không hợp lệ.

Dưới đây là một câu lệnh sai

`SELECT lop.*,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`2

do thiếu trường TENLOP sau mệnh đề GROUP BY.

Chỉ định điều kiện đối với hàm gộp

Mệnh đề HAVING được sử dụng nhằm chỉ định điều kiện đối với các giá trị thống kê được sản sinh từ các hàm gộp tương tự như cách thức mệnh đề WHERE thiết lập các điều kiện cho câu lệnh SELECT. Mệnh đề HAVING thường không thực sự có nghĩa nếu như không sử dụng kết hợp với mệnh đề GROUP BY. Một điểm khác biệt giữa HAVING và WHERE là trong điều kiện của WHERE không được có các hàm gộp trong khi HAVING lại cho phép sử dụng các hàm gộp trong điều kiện của mình.

Để biết trung bình điểm thi lần 1 của các sinh viên có điểm trung bình lớn hơn hoặc bằng 5, ta sử dụng câu lệnh như sau:

`SELECT lop.*,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`3

Thống kê dữ liệu với COMPUTE

Khi thực hiện thao tác thống kê với GROUP BY, kết quả thống kê (được sản sinh bởi hàm gộp) xuất hiện dưới một cột trong kết quả truy vấn. Thông qua dạng truy vấn này, ta biết được giá trị thống kê trên mỗi nhóm dữ liệu nhưng không biết được chi tiết dữ liệu trên mỗi nhóm

Câu lệnh:

`SELECT lop.*,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`4

cho ta biết được số lượng lớp của mỗi khoa với kết quả như sau:

Fill ra 1 cột max điểm trung bình sql năm 2024

nhưng cụ thể mỗi khoa bao gồm những lớp nào thì chúng ta không thể biết được trong kết quả truy vấn trên.

Mệnh đề COMPUTE sử dụng kết hợp với các hàm gộp (dòng) và ORDER BY trong câu lệnh SELECT cũng cho chúng ta các kết quả thống kê (của hàm gộp) trên các nhóm dữ liệu. Điểm khác biệt giữa COMPUTE và GROUP BY là kết quả thống kê xuất hiện dưới dạng một dòng trong kết quả truy vấn và còn cho chúng ta cả chi tiết về dữ liệu trong mỗi nhóm. Như vậy, câu lệnh SELECT với COMPUTE cho chúng ta cả chi tiết dữ liệu và giá trị thống kê trên mỗi nhóm.

Mệnh đề COMPUTE …BY có cú pháp như sau:

`SELECT lop.*,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`5

Trong đó:

• Các hàm gộp có thể sử dụng bao gồm SUM, AVG, MIN, MAX và COUNT.

• danh_sách_cột: là danh sách cột sử dụng để phân nhóm dữ liệu

Câu lệnh dưới đây cho biết danh sách các lớp của mỗi khoa và tổng số các lớp của mỗi khoa:

`SELECT lop.*,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`6

kết quả của câu lệnh như sau:

MAKHOA TENKHOA MALOP TENLOP DHT01 Khoa Toán cơ – Tin học C24101 Toán K24 DHT01 Khoa Toán cơ – Tin học C25101 Toán K25 DHT01 Khoa Toán cơ – Tin học C26101 Toán K26 CNT : 3 MAKHOA TENKHOA MALOP TENLOP DHT02 Khoa Công nghệ thông tin C26102 Tin K26 DHT02 Khoa Công nghệ thông tin C25102 Tin K25 DHT02 Khoa Công nghệ thông tin C24102 Tin K24 CNT : 3 MAKHOA TENKHOA MALOP TENLOP DHT03 Khoa Vật lý C24103 Lý K24 DHT03 Khoa Vật lý C25103 Lý K25 CNT : 2 MAKHOA TENKHOA MALOP TENLOP DHT05 Khoa Sinh học C25301 Sinh K25 DHT05 Khoa Sinh học C24103 Sinh K24 CNT : 2

Khi sử dụng mệnh đề COMPUTE ... BY cần tuân theo các qui tắc dưới đây:

• Từ khóa DISTINCT không cho phép sử dụng với các hàm gộp dòng

• Hàm COUNT(*) không được sử dụng trong COMPUTE.

• Sau COMPUTE có thể sử dụng nhiều hàm gộp, khi đó các hàm phải phân cách nhau bởi dấu phẩy.

• Các cột sử dụng trong các hàm gộp xuất hiện trong mệnh đề COMPUTE phải có mặt trong danh sách chọn.

• Không sử dụng SELECT INTO trong một câu lệnh SELECT có sử dụng COMPUTE.

• Nếu sử dụng mệnh đề COMPUTE ... BY thì cũng phải sử dụng mệnh đề ORDER BY. Các cột liệt kê trong COMPUTE … BY phải giống hệt hay là một tập con của những gì được liệt kê sau ORDER BY. Chúng phải có cùng thứ tự từ trái qua phải, bắt đầu với cùng một biểu thức và không bỏ qua bất kỳ một biểu thức nào.

Chẳng hạn nếu mệnh đề ORDER BY có dạng:

`SELECT lop.*,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`7

Thì mệnh đề COMPUTE BY với hàm gộp F trên cột X theo một trong các cách dưới đây là hợp lệ:

Và các cách sử dụng dưới đây là sai:

`SELECT lop.*,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`8

• Phải sử dụng một tên cột hoặc một biểu thức trong mệnh đề ORDER BY, việc sắp xếp không được thực hiện dựa trên tiêu đề cột.

Trong trường hợp sử dụng COMPUTE mà không có BY thì có thể không cần sử dụng ORDER BY, khi đó phạm vi tính toán của hàm gộp là trên toàn bộ dữ liệu.

Câu lệnh dưới đây hiển thị danh sách các lớp và tổng số lớp hiện có:

`SELECT lop.*,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa`9

kết quả của câu lệnh như sau:

MALOP TENLOP HEDAOTAO C24101 Toán K24 Chính quy C25101 Toán K25 Chính quy C26101 Toán K26 Chính quy C26102 Tin K26 Chính quy C25102 Tin K25 Chính quy C24102 Tin K24 Chính quy C24103 Lý K24 Chính quy C25103 Lý K25 Chính quy C25301 Sinh K25 Chính quy C24301 Sinh K24 Chính quy CNT10

Có thể thực hiện việc tính toán hàm gộp dòng trên các nhóm lồng nhau bằng

cách sử dụng nhiều mệnh đề COMPUTE … BY trong cùng một câu lệnh SELECT

Câu lệnh:

`AND`0

Cho biết danh sách các lớp của mỗi khoa, tổng số lớp theo mỗi khoa và tổng số lớp hiện có với kết quả như sau:

MAKHOA TENKHOA MALOP TENLOP DHT01 Khoa Toán cơ – Tin học C24101 Toán K24 DHT01 Khoa Toán cơ – Tin học C25101 Toán K25 DHT01 Khoa Toán cơ – Tin học C26101 Toán K26 CNT3 MAKHOA TENKHOA MALOP TENLOP DHT02 Khoa Công nghệ thông tin C26102 Tin K26 DHT02 Khoa Công nghệ thông tin C25102 Tin K25 DHT02 Khoa Công nghệ thông tin C24102 Tin K24 CNT3 MAKHOA TENKHOA MALOP TENLOP DHT03 Khoa Vật lý C24103 Lý K24 DHT03 Khoa Vật lý C25103 Lý K25 CNT2 MAKHOA TENKHOA MALOP TENLOP DHT05 Khoa Sinh học C25301 Sinh K25 DHT05 Khoa Sinh học C24103 Sinh K24 CNT2

Truy vấn con (Subquery)

Truy vấn con là một câu lệnh SELECT được lồng vào bên trong một câu lệnh SELECT, INSERT, UPDATE, DELETE hoặc bên trong một truy vấn con khác. Loại truy vấn này được sử dụng để biểu diễn cho những truy vấn trong đó điều kiện truy vấn dữ liệu cần phải sử dụng đến kết quả của một truy vấn khác.

Cú pháp của truy vấn con như sau:

`AND`1

Khi sử dụng truy vấn con cần lưu ý một số quy tắc sau:

• Một truy vấn con phải được viết trong cặp dấu ngoặc. Trong hầu hết các trường hợp, một truy vấn con thường phải có kết quả là một cột (tức là chỉ có duy nhất một cột trong danh sách chọn).

• Mệnh đề COMPUTE và ORDER BY không được phép sử dụng trong truy vấn con.

• Các tên cột xuất hiện trong truy vấn con có thể là các cột của các bảng trong truy vấn ngoài.

• Một truy vấn con thường được sử dụng làm điều kiện trong mệnh đề WHERE hoặc HAVING của một truy vấn khác.

• Nếu truy vấn con trả về đúng một giá trị, nó có thể sử dụng như là một thành phần bên trong một biểu thức (chẳng hạn xuất hiện trong một phép so sánh bằng)

Phép so sánh đối với với kết quả truy vấn con

Kết quả của truy vấn con có thể được sử dụng đề thực hiện phép so sánh số học với một biểu thức của truy vấn cha. Trong trường hợp này, truy vấn con được sử dụng dưới dạng:

WHERE biểu_thức phép_toán_số_học [ANY|ALL] (truy_vấn_con)

Trong đó phép toán số học có thể sử dụng bao gồm: =, <>, >, <, >=, <=; Và truy vấn con phải có kết quả bao gồm đúng một cột.

Câu lệnh dưới đây cho biết danh sách các môn học có số đơn vị học trình lớn hơn hoặc bằng số đơn vị học trình của môn học có mã là TI-001

`AND`2

Nếu truy vấn con trả về nhiều hơn một giá trị, việc sử dụng phép so sánh như trên sẽ không hợp lệ. Trong trường hợp này, sau phép toán so sánh phải sử dụng thêm lượng từ ALL hoặc ANY. Lượng từ ALL được sử dụng khi cần so sánh giá trị của biểu thức với tất cả các giá trị trả về trong kết quả của truy vấn con; ngược lai, phép so sánh với lượng từ ANY có kết quả đúng khi chỉ cần một giá trị bất kỳ nào đó trong kết quả của truy vấn con thoả mãn điều kiện.

Câu lệnh dưới đây cho biết họ tên của những sinh viên lớp TinK25

`AND`3

và câu lệnh:

`AND`4

cho biết họ tên của những sinh viên lớp TinK25.

Sử dụng truy vấn con với toán tử IN

Khi cần thực hiện phép kiểm tra giá trị của một biểu thức có xuất hiện (không xuất hiện) trong tập các giá trị của truy vấn con hay không, ta có thể sử dụng toán tử IN(NOT IN) như sau:

`AND`5

Để hiển thị họ tên của những sinh viên lớp Tin K25 có năm sinh bằng với năm sinh của một sinh viên nào đó của lớp Toán K25, thay vì sử dụng câu lệnh như ở ví dụ trên, ta có thể sử dụng câu lệnh như sau:

`AND`6

Sử dụng lượng từ EXISTS với truy vấn con

Lượng từ EXISTS được sử dụng kết hợp với truy vấn con dưới dạng:

`AND`7

để kiểm tra xem một truy vấn con có trả về dòng kết quả nào hay không. Lượng từ EXISTS (tương ứng NOT EXISTS) trả về giá trị True (tương ứng False) nếu kết quả của truy vấn con có ít nhất một dòng (tương ứng không có dòng nào). Điều khác biệt của việc sử dụng EXISTS với hai cách đã nêu ở trên là trong danh sách chọn của truy vấn con có thể có nhiều hơn hai cột.

Câu lệnh dưới đây cho biết họ tên của những sinh viên hiện chưa có điểm thi của bất kỳ một môn học nào SELECT hodem,ten FROM sinhvien

`AND`8

Sử dụng truy vấn con với mệnh đề HAVING

Một truy vấn con có thể được sử dụng trong mệnh đề HAVING của một truy vấn khác. Trong trường hơp này, kết quả của truy vấn con được sử dụng để tạo nên điều kiện đối với các hàm gộp.

Câu lệnh dưới đây cho biết mã, tên và trung bình điểm lần 1 của các môn học có trung bình lớn hơn trung bình điểm lần 1 của tất cả các môn học

`AND`9

Bổ sung, cập nhật và xoá dữ liệu

Các câu lệnh thao tác dữ liệu trong SQL không những chỉ sử dụng để truy vấn dữ liệu mà còn để thay đổi và cập nhật dữ liệu trong cơ sở dữ liệu. So với câu lệnh SELECT, việc sử dụng các câu lệnh để bổ sung, cập nhật hay xoá dữ liệu đơn giản hơn nhiều. Trong phần còn lại của chương này sẽ đề cập đến 3 câu lệnh:

• Lệnh INSERT

• Lệnh UPDATE

• Lệnh DELETE

Bổ sung dữ liệu

Dữ liệu trong các bảng được thể hiện dưới dạng các dòng (bản ghi). Để bổ sung thêm các dòng dữ liệu vào một bảng, ta sử dụng câu lệnh INSERT. Hầu hết các hệ quản trị CSDL dựa trên SQL cung cấp các cách dưới đây để thực hiện thao tác bổ sung dữ liệu cho bảng:

• Bổ sung từng dòng dữ liệu với mỗi câu lệnh INSERT. Đây là các sử dụng thường gặp nhất trong giao dịch SQL.

• Bổ sung nhiều dòng dữ liệu bằng cách truy xuất dữ liệu từ các bảng dữ liệu khác.

Bổ sung từng dòng dữ liệu với lệnh INSERT

Để bổ sung một dòng dữ liệu mới vào bảng, ta sử dụng câu lệnh INSERT với cú pháp như sau:

INSERT INTO tên_bảng[(danh_sách_cột)] VALUES(danh_sách_trị)

Trong câu lệnh INSERT, danh sách cột ngay sau tên bảng không cần thiết phải chỉ định nếu giá trị các trường của bản ghi mới được chỉ định đầy đủ trong danh sách trị. Trong trường hợp này, thứ tự các giá trị trong danh sách trị phải bằng với số lượng các trường của bảng cần bổ sung dữ liệu cũng như phải tuân theo đúng thứ tự của các trường như khi bảng được định nghĩa.

Câu lệnh dưới đây bổ sung thêm một dòng dữ liệu vào bảng KHOA

`SELECT hodem,ten,ngaysinh FROM sinhvien,lop,khoa WHERE tenkhoa='Khoa Công nghệ Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa`0

Trong trường hợp chỉ nhập giá trị cho một số cột trong bảng, ta phải chỉ định danh sách các cột cần nhập dữ liệu ngay sau tên bảng. Khi đó, các cột không được nhập dữ liệu sẽ nhận giá trị mặc định (nếu có) hoặc nhận giá trị NULL (nếu cột cho phép chấp nhận giá trị NULL). Nếu một cột không có giá trị mặc định và không chấp nhận giá trị NULL mà không đuợc nhập dữ liệu, câu lệnh sẽ bị lỗi.

Câu lệnh dưới đây bổ sung một bản ghi mới cho bảng SINHVIEN

`SELECT hodem,ten,ngaysinh FROM sinhvien,lop,khoa WHERE tenkhoa='Khoa Công nghệ Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa`1

câu lệnh trên còn có thể được viết như sau:

`SELECT hodem,ten,ngaysinh FROM sinhvien,lop,khoa WHERE tenkhoa='Khoa Công nghệ Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa`2

Bổ sung nhiều dòng dữ liệu từ bảng khác

Một cách sử dụng khác của câu lệnh INSERT được sử dụng để bổ sung nhiều dòng dữ liệu vào một bảng, các dòng dữ liệu này được lấy từ một bảng khác thông qua câu lệnh SELECT. Ở cách này, các giá trị dữ liệu được bổ sung vào bảng không được chỉ định tường minh mà thay vào đó là một câu lệnh SELECT truy vấn dữ liệu từ bảng khác.

Cú pháp câu lệnh INSERT có dạng như sau:

`SELECT hodem,ten,ngaysinh FROM sinhvien,lop,khoa WHERE tenkhoa='Khoa Công nghệ Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa`3

Giả sử ta có bảng LUUSINHVIEN bao gồm các trường HODEM, TEN, NGAYSINH. Câu lệnh dưới đây bổ sung vào bảng LUUSINHVIEN các dòng dữ liệu có được từ câu truy vấn SELECT:

`SELECT hodem,ten,ngaysinh FROM sinhvien,lop,khoa WHERE tenkhoa='Khoa Công nghệ Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa`4

Khi bổ sung dữ liệu theo cách này cần lưu ý một số điểm sau:

• Kết quả của câu lệnh `SELECT hodem,ten,ngaysinh FROM sinhvien,lop,khoa WHERE tenkhoa='Khoa Công nghệ Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa`5 phải có số cột bằng với số cột được chỉ định trong bảng đích và phải tương thích về kiểu dữ liệu.

• Trong câu lệnh `SELECT hodem,ten,ngaysinh FROM sinhvien,lop,khoa WHERE tenkhoa='Khoa Công nghệ Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa`5 được sử dụng mệnh đề `SELECT hodem,ten,ngaysinh FROM sinhvien,lop,khoa WHERE tenkhoa='Khoa Công nghệ Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa`7

Cập nhật dữ liệu

Câu lệnh `SELECT hodem,ten,ngaysinh FROM sinhvien,lop,khoa WHERE tenkhoa='Khoa Công nghệ Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa`8 trong SQL được sử dụng để cập nhật dữ liệu trong các bảng.

Câu lệnh này có cú pháp như sau:

`SELECT hodem,ten,ngaysinh FROM sinhvien,lop,khoa WHERE tenkhoa='Khoa Công nghệ Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa`9

Sau `SELECT hodem,ten,ngaysinh FROM sinhvien,lop,khoa WHERE tenkhoa='Khoa Công nghệ Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa`8 là tên của bảng cần cập nhật dữ liệu. Một câu lệnh `SELECT hodem,ten,ngaysinh FROM sinhvien,lop,khoa WHERE tenkhoa='Khoa Công nghệ Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa`8 có thể cập nhật dữ liệu cho nhiều cột bằng cách chỉ định các danh sách tên cột và biểu thức tương ứng sau từ khoá `SELECT b.hodem,b.ten,b.ngaysinh FROM sinhvien a, sinhvien b WHERE a.hodem='Trần Thị Kim' AND a.ten='Anh' AND a.ngaysinh=b.ngaysinh AND a.masv<>b.masv`2. Mệnh đề `SELECT b.hodem,b.ten,b.ngaysinh FROM sinhvien a, sinhvien b WHERE a.hodem='Trần Thị Kim' AND a.ten='Anh' AND a.ngaysinh=b.ngaysinh AND a.masv<>b.masv`3 trong câu lệnh `SELECT hodem,ten,ngaysinh FROM sinhvien,lop,khoa WHERE tenkhoa='Khoa Công nghệ Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa`8 thường được sử dụng để chỉ định các dòng dữ liệu chịu tác động của câu lệnh (nếu không chỉ định, phạm vi tác động của câu lệnh được hiểu là toàn bộ các dòng trong bảng)

Câu lệnh dưới đây cập nhật lại số đơn vị học trình của các môn học có số đơn vị học trình nhỏ hơn 2

UPDATE monhoc

SET sodvht = 3

WHERE sodvht = 2

Sử dụng cấu trúc CASE trong câu lệnh UPDATE

Cấu trúc CASE có thể được sử dụng trong biểu thức khi cần phải đưa ra các quyết định khác nhau về giá trị của biểu thức

Giả sử ta có bảng NHATKYPHONG sau đây

Fill ra 1 cột max điểm trung bình sql năm 2024

Sau khi thực hiện câu lệnh:

`SELECT b.hodem,b.ten,b.ngaysinh FROM sinhvien a, sinhvien b WHERE a.hodem='Trần Thị Kim' AND a.ten='Anh' AND a.ngaysinh=b.ngaysinh AND a.masv<>b.masv`5

END

Dữ liệu trong bảng sẽ là

Fill ra 1 cột max điểm trung bình sql năm 2024

Điều kiện cập nhật dữ liệu liên quan đến nhiều bảng

Mệnh đề `SELECT b.hodem,b.ten,b.ngaysinh FROM sinhvien a, sinhvien b WHERE a.hodem='Trần Thị Kim' AND a.ten='Anh' AND a.ngaysinh=b.ngaysinh AND a.masv<>b.masv`6 trong câu lệnh `SELECT hodem,ten,ngaysinh FROM sinhvien,lop,khoa WHERE tenkhoa='Khoa Công nghệ Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa`8 được sử dụng khi cần chỉ định các điều kiện liên quan đến các bảng khác với bảng cần cập nhật dữ liệu. Trong truờng hợp này, trong mệnh đề WHERE thường có điều kiện nối giữa các bảng.

Giả sử ta có hai bảng MATHANG và NHATKYBANHANG như sau:

Fill ra 1 cột max điểm trung bình sql năm 2024

Câu lệnh dưới đây sẽ cập nhật giá trị trường THANHTIEN của bảng NHATKYBANHANG theo công thức THANHTIEN = SOLUONG × GIA

`SELECT b.hodem,b.ten,b.ngaysinh FROM sinhvien a, sinhvien b WHERE a.hodem='Trần Thị Kim' AND a.ten='Anh' AND a.ngaysinh=b.ngaysinh AND a.masv<>b.masv`8

Câu lệnh UPDATE với truy vấn con

Tương tự như trong câu lệnh SELECT, truy vấn con có thể được sử dụng trong mệnh đề WHERE của câu lệnh UPDATE nhằm chỉ định điều kiện đối với các dòng dữ liệu cần cập nhật dữ liệu.

Câu lệnh ở trên có thể được viết như sau:

`SELECT b.hodem,b.ten,b.ngaysinh FROM sinhvien a, sinhvien b WHERE a.hodem='Trần Thị Kim' AND a.ten='Anh' AND a.ngaysinh=b.ngaysinh AND a.masv<>b.masv`9

Xoá dữ liệu

Để xoá dữ liệu trong một bảng, ta sử dụng câu lệnh `SELECT * FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv`0 . Cú pháp của câu lệnh này như sau:

`SELECT * FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv`1

Trong câu lệnh này, tên của bảng cần xoá dữ liệu được chỉ định sau DELETE FROM. Mệnh đề WHERE trong câu lệnh được sử dụng để chỉ định điều kiện đối với các dòng dữ liệu cần xoá. Nếu câu lệnh DELETE không có mệnh đề WHERE thì toàn bộ các dòng dữ liệu trong bảng đều bị xoá.

Câu lệnh dưới đây xoá khỏi bảng SINHVIEN những sinh viên sinh tại Huế

`SELECT * FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv`2

Xoá dữ liệu khi điều kiện liên quan đến nhiều bảng

Nếu điều kiện trong câu lệnh DELETE liên quan đến các bảng không phải là bảng cần xóa dữ liệu, ta phải sử dụng thêm mệnh đề FROM và sau đó là danh sách tên các bảng đó. Trong trường hợp này, trong mệnh đề WHERE ta chỉ định thêm điều kiện nối giữa các bảng

Câu lệnh dưới đây xoá ra khỏi bảng SINHVIEN những sinh viên lớp Tin K24

`SELECT * FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv`3

Sử dụng truy vấn con trong câu lệnh DELETE

Một câu lệnh SELECT có thể được lồng vào trong mệnh đề WHERE trong câu lệnh DELETE để làm điều kiện cho câu lệnh tương tự như câu lệnh UPDATE.

Câu lệnh dưới đây xoá khỏi bảng LOP những lớp không có sinh viên nào học

`SELECT * FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv`4

Xoá toàn bộ dữ liệu trong bảng

Câu lệnh `SELECT FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv`0 không chỉ định điều kiện đối với các dòng dữ liệu cần xoá trong mệnh đề `SELECT b.hodem,b.ten,b.ngaysinh FROM sinhvien a, sinhvien b WHERE a.hodem='Trần Thị Kim' AND a.ten='Anh' AND a.ngaysinh=b.ngaysinh AND a.masv<>b.masv`3 sẽ xoá toàn bộ dữ liệu trong bảng. Thay vì sử dụng câu lệnh `SELECT FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv`0 trong trường hợp này, ta có thể sử dụng câu lệnh `SELECT * FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv`8 có cú pháp như sau:

`SELECT * FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv`9

Câu lệnh sau xoá toàn bộ dữ liệu trong bảng diemthi:

`SELECT FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv`0

Bài tập chương 3

Cơ sở dữ liệu dưới đây được sử dụng để quản lý công tác giao hàng trong một công ty kinh doanh. Các bảng trong cơ sở dữ liệu này được biểu diễn trong sơ đồ dưới đây:

Fill ra 1 cột max điểm trung bình sql năm 2024

Trong đó:

• Bảng NHACUNGCAP lưu trữ dữ liệu về các đối tác cung cấp hàng cho công ty.

• Bảng MATHANG lưu trữ dữ liệu về các mặt hàng hiện có trong công ty.

• Bảng LOAIHANG phân loại các mặt hàng hiện có.

• Bảng NHANVIEN có dữ liệu là thông tin về các nhân viên làm việc trong công ty.

• Bảng KHACHHANG được sử dụng để lưu giữ thông tin về các khách hàng của công ty.

• Khách hàng đặt hàng cho công ty thông qua các đơn đặt hàng. Thông tin chung về các đơn đặt hàng được lưu trữ trong bảng DONDATHANG (Mỗi một đơn đặt hàng phải do một nhân viên của công ty lập và do đó bảng này có quan hệ với bảng NHANVIEN)

• Thông tin chi tiết của các đơn đặt hàng (đặt mua mặt hàng gì, số lượng, giá cả,...) được lưu trữ trong bảng CHITIETDATHANG. Bảng này có quan hệ với hai bảng DONDATHANG và MATHANG.

Sử dụng câu lệnh`SELECT FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv`1 để viết các yêu cầu truy vấn dữ liệu sau đây

2. 1 - Cho biết danh sách các đối tác cung cấp hàng cho công ty.

2. 2 - Mã hàng, tên hàng và số lượng của các mặt hàng hiện có trong công ty.

2. 3 - Họ tên và địa chỉ và năm bắt đầu làm việc của các nhân viên trong công ty.

2. 4 - Địa chỉ và điện thoại của nhà cung cấp có tên giao dịch VINAMILK là gì ?

2. 5 - Cho biết mã và tên của các mặt hàng có giá lớn hơn 100000 và số lượng hiện có ít hơn 50.

2. 6 - Cho biết mỗi mặt hàng trong công ty do ai cung cấp.

2. 7 - Công ty Việt Tiếnđã cung cấp những mặt hàng nào?

2. 20 - Tổng số tiền mà khách hàng phải trả cho mỗi đơn đặt hàng là bao nhiêu?

2. 21 - Trong năm 2003, những mặt hàng nào chỉ được đặt mua đúng một lần.

2. 22 - Hãy cho biết mỗi một khách hàng đã phải bỏ ra bao nhiêu tiền để

2. 8 - Loại hàng thựcphẩmdo những công ty nào cung cấp và địa chỉ của các công ty đó là gì?

2. 9 - Những khách hàng nào (tên giao dịch) đã đặt mua mặt hàng SữahộpXYZ của công ty?

2. 10 - Đơn đặt hàng số 1 do ai đặt và do nhân viên nào lập, thời gian và địa điểm giao hàng là ở đâu?

2. 11 - Hãy cho biết số tiền lương mà công ty phải trả cho mỗi nhân viên là bao nhiêu (lương = lương cơ bản + phụ cấp).

2. 12 - Trong đơn đặt hàng số 3 đặt mua những mặt hàng nào và số tiền mà khách hàng phải trả cho mỗi mặt hàng là bao nihiêu (số tiền phải trả được tính theo công thức SOLUONG×GIABAN–SOLUONG×GIABAN×MUCGIAMGIA/100)

2. 13 - Hãy cho biết cónhững khách hàng nào lại chính là đối tác cung cấp hàng của công ty (tức là có cùng tên giao dịch).

2. 14 - Trong công ty có những nhân viên nào có cùng ngày sinh?

2. 15 - Những đơn đặt hàng nào yêu cầu giao hàng ngay tại công ty đặt hàng và những đơn đó là của công ty nào?

2. 16 - Cho biết tên công ty, tên giao dịch, địa chỉ và điện thoại của các khách hàng và các nhà cung cấp hàng cho công ty

2. 17 - Những mặt hàng nào chưa từng được khách hàng đặt mua?

2. 18 - Những nhân viên nào của công ty chưa từng lập bất kỳ một hoá đơn đặt hàng nào?

2. 19 - Những nhân viên nào của công ty có lương cơ bản cao nhấ đặt mua hàng của công ty?

2. 23 - Mỗi một nhân viên của công ty đã lập bao nhiêu đơn đặt hàng (nếu nhân viên chưa hề lập một hoá đơn nào thì cho kết quả là 0)

2.24 - Cho biết tổng số tiền hàng mà cửa hàng thu được trong mỗi tháng của năm 2003 (thời được gian tính theo ngày đặt hàng).

2.25 - Hãy cho biết tổng số tiền lời mà công ty thu được từ mỗi mặt hàng trong năm 2003.

2.26 - Hãy cho biết tổng số lượng hàng của mỗi mặt hàng mà công ty đã có (tổng số lượng hàng hiện có và đã bán).

2.27 - Nhân viên nào của công ty bán được số lượng hàng nhiều nhất và số lượng hàng bán được của những nhân viên này là bao nhiêu?

2. 28 - Đơn đặt hàng nào có số lượng ng được đặt mua ít nhất?

2. 29 - Số tiền nhiều nhất mà mỗi khách hàng đã từng bỏ ra để đặt hàng trong các đơn đặt hàng là bao nhiêu?

2. 30 - Mỗi một đơn đặt hàng đặt mua những mặt hàng nào và tổng số tiền mà mỗi đơn đặt hàng phải trả là bao nhiêu?

2.31 - Hãy cho biết mỗi một loại hàng bao gồm những mặt hàng nào, tổng số lượng hàng của mỗi loại và tổng số lượng của tất cả các mặt hàng hiện có trong công ty là bao nhiêu?

2. 32 - Thống kê xem trong năm 2003, mỗi một mặt hàng trong mỗi tháng và trong cả năm bán được với số lượng bao nhiêu

Yêucầu:Kết quả được hiển thị dưới dạng bảng, hai cột cột đầu là mã hàng và tên hàng, các cột còn lại tương ứng với các tháng từ 1 đến 12 và cả năm. Như vậy mỗi dòng trong kết quả cho biết số ượ l ng hàng bán được mỗi tháng và trong cả năm của mỗi mặt hàng.

Sử dụng câu lệnh `SELECT FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv`2 thực hiện các yêu cầu sau

2. 33 - Cập nhật lại giá trị trường NGAYCHUYENHANG của những bản ghi có NGAYCHUYENHANG chưa xác định (NULL) trong bảng DONDATHANG bằng với giá trị của trường NGAYDATHANG.

2. 34 - Tăng số lượng hàng của những mặt hàng do công ty VINAMILK cung cấp lên gấp đôi.

2. 35 - Cập nhật giá trị của trường NOIGIAOHANG trong bảng DONDATHANG bằng địa chỉ của khách hàng đối với những đơn đặt hàng chưa xác định được nơi giao hàng (giá trị trường NOIGIAOHANG bằng NULL).

2. 36 - Cập nhật lại dữ liệu trong bảng KHACHHANG sao cho nếu tên công ty và tên giao dịch của khách hàng trùng với tên công ty và tên giao dịch của một nhà cung cấp nào đó thì địa chỉ, điện thoại, fax và e-mail phải giống nhau.

2. 37 - Tăng lương lên gấp rưỡi cho những nhân viên bán được số lượng hàng nhiều hơn 100 trong năm 2003.

2. 38 - Tăng phụ cấp lên bằng 50% lương cho những nhân viên bán được hàng nhiều nhất.

2. 39 - Giảm 25%lương của nh ng nhân v i ê n nữ đơn đặt hàng nào.n trong năm 2003 không lập được bất kỳ

2. 40 - Giả sử trong bảng DONDATHANG có thêm trường SOTIEN cho biết số tiền mà khách hàng phải trả trong mỗi đơn đặt hàng. Hãy tính giá trị cho trường này. Thực hiện các yêu cầu dưới đây bằng câu lệnh DELETE.

2. 41 - Xoá khỏi bảng NHANVIEN những nhân viên đã làm việc trong công ty quá 40 năm.

2. 42 - Xoá những đơn đặt hàng trước năm 2000 ra khỏi cơ sở dữ liệu.

2. 43 - Xoá khỏi bảng LOAIHANG những loại hàng hiện không có mặt hàng.

2. 44 - Xoá khỏi bảng KHACHHANG những khách hàng hiện không có bất kỳ đơn mặt hàng nào cho công ty.

2. 4 - Xoá khỏi bảng MATHANG những mặt hàng có số lượng bằng 0 và không được đặt mua trong bất kỳ đơn hàng nào