Csc10006 Chapter 4 SQL II.2425
Csc10006 Chapter 4 SQL II.2425
Chapter 4
SQL
(Structured Query Language)
Instructor: Vũ Thị Mỹ Hằng, Ph.D. ([email protected])
Lab Assistants: Tiết Gia Hồng, M.Sc. ([email protected])
Lương Hán Cơ, M.Sc. ([email protected])
4.0
fit@hcmus
Content
§ Introduction
§ Data definition
§ Data manipulation
§ Query
§ Data update
§ View
§ Index
§ SQL includes
- Data definition language (DDL)
SQL-92 standard
- Data manipulation language (DML)
- View definition
- Integrity constraint
- Authorization and security SQL Server
- Transaction control
§ SQL terms
- Table ~ relation
- Column ~ attribute
- Row ~ tuple
© Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 4
Content
§ Introduction
§ Data definition
- Data type
- Data definition commands
§ Data manipulation
§ View
§ Index
§ Numeric
- INTEGER
- SMALLINT
- NUMERIC, NUMERIC(p), NUMERIC(p,s)
- DECIMAL, DECIMAL(p), DECIMAL(p,s)
- REAL
- DOUBLE PRECISION
- FLOAT, FLOAT(p)
§ Alter columns
ALTER TABLE <Table_name> ALTER COLUMN
<Column_name> <Data_type>
§ Drop constraints
ALTER TABLE <Table_name> DROP <Contraint_name>
§ Example
DROP TABLE GIAOVIEN
GIÁOVIÊN
MãGV HọTên Lương Phái NgàySinh SốNhà Đường Quận ThànhPhố GVQL MãBM
BỘMÔN
MãKhoa TrưởngBM NgàyNhậnChức ĐiệnThoại MãBM TênBM Phòng
KHOA
TrưởngKhoa NgàyNhậnChức TênKhoa NămTL Phòng ĐiệnThoại MãKhoa
§ Ví dụ
CREATE TYPE MyString30 AS VARCHAR(30)
s
SELECT L
FROM R
WHERE C
pL (sC (R))
SELECT *
FROM KHOA
WHERE PHONG='I53'
AND NAMTL = '1995'
CNTT Công nghệ thông tin I53 1995 08313964145 GV130 01/01/2007
s PHG='I53'ÙNamTL='1995' (KHOA)
Alias name
SELECT MAKHOA AS 'Mã khoa', TENKHOA AS 'Tên khoa', PHONG AS 'Mã phòng'
FROM KHOA
WHERE PHONG='I53' AND NAMTL = '1995'
r p
Mã khoa, Tên khoa, Mã phòng( MANV,HONV,TENLOT,TENNV(s PHG='I53'ÙNamTL='1995' (KHOA)))
SELECT MAGV, HOTEN, SONHA + ',' + DUONG + ',' + ',' + QUAN + ',' +
THANHPHO AS 'DIA CHI'
FROM GIAOVIEN
WHERE PHAI='Nam'
r
MAGV,HOTEN,DIA CHI(p MAGV,HOTEN,SONHA+DUONG+QUAN+THANHPHO( s PHAI=‘Nam’(GIAOVIEN)))
MAGV LUONG10%
GV001 550000
- Cost
- Users want to see all tuples
Priority
BETWEEN
NOT BETWEEN
LIKE
Arbitrary characters
SELECT MAGV, HOTEN
FROM GIAOVIEN
WHERE HOTEN LIKE ‘Nguyen %’
Arbitrary strings
NOT LIKE
negative
SELECT * SELECT *
FROM GIAOVIEN GV FROM GIAOVIEN GV
WHERE GV.HOTEN LIKE N'[n]%' WHERE GV.HOTEN LIKE N'[nh]%'
SELECT * SELECT *
FROM GIAOVIEN GV FROM GIAOVIEN GV
WHERE GV.HOTEN LIKE N'[^h]%' WHERE GV.HOTEN LIKE N'[^nh]%'
Ngày giờ
‘1955-12-08 17:30:00’
NULL
SELECT *
GIAOVIEN x BOMON FROM GIAOVIEN, BOMON
SELECT *
FROM GIAOVIEN, BOMON
MAGV MAB MABM TENBM WHERE TRUE
M
001 HTTT HTTT Hệ thống thông tin
Sử dụng thêm điều
001 HTTT MTT Mạng máy tính
kiện ở WHERE để biểu
001 HTTT CNPM Công nghệ PM
diễn phép kết
002 MMT HTTT Hệ thống thông tin
002 MTT Mạng máy tính GIAOVIEN BOMON
MMT
002 CNPM Công nghệ PM C
MMT SELECT *
… … … … FROM GIAOVIEN, BOMON
WHERE C
SELECT < ColList > FROM < TabList > WHERE < Condition >
INTERSECT [ALL]
SELECT < ColList > FROM < TabList > WHERE < Condition >
SELECT < ColList > FROM < TabList > WHERE < Condition >
EXCEPT [ALL]
SELECT < ColList > FROM < TabList > WHERE < Condition >
SELECT MAGV
FROM GIAOVIEN
WHERE HOTEN LIKE N'Nguyễn%'
AND LUONG > 200000
UNION
SELECT TRUONGBM
FROM BOMON
WHERE YEAR(NGAYNHANCHUC)>=1995
SELECT BM.TRUONGBM
FROM BOMON BM, DETAI DT
WHERE BM.TRUONGBM = DT.GVCNDT
SELECT MAGV
FROM GIAOVIEN
EXCEPT
SELECT MAGV
FROM THAMGIADT
Subquery does not use attributes from relations in the outer query
SELECT HOTEN
FROM GIAOVIEN
WHERE MAGV IN (SELECT MAGV
FROM GIAOVIEN
WHERE HOTEN LIKE N'Nguyễn%'
AND LUONG > 200000)
OR MAGV IN (SELECT TRUONGBM
FROM BOMON
WHERE YEAR(NGAYNHANCHUC)>=1995)
SELECT *
FROM GIAOVIEN
WHERE MAGV <> ALL(SELECT MAGV
FROM THAMGIADT)
SELECT GV1.*
FROM GIAOVIEN GV1, GIAOVIEN GV2, BOMON BM
WHERE GV2.MABM = BM.MABM
AND BM.TENBM = N'Công nghệ phần mềm' AND GV1.LUONG > GV2.LUONG
© Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 67
Example
§ Tìm những giáo viên có lương lớn hơn lương
của tất cả giáo viên thuộc bộ môn ‘Hệ thống
thông tin’
SELECT *
FROM GIAOVIEN
WHERE LUONG > ALL (SELECT LUONG
FROM GIAOVIEN GV, BOMON BM
WHERE GV.MABM = BM.MABM
AND BM.TENBM = N'Hệ thống thông tin')
SELECT *
FROM GIAOVIEN GV1
WHERE EXISTS (SELECT *
FROM GIAOVIEN GV2
WHERE GV1.HOTEN LIKE GV2.HOTEN
AND GV1.PHAI = GV2.PHAI
AND GV1.MABM = GV2.MABM
AND GV1.MAGV <> GV2.MAGV)
SELECT *
FROM GIAOVIEN GV
WHERE NOT EXISTS (SELECT *
FROM THAMGIADT PC
WHERE PC.MAGV = GV.MAGV)
SELECT *
FROM GIAOVIEN GV1
WHERE EXISTS (SELECT *
FROM GIAOVIEN GV2, BOMON BM
WHERE GV2.MABM = BM.MABM
AND BM.TENBM = N'Công nghệ phần mềm'
AND GV1.LUONG > GV2.LUONG)
If the subquery returns at least one row => EXISTS (…) = TRUE
If the sub query returns no row => EXISTS (…) = FALSE
SELECT *
FROM GIAOVIEN GV
WHERE EXISTS (SELECT *
FROM THAMGIADT PC
WHERE PC.MAGV = GV.MAGV)
SELECT *
FROM GIAOVIEN GV
WHERE NOT EXISTS (SELECT *
FROM THAMGIADT PC
WHERE PC.MAGV = GV.MAGV)
R A B C D E S D E T=R÷S A B C
a a a a 1 a 1 a a g
a a g a 1 b 1 g a g
a a g b 1
b a g a 1
b a g b 3
g a g a 1
g a g b 1
g a b b 1
¡ Tìm tên các giáo viên được phân công làm tất cả
các đề tài
Tìm những giáo viên mà danh sách đề tài không tham gia = rỗng
Tìm những giáo viên mà số lượng đề tài chưa tham gia bằng 0
90
Exercise
1. Cho biết mã số, họ tên, ngày sinh của giáo viên tham gia
tất cả các công việc của đề tài ‘Ứng dụng hóa học xanh’.
2. Cho biết mã số, họ tên, tên bộ môn và tên người quản lý
chuyên môn của giáo viên tham gia tất cả các đề tài thuộc
chủ đề ‘Nghiên cứu phát triển’.
3. Cho biết họ tên, ngày sinh, tên khoa, tên trưởng khoa của
giáo viên tham gia tất cả các đề tài có giáo viên ‘Nguyễn
Hoài An’ tham gia.
4. Cho biết họ tên giáo viên khoa ‘Công nghệ thông tin’ tham
gia tất cả các công việc của đề tài có trưởng bộ môn của bộ
môn đông nhất khoa ‘Công nghệ thông tin’ làm chủ nhiệm.
§ Introduction
§ Data definition
§ Data manipulation
- Basic queries
- Set, set/multiset comparison and nested queries
- Aggregate functions and grouping
- Other
§ View
§ Index
¡ After grouping
- Each group will have identical values at grouping
attributes
§ GROUP BY -clause
- Attributes in SELECT clause (excepting attributes of
aggregate functions) must appear in GROUP BY-clause
§ HAVING-clause
- Use aggregate functions in SELECT-clause to check a certain
condition
- Just validate the conditions for groups, not a condition for
filtering rows
- After grouping, conditions on groups will be performed
§ CASE structure
§ Syntax
SELECT <ColumnList>
FROM R1, R2, (<Subquery>) AS Table_name
WHERE <Conditions>
§ Outer join
SELECT < ColumnList >
FROM R1 LEFT|RIGHT [OUTER] JOIN R2 ON < Expression >
WHERE < Conditions >
GV.MAGV= PC.MAGV
extend
§ Syntax
CASE <Column_name>
WHEN <value> THEN <Expression>
WHEN < value > THEN <Expression>
…
[ELSE < Expression >]
END
SELECT HOTEN
FROM GIAOVIEN
WHERE YEAR(GETDATE()) - YEAR(NGAYSINH) >= ( CASE PHAI
WHEN 'Nam' THEN 60
WHEN 'Nu' THEN 55
END)
SELECT <List_of_columns>
FROM <List_of_tables>
[WHERE <Conditions>]
[GROUP BY <List_grouping_columns>]
[HAVING <Conditions>]
[ORDER BY <List_of_ordering_columns>]
§ Introduction
§ Data definition
§ Data manipulation
§ Data update
§ View
§ Index
§ Syntax
DELETE FROM <Table_name>
[WHERE <Conditions>]
§ Syntax
UPDATE <Table_name>
SET <Attribute_name>=<The_new_value>,
<Attribute_name>=<The_new_value>,
…
[WHERE <Conditions>]
UPDATE GIAOVIEN
SET NGAYSINH='08/12/1965'
WHERE MAGV='GV001'
UPDATE GIAOVIEN
SET LUONG=LUONG*1.1
UPDATE GIAOVIEN
SET LUONG = LUONG*1.5, GVQL = NULL
WHERE MABM = (SELECT MABM
FROM BOMON
WHERE TENBM = N'Hệ thống thông tin')
§ View contains
- A list of attributes that are the same as attributes in SELECT
clause
- The number of tuples depending on the conditions in
WHERE clause
- Data derived from tables in FROM clause
SELECT *
FROM GIAOVIEN Đọc 10.000 bộ
WHERE MABM='HTTT' AND PHAI=‘Nu’
Đọc 200 bộ
§ Example
CREATE INDEX MABM_IND ON GIAOVIEN(MABM)
§ Selection of indexes
- One of the principal factors that influence a database
- One of the hardest parts of database design