Professional Documents
Culture Documents
CƠ SỞ DỮ LIỆU
Lê Đức Long
Email: longld@math.hcmup.edu.vn
Website: http://www.2learner.edu.vn
NỘI DUNG TRÌNH BÀY
8
Tạo cơ sở dữ liệu
Tạo mới một database và các files được dùng để lưu trữ Database, hay
attaches một Database từ các files của một previously created Database.
Tối đa có thể tạo 32,767 databases trên một DB server.
Có 3 loại file được dùng để lưu trữ một Database:
The primary file contains the startup information for the database. The primary file is also
used to store data. Every database has one primary file. (tập tin dữ liệu)
Secondary files hold all of the data that does not fit in the primary data file. Databases
need not have any secondary data files if the primary file is large enough to hold all of the
data in the database. Other databases may be large enough to need multiple secondary data
files, or they may use secondary files on separate disk drives to spread the data across
multiple disks.
Transaction log files hold the log information used to recover the database. There must
be at least one transaction log file for each database, although there may be more than
one. The minimum size for a transaction log file is 512 KB. (tập tin lƣu vết)
Mỗi Database phải có ít nhất 2 files, a primary file and a transaction log file.
Có thể đặt tên các file này theo qui tắc đặt tên file bình thƣờng, nhƣng nên sử dụng tên và
phần mở rộng mặc định (xem bảng dƣới)
12
Xoá cơ sở dữ liệu hiện có
Lưu ý:
Không thể hủy bỏ các CSDL hệ thống như: Master, Model, Tempdb
Để hủy bỏ một CSDL thành công thì phải đảm bảo không còn người sd đang
truy cập CSDL
Tuyệt đối không xoá CSDL bằng cách sử dụng Windows Explorer hoặc
Windows Commander (chẳng hạn) để hủy bỏ các loại tập tin dữ liệu của SQL
trong thư mục C:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA
13
Lệnh tạo bảng (Table)
Để định nghĩa một bảng
Tên bảng
Các thuộc tính
• Tên thuộc tính
• Kiểu dữ liệu
• Các RBTV trên thuộc tính
Cú pháp tổng quát
CREATE TABLE < Tên quan hệ> (
<Thuộc tính> <Kiểu> [<Kích thƣớc>] [NOT NULL],….
PRIMARY KEY (<Khoá chính>)
[UNIQUE (<Khoá chỉ định>),…]
[FOREIGN KEY (<Khoá ngoại>) REFERENCES <bảng>,…]
[CHECK < Điều kiện ràng buộc>, …]
[CONSTRAINT <Tên ràng buộc> <kiểu ràng buộc>] )
14
QUAN SÁT CỬA SỔ ENTERPRISE MANAGER
CSDL QLSinhVien
15
CREATE TABLE < Tên quan hệ> (
<Thuộc tính> <Kiểu> [<Kích thƣớc>] [NOT NULL],….
PRIMARY KEY (<Khoá chính>)
[UNIQUE (<Khoá chỉ định>),…]
[FOREIGN KEY (<Khoá ngoại>) REFERENCES <bảng>,…]
[CHECK < Điều kiện ràng buộc>, …]
[CONSTRAINT <Tên ràng buộc> <kiểu ràng buộc>] )
Ý NGHĨA
Lệnh tạo một bảng rỗng có cấu trúc gồm các thuộc tính với các kiểu
dữ liệu tƣơng ứng, cùng với một số tham số.
-Các kiểu dữ liệu có thể sử dụng nhƣ: char(n), smallint, integer,
decimal(p,s), real, datetime, binary, ...
-not null: thuộc tính không lấy giá trị rỗng. Lưu ý thuộc tính khoá
mặc nhiên bị ràng buộc not null.
-primary key (<khoá chính>): khai báo khoá chính của bảng.
-unique (<khoá>): khai báo các khoá chỉ định khác (nếu có)
-foreign key (<khoá ngoại>) …: khai báo khoá ngoại của bảng
-check <điều kiện ràng buộc>: mô tả các ràng buộc miền giá trị
16
Các kiểu dữ liệu của SQL
Số (numeric)
INTEGER
SMALLINT
NUMERIC, NUMERIC(p),
Kiểu số thường dùng NUMERIC(p,s)
trong lập trình
DECIMAL, DECIMAL(p),
DECIMAL(p,s)
REAL
DOUBLE PRECISION
FLOAT, FLOAT(p)
17
Kiểu dữ liệu (tt)
Xem MS SQL Online Help
Storage
Datatype Range
(bytes)
bigint -263 to 263-1 8
int -231 to 231-1 4
smallint -215 to 215-1 2
tinyint 0 to 255 1
- 922,337,203,685,477.5808 to
money 922,337,203,685,477.5807 with accuracy of one ten- 8
thousandth of a monetary unit
-214,748.3648 to 214,748.3647, with accuracy of
smallmoney 4
one ten-thousandth of a monetary unit
decimal(p,s) Whole or fractional numbers from -1038 to 1038 2~17
Approximations of numbers from -1.79E308 to
float 8
1.79E308 (15 digit precision)
Approximations of numbers from -3.40E38 to 3.40E38
real 4
(7 digit precision)
20
Table 6-3. SQL Server decimal and numeric datatype storage requirements.
1 to 9 5
10 to 19 9
20 to 28 13
29 to 38 17
Storage
Datatype Range
(bytes)
January 1, 1753, through December 31, 9999, with an
datetime 8
accuracy of three-hundredths of a second
January 1, 1900, through June 6, 2079,with an
smalldatetime 4
accuracy of one minute
21
Table 6-5. SQL Server character datatypes.
22
Chọn tab Search, Gọi từ menu Start
gõ từ cần tra cứu Start/All Programs/Microsoft SQL Server/Book Online
Gọi trực tiếp từ ứng dụng
Bấm F1 23
Ví dụ - Tạo bảng đơn giản
Khóa chính
Kiểu dữ liệu
Chọn kiểu dữ liệu
phù hợp với phân tích
Mô tả thuộc tính
25
Tạo bảng NHANVIEN có khai báo các khóa
chính, khóa ngoại
Đƣợc dùng để
Thay đổi cấu trúc bảng
Thay đổi các ràng buộc (RB)
29
Ví dụ - Thay đổi cấu trúc bảng
THÊM CỘT
XOÁ CỘT
30
Thao tác chỉnh sửa cấu trúc
31
TẠO BẢNG PHONG BAN
CREATE TABLE PhongBan(
MaPhg char(4) not null,
TenPhg nvarchar(100) not null,
)
TẠO RÀNG BUỘC KHÓA CHÍNH
ALTER TABLE PhongBan ADD CONSTRAINT pk_PhongBan
PRIMARY KEY (MaPhg)
SAU KHI TẠO BẢNG PHONGBAN, TẠO BẢNG NHANVIEN
BỔ SUNG THÊM CÁC RÀNG BUỘC
Cú pháp
DROP TABLE <Tên_bảng>
Ví dụ
DROP TABLE NHANVIEN
33
Lệnh xóa bảng (tt)
(2)
NHANVIEN
HONV TENLOT TENNV MANV NGSINH DCHI PHAI LUONG MA_NQL PHG
(1)
PHONGBAN
(3)
(1) ALTER TABLE PHONGBAN DROP COLUMN TRPHG (xoá cột TRPHG)
34
TRƢỜNG ĐẠI HỌC SƢ PHẠM TP HCM
KHOA TOÁN – TIN
280, An Dương Vương, Q5, Tp HCM ĐT: (08).8352020 - 8352021
BOOK INSERT
INSERTINTO
INTOBOOK
BOOK
Title Author Publisher Year VALUES('Fund
VALUES('Fundof...','..')
of...','..')
Intro to DB Systems Date Addison-Wesley 1986
Fund. of DB Systems Elmasri Addison-Wesley 1989 DELETE
DELETEFROM
FROMBOOKBOOK
WHERE TITLE='London
WHERE TITLE='London
London Fields Amis Penguin 1989
Fields'
Fields'
100 years of solitude Marquez Picador 1982
The history man Bradbury Arrow Books 1977 UPDATE
UPDATEBOOK
BOOK
SET YEAR='1975'
SET YEAR='1975'
WHERE
WHERETITLE=The
TITLE=The
history
historyman'
man'
Title Author
Fund. of DB lmasri SELECT
SELECTTITLE,
TITLE,AUTHOR
AUTHOR
Systems FROM BOOK
FROM BOOK
London Amis WHERE
WHEREYEAR='1989'
YEAR='1989'
Fields
36
Truy vấn dữ liệu
37
CÚ PHÁP CÂU LỆNH SELECT
Trả lời câu truy vấn khai thác CSDL như sau:
“LIỆT KÊ DANH SÁCH CÁC CỘT ĐƯỢC CHỌN TỪ DANH
SÁCH CÁC BẢNG THEO ĐIỀU KIỆN CHỌN”
38
Câu truy vấn cơ bản
Gồm 3 mệnh đề
SELECT <danh sách các cột> Gần giống phép chiếu
SELECT L
FROM R
L (C (R))
WHERE C
40
Ví dụ Liệt kê các nhân viên ở phòng Nghiên
cứu (MÃ PHÒNG = „NC‟)
MANV HONV TENLOT TENNV NGSINH PHAI DCHI MA_NQL PHONG MLUONG
002 Nguyen Thanh Tung 1955-01-09 Nam 731 Tran Hung Dao,Q1,Tp HCM 001 NC 2500000.0
004 Dinh Ba Tien 1968-01-09 Nam 638 Nguyen Van Cu,Q5,Tp HCM 002 NC 2200000.0
006 Nguyen Manh Hung 1973-09-15 Nam 978 Ba Ria,Vung Tau 002 NC 2000000.0
007 Tran Thanh Tam 1975-07-31 Nu 543 Mai Thi Luu,Q1,TpHCM 002 NC 2200000.0
SỬ DỤNG THÊM CÁC TOÁN TỬ LUẬN LÝ AND, OR, NOT, LIKE, BETWEEN
42
Đặt tên/bí danh khi truy vấn
43
Nối các thuộc tính
SỬ DỤNG TOÁN TỬ CỘNG CHUỖI + (CHỈ DÙNG CHO THUỘC TÍNH KIỂU CHUỖI)
MANV HỌ TÊN
002 Nguyen Thanh Tung
004 Dinh Ba Tien
006 Nguyen Manh Hung
44
Mở rộng thuộc tính hiển thị
45
Sử dụng toán tử Between
Ví dụ Liệt kê manv, tennv của các nhân viên có mức lương từ 2.000.000
đến 3.000.000
Lƣơng nhân viên từ 2000000 đến 3000000
MANV TENNV
001 Quyen HAY CÓ THỂ VIẾT LẠI SỬ DỤNG TOÁN TỬ BETWEEN
002 Tung
SELECT MANV, TENNV
003 Nhan
004 Tien FROM NHANVIEN
005 Vu WHERE MLUONG BETWEEN 2000000 AND 3000000
006 Hung
007 Tam
Chú ý Between lấy Từ đâu ….. Đến đâu
46
Sử dụng toán tử Between
Ví dụ Liệt kê manv, tennv của các nhân viên có mức lương KHÔNG
từ 2.000.000 đến 3.000.000
MANV TENNV
008 Van TƢƠNG ĐƢƠNG VỚI CÁCH VIẾT:
47
Sử dụng toán tử In
Ví dụ Liệt kê manv, tennv của các nhân viên có mức lương là
2.500.000 hoặc 3.000.000
48
Sử dụng toán tử Distinct
Ví dụ Liệt kê các mức lương của nhân viên ở phòng
Nghiên cứu (PHONG = „NC‟)
SELECT MLUONG - Loại bỏ sẽ tốn chi phí thời gian
- Người dùng muốn thấy
MLUONG FROM NHANVIEN
- Khi dùng hàm kết hợp nếu tự
2500000.0 WHERE PHONG=‘NC’ động loại bỏ có thể cho kết quả sai
2200000.0
2000000.0 SQL HIỂN THỊ CÁC BỘ TRÙNG
2200000.0 NHAU TRONG KẾT QUẢ TRUY VẤN
1800000.0
MLUONG
SELECT DISTINCT MLUONG -Kết quả cho thấy
1800000.0
đã được sắp thứ tự
FROM NHANVIEN 2000000.0 một cách phân biệt
WHERE PHONG=‘NC’ 2200000.0
2500000.0
49
Sử dụng toán tử Like
TOÁN TỬ LIKE – so sánh chuỗi tương đối
52
Chọn tab Search, Gọi từ menu Start
gõ từ cầm tra cứu Start/All Programs/Microsoft SQL Server/Book Online
Gọi trực tiếp từ ứng dụng
Bấm F1
53
Search với từ khóa Escape, chọn topic LIKE
% Any string of zero or more WHERE title LIKE '%computer%' finds all
characters. book titles with the word 'computer' anywhere in
the book title.
_ (underscore) Any single character. WHERE au_fname LIKE '_ean' finds all four-
letter first names that end with ean (Dean,
Sean, and so on).
[^] Any single character not WHERE au_lname LIKE 'de[^l]%' all author
within the specified range last names beginning with de and where the
([^a-f]) or set ([^abcdef]). following letter is not l.
Cú pháp
Thuộc tính so trùng [ NOT ] LIKE giá trị [ ESCAPE kí tự ]
55
Thể hiện ngày giờ
Các dạng thể hiện trong SQL
MANV TENNV
001 Quyen
Liệt kê manv, tennv của các nhân viên có ngày 002 Tung
sinh từ trước ngày 31/12/1960 và đến sau ngày 003 Nhan
1/1/1975
007 Tam
SELECT MANV, TENNV
008 Van
FROM NHANVIEN
WHERE NGSINH <= ‘Dec, 31 1960’ OR NGSINH >=‘Jan, 1 1975’
57
Sử dụng hàm Datetime của SQL
Tên hàm Cú pháp
DATEDIFF DATEDIFF ( datepart , startdate , enddate )
DATEPART DATEPART ( datepart , date )
DAY DAY ( date )
GETDATE GETDATE ( )
MONTH MONTH ( date )
YEAR YEAR ( date )
(Sử dụng Book online, Search với từ khóa Date and Time Functions) 58
Sử dụng hàm Datetime của SQL
The table lists dateparts and abbreviations recognized by Microsoft® SQL Server™.
SELECT GETDATE() AS 'Current Date'
Here is the result set: Datepart Abbreviations
Current Date ---------- 2006-12-13 14:56:07.117 Year yy, yyyy
SELECT DATEPART(month, GETDATE()) AS 'Month Number'
Here is the result set: quarter qq, q
Month Number -------- 12
This example assumes the date May 29. Month mm, m
SELECT DATEPART(month, GETDATE())
dayofyear dy, y
Here is the result set:
----------- 5 (1 row(s) affected) Day dd, d
In this example, the date is specified as a number. Notice that SQL
Server interprets 0 as January 1, 1900. Week wk, ww
SELECT DATEPART(m, 0), DATEPART(d, 0), DATEPART(yy, 0)
Here is the result set: Hour hh
----- ------ --- 1 1 1900 minute mi, n
VD: Liệt kê manv, tennv của NV có tuổi từ 40
second ss, s
trở lên
SELECT MANV, TENNV millisecond ms
FROM NHANVIEN
where year(getdate())-year(ngsinh)>=40 SELECT MANV, TENNV
FROM NHANVIEN
SELECT MANV, TENNV where datediff(yy, ngsinh, getdate()) >=40
FROM NHANVIEN
where datepart(yy,getdate())-datepart(yy, ngsinh)>=40 59
Sử dụng giá trị Null
60
Sử dụng giá trị Null
LIỆT KÊ CÁC NHÂN VIÊN KHÔNG CÓ NGƢỜI QUẢN LÝ
MANV TENNV
002 Tung
003 Nhan
004 Tien
005 Vu
LIỆT KÊ CÁC NHÂN VIÊN CÓ NGƢỜI QUẢN LÝ
006 Hung
007 Tam SELECT MANV, TENNV
008 Van FROM NHANVIEN
WHERE MA_NQL IS NOT NULL
61
CÁC ĐIỂM LƢU Ý
TRUE TRUE
62
CÁC ĐIỂM LƢU Ý (tt)
Ví dụ Liệt kê manv, tennv của các nhân viên làm việc ở
các phòng ban có tên Nghiên cứu hoặc Quản lý
SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE (TENPHG=‘Nghien cuu’ OR TENPHG=‘Quan ly’) AND PHONG=MAPHG
MANV TENNV
001 Quyen
002 Tung
004 Tien
006 Hung (I) (II)
007 Tam
008 Van ƯU TIÊN TRONG NGOẶC SẼ THỰC HIỆN TRƯỚC
63
CÁC ĐIỂM LƢU Ý (tt)
006 NC DH
007 NC DH
MANV, PNONG, MAPHG(NHANVIEN X PHONGBAN)
008 NC DH
001 QL NC
002 NC NC
003 DH NC
…. …. ….
SELECT MANV, PHONG, MAPHG
FROM NHANVIEN, PHONGBAN
64
CÁC ĐIỂM LƢU Ý (tt)
TRƯỜNG HỢP CÁC THUỘC TÍNH Ở CÁC QUAN HỆ KHÁC NHAU BỊ TRÙNG TÊN
Tên bí danh
SỬ DỤNG TÊN BÍ DANH
66
Mệnh đề ORDER BY (tt)
MANV MADA
Ví dụ
008 DT002
Liệt kê manv, mada mà nhân viên đó tham gia đề án
008 TH001 theo thứ tự manv giảm dần, nếu trùng manv thì liệt
007 TH001 kê theo thứ tự tăng dần
007 TH002
006 DT001 SELECT MANV, MADA
004 DT001
FROM PHANCONG
004 DT002
ORDER BY MANV DESC, MADA
003 TH001
002 DT001
002 DT002
MADA tăng dần
002 TH001
002 TH002
001 TH001
001 TH002 MANV giảm dần
67
Mệnh đề ORDER BY (tt)
Ví dụ
Liệt kê manv, họ tên nhân viên theo thứ tự nữ trước nam
sau, nếu trùng giới tính thì liệt kê theo thứ tự manv tăng
dần
MANV HO TEN NV
SELECT MANV, HONV + ' ‘ + TENLOT+' ‘ +
001 Vuong Ngoc Quyen TENNV AS "HỌ TÊN NV"
003 Le Thi Nhan
FROM NHANVIEN
005 Bui Thuy Vu
ORDER BY PHAI DESC, MANV
007 Tran Thanh Tam
Ý tưởng:
Chọn các nhân viên tham gia đề án „TH001‟
Sắp xếp theo thứ tự giảm dần
Lấy ra 3 nhân viên đầu tiên
Xem mệnh đề TOP n ở trang 570-572 trong sách SQL Server 2000:
A Beginner’s Guide
Edited by Duc-Long, Le - 2009 69
TRƢỜNG ĐẠI HỌC SƢ PHẠM TP HCM
KHOA TOÁN – TIN
280, An Dương Vương, Q5, Tp HCM ĐT: (08).8352020 - 8352021
SELECT MASV,TENSV,SVIEN.MAKHOA,TENKHOA
FROM SVIEN,KHOA
WHERE SVIEN.MAKHOA='CNTT' AND SVIEN.MAKHOA=KHOA.MAKHOA
71
Tìm họ tên nhân viên và tên phòng ban nhân
Ví dụ 1 viên đó trực thuộc có mức lương từ 2.000.000
đến 3.000.000
HONV,TENLOT, TENNV, TENPHG,MLUONG (MLUONG 2000000 MLUONG ≤ 3000000
(NHANVIEN PHONG = MAPHG PHONGBAN ))
SELECT HONV,TENLOT,TENNV,TENPHG,MLUONG
FROM NHANVIEN,PHONGBAN
WHERE PHONG=MAPHG
AND MLUONG >= 2000000 AND MLUONG <=3000000
SELECT HONV,TENLOT,TENNV,TENPHG,MLUONG
FROM NHANVIEN,PHONGBAN
WHERE PHONG=MAPHG
AND MLUONG BETWEEN 2000000 AND 3000000
HONV TENLOT TENNV TENPHG MLUONG
Vuong Ngoc Quyen Quan Ly 3000000.0
Nguyen Thanh Tung Nghien Cuu 2500000.0
Le Thi Nhan Dieu Hanh 2500000.0
Dinh Ba Tien Nghien Cuu 2200000.0
Bui Thuy Vu Dieu Hanh 2200000.0
Nguyen Manh Hung Nghien Cuu 2000000.0
Tran Thanh Tam Nghien Cuu 2200000.0
72
Lập danh sách các thân nhân dưới 18 tuổi
Ví dụ 2 của các nhân viên.
R1 NHANVIEN X THANNHAN
R2 YEAR(NOW) – YEAR(THANNHAN.NGSINH) < 18 ^ NHANVIEN.MANV = THANNHAN.MANV (R1)
MANV, TENNV, TENTN, THANNHAN.PHAI, THANNHAN.NGSINH, QUANHE (R2)
(NOW kí hiệu cho hàm lấy giá trị ngày tháng hiện hành)
73
Với mỗi phòng ban, cho biết tên phòng ban và
Ví dụ 3 địa điểm phòng
SELECT TENPHG,DIADIEM
FROM DIADIEM_PHG DD,PHONGBAN PB
WHERE DD.MAPHG=PB.MAPHG
TENPHG DIADIEM
Dieu Hanh HANOI
Dieu Hanh NHATRANG
Dieu Hanh TPHCM
Nghien Cuu HANOI
Nghien Cuu TPHCM
Quan Ly TPHCM
74
Tìm tên những người trưởng phòng của từng
Ví dụ 4 phòng ban
TENPHG TENTP
Dieu Hanh Le Thi Nhan
Nghien Cuu Nguyen Thanh Tung
Quan Ly Vuong Ngoc Quyen
75
Ví dụ 5 Tìm TENDA, MADA, DDIEM_DA, PHONG,
TENPHG, MAPHG, TRPHG, NGNC
TENDA, MADA, DDIEM_DA, PHONG, TENPHG, MAPHG, TRPHG, NGNC(PHONGBAN MAPHG = PHONGDEAN ))
SELECT TENDA,MADA,DDIEM_DA,MAPHG,TENPHG,TRPHG,NGNC
FROM DEAN,PHONGBAN
WHERE PHONG=MAPHG
76
Tìm tên và địa chỉ của tất cả các nhân viên
Ví dụ 6 của phòng "Nghien cuu".
TENNV DCHI
Tung 731 Tran Hung Dao,Q1,TPHCM
Tien 638 Nguyen Van Cu,Q5,TPHCM
Hung 978 Ba Ria,VungTau
Tam 543 Mai Thi Luu,Q3,TPHCM
Van 980 LeHong Phong,Q10,TPHCM
77
Tìm tên những nữ nhân viên và tên người
Ví dụ 7 thân của họ
SELECT TENNV,TENTN
FROM THANNHAN TN,NHANVIEN NV
WHERE TN.MANV=NV.MANV AND NV.PHAI='Nu'
TENNV TENTN
Quyen Le Nhat Minh
Nhan Tran Minh Tien
Nhan Tran Ngoc Linh
Nhan Tran Minh Long
78
TRƢỜNG ĐẠI HỌC SƢ PHẠM TP HCM
KHOA TOÁN – TIN
280, An Dương Vương, Q5, Tp HCM ĐT: (08).8352020 - 8352021
Lê Đức Long
Email: longld@math.hcmup.edu.vn
Website: http://www.2learner.edu.vn
79