Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 38 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Tiêu đề
Ngôn Ngữ Truy Vấn SQL
Định dạng
Số trang
38
Dung lượng
1,03 MB
Nội dung
LOGO Ngôn ngữ truy vấn SQL Ngôn ngữ truy vấn SQL Giới thiệu ngôn ngữ SQL Các lệnh định nghĩa liệu Các lệnh cập nhật liệu Các lệnh truy vấn liệu Ngôn ngữ SQL gì? SQL (Structured Query Language) ngôn ngữ chuẩn nhiều HQT CSDL, gồm câu lệnh định nghĩa liệu, truy vấn liệu cập nhật liệu Còn gọi SEQUEL (Structured English Query Language), phát triển IBM (1970) SQL có phiên bản: SQL-86 (SQL1) ANSI (American National Standards Institute) SQL-92 (SQL2) SQL-99 (SQL3) Ngơn ngữ SQL gì? SQL gồm nhóm lệnh: DDL – Data Definition Language: lệnh tạo cấu trúc CSDL DML – Data Manipulation Language: lệnh thao tác liệu: Select, Insert, Update, Delete DCL – Data Control Language: lệnh điều khiển liệu SQL sử dụng thuật ngữ Bảng ~ quan hệ Cột ~ thuộc tính Dịng ~ Truy vấn liệu Là ngôn ngữ rút trích liệu thỏa số điều kiện Dựa Cho phép bảng có nhiều dịng trùng Bảng bag quan hệ set Truy vấn liệu Cấu trúc lệnh truy vấn: SELECT [* | DISTINCT] FROM [WHERE ] [GROUP BY ] [HAVING ] [ORDER BY tên_cột_thứ_tự | số_thứ_tự_cột | biểu thức] [ASC | DESC] Truy vấn đơn giản SELECT FROM WHERE Xét lược đồ quan hệ: SINHVIEN(MaSV, HoTen, Phai, MaLop) Cho biết Mã họ tên sinh viên lớp SELECT MaSV, HoTen ‘07DHTH’ ? FROM SINHVIEN • Yêu cầu: Mã, họ tên WHERE MaLop= ’07DHTH’ • Bảng liên quan: SINHVIEN • Điều kiện: lớp ’07DHTH’ Truy vấn đơn giản Xét bảng liệu MONHOC sau: Liệt kê danh sách mã tên mơn học có số tín >2 SELECT MaMH, TenMH From MONHOC Where SoTC>2 Biểu thức kết nối Cú pháp: TênBảng1.TênCột1=TênBảng2.TênCột2 Ví dụ: Xét bảng tương ứng với quan hệ: LOP(MaLop, TenLop) SINHVIEN(MaSV, HoTen, Tuoi, MaLop) Biểu thức kết nối quan hệ là: SINHVIEN.MaLop=LOP.MaLop Khố ngoại Khố Sử dụng từ khoá AS Từ khoá AS dùng để đổi tên cột, tên bảng câu truy vấn Ví dụ: Cho biết mã họ tên sinh viên học lớp Đại học CNTT khoá 07 SELECT sv.MASV, sv.HOTEN AS SV07 FROM SINHVIEN AS sv, LOP WHERE sv.MaLop=LOP.MaLop AND TenLop=‘Đại học CNTT khố 07’ 10 Ví dụ truy vấn lồng phân cấp Tìm nhân viên có lương lớn lương tất nhân viên phòng SELECT * FROM NHANVIEN WHERE LUONG > ALL ( SELECT LUONG FROM NHANVIEN WHERE PHG=4 ) 24 Ví dụ truy vấn lồng phân cấp Cho biết mã tên môn học có số tín lớn SELECT MAMH, TENMH FROM MONHOC WHERE SOTC>=ALL(SELECT SOTC FROM MONHOC) >=ALL(2,3) >=3 25 Ví dụ truy vấn lồng tương quan KETQUA Cho biết mã tên mơn học mà chưa có sinh viên học? SELECT MAMH, TENMH FROM MONHOC WHERE NOT EXISTS(SELECT * FROM KETQUA WHERE MONHOC.MAMH=KETQUA.MAMH) 26 Ví dụ truy vấn lồng tương quan Tìm nhân viên có người thân tên giới tính SELECT * FROM NHANVIEN NV WHERE EXISTS ( SELECT * FROM THANNHAN TN WHERE NV.MANV=TN.MA_NVIEN AND NV.TENNV=TN.TENTN AND NV.PHAI=TN.PHAI ) 27 Ví dụ truy vấn lồng tương quan Tìm nhân viên khơng có thân nhân SELECT * FROM NHANVIEN WHERE NOT EXISTS ( SELECT * FROM THANNHAN WHERE MANV=MA_NVIEN) 28 Ví dụ truy vấn lồng tương quan Tìm nhân viên có lương lớn lương nhân viên phòng SELECT * FROM NHANVIEN NV1 WHERE EXISTS ( SELECT * FROM NHANVIEN NV2 WHERE NV2.PHG=4 AND NV1.LUONG>NV2.LUONG) 29 Ví dụ truy vấn lồng tương quan Tìm nhân viên có lương cao SELECT TENNV FROM NHANVIEN NV1 WHERE >= ( SELECT COUNT(*) FROM NHANVIEN NV2 WHERE NV2.LUONG>NV1.LUONG ) 30 Nhận xét IN EXISTS IN IN Thuộc tính mệnh đề SELECT truy vấn phải có kiểu liệu với thuộc tính mệnh đề WHERE truy vấn cha EXISTS Không cần có thuộc tính, số hay biểu thức khác đứng trước Không thiết liệt kê tên thuộc tính mệnh đề SELECT truy vấn Những câu truy vấn có = ANY hay IN chuyển thành câu truy vấn có EXISTS 31 Phép chia SQL rs tập giá trị r cho khơng có giá trị bi s làm cho (ai, bi) không tồn r 32 Phép chia SQL Sử dụng NOT EXISTS để biểu diễn SELECT R1.A, R1.B, R1.C FROM R R1 WHERE NOT EXISTS ( SELECT * FROM S WHERE NOT EXISTS ( SELECT * FROM R R2 WHERE R2.D=S.D AND R2.E=S.E AND R1.A=R2.A AND R1.B=R2.B AND R1.C=R2.C )) 33 Phép chia SQL Tìm tên nhân viên phân công làm tất đồ án Tìm tên nhân viên mà khơng có đề án không phân công làm Tập bị chia: PHANCONG(MA_NVIEN, SODA) Tập chia: DEAN(MADA) Tập kết quả: KQ(MA_NVIEN) Kết KQ với NHANVIEN để lấy TENNV 34 Phép chia SQL Tìm tên nhân viên phân công làm tất đề án SELECT NV.TENNV FROM NHANVIEN NV, PHANCONG PC1 WHERE NV.MANV=PC1.MA_NVIEN AND NOT EXISTS ( SELECT * FROM DEAN DA WHERE NOT EXISTS ( SELECT * FROM PHANCONG PC2 WHERE PC2.SODA=DA.MADA AND PC1.MA_NVIEN=PC2.MA_NVIEN )) 35 Bài tập Cho lược đồ sở liệu sau: KHOA(MaKhoa, TenKhoa) LOP(MaLop, TenLop, MaKhoa) SINHVIEN(MaSV, HoTen, NgaySinh, Phai, MaLop) MONHOC(MaMH, TenMH, SoTC) KETQUA(MaSV, MaMH, Diem) Hãy viết câu truy vấn sau ngôn ngữ SQL: Cho biết mã tên lớp thuộc khoa có tên CNTT Cho biết mã họ tên sinh viên phái nam thuộc lớp có mã lớp ‘L001’ Cho biết mã họ tên sinh viên phái nam thuộc lớp có mã lớp ‘L001’ phái nữ học lớp có mã ‘L002’ 36 Bài tập (tt) Cho biết mã họ tên sinh viên phái nam thuộc lớp có tên lớp ‘08 Đại học tin học’ Liệt kê danh sách môn học (MaMH) sinh viên có mã ‘sv001’ học Liệt kê danh sách mơn học (MaMH, TenMH) sinh viên có mã ‘sv001’ học Liệt kê danh sách sinh viên (MaSV) có học mơn với mã mơn ‘mh001’ Liệt kê danh sách sinh viên (MaSV, HoTen) có học mơn với mã mơn ‘mh001’ Cho biết mã khoa, tên khoa số lớp khoa 10 Mã tên khoa có số lớp 37 Bài tập (tt) 11 Mã tên khoa có nhiều lớp 12 Cho biết mã sinh viên số môn học sinh viên 13 Cho biết mã, họ tên số môn học sinh viên 14 Cho biết mã họ tên sinh viên học môn học 15 Cho biết mã, họ tên sinh viên học nhiều môn 16 Cho biết mã môn học số sinh viên học môn 17 Cho biết mã môn học, tên môn học số lượng sinh viên học tương ứng 18 Cho biết mã tên mơn học có 20 sinh viên học 19 Cho biết mã tên môn học có nhiều sinh viên học 20 Mã tên mơn học khơng có sinh viên học.38