C s d li u 13Ví d - RBTV CREATE TABLE NHANVIEN MANV CHAR4 PRIMARY KEY, HOTEN VARCHAR40 NOT NULL, SODT VARCHAR20 UNIQUE, NGVL SMALLDATETIME DEFAULT GETDATE CREATE TABLE HOADON SOHD INT
Trang 1Ch ng 5 SQL
N i dung chi ti t
Gi i thi u
nh ngh a d li u Truy v n d li u
C p nh t d li u Khung nhìn (view)
Ch m c (index)
Gi i thi u
Ngôn ng SQH
- Cách th c truy v n d li u
- Khó kh n cho ng i s d ng
SQL (Structured Query Language)
- Ngôn ng c p cao
- Ng i s d ng ch c n a ra n i dung c n truy v n
- c phát tri n b i IBM (1970s)
- c g i là SEQUEL
- c ANSI công nh n và phát tri n thành chu n
SQL-86
SQL-92
SQL-99
Gi i thi u (tt)
SQL g m
- nh ngh a d li u (DDL)
- Thao tác d li u (DML)
- nh ngh a khung nhìn
- Ràng bu c toàn v n
- Phân quy n và b o m t
- i u khi n giao tác
SQL s d ng thu t ng
- B ng ~ quan h
- C t ~ thu c tính
- Dòng ~ b
Lý thuy t : Chu n SQL-92
Ví d : SQL Server
Trang 2C s d li u 5
N i dung chi ti t
Gi i thi u
nh ngh a d li u
- Ki u d li u
- Các l nh nh ngh a d li u
Truy v n d li u
C p nh t d li u
Khung nhìn (view)
Ch m c (index)
nh ngh a d li u
Là ngôn ng mô t
- L c cho m i quan h
- Mi n giá tr t ng ng c a t ng thu c tính
- Ràng bu c toàn v n
- Ch m c trên m i quan h
G m
- CREATE TABLE (t o b ng)
- DROP TABLE (xóa b ng)
- ALTER TABLE (s a b ng)
- CREATE DOMAIN (t o mi n giá tr )
- CREATE DATABASE
- …
Ki u d li u
S (numeric)
- INTEGER
- SMALLINT
- NUMERIC, NUMERIC(p), NUMERIC(p,s)
- DECIMAL, DECIMAL(p), DECIMAL(p,s)
- REAL
- DOUBLE PRECISION
- FLOAT, FLOAT(p)
Ki u d li u (tt)
Chu i ký t (character string)
- CHARACTER, CHARACTER(n)
- CHARACTER VARYING(x)
Chu i bit (bit string)
- BIT, BIT(x)
- BIT VARYING(x)
Ngày gi (datetime)
- DATE g m ngày, tháng và n m
- TIME g m gi , phút và giây
- TIMESTAMP g m ngày và gi
Trang 3C s d li u 9
L nh t o b ng
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
CREATE TABLE <Tên_b ng> (
<Tên_c t> <Ki u_d _li u> [<RBTV>],
<Tên_c t> <Ki u_d _li u> [<RBTV>],
…
[<RBTV>]
)
Ví d - T o b ng
CREATE TABLE KHACHHANG ( MAKH CHAR(4),
HOTEN VARCHAR(40), DCHI VARCHAR(50), SODT VARCHAR(20), NGSINH SMALLDATETIME, DOANHSO MONEY, NGDK SMALLDATETIME )
L nh t o b ng (tt)
<RBTV>
- NOT NULL
- NULL
- UNIQUE
- DEFAULT
- PRIMARY KEY
- FOREIGN KEY / REFERENCES
- CHECK
t tên cho RBTV
CONSTRAINT <Ten_RBTV> <RBTV>
Ví d - RBTV
CREATE TABLE KHACHHANG ( MAKH CHAR(4) PRIMARY KEY, HOTEN VARCHAR(40) NOT NULL, DCHI VARCHAR(50),
SODT VARCHAR(20) NOT NULL, NGSINH SMALLDATETIME CHECK (NGSINH > ’01-01-1900’), DOANHSO MONEY DEFAULT (10000),
NGDK SMALLDATETIME )
Trang 4C s d li u 13
Ví d - RBTV
CREATE TABLE NHANVIEN (
MANV CHAR(4) PRIMARY KEY,
HOTEN VARCHAR(40) NOT NULL,
SODT VARCHAR(20) UNIQUE,
NGVL SMALLDATETIME DEFAULT (GETDATE())
)
CREATE TABLE HOADON ( SOHD INT PRIMARY KEY, NGHD SMALLDATETIME, MAKH CHAR(4) REFERENCES KHACHHANG(MAKH), MANV CHAR(4) FOREIGN KEY (MANV)
REFERENCES NHANVIEN(MANV), TRIGIA MONEY
)
CREATE TABLE KHACHHANG ( MAKH CHAR(4) CONSTRAINT KH_MAKH_PK PRIMARY KEY, HOTEN VARCHAR(40) CONSTRAINT KH_HOTEN_NN NOT NULL, DCHI VARCHAR(50),
SODT VARCHAR(20) NOT NULL, NGSINH SMALLDATETIME CONSTRAINT KH_NGSINH_CK
CHECK (NGSINH > ’01-01-1900’), DOANHSO MONEY CONSTRAINT KH_DOANHSO_DF DEFAULT (10000), NGDK SMALLDATETIME
)
CREATE TABLE CTHD (
SOHD INT,
MASP CHAR(4),
SL INT,
CONSTRAINT CTHD_SOHD_MASP_PK PRIMARY KEY (SOHD, MASP),
CONSTRAINT CTHD_SOHD_FK FOREIGN KEY (SOHD)
REFERENCES HOADON(SOHD), CONSTRAINT CTHD_MASP_FK FOREIGN KEY (MASP)
REFERENCES SANPHAM(MASP) )
L nh s a b ng
c dùng
- Thay i c u trúc b ng
- Thay i RBTV
Thêm c t
Xóa c t
M r ng c t
ALTER TABLE <Tên_b ng> ADD COLUMN
<Tên_c t> <Ki u_d _li u> [<RBTV>]
ALTER TABLE <Tên_b ng> DROP COLUMN
<Tên_c t>
ALTER TABLE <Tên_b ng> ALTER COLUMN
<Tên_c t> <Ki u_d _li u_m i>
Trang 5C s d li u 17
L nh s a b ng (tt)
Thêm RBTV
Xóa RBTV
ALTER TABLE <Tên_b ng> ADD
CONSTRAINT <Ten_RBTV> <RBTV>,
CONSTRAINT <Ten_RBTV> <RBTV>,
…
ALTER TABLE <Tên_b ng> DROP <Tên_RBTV>
ALTER TABLE SANPHAM ADD
GHICHU VARCHAR(20)
ALTER TABLE SANPHAM DROP COLUMN GHICHU
ALTER TABLE SANPHAM ALTER COLUMN
GHICHU VARCHAR(50)
ALTER TABLE HOADON ADD
CONSTRAINT HD_SOHD_PK PRIMARY KEY (SOHD),
CONSTRAINT HD_MAKH_FK FOREIGN KEY (MAKH)
REFERENCES KHACHHANG(MAKH), CONSTRAINT HD_MANV_FK FOREIGN KEY (MANV)
REFERENCES NHANVIEN(MANV), CONSTRAINT HD_NGHD_DF DEFAULT (GETDATE()) FOR (NGHD)
CREATE TABLE HOADON (
SOHD INT,
NGHD SMALLDATETIME,
MAKH CHAR(4),
MANV CHAR(4),
TRIGIA MONEY
)
L nh xóa b ng
c dùng xóa c u trúc b ng
- T t c d li u c a b ng c ng b xóa
Cú pháp
Ví d
DROP TABLE <Tên_b ng>
DROP TABLE KHACHHANG
DROP TABLE HOADON
DROP TABLE SANPHAM
Trang 6C s d li u 21
L nh xóa b ng (tt)
GIAOVIEN
HOCHAM
HOTEN HOCVI MAGV GIOITINH NGSINH NGVL HESO MUCLUONG MAKHOA
KHOA
TRGKHOA TENKHOA MAKHOA NGTLAP
L nh t o mi n giá tr
T o ra m t ki u d li u m i k th a nh ng ki u d
li u có s n
Cú pháp
Ví d
CREATE DOMAIN <Tên_kdl_m i> AS <Ki u_d _li u>
CREATE DOMAIN Kieu_Ten AS VARCHAR(30)
N i dung chi ti t
Gi i thi u
nh ngh a d li u
Truy v n d li u
- Truy v n c b n
- T p h p, so sánh t p h p và truy v n l ng
- Hàm k t h p và gom nhóm
- M t s ki u truy v n khác
C p nh t d li u
Khung nhìn (view)
Ch m c (index)
Truy v n d li u
Là ngôn ng rút trích d li u th a m t s i u ki n nào ó
D a trên
- Cho phép 1 b ng có nhi u dòng trùng nhau
- B ng là bag quan h là set
Phép toán SQH M t s b sung
Trang 7C s d li u 25
Truy v n c b n
G m 3 m nh
- <danh sách các c t>
Tên các c t c n c hi n th trong k t qu truy v n
- <danh sách các b ng>
Tên các b ng liên quan n câu truy v n
- < i u ki n>
Bi u th c boolean xác nh dòng nào s c rút trích
N i các bi u th c: AND, OR, và NOT
Phép toán: , , , , , , LIKE và BETWEEN
SELECT <danh sách các c t>
FROM <danh sách các b ng>
WHERE < i u ki n>
Truy v n c b n (tt)
SELECT <danh sách các c t>
FROM <danh sách các b ng>
WHERE < i u ki n>
SELECT L FROM R WHERE C
L ( C (R))
SQL và SQH
Ví d
SELECT * FROM KHACHHANG WHERE DOANHSO>1000000
L y t t c các c t
c a quan h k t qu
DOANHSO>1000000 (KHACHHANG)
KH01 Nguyen Van A 731 Tran Hung Dao, Q5, TpHCM 08823451 22/10/1960 13,060,000 22/07/2006
KH03 Tran Ngoc Linh 45 Nguyen Canh Chan, Q1, TpHCM 0938776266 12/6/1980 3,860,000 05/08/2006
SELECT MAKH, HOTEN, DCHI FROM KHACHHANG
WHERE DOANHSO>1000000 AND YEAR(NGDK)=2006
MAKH, HOTEN, DCHI ( DOANHSO>1000000 YEAR(NGDK)=2006 (KHACHHANG))
KH01 Nguyen Van A 731 Tran Hung Dao, Q5, TpHCM KH03 Tran Ngoc Linh 45 Nguyen Canh Chan, Q1, TpHCM
Trang 8C s d li u 29
SELECT MANV, HOTEN AS TEN, NGVL AS ‘NGAY VAO LAM’
FROM NHANVIEN
WHERE NGVL > 01/06/2006
MANV,TEN,NGAY VAO LAM( MANV,HOTEN,NGVL( NGVL > 01/06/2006(NHANVIEN)))
Tên bí danh
NV05 Nguyen Thi Truc Thanh 20/7/2006
SELECT MASP, TENSP + ‘ ’ + NUOCSX AS ‘TEN SAN PHAM’
FROM SANPHAM WHERE GIA >= 55000
MASP,TEN SAN PHAM( MASP,TENSP+NUOCSX( GIA >= 55000 (SANPHAM)))
M r ng
BB03 But bi Thai Lan ST02 So tay loai 1 Viet Nam ST04 So tay Thai Lan
SELECT MASP, GIA*1.1 AS ‘GIA10%’
FROM GIA
WHERE GIA >= 55000
MASP,GIA10%( MASP,GIA*1.1( GIA >= 55000(SANPHAM)))
M r ng
BB03 110.000 ST02 60.500 ST04 60.500
SELECT GIA FROM SANPHAM WHERE GIA > 50000
Lo i b các dòng trùng nhau
- T n chi phí
- Ng i dùng mu n th y
GIA 100000 55000 55000 53000
GIA 100000 55000 53000
SELECT DISTINCT GIA FROM SANPHAM WHERE GIA > 50000
Trang 9C s d li u 33
Ví d
SELECT
FROM
WHERE
Cho bi t MANV và HOTEN l p nh ng hóa n trên
3.500.000
KQ MANV, HOTEN ( TRIGIA > 3500000(R1))
NHANVIEN.MANV, HOTEN
NHANVIEN, HOADON
TRIGIA > 3500000 AND NHANVIEN.MANV=HOADON.MANV
SELECT NHANVIEN.MANV, HOTEN FROM NHANVIEN, HOADON WHERE TRIGIA > 3500000 AND NHANVIEN.MANV=HOADON.MANV
Bi u th c lu n lý
SELECT NHANVIEN.MANV, TENNV
FROM NHANVIEN, HOADON
WHERE (GIA>3500000 OR GIA<1000000)
AND NHANVIEN.MANV=HOADON.MANV
u tiên
SELECT MASP, TENSP FROM SANPHAM WHERE GIA>20000 AND GIA<30000
BETWEEN
SELECT MASP, TENSP FROM SANPHAM WHERE GIA BETWEEN 20000 AND 30000
Trang 10C s d li u 37
NOT BETWEEN
SELECT MASP, TENSP
FROM SANPHAM
WHERE GIA NOT BETWEEN 20000 AND 30000
SELECT MAKH, HOTEN FROM KHACHHANG WHERE DCHI LIKE ‘Nguyen _ _ _ _’
LIKE
SELECT MAKH, HOTEN FROM KHACHHANG WHERE DCHI LIKE ‘Nguyen %’
Chu i b t k
Ký t b t k
SELECT MASP, TENSP
FROM SANPHAM
WHERE DVT LIKE ‘CAY’
NOT LIKE
SELECT MASP, TENSP
FROM SANPHAM
WHERE DVT NOT LIKE ‘CAY’
SELECT MAKH, HOTEN FROM KHACHHANG
WHERE DCHI LIKE ‘% Nguyens_%’ ESCAPE ‘s’
ESCAPE
‘Nguyen_’
Trang 11C s d li u 41
Ngày gi
SELECT MANV, TENNV
FROM NHANVIEN
WHERE NGVL BETWEEN ‘2006-12-08’ AND ‘2014-07-19’
YYYY-MM-DD MM/DD/YYYY
‘2006-12-08’
’12/08/2006’
‘December 8, 2006’
HH:MI:SS
’17:30:00’
’05:30 PM’
‘2006-12-08 17:30:00’
NULL
- S d ng trong tr ng h p
Không bi t (value unknown) Không th áp d ng (value inapplicable) Không t n t i (value withheld)
- Nh ng bi u th c tính toán có liên quan n giá tr NULL
s cho ra k t qu là NULL
x có giá tr là NULL
x + 3 cho ra k t qu là NULL
x + 3 là m t bi u th c không h p l trong SQL
- Nh ng bi u th c so sánh có liên quan n giá tr NULL
s cho ra k t qu là UNKNOWN
x = 3 cho ra k t qu là UNKNOWN
x = 3 là m t so sánh không h p l trong SQL
NULL
SELECT MANV, HOTEN FROM NHANVIEN WHERE SODT IS NULL
SELECT MANV, HOTEN FROM NHANVIEN WHERE SODT IS NOT NULL
WHERE TRUE
SELECT MANV, SOHD FROM NHANVIEN, HOADON
Không s d ng m nh WHERE
SOHD 1 4 333445555 333445555 MANV
5 1 987987987 987987987 333445555
4 5 987987987
Trang 12C s d li u 45
SELECT SOHD, HOTEN
FROM HOADON, NHANVIEN
WHERE MANV=MANV
Tên bí danh
SELECT SOHD, HOTEN
FROM HOADON AS HD, NHANVIEN AS NV
WHERE HD.MANV=NV.MANV
SELECT MANV, HOTEN, SOHD
FROM NHANVIEN, HOADON
WHERE MANV=MANV
SELECT NV.MANV, HOTEN, SOHD
FROM NHANVIEN NV, HOADON HD
WHERE NV.MANV=HD.MANV
Ví d 1
V i nh ng chi ti t hóa n mua trên 50 s n ph m, cho bi t s hóa n, tr giá hóa n, mã nhân viên
l p hóa n, h tên cùng v i ngày sinh và a ch
c a ng i y
Ví d 2
Tìm hóa n c a kh ách hàng ‘Nguyen Van A ’ do
nhân viên có mã s ‘NV03’ l p và mua h n 3 lo i
s n ph m khác nhau.
Ví d 3
In ra tr giá c a t ng hóa n và h tên ng i l p hóa n ó.
Trang 13C s d li u 49
Ví d 4
Tìm t t c các hóa n c a khách hàng ‘Nguyen
Van A’
Dùng hi n th k t qu câu truy v n theo m t th
t nào ó
Cú pháp
- ASC: t ng (m c nh)
- DESC: gi m
SELECT <danh sách các c t>
FROM <danh sách các b ng>
WHERE < i u ki n>
ORDER BY <danh sách các c t>
Ví d
SELECT NGDK, DOANHSO
FROM KHACHHANG
ORDER BY NGDK DESC, DOANHSO
DOANHSO 1.000.000 3.350.000 11/07/2012
11/07/2012 NGDK
2.490.000 3.210.000 23/12/2013
10/09/2014 23/12/2013
100.000 2.040.000 10/09/2014
5.300.000 10/09/2014
N i dung chi ti t
Gi i thi u
nh ngh a d li u Truy v n d li u
- Truy v n c b n
- T p h p, so sánh t p h p và truy v n l ng
- Hàm k t h p và gom nhóm
- M t s d ng truy v n khác
C p nh t d li u Khung nhìn (view)
Ch m c (index)
Trang 14C s d li u 53
Phép toán t p h p trong SQL
SQL có cài t các phép toán
- H i (UNION)
- Giao (INTERSECT)
- Tr (EXCEPT)
K t qu tr v là t p h p
- Lo i b các b trùng nhau
- gi l i các b trùng nhau
UNION ALL
INTERSECT ALL
EXCEPT ALL
Phép toán t p h p trong SQL (tt)
Cú pháp
SELECT <ds c t> FROM <ds b ng> WHERE < i u ki n>
UNION [ALL]
SELECT <ds c t> FROM <ds b ng> WHERE < i u ki n>
SELECT <ds c t> FROM <ds b ng> WHERE < i u ki n>
INTERSECT [ALL]
SELECT <ds c t> FROM <ds b ng> WHERE < i u ki n>
SELECT <ds c t> FROM <ds b ng> WHERE < i u ki n>
EXCEPT [ALL]
SELECT <ds c t> FROM <ds b ng> WHERE < i u ki n>
Ví d 5
Cho bi t các s hóa n có
- Nhân viên l p hóa n có h là ‘Nguyen’ ho c,
- Khách hàng mua hàng có h là ‘Nguyen’
SELECT SOHD
FROM HOADON HD, NHANVIEN NV
WHERE HD.MANV=NV.MANV AND HOTEN LIKE ‘Nguyen %’
UNION
SELECT SOHD
FROM HOADON HD, KHACHHANG KH
WHERE HD.MAKH=KH.MAKH AND HOTEN LIKE ‘Nguyen %’