Bài giảng Nhập môn Cơ sở dữ liệu - Bài 5: Ngôn ngữ SQL
Nội dung
1. Giới thiệu
2. Các ngôn ngữ giao tiếp
3. Ngôn ngữ định nghĩa dữ liệu
4. Ngôn ngữ thao tác dữ liệu
5. Ngôn ngữ truy vấn dữ liệu có cấu trúc
6. Ngôn ngữ điều khiển dữ liệu
r(50) ALTER TABLE KHACHHANG ALTER COLUMN GHI_CHU varchar(50) Nếu sửa kiểu dữ liệu của cột Ghi_chu thành varchar(5), mà trước đó đã nhập giá trị cho cột Ghi_chu có độ dài hơn 5ký tự thì không được phép. Hoặc sửa từ kiểu chuỗi ký tự sang kiểu số, 3.2.3 Xóa thuộc tính ALTER TABLE tên_bảng DROP COLUMN tên_cột Ví dụ: xóa cột Ghi_chu trong bảng KHACHHANG ALTER TABLE NHANVIEN DROP COLUMN Ghi_chu 3.2 Sửa cấu trúc bảng(2) 7Khoa HTTT - Đại học CNTT 13 3.2.4 Thêm ràng buộc toàn vẹn ALTER TABLE ADD CONSTRAINT UNIQUE tên_cột PRIMARY KEY (tên_cột) FOREIGN KEY (tên_cột) REFERENCES tên_bảng (cột_là_khóa_chính) [ON DELETE CASCADE] [ON UPDATE CASCADE] CHECK (tên_cột điều_kiện) 3.2 Sửa cấu trúc bảng(3) Khoa HTTT - Đại học CNTT 14 Ví dụ ALTER TABLE NHANVIEN ADD CONSTRAINT PK_NV PRIMARY KEY (MANV) ALTER TABLE CTHD ADD CONSTRAINT FK_CT_SP FOREIGN KEY (MASP) REFERENCES SANPHAM(MASP) ALTER TABLE SANPHAM ADD CONSTRAINT CK_GIA CHECK (GIA >=500) ALTER TABLE KHACHHANG ADD CONSTRAINT UQ_KH UNIQUE (CMND) 3.2 Sửa cấu trúc bảng(4) 8Khoa HTTT - Đại học CNTT 15 3.2.5 Xóa ràng buộc toàn vẹn ALTER TABLE tên_bảng DROP CONSTRAINT tên_ràng_buộc Ví dụ: z Alter table CTHD drop constraint FK_CT_SP z Alter table SANPHAM drop constraint ck_gia Lưu ý: đối với ràng buộc khóa chính, muốn xóa ràng buộc này phải xóa hết các ràng buộc khóa ngoại tham chiếu tới nó 3.2 Sửa cấu trúc bảng(5) Khoa HTTT - Đại học CNTT 16 Cú pháp DROP TABLE tên_bảng Ví dụ: xóa bảng KHACHHANG. DROP TABLE KHACHHANG Lưu ý: khi muốn xóa một bảng phải xóa tất cả những khóa ngoại tham chiếu tới bảng đó trước. 3.3 Lệnh xóa bảng 9Khoa HTTT - Đại học CNTT 17 Gồm các lệnh: 4.1 Lệnh thêm dữ liệu (INSERT) 4.2 Lệnh sửa dữ liệu (UPDATE) 4.3 Lệnh xóa dữ liệu (DELETE) 4. Ngôn ngữ thao tác dữ liệu Khoa HTTT - Đại học CNTT 18 Cú pháp INSERT INTO tên_bảng (cột1,,cộtn) VALUES (giá_trị_1,., giá_trị_n) INSERT INTO tên_bảng VALUES (giá_trị_1, giá_trị_2,, giá_trị_n) Ví dụ: insert into SANPHAM values('BC01','But chi', 'cay', 'Singapore', 3000) insert into SANPHAM(masp,tensp,dvt,nuocsx,gia) values ('BC01','But chi','cay','Singapore',3000) 4.1 Thêm dữ liệu 10 Khoa HTTT - Đại học CNTT 19 Cú pháp UPDATE tên_bảng SET cột_1 = giá_trị_1, cột_2 = giá_trị_2 . [WHERE điều_kiện] Lưu ý: cẩn thận với các lệnh xóa và sửa, nếu không có điều kiện ở WHERE nghĩa là xóa hoặc sửa tất cả. Ví dụ: Tăng giá 10% đối với những sản phẩm do “Trung Quoc” sản xuất UPDATE SANPHAM SET Gia = Gia*1.1 WHERE Nuocsx=‘Trung Quoc’ 4.2 Sửa dữ liệu Khoa HTTT - Đại học CNTT 20 4.3 Xóa dữ liệu Cú pháp DELETE FROM tên_bảng [WHERE điều_kiện] Ví dụ: Xóa toàn bộ nhân viên DELETE FROM NHANVIEN Xóa những sản phẩm do Trung Quốc sản xuất có giá thấp hơn 10000 DELETE FROM SANPHAM WHERE (Gia <10000) and (Nuocsx=‘Trung Quoc’) 11 Khoa HTTT - Đại học CNTT 21 5. Ngôn ngữ truy vấn dữ liệu có cấu trúc 5.1 Câu truy vấn tổng quát 5.2 Truy vấn đơn giản 5.3 Phép kết 5.4 Đặt bí danh, sử dụng *, distinct 5.5 Các toán tử 5.6 Câu truy vấn con (subquery) 5.7 Phép chia 5.8 Hàm tính toán, gom nhóm Khoa HTTT - Đại học CNTT 22 SELECT [DISTINCT] *|tên_cột | hàm FROM bảng [WHERE điều_kiện] [GROUP BY tên_cột] [HAVING điều_kiện] [ORDER BY tên_cột ASC | DESC] 5.1Câu truy vấn tổng quát 12 Khoa HTTT - Đại học CNTT 23 5.2 Truy vấn đơn giản(1) SELECT Tương đương phép chiếu của ĐSQH Liệt kê các thuộc tính cần hiển thị trong kết quả WHERE Tương ứng với điều kiện chọn trong ĐSQH Điều kiện liên quan tới thuộc tính, sử dụng các phép nối luận lý AND, OR, NOT, các phép toán so sánh, BETWEEN FROM Liệt kê các quan hệ cần thiết, các phép kết Khoa HTTT - Đại học CNTT 24 5.2 Truy vấn đơn giản(2) Tìm masp, tensp do “Trung Quoc” sản xuất có giá từ 20000 đến 30000 Select masp,tensp From SANPHAM Where nuocsx=‘Trung Quoc’ and gia between 20000 and 30000 13 Khoa HTTT - Đại học CNTT 25 5.3 Phép kết(1) Inner Join, Left Join, Right Join, Full Join Ví dụ: In ra danh sách các khách hàng (MAKH, HOTEN) đã mua hàng trong ngày 1/1/2007. select KHACHHANG.makh,hoten from KHACHHANG inner join HOADON on KHACHHANG.makh=HOADON.makh where nghd='1/1/2007' Khoa HTTT - Đại học CNTT 26 5.3 Phép kết (2) Ví dụ: In ra danh sách tất cả các hóa đơn và họ tên của khách hàng mua hóa đơn đó (nếu có) Select sohd, hoten From HOADON left join KHACHHANG on HOADON.makh=KHACHHANG.makh Select sohd, hoten From HOADON ,KHACHHANG where HOADON.makh*=KHACHHANG.makh 14 Khoa HTTT - Đại học CNTT 27 5.4 Đặt bí danh, sử dụng *, distinct Đặt bí danh – Alias: cho thuộc tính và quan hệ: tên_cũ AS tên_mới Select manv,hoten as [ho va ten] From NHANVIEN Liệt kê tất cả các thuộc tính của quan hệ: Select * from Nhanvien Select NHANVIEN.* from NHANVIEN Distinct: trùng chỉ lấy một lần Select distinct nuocsx from SANPHAM Sắp xếp kết quả hiển thị: Order by Select * from SANPHAM order by nuocsx, gia DESC Khoa HTTT - Đại học CNTT 28 5.5 Toán tử truy vấn(1) Toán tử so sánh: =, >,=, Toán tử logic: AND, OR, NOT Phép toán: +, - ,* , / BETWEEN . AND IS NULL, IS NOT NULL LIKE (_ %) IN, NOT IN EXISTS , NOT EXISTS SOME, ALL 15 Khoa HTTT - Đại học CNTT 29 5.5 Toán tử truy vấn(2) IS NULL, IS NOT NULL Select sohd from HOADON where makh is Null Select * from HOADON where makh is Not Null Toán tử so sánh, phép toán Select gia*1.1 as [gia ban] from SANPHAM where nuocsx’Viet Nam’ Select * from SANPHAM where (gia between 20000 and 30000) OR (nuocsx=‘Viet Nam’) Toán tử IN, NOT IN Select * from SANPHAM where masp NOT IN (‘BB01’,’BB02’,’BB03’) Khoa HTTT - Đại học CNTT 30 Toán tử LIKE So sánh chuỗi tương đối Cú pháp: s LIKE p, p có thể chứa % hoặc _ % : thay thế một chuỗi ký tự bất kỳ _ : thay thế một ký tự bất kỳ Ví dụ: Select masp,tensp from SANPHAM where masp like 'B%01‘ 5.5 Toán tử so sánh(3) 16 Khoa HTTT - Đại học CNTT 31 5.6 Câu truy vấn con (1) In hoặc Exists Ví dụ: Tìm các số hóa đơn mua cùng lúc 2 sản phẩm có mã số “BB01” và “BB02”. select distinct sohd from CTHD where masp='BB01' and sohd IN (select distinct sohd from CTHD where masp='BB02') select distinct A.sohd from CTHD A where A.masp='BB01' and EXISTS (select * from CTHD B where B.masp='BB02‘ and A.sohd=B.sohd) Khoa HTTT - Đại học CNTT 32 5.6 Câu truy vấn con (2) Not In hoặc Not Exists Ví dụ: Tìm các số hóa đơn có mua sản phẩm mã số ‘BB01’ nhưng không mua sản phẩm mã số ‘BB02’. select distinct sohd from CTHD where masp='BB01' and sohd NOT IN (select distinct sohd from CTHD where masp='BB02') select distinct A.sohd from CTHD A where A.masp='BB01' and NOT EXITST (select * from CTHD B where B.masp='BB02‘ and A.sohd=B.sohd) 17 Khoa HTTT - Đại học CNTT 33 5.7 Phép chia Sử dụng NOT EXISTS Ví dụ: Tìm số hóa đơn đã mua tất cả những sản phẩm do “Trung Quoc” sản xuất. Select sohd from HOADON where not exists (select * from SANPHAM where nuocsx=‘Trung Quoc’ and not exists (select * from CTHD where HOADON.sohd=CTHD.sohd and CTHD.masp=SANPHAM.masp)) Khoa HTTT - Đại học CNTT 34 5.8.1 Các hàm tính toán cơ bản COUNT: Đếm số bộ dữ liệu của thuộc tính MIN: Tính giá trị nhỏ nhất MAX: Tính giá trị lớn nhất AVG: Tính giá trị trung bình SUM: Tính tổng giá trị các bộ dữ liệu 5.8 Các hàm tính toán và gom nhóm (1) 18 Khoa HTTT - Đại học CNTT 35 2.000.000NCNV003NữNguyễn Kim AnhNV009 1.800.000NCNV003NữTrần Kim DuyênNV008 1.800.000NCNV003NamHà Duy LậpNV007 2.000.000DHNV002NamNguyễn MinhNV006 2.500.000 1.800.000 2.300.000 2.000.000 2.800.000 LUONG NC DH NC DH NC PHONG Nguyễn Thị Hồng Vân Trần Thanh Long Nguyễn Văn Mạnh Đinh Bá Tiến Nguyễn Ngọc Linh HOTEN NV001NữNV005 NV002NamNV004 NV001NamNV003 NV002NamNV002 NullNữNV001 MANQLPHAIMANV NHANVIEN Khoa HTTT - Đại học CNTT 36 Ví dụ 1. Tính lương thấp nhất, cao nhất, trung bình và tổng lương của tất cả các nhân viên. 2. Có tất cả bao nhiêu nhân viên 3. Bao nhiêu nhân viên có người quản lý 4. Bao nhiêu phòng ban có nhân viên trực thuộc 5. Tính lương trung bình của các nhân viên 6. Tính lương trung bình của các nhân viên theo từng phòng ban 19 Khoa HTTT - Đại học CNTT 37 1. Tính lương thấp nhất, cao nhất, trung bình và tổng lương của tất cả các nhân viên. SELECT min(luong) as thapnhat, max(luong) as caonhat, avg(luong) as trungbinh, sum(luong) as tongluong FROM NhanVien Khoa HTTT - Đại học CNTT 38 2. Có tất cả bao nhiêu nhân viên SELECT count(*) FROM NhanVien 3. Bao nhiêu nhân viên có người quản lý Select count(*) FROM NhanVien WHERE manql is not null SELECT count(Manql) FROM NhanVien 4. Bao nhiêu phòng ban có nhân viên trực thuộc SELECT count(distinct phong) FROM NhanVien 20 Khoa HTTT - Đại học CNTT 39 5.8 Các hàm tính toán và gom nhóm (2) 5.8.2 Gom nhóm: mệnh đề GROUP BY Sử dụng hàm gom nhóm trên các bộ trong quan hệ. Mỗi nhóm bộ bao gồm tập hợp các bộ có cùng giá trị trên các thuộc tính gom nhóm Hàm gom nhóm áp dụng trên mỗi bộ độc lập nhau. SQL có mệnh đề GROUP BY để chỉ ra các thuộc tính gom nhóm, các thuộc tính này phải xuất hiện trong mệnh đề SELECT Khoa HTTT - Đại học CNTT 40 5. Tính lương trung bình của các nhân viên SELECT avg(LUONG) as LUONGTB FROM NhanVien 6. Tính lương trung bình của các nhân viên theo từng phòng ban. SELECT phong, avg(LUONG) as LUONGTB FROM NhanVien GROUP BY phong 21 Khoa HTTT - Đại học CNTT 41 5.8 Các hàm tính toán và gom nhóm (3) 5.8.3 Điều kiện sau gom nhóm: mệnh đề HAVING Lọc kết quả theo điều kiện, sau khi đã gom nhóm Điều kiện ở HAVING được thực hiện sau khi gom nhóm, các điều kiện có liên quan đến thuộc tính Group By Ví dụ: tìm phòng có số lượng nhân viên “Nữ” trên 5 người SELECT phong FROM NhanVien WHERE phai = ‘Nữ’ GROUP BY phong HAVING count(manv) > 5
File đính kèm:
- Buoi_5,6.pdf