Thứ Năm, 23 tháng 1, 2014

Giáo trình thực hành sql

Giaùo trỗnh thổỷc haỡnh SQL
7UDQJ
manv char(10) not null,
hoten char(30) not null,
ngaysinh datetime null,
diachi char(50) null,
dienthoai char(6) null
constraint check_dienthoai
check (dienthoai like '[0-9][0-9][0-9]
[0-9][0-9] [0-9]')
)
D
DD
D
5DQJEXF'()$8/7
5DQJEXÔF'()$8/7ÔFVGXÊQJTXLQKJLDWUPÊFQKFKRPÔWFÔW
*LDWUQD\VHWÊÔQJÔFJDQFKRFÔWQD\NKLQJLVGXÊQJEVXQJPÔWEDQJKL
PDNKQJFKQKJLDWUFKRFÔW7UQPĂLFÔWFKFRWKFRQKLXQKÂWPÔWUDQJ
EXÔF'()$8/7WFODFKFRWKFRWÂLDPÔWJLDWUPÊFQK
j NKDL EDR PÔW JLD WU PÊF QK FKR PÔW FÔW WD FK QK PÔW UDQJ EXÔF
'()$8/7FKRFÔWEQJFDFKVGXÊQJFXSKDSVDX
[CONSTRAINT constraint_name]
DEFAULT {const_expression
nonarguments_function
NULL}
9 GX
&X OÊQK GL \ FK QK JLD WU PÊF QK OD NKQJ ELÂW FKR FÔW
',$&+,WURQJEDQJ1+$19,(1YGXÊ

CREATE TABLE nhanvien
(
manv char(10) not null,
hoten char(30) not null,
ngaysinh datetime null,
diachi char(50) default 'khọng bióỳt',
dienthoai char(6) null
)
D
DD
D
5DQJEXF35,0$5<.(<


muYGXÊQD\FKXQJWLNKQJÊWWQFKRUDQJEXÔF'()$8/7.KLRKÊTXDQWU&6'/VHWÊÔQJÊWWQ
FKRUDQJEXÔFQD\7X\QKLQGĂGDQJFKRYLÊFTXDQWUEDÊQQQÊWWQFKRFDFUDQJEXÔF
Trỏửn Nguyón Phong
5DQJEXÔF35,0$5<.(<ÔFVGXÊQJQKQJKDNKRDFKQKFXDEDQJ
0ÔWUDQJEXÔF35,0$5<.(<DPEDRUQJNKQJFRFDFJLDWUWUXQJOÊSÔF
DYDRWUQFDFFÔW+D\QRLFDFKNKDFJLDWUFXDNKRDFKQKVHJLXSFKRWD[DF
QKÔFGX\QKÂWPÔWGRQJEDQJKLWURQJEDQJGOLÊX0ĂLPÔWEDQJFKFRWK
FRGX\QKÂWPÔWNKRDFKQKYDEDQWKQNKRDFKQKNKQJFKÂSQKÊQJLDWU18//
5DQJEXÔF35,0$5<.(<ODFVFKRYLÊFDPEDRWQKWRDQYHÊQWKÊFWKFXQJ
QKWRDQYHÊQWKDPFKLÂX
jNKDLEDRPÔWUDQJEXÔF35,0$5<.(<EDÊQVGXÊQJFXSKDSVDX
[CONSTRAINT constraint_name ]
PRIMARY KEY [CLUSTERED|NONCLUSTERED]
[( colname [,colname2 [ ,colname16]])]
1ÂXNKRDFKQKFXDPÔWEDQJFKODPÔWFÔWNKLREDÊQNKQJFQWKLÂWSKDLFK
QKGDQKVDFKFDFFÔWVGXÊQJUDQJEXÔFPFFÔW7URQJWUQJKÔSNKRDFKQK
ODPÔWWÊSKÔSWKDLFÔWWUOQEDÊQSKDLFKQKGDQKVDFKFDFFÔWVGXÊQJUDQJ
EXÔFPFEDQJ
9GX
WDÊREDQJ1+$19,(1YLNKRDFKQKOD0$19
CREATE TABLE nhanvien
(
manv char(10) primary key,
hoten char(30) not null,
ngaysinh datetime null,
diachi char(50) null,
dienthoai char(6) null
)
FXOÊQKWUQFRWKYLÂWQKVDX
CREATE TABLE nhanvien
(
manv char(10) not null,
hoten char(30) not null,
ngaysinh datetime null,
diachi char(50) null,
dienthoai char(6) null
constraint pk_nv primary key(manv)
)
Giaùo trỗnh thổỷc haỡnh SQL
7UDQJ
D
5DQJEXF81,48(
7KD\YVGXÊQJNKRDFKQKEDÊQFRWKVGXÊQJUDQJEXÔF81,48(DP
EDRWQKWRDQYHÊQWKÊFWK6GXÊQJUDQJEXÔF81,48(WUQPÔWKD\QKLXFÔWEW
EXÔFFDFJLDWUGOLÊXWUQPÔWKD\QKLXFÔWQD\NKQJÔFWUXQJOÊSQKDXj
NKDLEDRPÔWUDQJEXÔF81,48(EDÊQVGXÊQJFXSKDSOÊQKVDX\
[CONSTRAINT constraint_name]
UNIQUE [CLUSTERED | NONCLUSTERED]
[colname1 [,colname2 [ ,colname16]])]
D
5DQJEXF)25(,*1.(<
&DFEDQJEQWURQJPÔW&6'/WKQJFRPÂLTXDQKÊYLQKDX&DFPÂLTXDQ
KÊQD\ÔF[DFQKGÊDWUQWQKEQJQKDXJLDPÔWKD\QKLXWUQJFXDEDQJ
QD\YLPÔWKD\QKLXWUQJFXDEDQJNKDF1ÂXPÔWKD\QKLXFÔWQDRRFXDPÔW
EDQJFRJLDWUÔF[DFQKWPÔWKD\QKLXWUQJNKRDFXDEDQJNKDFWKFDF
FÔWRÔFJRÔLODFRUDQJEXÔFNKRDQJRDÊLIRUHLJQNH\&DFUDQJEXÔF)25(,*1
.(<ÔFVGXÊQJNÂWKÔSYLFDFUDQJEXÔF35,0$5<.(<YD81,48(QKP
DPEDRWQKWRDQYHÊQWKDPFKLÂXJLDFDFEDQJÔFFKQK
jNKDLEDRNKRDQJRDÊLEDÊQVGXÊQJFXSKDSOÊQKQKVDX
[CONSTRAINT constraint_name ]
[FOREIGN KEY (colname [,colname2 [ ,colname16]])]
REFERENCES reference_table [(ref_colname
[,ref_colname2
[ ,ref_colname 16]])]
9 GX
7DÊR KDL EDQJ 1+$19,(10$19 +27(1 1*$<6,1+ ',$&+,
',(17+2$,0$'9YD'219,0$'97(1'9WKHRKQKGL\
CREATE TABLE donvi
(
1+$19,(1
0$19
+27(1
1*$<6,1+
',$&+,
',(17+2$,
0$'9
'219,
0$'9
7(1'9




+QK
Trỏửn Nguyón Phong
madv char(2) primary key,
tendv char(20) not null
)
CREATE TABLE nhanvien
(
manv char(10) primary key,
hoten char(20) not null,
ngaysinh datetime null,
diachi char(50) default 'khong biet',
dienthoai char(6) check(dienthoai like '[0-9][0-9][0-9]
[0-9][0-9][0-9]'),
madv char(2) foreign key(madv)
references donvi(madv)
)
6DLEDQJ
6DXNKLDWDÊREDQJEDÊQFRWKWLÂQKDQKVDLFÂXWUXFKD\WKXÔFWQKFXD
EDQJQKEVXQJFÔWEVXQJNKRDWKD\LFDFUDQJEXÔFjFRWKVXDL
EDQJEDÊQVGXÊQJFXOÊQK$/7(5FRFXSKDSQKVDX
ALTER TABLE table_name
[ADD
{col_name column_properties [column_constraints]
[[,]table_constraint ] }
[,{next_col_name|next_table_constraint}] ]
[DROP
[CONSTRAINT] constraint_name1
[, constraint_name2] ]
9GX
7DÊRPÔWUDQJEXÔFFKREDQJ'219,WUQFÔW0$'9TXLQKPDQY
SKDLFRGDÊQJKDLFKVÂYGXÊ
ALTER TABLE donvi
ADD CONSTRAINT check_madv
CHECK (madv LIKE [0-9][0-9])
Giaùo trỗnh thổỷc haỡnh SQL
7UDQJ
&KPXFLQGH[
&DFFKPXÊFÔFVGXÊQJQKPKĂWUÔYLÊFWUX\FÊSÂQFDFGRQJGOLÊXÔF
QKDQKFKRQJGÊDWUQFDFJLDWUFXDPÔWKD\QKLXFÔW&KPXÊFÔFFKLDUDODPKDL
ORDÊLFKPXÊF WXÊ QKRPFOXVWHUHG LQGH[YD FKPXÊF NKQJ WXÊ QKRP QRQFOXVWHUHG
LQGH[

0ÔWFKPXÊFWXÊQKRPODPÔWFKPXÊFPDWURQJRWKWÊORJLFFXDFDFNKRDWQJ
WÊQKWKWÊYÊWO\FXDFDFGRQJWQJQJWQWDÊLWURQJEDQJ0ÔWEDQJFKFR
WKFRWÂLDPÔWFKPXÊFWXÊQKRP

0ÔWFKPXÊFNKQJWXÊKRPODPÔWFKPXÊFPDWURQJRWKWÊORJLFFXDFDFNKRD
NKQJQKWKWÊYÊWO\FXDFDFGRQJWURQJEDQJ&DFFKPXÊFWXÊQKRPKĂWUÔYLÊF
WUX\FÊSÂQFDFGRQJGOLÊXQKDQKKQQKLXVRYLFDFFKPXÊFNKQJWXÊQKRP
.KLWDNKDLEDRPÔWNKRDFKQKKD\NKRD81,48(WUQPÔWKD\QKLXFÔWQDRR
FXDEDQJKÊTXDQWU&6'/VHWÊÔQJWDÊRFKPXÊFWUQFDFFÔWR%DÊQFRWKWDÊR
WKPFDFFKPXÊFNKDFEQJFDFKVGXÊQJFXOÊQKFRFXSKDSQKVDX
CREATE [CLUSTEREDNONCLUSTERED] INDEX index_name
ON table_name(column_name [, column_name] )
9GX
&XOÊQKGL\VHWDÊRPÔWFKPXÊFNKQJWXÊQKRPWUQFÔW0$'9FXD
EDQJ1+$19,(1
CREATE NONCLUSTERED INDEX idx_nhanvien_madv
ON nhanvien(madv)
.KXQJQKQ9LHZ
0ÔWNKXQJQKQFRWKFRLQKODPÔWeEDQJDRfFRQÔLGXQJÔF[DFQKW
PÔWWUX\YÂQ0ÔWWUX\YÂQTXHU\ODPÔWWÊSFDFFKGĂQLQVWUXFWLRQQKPWUX\
[XÂWYDKLQWKGOLÊXWFDFEDQJWURQJ&6'/&DFWUX\YÂQÔFWKÊFKLÊQEQJ
FDFKVGXÊQJFXOÊQK6(/(&7ÔFFÊSÂQWURQJFKQJ
0ÔWNKXQJQKQWURQJJLÂQJQKPÔWEDQJYLPÔWWÊRFDFWQFÔWYDFDFGRQJ
GOLÊX7X\QKLQNKXQJQKQNKQJWQWDÊLQKODPÔWFÂXWUXFOXWUGOLÊXWURQJ
&6'/'OLÊXEQWURQJNKXQJQKQWKÊFFKÂWODGOLÊXÔF[DFQKWPÔWKD\
QKLXEDQJFVYDGRRSKXÊWKÔFYDRFDFEDQJFV
&DFNKXQJQKQWKQJÔFVGXÊQJEQWURQJ&6'/QKPFDFPXÊFFKVDX
\

6GXÊQJNKXQJQKQWÊSWUXQJWUQGOLÊXÔF[DFQK
Trỏửn Nguyón Phong

6GXÊQJNKXQJQKQQJLDQKRDWKDRWDFGOLÊX

6GXÊQJNKXQJQKQWX\ELÂQGOLÊX

6GXÊQJNKXQJQKQ[XÂWNKXH[SRUWGOLÊX

6GXÊQJNKXQJQKQEDRPÊWGOLÊX
jWDÊRNKXQJQKQEDÊQVGXÊQJFXOÊQKFRFXSKDSQKVDX
CREATE VIEW view_name[(column_name [, column_name] )]
AS select_statement
7URQJR
VHOHFWBVWDWHPHQW
ODPÔWFXOÊQK6(/(&7GXQJWUX\[XÂWGOLÊXW
PÔWKD\QKLXEDQJ
.KLWDÊRNKXQJQKQFQOX\PÔWVÂLPVDX

7QNKXQJQKQSKDLWXQWKHRFDFTXLWFYQKGDQKYDSKDLGX\QKÂWÂLYL
PĂLQJLVGXÊQJ

.KQJWKUDQJEXÔFFDFPÊFQKFDFTXLWFFKRNKXQJQKQ

.KQJWK[\GÊQJFKPXÊFFKRNKXQJQKQ

7URQJFXOÊQK&5($7(9,(:NKQJFQWKLÂWSKDLFKQKWQFÔW7QFXD
FDFFÔWFXQJQKNLXGOLÊXFXDFKXQJVHWQJQJYLFDFFÔWWURQJGDQKVDFK
FKRÔQFXDFXOÊQK6(/(&7

%DÊQSKDL[DFQKWQFÔWWURQJFXOÊQK&5($7(9,(:WURQJFDFWUQJKÔS
VDX

0ĂLFÔWFXDNKXQJQKQÔFSKDWVLQKWPÔWELXWKFVÂKRÔFPÔWKDPFDL
VQKD\PÔWKQJ

+DLKD\QKLXFÔWFXDNKXQJQKQFRWUXQJWQ

%DÊQPXÂQWKD\LWQFÔWWURQJNKXQJQKQNKDFYLWQFÔWFXDEDQJFV
9GX
&XOÊQKGL\VHEOĂLGRWQFXDFÔWWKNKQJ[DFQKÔF
CREATE VIEW thongtin_nv
AS
SELECT manv,hoten,datediff(year,ngaysinh,getdate()),tendv
FROM nhanvien,donvi
WHERE nhanvien.madv=donvi.madv
jFXOÊQKWUQFRWKWKÊFKLÊQÔFEDÊQSKDLÊWWQFKRFDFFÔWFXDNKXQJQKQ
QKVDX
CREATE VIEW thongtin_nv(manv,hoten,tuoi,donvi)
Giaùo trỗnh thổỷc haỡnh SQL
7UDQJ
AS
SELECT manv,hoten,datediff(year,ngaysinh,getdate()),tendv
FROM nhanvien,donvi
WHERE nhanvien.madv=donvi.madv
Z



Y
Trỏửn Nguyón Phong
C
C
h
h




n
n
g
g


2
2
:
:




N
N
G
G


N
N


N
N
G
G






T
T
H
H
A
A
O
O


T
T
A
A


C
C


D
D






L
L
I
I




U
U
1JQQJWKDRWDFGOLÊXFXQJFÂSFKRQJLVGXÊQJNKDQQJWLÂQKDQKFDF
WKDRWDFWUX\[XÂWEVXQJFÊSQKÊWYD[RDGOLÊX1JQQJWKDRWDFGOLÊXEDR
JPFDFFXOÊQK6(/(&7,16(5783'$7(YD'(/(7(
7UX\[XWGOLX
Để truy xuất dữ liệu từ các dòng và các cột của một hay nhiều bảng, khung nhìn,
ta sử dụng câu lệnh SELECT. Câu lệnh này có thể dùng để thực hiện phép chọn (tức là
truy xuất một tập con các dòng trong một hay nhiều bảng), phép chiếu (tức là truy
xuất một tập con các cột trong một hay nhiều bảng) và phép nối (tức là liên kết các
dòng trong hai hay nhiều bảng để truy xuất dữ liệu).
Cú pháp chung của câu lệnh SELECT có dạng như sau:
SELECT [ ALL | DISTINCT ] select_list
[ INTO [ newtable_name ]]
FROM { table_name | view_name }

[,{table_name | view_name }]
[WHERE clause ]
[GROUP BY clause ]
[HAVING BY clause ]
[ORDER BY clause ]
[COMPUTE clause ]
Chú ý: Các thành phần trong một câu lệnh SELECT phải được sử dụng theo thứ tự
được nêu trên.
1.1 Xác định bảng bằng mệnh đề FROM
Mệnh đề FROM trong câu lệnh SELECT được sử dụng nhằm chỉ định các bảng
và khung nhìn cần truy xuất dữ liệu. Sau mệnh đề FROM là danh sách tên các bảng
và khung nhìn tham gia vào truy vấn (tên của các bảng và khung nhìn được phân cách
nhau bởi dấu phẩy).
SELECT select_list
FROM {table_nameview_name list}
Giaùo trỗnh thổỷc haỡnh SQL
7UDQJ
Để đơn giản hoá câu hỏi, ta có thể sử dụng các bí danh (alias) cho các bảng hay
khung nhìn. Bí danh được gán trong mệnh đề FROM bằng cách chỉ định bí danh sau
tên bảng. Ví dụ câu lệnh sau gán bí danh n1 cho bảng nhanvien.
SELECT ten, diachi FROM nhanvien n1
1.2 Mệnh đề WHERE
Mệnh đề WHERE trong câu lệnh SELECT xác định các điều kiện đối với việc truy
xuất dữ liệu. Sau mệnh đề WHERE là một biểu thức logic và chỉ những dòng dữ liệu
nào thoả mn biểu thức sau WHERE mới được hiển thị trong kết quả truy vấn. Trong
mệnh đề WHERE thường sử dụng:
Các toán tử so sánh
Giới hạn ( BETWEEN và NOT BETWEEN).
Danh sách (IN, NOT IN)
Khuôn dạng (LIKE và NOT LIKE).
Các giá trị chưa biết (IS NULL và IS NOT NULL).
Kết hợp các điều kiện (AND, OR).
Các toán tử so sánh:
Toán tử ý nghĩa
=Bằng
> Lớn hơn
< Nhỏ hơn
>= Lớn hơn hoặc bằng
<= Nhỏ hơn hoặc bằng
<> Khác
!> Không lớn hơn
!< Không nhỏ hơn
Ví dụ 2.1: Truy vấn sau đây cho biết tên, địa chỉ và điện thoại của những nhân viên
có hế số lương lớn hơn 1.92:
SELECT ten, diachi, dienthoai
FROM nhanvien
WHERE hsluong>1.92
Giới hạn (BETWEEN và NOT BETWEEN)
Từ khoá BETWEEN và NOT BETWEEN được sử dụng nhằm chỉ định khoảng
giá trị tìm kiếm đối với câu lệnh SELECT. Câu lệnh dưới đây cho biết tên và đia chỉ
của những nhân viên có hệ số lương nằm trong khoảng 1.92 đến 3.11
SELECT ten, tuoi, diachi
FROM nhanvien
WHERE hsluong BETWEEN 1.92 AND 3.11
Trỏửn Nguyón Phong
Danh sách (IN và NOT IN)
Từ khoá IN được sử dụng khi ta cần chỉ định điều kiện tìm kiếm dữ liệu cho câu
lệnh SELECT là một danh sách các giá trị. Sau IN (hoặc NOT IN) có thể là một danh
sách các giá trị hoặc là một câu lệnh SELECT khác.
Ví dụ 2.2: Để hiển thị thông tin về các nhân viên có hệ số lương là 1.86, 1.92
hoặc 2.11, thay vì sử dụng câu lệnh:
SELECT * FROM nhanvien
WHERE hsluong=1.86 OR hsluong=1.92 OR hsluong=2.11
Ta có thể sử dụng câu lệnh sau:
SELECT * FROM nhanvien
WHERE hsluong IN (1.86, 1.92, 2.11)
Các ký tự đại diện và mệnh đề LIKE
Từ khoá LIKE (NOT LIKE) sử dụng trong câu lệnh SELECT nhằm mô tả khuôn
dạng của dữ liệu cần tìm kiếm. Chúng thường được kết hợp với các ký tự đại diện sau
đây:
Ký tự đại diện ý nghĩa
% Chuỗi ký tự bất kỳ gồm không hoặc nhiều ký tự
- Ký tự đơn bất kỳ
[] Ký tự đơn bất kỳ trong giới hạn được chỉ định (ví dụ [a-f])
hay một tập (ví dụ [abcdef])
[^] Ký tự đơn bất kỳ không nằm trong giới hạn được chỉ định (
ví dụ [^a-f] hay một tập (ví dụ [^abcdef]).
Ví dụ 2.3: Câu lệnh dưới đây hiển thị thông tin về các nhân viên có tên là Nam
SELECT * FROM nhanvien
WHERE hoten LIKE '% Nam'
IS NULL và NOT IS NULL
Giá trị NULL có thể được nhập vào một cột cho phép chấp nhận giá trị NULL
theo một trong ba cách sau:
Nếu không có dữ liệu được đưa vào và không có mặc định cho cột hay kiểu
dữ liệu trên cột đó.
Người sử dụng trực tiếp đưa giá trị NULL vào cho cột đó.
Một cột có kiểu dữ liệu là kiểu số sẽ chứa giá trị NULL nếu giá trị được chỉ
định gây tràn số.
Trong mệnh đề WHERE, ta sử dụng IS NULL hoặc IS NOT NULL như sau:
WHERE col_name IS [NOT] NULL
Các toán tử logic
Các toán tử logic sử dụng trong mệnh đề WHERE bao gồm AND, OR, NOT.
AND và OR được sử dụng để kết hợp nhiều điều kiện trong WHERE.
1.3 Danh sách chọn trong câu lệnh SELECT

Không có nhận xét nào:

Đăng nhận xét