You are on page 1of 31

Cơ sở dữ liệu 1 - 4

Ngôn ngữ vấn tin
SQL

Ngôn ngữ thao tác dữ liệu
(Data Manipulate Language - DML)
Ngôn ngữ định nghĩa dữ liệu
(Data Definition Language - DDL)

Ngôn ngữ truy vấn dữ liệu
z Ngôn ngữ thủ tục
Ngư
Người dùng
z Đại số quan hệ
z SQL Truy vấn và sửa
đổi dữ liệu DML
z Ngôn ngữ phi thủ tục
z Phép tính quan hệ bộ Internal
Schema
z Phép tính quan hệ miền
z QBE
z Sử dụng trong Access, giao diện đồ họa Ngôn ngữ
định nghĩa
z Datalog dữ liệu DDL
z Cú pháp như Prolog Logical
Schema

© Bộ môn Tin học - ĐH Thăng Long 2

1

Cơ sở dữ liệu 1 - 4

CSDL Quản lý cho thuê đĩa phim
z Mô hình DL quan hệ trình bày dưới dạng đồ hoạ
PHIM BANSAO
# Mafim # MaBS CTHD
TLPHIM Tenfim @ Mafim
#@ Mafim NamSX Tinhtrang #@ SoHD
#@ MaTL Giathue #@ MaBS
Hang
NhaPP
Ngonngu

THELOAI KHACH
HDTHUE
# MaTL DATFIM # MaKH # SoHD
TenTL #@ Mafim TenKH Ngaythue
#@ MaKH Diachi Ngaytra
Ngaydat Dienthoai @ MaKH
SoCMT

© Bộ môn Tin học - ĐH Thăng Long 3

Giới thiệu
z SQL do IBM đề xuất và đã phát triển
z 1974: SEQUEL (Structure English Query Language)
z 1976: SEQUEL2 – Data definition, Manipulation, Control
z 1983: SQL (DB2)
z 1986: Database Language ISO 9075-1987 (DB2.1)
z 1989: Added Embedded SQL
z 1992: SQL-92, ISO/IEC 9075-1992 (DDL-DML extend)
z 1999: SQL-99, Object – Oriented feature
z Hiện nay là ngôn ngữ vấn tin quan hệ được sử
dụng trong nhiều hệ thống CSDL thương mại

© Bộ môn Tin học - ĐH Thăng Long 4

2

Cơ sở dữ liệu 1 - 4

Mô hình dữ liệu trong SQL
z SQL dựa trên phép toán tập hợp và quan hệ
z Kết quả của một câu lệnh SQL là một quan hệ.
z Mô hình sử dụng
z Bảng là tập các dòng dữ liệu
z Mỗi một dòng trong bảng có cùng số cột và trên
cùng các miền giá trị.
z Cho phép các dòng giống nhau
z Thứ tự các dòng lưu trữ không xác định
z Ngôn ngữ SQL gồm
z Ngôn ngữ định nghĩa dữ liệu – DDL
z Ngôn ngữ thao tác dữ liệu - DML

© Bộ môn Tin học - ĐH Thăng Long 5

Ngôn ngữ định nghĩa dữ liệu
z Dùng để định nghĩa các lược đồ trong CSDL
z Gồm 3 câu lệnh
z Tạo lược đồ: CREATE
z Xóa lược đồ: DROP
z Thay đổi cấu trúc lược đồ: ALTER
z Được áp dụng để tạo
z Bảng: Table
z Khung nhìn: View
z Miền: Domain
z Tập ký tự: Character set
z …

© Bộ môn Tin học - ĐH Thăng Long 6

3

Tên cột n…].4 CREATE TABLE (1) z Tạo cấu trúc bảng cơ sở trong CSDL z Tạo bảng gồm z Tên bảng: Table name z Định nghĩa cột z Tên cột: Field name z Kiểu dữ liệu: Data type z Ràng buộc trên cột: Column constraint z Giá trị mặc định: Default value z Ràng buộc trên bảng: Table constraint © Bộ môn Tin học .Cơ sở dữ liệu 1 . [Ràng buộc bảng] ) z Chú ý z Giá trị mặc định của cột là NULL z Ràng buộc trên nhiều cột → Ràng buộc bảng © Bộ môn Tin học .ĐH Thăng Long 8 4 .ĐH Thăng Long 7 CREATE TABLE (2) z Cú pháp CREATE TABLE Tên bảng ( Tên_cột Kiểu/độ_rộng DEFAULT Giá_trị [ NULL | NOT NULL] [ PRIMARY KEY | UNIQUE | [FOREIGN KEY] REFERENCES Tên_bảng(Tên_cột)] [.

Cơ sở dữ liệu 1 .4 CREATE TABLE (3) z Một số loại ràng buộc ¾ NOT NULL: trường không được phép để trống ¾ PRIMARY KEY: khóa chính ≈ NOT NULL và UNIQUE ¾ FOREIGN KEY: khóa ngoại.2) Not Null 3000 Hãng Char(35) Nhà PP Char(35) Ngôn ngữ Char(20) “English” z Bảng Datphim Mã phim Char(5) PK.ĐH Thăng Long 10 5 . FK(Phim) Not Null Mã KH Char(7) PK.ĐH Thăng Long 9 Ví dụ (1) z Bảng Phim được mô tả Mã phim Char(5) PK Not Null Tên phim Char(50) Not Null Năm SX Date ≤ Năm HT Giá thuê Numeric(7. FK(Khachhang) Not Null Ngày Date NgayHT ≥ Ngày HT © Bộ môn Tin học . liên kết ¾ UNIQUE: có giá trị duy nhất ¾ DEFAULT: giá trị sẽ nhận khi người dùng không nhập vào trường đó ¾ CHECK: biểu thức điều kiện mà giá trị nhập vào trường đó phải thỏa mãn ¾ … © Bộ môn Tin học .

Giathue Numeric(7. Hang Char(35).ĐH Thăng Long 12 6 .4 Ví dụ (2) z Bảng Khachhang Mã KH Char(7) PK Not Null Tên KH Char(50) Not Null Địa chỉ Char(50) Not Null Điện thoại Char(20) SoCMT Char(10) Unique Not Null z Bảng Bansao Mã phim Char(5) PK.2) Default 3000.ĐH Thăng Long 11 Ví dụ (3) z CREATE TABLE Phim ( Mafim Char(5) Not Null Primary key. Primary key (Mafim. FK(Phim) Not Null Mã BS Char(3) PK Not Null Tình trạng Byte 0 ≥0 And ≤3 © Bộ môn Tin học . NamSX Date Check (Date <= NgayHT). Ngaydat Date Default NgayHT Check (Ngaydat>= NgayHT). MaKH Char(7) Not Null References Khach(MaKH). NhaPP Char(35).Cơ sở dữ liệu 1 . Ngonngu Char(20) Default “English” ) z CREATE TABLE Datfim ( Mafim Char(5) Not Null References Phim(Mafim). Tenfim Char(50) Not Null. MaKH) ) © Bộ môn Tin học .

ĐH Thăng Long 13 DROP TABLE z Dùng để xóa bảng cơ sở và các định nghĩa của bảng đó z Bảng bị xóa sẽ không được sử dụng trong các lệnh truy vấn. MaBS Char(3) Not Null. Dienthoai Char(20).ĐH Thăng Long 14 7 . MaBS). cập nhật dữ liệu z Cú pháp DROP TABLE Tên_bảng z Ví dụ: Xoá bảng Khach DROP TABLE Khach © Bộ môn Tin học .4 Ví dụ (4) z CREATE TABLE Khach ( MaKH Char(7) Not Null Primary key. Diachi Char(50) Not Null. Primary key (Mafim.Cơ sở dữ liệu 1 . Tinhtrang Byte Not Null Default 0 Check (Tinhtrang>= 0 And Tinhtrang <=3). SoCMT Char(10) Unique ) z CREATE TABLE Bansao ( Mafim Char(5) Not Null. Foreign key Mafim References Phim(Mafim) ) © Bộ môn Tin học . TenKH Char(50) Not Null.

ĐH Thăng Long 16 8 .2) © Bộ môn Tin học .ĐH Thăng Long 15 Ngôn ngữ thao tác dữ liệu z Câu lệnh truy vấn dữ liệu SELECT z Cấu trúc lệnh SELECT cơ bản z Các kiểu kết nối bảng z UNION z Các hàm gộp nhóm z Truy vấn lồng nhau z Các lệnh thao tác trên cơ sở dữ liệu z INSERT z UPDATE z DELETE © Bộ môn Tin học .Cơ sở dữ liệu 1 .4 ALTER TABLE z Dùng để z Thêm/ xóa cột z Khi thêm: các bản ghi cũ có giá trị ntn? z Thay đổi giá trị mặc định của cột z Thêm/ xóa ràng buộc z Chú ý: chỉ xóa các ràng buộc được NSD đặt tên z Cú pháp ALTER TABLE Tên_bảng ADD Tên_cột Kiểu/Độ rộng… DROP Tên_cột/ Tên_ràng_buộc z Ví dụ ALTER TABLE Khach DROP Dienthoai ADD Sodu Numeric(8.

RK z Tương đương với biểu thức đại số quan hệ sau: ∏Ri1.Ai2.….AK FROM R1. Trong đó R1. …. …. AiK : Các cột (thuộc tính) của bảng R1. ….A1. RK WHERE Ψ .Cơ sở dữ liệu 1 . RK Ai1.…. R2. R2. RK: lược đồ quan hệ (bảng) Ψ: biểu thức logic xác định trên quan hệ R1. ….ĐH Thăng Long 17 Mệnh đề SELECT z Liệt kê các thuộc tính muốn hiển thị trong kết quả của một câu truy vấn z gần tương tự như phép chiếu trong ĐSQH z VD hiển thị danh sách các Khách hàng SELECT TenKH FROM Khach z Có thể tương đương với câu ĐSQH ∏ TenKH (Khach) z Chú ý: SQL không cho phép dùng dấu “-” trong tên thuộc tính z dùng Ho_va_ten thay cho Ho-va-ten © Bộ môn Tin học . Ai2. Rik. RiK. R2.Ak δΨ(R1*R2*…*RK) © Bộ môn Tin học .….ĐH Thăng Long 18 9 . R2.4 Câu lệnh truy vấn dữ liệu z Câu lệnh cơ bản SELECT Ri1.

khi đó kết quả thêm một cột với giá trị hằng ở mỗi dòng. Tenfim AS “Tên”. z Để loại bỏ các dòng trùng nhau dùng từ khóa DISTINCT z Ví dụ: Hiển thị mã khách đã đặt thuê phim SELECT DISTINCT MaKH FROM Datfim z Dấu * được dùng khi muốn xem tất cả các trường trong bảng.Cơ sở dữ liệu 1 .4 Mệnh đề SELECT (tiếp) z SQL cho phép các dòng trùng nhau trong quan hệ kết quả. số. “co ten la”. *. -.…).ĐH Thăng Long 20 10 . TenKH FROM Khach z Có thể chứa các biểu thức đại số với các phép toán +. SELECT MaKH.ĐH Thăng Long 19 Mệnh đề SELECT (tiếp) z Có thể chứa các hằng (xâu ký tự.1 AS Thuế FROM Phim z Chú ý: Nếu tên mới của thuộc tính có chứa dấu cách thì phải đặt trong cặp dấu “” © Bộ môn Tin học . Giathue * 0. z Ví dụ: Xem thông tin đầy đủ của các phim SELECT * FROM Phim © Bộ môn Tin học . / z Đặt lại tên của một thuộc tính dùng từ khóa AS SELECT Mafim AS “Mã phim”.

Khach z Nối tự nhiên: điều kiện nối đặt ở mệnh đề WHERE z Kết nối: dùng từ khoá JOIN z Nối nội: INNER JOIN z Nối ngoài: OUTER JOIN © Bộ môn Tin học .4 Mệnh đề SELECT (tiếp) z Có thể lấy ra (hạn chế) vài bộ (bản ghi) trên đầu tập kết quả của truy vấn → dùng TOP Values z TOP Values có nghĩa hơn khi kết hợp với mệnh đề ORDER BY z Ví dụ: Xem 5 lượt đặt thuê phim gần đây nhất của khách K01 SELECT TOP 5 Mafim.ĐH Thăng Long 21 Mệnh đề FROM z Liệt kê các quan hệ sử dụng trong câu truy vấn z Có thể đặt lại tên quan hệ → dùng từ khoá AS z Ví dụ: FROM Datfim AS DF z Có thể chỉ định cách kết hợp các quan hệ z Tích Decartes: FROM Datfim.ĐH Thăng Long 22 11 .Cơ sở dữ liệu 1 . Ngaydat FROM Datfim WHERE MaKH = “K01” ORDER BY Ngaydat DESC Chú ý: có thể lấy TOP n PERCENT (n% bản ghi) © Bộ môn Tin học .

Khach WHERE Datfim. TenKH.MaKH = Khach. Dchi. Dchi.MaKH AND Ngaydat = ‘5/1/06’ © Bộ môn Tin học .ĐH Thăng Long 24 12 .MaKH = Khach. TenKH. DT.Cơ sở dữ liệu 1 .4 Nối tự nhiên DATFIM KHACH Mafim MaKH Ngaydat MaKH TenKH DT Dchi 1 K01 5/1/06 K01 Vũ Anh Bạch Mai 2 K01 5/1/06 K02 Lê Hải Hà 82882445 Hạ Đình 1 K02 5/1/06 K03 Trần Tú 8584490 Phố Huế 3 K01 9/1/06 z Hiển thị thông tin về khách và mã phim đã đặt trong ngày 5/1/06 SELECT MaKH.MaKH WHERE Ngaydat = ‘5/1/06’ z Chỉ những bản ghi thoả mãn điều kiện sẽ xuất hiện trong kết quả z Nối tự nhiên & nối nội khác nhau ntn? © Bộ môn Tin học . Mafim FROM Datfim. DT.ĐH Thăng Long 23 INNER JOIN z Có thể thay thế nối tự nhiên bằng kết nối nội → thời gian thực hiện nhanh hơn SELECT MaKH. Mafim FROM Datfim INNER JOIN Khach ON Datfim.

ĐH Thăng Long 25 OUTER JOIN (2) z Ví dụ z Hiển thị thông tin về khách và việc đặt thuê phim SELECT TenKH. DT.ĐH Thăng Long 26 13 . Mafim. Dchi. Ngaydat FROM Khach LEFT JOIN Phim ON Khach.MaKH = Phim. © Bộ môn Tin học .MaKH z Kết quả TenKH DT Dchi Mafim Ngaydat Vũ Anh Bạch Mai 1 5/1/06 Vũ Anh Bạch Mai 2 5/1/06 Lê Hải Hà 82882445 Hạ Đình 1 5/1/06 Vũ Anh Bạch Mai 3 9/1/09 Trần Tú 8584490 Phố Huế null null © Bộ môn Tin học .Cơ sở dữ liệu 1 .4 OUTER JOIN (1) z Dùng để hiển thị đầy đủ các bản ghi thuộc bảng nào đó kể cả các bản ghi không thoả mãn điều kiện nối z Có 3 loại nối ngài z LEFT [OUTER] JOIN z RIGHT [OUTER] JOIN z FULL [OUTER] JOIN z Giá trị trên các trường thuộc bảng trái/ phải của bản ghi không thoả điều kiện có giá trị Null.

OR. ‘2/1/06’.>=.<=. NOT EXISTS..4 Mệnh đề WHERE z Mệnh đề WHERE chứa biểu thức điều kiện mà mỗi dòng trong kết quả phải thỏa mãn z Tương tự biểu thức điều kiện của phép chọn trong đại số quan hệ (các toán tử >. SELECT * FROM Datfim WHERE (Ngaydat>=‘1/1/06’) AND (Ngaydat<=‘3/1/06’) Hoặc WHERE Ngaydat BETWEEN ‘1/1/06’ AND ‘10/1/06’ Hoặc WHERE Ngaydat IN (‘1/1/06’. NOT z Từ khóa BETWEEN … AND..<.) z Biểu thức logic có thể dùng z Toán tử logic AND. NOT IN.=.Cơ sở dữ liệu 1 . IN.ĐH Thăng Long 27 Mệnh đề WHERE (tiếp) z Ví dụ: Hiển thị thông tin về các lần đặt phim trong 3 ngày đầu tháng 1/06. NOT BETWEEN … AND. ‘3/1/06’) © Bộ môn Tin học . … © Bộ môn Tin học . EXISTS..ĐH Thăng Long 28 14 .

[ký tự đầu-ký tự cuối] z VD xem khách có tên Nam. hay bắt đầu là Hu/Ho SELECT * FROM Khach WHERE (TenKH LIKE “*Nam”) OR (TenKH LIKE “H[uo]*”) © Bộ môn Tin học . không xác định z ..4 Mệnh đề WHERE (tiếp) z So sánh xâu ký tự: LIKE “xâu ký tự” z Thay thế cho 1 hoặc nhiều ký tự bất kỳ z % (SQL server).ĐH Thăng Long 29 Mệnh đề WHERE với giá trị Null z Khi nào một thuộc tính có giá trị Null z Giá trị của thuộc tính bị mất z Giá trị không biết z Giá trị không tồn tại. * (Access) z Thay thế cho 1 ký tự z _ (SQL server). z Các biểu thức tính toán và các hàm trả về giá trị Null khi một trong các toán hạng có giá trị Null.. ? (Access) z Thay thế cho 1 ký tự trong dãy ký tự cho trước z [danh sách ký tự]. z Hàm gộp nhóm bỏ qua giá trị Null z Để kiểm tra thuộc tính có mang giá trị Null không z X IS Null z X IS NOT Null © Bộ môn Tin học .ĐH Thăng Long 30 15 .Cơ sở dữ liệu 1 .

z Ví dụ: Xem tên phim có giá thuê là 3000 hoặc được sản xuất năm 2005.ĐH Thăng Long 31 UNION (1) z Dùng khi gộp dữ liệu từ nhiều nguồn khác nhau z Các quan hệ khi UNION phải khả hợp z Tên các thuộc tính trong câu lệnh SELECT 1 sẽ là tên thuộc tính trong kết quả.ĐH Thăng Long 32 16 . danh sách sắp xếp theo năm SX giảm dần SELECT * FROM Phim WHERE Ngongu = “English” ORDER BY NamSX DESC © Bộ môn Tin học .Cơ sở dữ liệu 1 . SELECT Tenfim AS “Tên fim” FROM Phim WHERE Giathue = 3000 UNION SELECT Tenfim FROM Phim WHERE NamSX = 2500 © Bộ môn Tin học .4 Sắp xếp các bộ dữ liệu kết quả z Dùng mệnh đề ORDER BY để sắp xếp các bản ghi trong kết quả z Sắp xếp tăng dần (mặc định) ASC –Ascending z Sắp xếp giảm dần DESC – Descending z Chỉ sắp xếp theo các trường thuộc SELECT z Ví dụ z Hiển thị danh sách phim có ngôn ngữ Tiếng Anh.

Mafim = D.ĐH Thăng Long 33 Ví dụ (1) z Xem mã khách và ngày đặt mà thuê phim “MI” trong ngày 5/1/06 và 6/1/06.Cơ sở dữ liệu 1 .Diachi LIKE “Đại La” GV SV Magv Hoten Nsinh Dchi Masv Hoten Nsinh Dchi G01 Hà Châu 1970 Bạch Mai G01 Lê A 1970 Đại La G02 Lệ Chi 1972 Đại La G02 Lệ Chi 1972 Bạch Mai G03 Lê An 1974 Phố Huế G03 Hà An 1974 Phố Huế Kquả Hoten Lệ Chi Lê A © Bộ môn Tin học .Diachi LIKE “Đại La” UNION SELECT Hoten FROM GV WHERE GV.ĐH Thăng Long 34 17 .4 UNION (2) ƒ Hiển thị tên các sv và gv ở Đại La SELECT Hoten FROM SV WHERE SV. Ngaydat FROM Phim AS P INNER JOIN Datfim AS D ON P. SELECT MaKH.Mafim WHERE Tenfim = “MI” AND ( Ngaydat = ‘5/1/06’ OR Ngaydat = ‘6/1/06’ ) © Bộ môn Tin học .

MaKH = K.Cơ sở dữ liệu 1 . SELECT DISTINCT Tenfim FROM ( Phim AS P INNER JOIN Datfim AS D ON P.MaKH WHERE TenKH LIKE “*Owen” AND ( Ngaydat = ‘5/1/06’ ) © Bộ môn Tin học .4 Ví dụ (2) z Xem tên các fim mà khách có tên Owen đã đặt thuê trong ngày 5/1/06.ĐH Thăng Long 36 18 .Mafim ) INNER JOIN Khach AS K ON D. z Các hàm gộp nhóm thường dùng để tính toán trên các thuộc tính kiểu Number (hoặc kiểu Date) z Sum: Tổng các giá trị z Count: Đếm giá trị số z Avg: Giá trị trung bình z Max: Giá trị lớn nhất z Min: Giá trị nhỏ nhất © Bộ môn Tin học .ĐH Thăng Long 35 Hàm gộp nhóm (Aggregate functions) z Nhóm các giá trị trong một thuộc tính của các dòng để tính toán và trả về kết quả là 1 giá trị.Mafim = D.

SoHD = CT.ĐH Thăng Long 38 19 .SoHD) INNER JOIN Bansao B ON CT.Mafim WHERE MaKH = “K01” © Bộ môn Tin học .ĐH Thăng Long 37 Hàm gộp nhóm (tiếp) z Có thể kết hợp với DISTINCT để loại bỏ giá trị trùng lặp trước khi tính gộp nhóm z Ví dụ: Khách K01 đã đặt thuê bao nhiêu phim trong tháng 1 z Khách có thể đặt thuê 1 bộ fim nhiều lần SELECT COUNT(DISTINCT Mafim) FROM Datfim WHERE MaKH = “K01” AND Ngaydat BETWEEN ‘1/1/06’ AND ’31/1/06’ © Bộ môn Tin học .Cơ sở dữ liệu 1 .MaBS) INNER JOIN Phim P ON B.MaBS = B.Mafim = P.4 Hàm gộp nhóm (tiếp) z Giá thuê trung bình một phim là bao nhiêu SELECT AVG(Giathue) AS GiaTB FROM Phim z Số lượng phim có ngôn ngữ Tiếng anh SELECT COUNT(*) FROM Phim WHERE Ngonngu = “English” z Số tiền thuê phim khách K01 đã trả SELECT SUM(Giathue*(Ngaythue-Ngaytra)) FROM ((HDthue HD INNER JOIN CTHopdong CT ON HD.

4 Mệnh đề GROUP BY z Chia quan hệ lớn thành các quan hệ nhỏ hơn theo từng giá trị của thuộc tính được GROUP BY z GROUP BY: sắp xếp các giá trị tăng dần của thuộc tính đó z Hàm gộp nhóm sẽ thực hiện trên từng nhóm giá trị của các bản ghi được xác định bởi GROUP BY.ĐH Thăng Long 39 Mệnh đề GROUP BY (tiếp) A1 A2 A3 a 4 a 3 f 2 A1 A3 f 2 a 3.Cơ sở dữ liệu 1 .75 t 3 z 6 t 6 t 2 z 6 Trường Trường gộp nhóm tính toán GROUP BY A1 AVG(A3) © Bộ môn Tin học .5 f 5 f 3 t 4 t 3. z Nếu thuộc tính xuất hiện trong mệnh đề SELECT mà không kết hợp với hàm gộp nhóm thì phải xuất hiện trong mệnh đề GROUP BY. © Bộ môn Tin học .ĐH Thăng Long 40 20 .

MAX(Giathue) FROM Phim WHERE NamSX = 2005 GROUP BY Ngonngu © Bộ môn Tin học .Cơ sở dữ liệu 1 .ĐH Thăng Long 41 Mệnh đề HAVING z Tương đương mệnh đề WHERE z Dùng để lọc các giá trị sau khi đã tính gộp nhóm z Chú ý: z Biểu thức logic ở WHERE được kiểm tra trước khi gộp nhóm z Biểu thức logic ở HAVING được kiểm tra sau khi gộp nhóm © Bộ môn Tin học .4 Mệnh đề GROUP BY (tiếp) z Mỗi khách hàng đặt thuê phim bao nhiêu lần SELECT MaKH.ĐH Thăng Long 42 21 . COUNT(*) FROM Datfim GROUP BY MaKH z Giá thuê phim cao nhất trong mỗi ngôn ngữ của các phim sản xuất năm 2005 SELECT Ngonngu.

Hiển thị các thể loại phim có giá thuê trung bình trên 5 USD 4.MaKH=D. TenKH. TenKH. COUNT(DISTINCT Mafim) AS SP FROM Datfim AS D INNER JOIN Khach AS K ON K. COUNT(DISTINCT Mafim) AS SP .. Xem tên phim có giá thuê trên 5 USD 3.ĐH Thăng Long 44 22 . HAVING SP >=5 © Bộ môn Tin học .ĐH Thăng Long 43 WHERE hay HAVING ? 1.MaKH GROUP BY MaKH.Cơ sở dữ liệu 1 .. TenKH HAVING COUNT(DISTINCT Mafim)>=5 z Nếu dùng như sau có được không? SELECT MaKH. Xem tên khách đã đặt thuê phim trên 5 lần 2.4 Mệnh đề HAVING (tiếp) z Xem tên khách hàng đã đặt thuê ít nhất 5 phim SELECT MaKH. Hiển thị các phim có trên 5 bản sao © Bộ môn Tin học .

ĐH Thăng Long 45 Định lượng một câu SQL z Một truy vấn được định lượng trong một thứ tự khác với thứ tự trong lệnh SQL Ö Các bảng trong FROM được kết nối với nhau theo cách kết nối được chỉ ra Ö Các yêu cầu trong WHERE được thực hiện Ö Các bộ kết quả được gom nhóm theo GROUP BY Ö Các yêu cầu trong HAVING được so sánh trên từng nhóm.Cơ sở dữ liệu 1 . có thể một số nhóm bị loại khỏi kết quả Ö Hàm gộp nhóm được thực hiện trên từng nhóm còn lại Ö Mệnh đề SELECT được thực hiện cuối cùng © Bộ môn Tin học .4 Câu lệnh SELECT đầy đủ SELECT các thuộc tính FROM bảng WHERE biểu thức logic GROUP BY thuộc tính gộp nhóm HAVING biểu thức logic yêu cầu lọc sau khi tính hàm gộp nhóm ORDER BY thuộc tính sắp xếp [ASC/DESC] © Bộ môn Tin học .ĐH Thăng Long 46 23 .

( SELECT TenKH FROM Khach WHERE MaKH = “K01” ). (Ngaythue-Ngaytra)* ( SELECT Giathue FROM Bansao B INNER JOIN Phim P ON B.MaBS ) AS Tienthue FROM HDthue HD INNER JOIN CTHopdong CT ON HD.SoHD WHERE Ngaytra = ‘5/1/06’ © Bộ môn Tin học .1 z Phần SELECT có thể chứa 1 câu lệnh SQL khác khi câu lệnh con trả về kết quả là 1 giá trị đơn.4 Câu lệnh lồng nhau (lồng trong phần SELECT). MaBS. z Ví dụ 1: Xem thông tin các lượt đặt phim và tên của khách có mã K01 SELECT MaKH.2 z Ví dụ 2: Tính số tiền chi tiết mà khách đã trả vào ngày 5/1/06 SELECT SoHD.SoHD = CT.MaBS = B.ĐH Thăng Long 47 Câu lệnh lồng nhau (lồng trong phần SELECT).Mafim = P.Cơ sở dữ liệu 1 .ĐH Thăng Long 48 24 . Ngaydat FROM Datfim WHERE MaKH = “K01” z Kết quả MaKH TenKH Mafim Ngaydat K01 Owen 1 1/1/06 K01 Owen 3 1/1/06 K01 Owen 2 5/1/06 © Bộ môn Tin học . Mafim.Mafim WHERE CT.

SELECT Tenfim. TenKH. Giathue FROM Phim AS P1 INNER JOIN ( SELECT MAX(Giathue) AS GCN FROM Phim ) AS P2 ON P1. Tenfim. Dienthoai.ĐH Thăng Long 49 Câu lệnh lồng nhau (lồng trong phần FROM).ĐH Thăng Long 50 25 .Ngonngu=P2.Cơ sở dữ liệu 1 .MaKH=K2.MaKH z Chú ý: Phải đặt tên bí danh cho câu SQL con © Bộ môn Tin học .Giathue=P2. Diachi. NamSX FROM Phim AS P1 INNER JOIN ( SELECT Ngonngu FROM Phim WHERE Tenfim = “MI” ) AS P2 ON P1. SoCMT FROM Khach AS K1 INNER JOIN ( SELECT MaKH FROM Datfim WHERE Mafim IN (1.GCN WHERE Ngonngu = “English” z Ví dụ 3: Xem tên và năm SX của phim có cùng ngôn ngữ với phim MI. 2) ) AS K2 ON K1.4 Câu lệnh lồng nhau (lồng trong phần FROM).1 z Thành phần trong FROM có thể gồm z Tên của quan hệ z Kết quả của một câu lệnh SQL → Câu SQL khác z Ví dụ 1: Hiển thị thông tin của khách đặt thuê phim có mã 1 hoặc 2 SELECT MaKH.Ngonngu © Bộ môn Tin học . NamSX. Ngonngu.2 z Ví dụ 2: Hiển thị thông tin các phim có ngôn ngữ Tiếng Anh mà có Giá thuê cao nhất SELECT Mafim.

Giathue FROM Phim WHERE NamSX = ( SELECT NamSX FROM Phim WHERE Tenfim = “MI” ) z Chú ý: Truy vấn trả về 1 giá trị có thể kết hợp với các toán tử so sánh >.ĐH Thăng Long 52 26 . <. <=. <>.1 z Câu truy vấn trong mệnh đề Where có thể là z Quan hệ gồm 1 cột và 1 dòng (giá trị vô hướng) z Quan hệ gồm 1 cột và nhiều dòng (tập giá trị) z Quan hệ gồm nhiều cột z Có thể sử dụng câu truy vấn lồng trong mệnh đề HAVING. =. © Bộ môn Tin học . Ngonngu. cách dùng tương tự với truy vấn lồng trong WHERE © Bộ môn Tin học . Tenfim.2 z Ví dụ 1: Xem các phim cùng năm SX với phim MI SELECT Mafim.Cơ sở dữ liệu 1 .ĐH Thăng Long 51 Câu lệnh lồng nhau (lồng trong phần WHERE).4 Câu lệnh lồng nhau (lồng trong phần WHERE). >=.

dòng) có thể kết hợp với từ khoá EXISTS hoặc NOT EXISTS © Bộ môn Tin học . nếu dùng với ALL/ ANY z từ khoá IN..Cơ sở dữ liệu 1 .4 Câu lệnh lồng nhau (lồng trong phần WHERE). EXISTS. NOT EXISTS © Bộ môn Tin học .4 z Ví dụ 3: Xem thông tin đặt thuê phim của các khách hàng có địa chỉ Paris SELECT MaKH.ĐH Thăng Long 53 Câu lệnh lồng nhau (lồng trong phần WHERE).. =. <.ĐH Thăng Long 54 27 .* FROM Phim AS P WHERE Mafim IN ( SELECT Mafim FROM Datfim WHERE Ngaydat = ‘5/1/06’ ) z Chú ý: Truy vấn trả về dãy giá trị được kết hợp z toán tử so sánh >. NOT IN. Mafim. Ngaydat FROM Datfim WHERE EXISTS ( SELECT * FROM Khach WHERE Diachi LIKE “*Paris*”) z Chú ý: Truy vấn trả về một bảng (gồm nhiều cột..3 z Ví dụ 2: Xem thông tin các phim được đặt thuê vào ngày 5/1/06 SELECT P.

COUNT(*) FROM Khach AS K INNER JOIN Datfim AS D ON K.1 z Ví dụ: Xem thông tin các khách có số lượng đặt thuê phim nhiều hơn khách K01 SELECT K.4 Câu lệnh lồng nhau (lồng trong phần HAVING). Mafim. Ngaydat HAVING COUNT(*) > ( SELECT COUNT(*) FROM Datfim WHERE MaKH= “K01”) © Bộ môn Tin học . Mafim.ĐH Thăng Long 55 Thao tác khác trên dữ liệu z Các thao tác thay đổi dữ liệu trong bảng cơ sở z Bao gồm z Thêm bản ghi: INSERT z Sửa/ cập nhật thông tin: UPDATE z Xóa bản ghi: DELETE © Bộ môn Tin học .MaKH.MaKH. Ngaydat.MaKH = D.MaKH GROUP BY K.ĐH Thăng Long 56 28 .Cơ sở dữ liệu 1 .

z Các cột bỏ qua sẽ tự nhận giá trị NULL nếu cột đó cho phép NULL. “Richard”. © Bộ môn Tin học ..4 INSERT z Thêm 1 bản ghi với giá trị ghi sau mệnh đề VALUES vào bảng z Cú pháp INSERT [INTO] TABLE Tên_bảng [<d/sách cột>] VALUES (dòng định thêm) z Chú ý z Nếu dòng thêm vào có đầy đủ giá trị ở các cột thì không cần liệt kê thuộc tính của bảng. Mafim. Diachi) VALUES (“K01”. TenKH.. Ngaydat FROM Datfim D.”) z Ví dụ 2: Thêm vào bảng Datfim cho khách Richard các phim mà K02 đã thuê vào ngày 5/1/06 INSERT INTO TABLE Datfim SELECT K. để thêm đồng thời nhiều bản ghi vào bảng © Bộ môn Tin học .. Khach K WHERE TenKH = “Richard” AND D. sẽ báo lỗi nếu cột đó là NOT NULL..MaKH = “K01” AND Ngaydat = ‘5/1/06’ z Chú ý: có thể dùng lệnh INSERT INTO.ĐH Thăng Long 57 INSERT (tiếp) z Ví dụ 1: Thêm 1 khách vào bảng Khach INSERT INTO TABLE Khach(MaKH. “Claverd B.MaKH. SELECT.Cơ sở dữ liệu 1 .ĐH Thăng Long 58 29 .

UPDATE Phim SET Giathue = ( SELECT Giathue FROM Phim WHERE Tenfim = “MI” ) WHERE Ngonngu = “English” © Bộ môn Tin học . Trường2=giá trị mới 2.4 UPDATE z Cập nhật giá trị mới cho các trường liệt kê sau SET của những bản ghi thoả mãn điều kiện z Cú pháp UPDATE Tên bảng SET Trường1=giá trị mới 1.ĐH Thăng Long 60 30 .ĐH Thăng Long 59 UPDATE (tiếp) z Ví dụ 1: Sửa ngày đặt phim thành 15/1/06 của khách K01 đặt thuê vào ngày 1/1/06 UPDATE Datfim SET Ngaydat = ‘15/1/06’ WHERE MaKH = “K01” AND Ngaydat = ‘1/1/06’ z Ví dụ 2: Cập nhật giá thuê của phim có Ngôn ngữ English với giá thuê mới bằng của phim MI.Cơ sở dữ liệu 1 .… WHERE Điều kiện logic z Chú ý: Giá trị mới có thể là z Kết quả câu truy vấn trả về 1 giá trị z Biểu thức số học © Bộ môn Tin học .

ĐH Thăng Long 62 31 .Mafim = D.ĐH Thăng Long 61 DELETE (tiếp) z Ví dụ 1: Xóa thông tin đặt thuê của khách K01 DELETE FROM Datfim WHERE MaKH = “K01” z Ví dụ 2: Xoá những phim có giá thuê dưới mức trung bình của các phim đặt thuê vào ngày 5/1/06 DELETE FROM Phim WHERE Giathue < ( SELECT AVG(Giathue) FROM Phim P INNER JOIN Datfim D ON P.4 DELETE z Xoá các bản ghi thoả mãn điều kiện ra khỏi bảng z Cú pháp DELETE FROM Tên bảng WHERE Điều kiện logic z Chú ý z Có thể dùng bảng khác để xác định các dòng cần xoá © Bộ môn Tin học .Cơ sở dữ liệu 1 .Mafim WHERE Ngaydat = ‘5/1/06’ ) © Bộ môn Tin học .