Structured Query Language
Le Thi Lan
09/11/16
1
Giới thiệu về SQL
Lịch sử
– Ngôn ngữ Sequel trong dự án System-R
– 1986: Chuẩn SQL được ra đời có tên gọi
SQL-86
– 2 chuẩn khác ra đời sau này là SQL-89 và
SQL-92, SQL-99
Chú ý:
• Kiểm tra dạng chuẩn sử dụng
trong hệ QT CSDL
• SQL:
– Không phân biệt chữ hoa chữ
thường
– Một số hệ cần dấu chấm phẩy sau
câu lệnh
• Tham khảo:
– www.learn-sql-tutorial.com
– www.w3schools.com/SQL/sql_syntax
.asp
1
Giới thiệu về SQL
Các thành phần
– Ngôn ngữ định nghĩa dữ liệu (DDL)
– CREATE TABLE
– ALTER TABLE …
– Ngôn ngữ thao tác dữ liệu (DML)
– SELECT
– UPDATE
– DELETE
– Điều khiển giao dịch
2
Định nghĩa dữ liệu
– Sơ đồ đối với mỗi bảng
– Kiểu dữ liệu hay miền giá trị
– Các ràng buộc toàn vẹn
– Tập các chỉ dẫn
– Thông tin an toàn và ủy quyền đối với từng
bảng
– Cấu trúc lưu trữ vật lý
2
Định nghĩa dữ liệu- Kiểu dữ liệu
– Char(n)
– Varchar (n) : Độ dài thay đổi
– Int or Integer (từ -2,147,483,648 đến
2,147,483,647)
– Smallint (từ -32,768 đến 32,767)
– Numeric (p,s)
– Real, double precision
– Float (n)
– Date: YYYY-MM-DD
– Time: HH:MM.SS.MMMM
2
Định nghĩa dữ liệu- Tạo bảng
CREATE TABLE <tên bảng>
(<tên cột> <kiểu dữ liệu> [NOT NULL],
[CONSTRAINT <tên ràng buộc>
ràng buộc> …])
2
Định nghĩa dữ liệu- Tạo bảng
2
Định nghĩa dữ liệu- Tạo bảng
2
Định nghĩa dữ liệu- Thêm - Xóa cột
2
Định nghĩa dữ liệu- Xóa bảng
3
Thao tác trên dữ liệu
Các từ khóa
General
Structure
SELECT, ALL / DISTINCT, *,
AS, FROM, WHERE
Comparison
IN, BETWEEN, LIKE "% _"
Grouping
GROUP BY, HAVING,
COUNT( ), SUM( ), AVG( ), MAX( ), MIN( )
Display Order
ORDER BY, ASC / DESC
Logical
Operators
AND, OR, NOT
Output
INTO TABLE / CURSOR
TO FILE [ADDITIVE], TO PRINTER, TO SCREEN
Union
UNION
3
Thao tác trên dữ liệu
field
id
name
dob
sex
class
hcode
dcode
remission
mtest
type
width
numeric
4
character
10
date
8
character
1
character
2
character
1
character
3
logical
1
numeric
2
contents
student id number
name
date of birth
sex: M / F
class
house code: R, Y, B, G
district code
fee remission
Math test score
Phụ thuộc vào cơ sở dữ liệu sử dụng
www.w3schools.com/SQL/sql_datatypes.asp
3
Thao tác trên dữ liệu
• Option 1:
INSERT INTO Table_name
VALUES (value 1, value 2, …, value n)
• Option 2:
INSERT INTO Table_name (column 1,
column 2, …, column n)
VALUES (value 1, value 2, …, value n)
3
Thao tác trên dữ liệu
SELECT ...... FROM ...... WHERE ......
SELECT [ALL / DISTINCT] expr1 [AS col1], expr2 [AS col2] ;
FROM tablename WHERE condition
3
Thao tác trên dữ liệu
SELECT [ALL / DISTINCT] expr1 [AS col1], expr2 [AS col2] ;
FROM tablename WHERE condition
– Truy vấn lựa chọn các dòng trên các bảng có tên
tablename và trả kết quả dưới dạng bảng.
– Biểu thức expr1, expr2 có thể :
• (1) một cột hoặc
• (2) một biểu thức gồm các hàm và các trường.
– col1, col2 là tên các cột trong bảng kết quả
3
Thao tác trên dữ liệu
SELECT [ALL / DISTINCT] expr1 [AS col1], expr2 [AS col2] ;
FROM tablename WHERE condition
– DISTINCT: bỏ hết các bộ lặp trong kết quả trong khi
từ khóa ALL thì dữ lại toàn bộ các bộ lặp.
– condition có thể là :
• (1) so sánh >, <, = hoặc
• (2) so sánh xâu
• Toán từ logic AND, OR, NOT.
3
Ví dụ 1
Liệt kê tất cả sinh viên
SELECT * FROM student
Kết quả
id name
9801 Peter
9802 Mary
9803 Johnny
9804 Wendy
9805 Tobe
:
:
dob
06/04/86
01/10/86
03/16/86
07/09/86
10/17/86
:
sex
M
F
M
F
M
:
class
1A
1A
1A
1B
1B
:
mtest
70
92
91
84
88
:
hcode
R
Y
G
B
R
:
dcode
SSP
HHM
SSP
YMT
YMT
:
remission
.F.
.F.
.T.
.F.
.F.
:
3
Ví dụ 2
Liệt kê tên , mã nhà và lớp của sinh viên lớp 1A
SELECT name, hcode, class FROM student
WHERE class=‘1A’
Class
1A
1A
1A
1B
1B
:
Class
class="1A"
1A
1A
1A
1B
1B
:
3
Ví dụ 2
Kết quả
name
Peter
Mary
Johnny
Luke
Bobby
Aaron
:
hcode
R
Y
G
G
B
R
:
class
1A
1A
1A
1A
1A
1A
:
3
Ví dụ 3
Liệt kê mã quận của sinh viên có mã nhà là R
(Red house)
SELECT DISTINCT dcode FROM student
WHERE hcode=‘R’
Kết quả
dcode
HHM
KWC
MKK
SSP
TST
YMT
3
Ví dụ 4
Liệt kê tên của các nữ sinh lớp 1B
Liệt kê tên nữ sinh của lớp 1A và 1B
Liệt kê tên nữ sinh của lớp 1 A và nam sinh lớp 1 B
Điều kiện:
1) class = ‘1B’
2) sex = ‘F’
3) Cả 2 điều kiện ( toán tử
logic AND)
3
Ví dụ 4
SELECT name FROM student WHERE class=‘1B’
AND sex=‘F’
Kết quả
3
Ví dụ 5
Liệt kê tên, id của sinh viên không được miễn
phí đăng ký của lớp 1A
SELECT name, id, class FROM student
WHERE class=‘1A’ AND NOT remission
Kết quả
name
Peter
Mary
Luke
Bobby
Aaron
Ron
Gigi
:
id
9801
9802
9810
9811
9812
9813
9824
:
class
1A
1A
1A
1A
1A
1A
1A
:
3
So sánh
expr IN ( value1, value2, value3)
expr BETWEEN value1 AND value2
expr LIKE "%_"