79
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 Đức Long Email: [email protected] Website: http://www.2learner.edu.vn CƠ SỞ DỮ LIỆU

cosodulieu06

  • Upload
    itnoi

  • View
    191

  • Download
    2

Embed Size (px)

Citation preview

Page 1: cosodulieu06

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: [email protected]

Website: http://www.2learner.edu.vn

CƠ SỞ DỮ LIỆU

Page 2: cosodulieu06

NỘI DUNG TRÌNH BÀY

2Edited by Duc-Long, Le - 2009

Page 3: cosodulieu06

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: [email protected]

Website: http://www.2learner.edu.vn

Các lệnh định nghĩa dữ liệu Các lệnh truy vấn dữ liệu cơ bản Lệnh tạo khung nhìn (View)

NGÔN NGỮ SQL(Structured Query Language)

Page 4: cosodulieu06

4

Đặt vấn đề …

Một DBMS phải có ngôn ngữ giao tiếpgiữa ngƣời sử dụng với CSDL, baogồm: Ngôn ngữ mô tả dữ liệu (Data Definition Language –

DDL) để cho phép khai báo cấu trúc các bảng CSDL,khai báo các mối liên hệ của dữ liệu và các ràngbuộc áp đặt lên các dữ liệu đó

Ngôn ngữ thao tác dữ liệu (Data ManipulationLanguage – DML) cho phép ngƣời dùng thêm, xoá,sửa dữ liệu

Ngôn ngữ truy vấn dữ liệu, hay ngôn ngữ hỏi đáp cócấu trúc ( Structured Query Language – SQL) chophép khai thác thông tin cần thiết trong CSDL

Ngôn ngữ quản lý dữ liệu (Data Control Language –DCL) cho phép ngƣời quản trị hệ thống thay đổi cấutrúc của bảng, khai báo bảo mật thông tin, cấp quyềnkhai thác CSDL

Page 5: cosodulieu06

Ngôn ngữ ĐSQH

Cách thức truy vấn dữ liệu

Khó khăn cho ngƣời sử dụng

Ngôn ngữ giao tiếp CSDL: SQL

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)

Ban đầu có tên là SEQUEL (Structured English Query Language)

Đƣợc ANSI (American National Standard Institute)

công nhận và phát triển thành chuẩn:

• SQL-86 (được ISO – International Standards Organization công nhận)

• SQL-92

• SQL-99

Giới thiệu về SQL

Ví dụ và bài tập : MS SQL Server 2000

Page 6: cosodulieu06

THAO TAC VỚI NGÔN NGỮ SQL QUA DMBS MS SQL SERVER

6Edited by Duc-Long, Le - 2009

Cửa sô Enterprise Manager Cửa sô Query Analyzer

Thao tác

trưc tiếpThao tác

gián tiếp

Sử dụng ngôn ngữ SQL để

thưc hiện các yêu cầu

Sử dụng hệ thống thưc đơn

(menu) để thưc hiện các yêu cầu

Chủ yếu các yêu cầu tao,

thêm, xoá, sửa dữ liệuBao gôm tất cả các yêu cầu

cập nhật, khai thác dữ liệu

Man hinh go câu lênh

Man hinh xuât tbao, kêt qua

Page 7: cosodulieu06

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: [email protected]

Website: http://www.2learner.edu.vn

Định nghĩa dữ liệu

XEM CHAPTER 4 – DATA DEFINITION LANGUAGE

Ở SQL SERVER 2000-A BEGINNER’S GUIDE

Page 8: cosodulieu06

8

Các lệnh định nghĩa dữ liệu

Là ngôn ngữ mô tả (DDL) cho:

Tao CSDL

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

Vi dụ CREATE DATABASE (tao CSDL)

CREATE TABLE (tao bảng), DROP TABLE (xóa bảng)

ALTER TABLE (sửa bảng)

Page 9: cosodulieu06

Tối đa có thể tao 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)

File type File name extension

Primary data file .mdf

Secondary data file .ndf

Transaction log file .ldf

Tạo cơ sở dữ liệuTạ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.

Page 10: cosodulieu06

10

Tạo cơ sở dữ liệu

Tạo trực tiếp từ cửa sổ Enterprise Manager Tạo gián tiếp từ cửa sổ SQL Query Analyzer

Cú pháp tông quátCREATE DATABASE tên csdl

[ ON

[ < filespec > [ ,...n ] ]

[ , < filegroup > [ ,...n ] ]

]

[ LOG ON { < filespec > [ ,...n ] } ]

[ COLLATE collation_name ]

[ FOR LOAD | FOR ATTACH ]

< filespec > ::=

[ PRIMARY ]

( [ NAME = logical_file_name , ]

FILENAME = 'os_file_name'

[ , SIZE = size ]

[ , MAXSIZE = { max_size | UNLIMITED } ]

[ , FILEGROWTH = growth_increment ] ) [ ,...n ]

< filegroup > ::=

FILEGROUP filegroup_name < filespec > [ ,...n ]

Page 11: cosodulieu06

11

Tạo CSDL có tên Sales với các thông số như sau:

CREATE DATABASE Sales

ON

( NAME = Sales_dat,

FILENAME = 'c:\program files\microsoft sql server\mssql\data\saledat.mdf',

SIZE = 10,

MAXSIZE = 50,

FILEGROWTH = 5 )

LOG ON

( NAME = 'Sales_log',

FILENAME = 'c:\program files\microsoft sql server\mssql\data\salelog.ldf',

SIZE = 5MB,

MAXSIZE = 25MB,

FILEGROWTH = 5MB )

Kích thƣớc

ban đầu

Kích thƣớc

tối đa

Tao CSDL có tên QLSV gôm 2 file QLSV_Data.mdf

và QLSV_log.ldf với các thông số mặc định (kích

thƣớc ban đầu 1MB, kích thƣớc tối đa không giới han)

CREATE DATABASE QLSV

Hê thống sẽ tạo CSDL Sales với 2 file có tên saledat.mdf và

salelog.ldf cùng với cac thông số đã chỉ định

Page 12: cosodulieu06

12

CREATE DATABASE QLSV

QUAN SÁT CỬA SỔ ENTERPRISE MANAGER

Khi tạo CSDL QLSV với các thông số mặc nhiên trong

cửa sô Enterprise Manager – tương đương với lệnh tạo:

Trasaction log file với cac

thông số mặc địnhPrimary file với cac

thông số mặc định

Lưu ở …\MSSQL\data

Page 13: cosodulieu06

Xoá cơ sở dữ liệu hiện có

13

Xoá trực tiếp từ cửa sổ Enterprise Manager: nhấnphím Delete, nhấp chuột trên biểu tƣợng Delete

Xoá gián tiếp từ cửa sổ SQL Query Analyzer

DROP DATABASE QLSV

Lưu ý: Không thể hủy bỏ cac CSDL hê thống như: Master, Model, Tempdb

Để hủy bỏ một CSDL thanh công thi phai đam bao không còn người sd đang

truy cập CSDL

Tuyêt đối không xoa CSDL bằng cach sử dụng Windows Explorer hoặc

Windows Commander (chẳng hạn) để hủy bỏ cac loại tập tin dữ liêu của SQL

trong thư mục C:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA

Page 14: cosodulieu06

14

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á ngoai>) 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>] )

Page 15: cosodulieu06

15

QUAN SÁT CỬA SỔ ENTERPRISE MANAGER

CSDL QLSinhVien

Cấu trúc của bảng

HPhan

Page 16: cosodulieu06

16

Ý NGHĨA

Lệnh tao 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 gia trị rỗng. Lưu ý thuộc tính khoa

mặc nhiên bị rang buộc not null.

-primary key (<khoa chính>): khai bao khoa chính của bang.

-unique (<khoa>): khai bao cac khoa chỉ định khac (nêu có)

-foreign key (<khoa ngoại>) …: khai bao khoa ngoại của bang

-check <điều kiên rang buộc>: mô ta cac rang buộc miền gia trị

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á ngoai>) 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>] )

Page 17: cosodulieu06

17

Các kiểu dữ liệu của SQL

Số (numeric)

INTEGER

SMALLINT

NUMERIC, NUMERIC(p),

NUMERIC(p,s)

DECIMAL, DECIMAL(p),

DECIMAL(p,s)

REAL

DOUBLE PRECISION

FLOAT, FLOAT(p)

Kiểu số thường dùng

trong lập trình

Page 18: cosodulieu06

18

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ờ

Xem MS SQL Online Help

Kiểu thường dùng

trong lập trình

Page 19: cosodulieu06

19

Table 6-1. SQL Server datatype synonyms.

Synonym Mapped to system datatype

binary varying varbinary

char varying varchar

character char(1)

character(n) char(n)

character varying(n) varchar(n)

dec decimal

double precision float

float[(n)] for n = 1 to 7 real

float[(n)] for n = 8 to 15 float

integer int

national character(n) nchar(n)

national char(n) nchar(n)

national character varying(n) nvarchar(n)

national char varying(n) nvarchar(n)

national text ntext

numeric decimal

Page 20: cosodulieu06

20

Table 6-2. SQL Server number datatypes.

Datatype RangeStorage

(bytes)

bigint -263 to 263-1 8

int -231 to 231-1 4

smallint -215 to 215-1 2

tinyint 0 to 255 1

money

- 922,337,203,685,477.5808 to

922,337,203,685,477.5807 with accuracy of one ten-

thousandth of a monetary unit 8

smallmoney-214,748.3648 to 214,748.3647, with accuracy of

one ten-thousandth of a monetary unit4

decimal(p,s) Whole or fractional numbers from -1038 to 1038 2~17

float Approximations of numbers from -1.79E308 to

1.79E308 (15 digit precision)8

realApproximations of numbers from -3.40E38 to 3.40E38

(7 digit precision)4

Page 21: cosodulieu06

21

Table 6-3. SQL Server decimal and numeric datatype storage requirements.

Precision Storage (bytes)

1 to 9 5

10 to 19 9

20 to 28 13

29 to 38 17

Table 6-4. SQL Server datetime datatypes.

Datatype RangeStorage

(bytes)

datetimeJanuary 1, 1753, through December 31, 9999, with an

accuracy of three-hundredths of a second8

smalldatetimeJanuary 1, 1900, through June 6, 2079,with an

accuracy of one minute 4

Page 22: cosodulieu06

22

Table 6-5. SQL Server character datatypes.

char(n)Up to 8000 characters, 1 byte per character n declared, even

if partially unsused (fix length)

varchar(n)Up to 8000 characters, 1 byte per character stored. Declared

but unsused characters do not consume storage (variable

length)

nchar(n)Up to 4000 character, 2 bytes per character declared (Unicode

character strings)

nvarchar(n)Up to 4000 character, 2 bytes per character stored. Declared

but unsused do not use storage (Unicode character strings)

ntextUp to 230 -1 (1,073,741,823) characters (Unicode character

strings)

text and imageText: character data up to 231-1 characters

Image: Binary data up to 231-1 characters

Text and Image is always variable length

binary(n)Any binary representation (bit patterns) up to 255 bytes (n

bytes)

varbinary(n)Any binary representation (bit patterns) up to 255 bytes (n

bytes). No storage for space declared but not used

Page 23: cosodulieu06

23

Gọi từ menu Start

Start/All Programs/Microsoft SQL Server/Book Online

Gọi trực tiếp từ ứng dụng

Bấm F1

Chọn tab Search,

gõ từ cần tra cứu

Page 24: cosodulieu06

24

CREATE TABLE NhanVien(

MaNV char(8) not null,

HoNV nvarchar(50) not null,

TenLot nvarchar(50) not null,

TenNV nvarchar(50) not null,

NgSinh datetime not null,

Phai nvarchar(5),

Dchi nvarchar(100),

Ma_NQL char(8),

Phong char(4) not null,

MLuong real

)

Tạo bảng NHANVIEN

trong CSDL hiện

hành (đang mở) với

các thuộc tính được

định nghĩa là bắt

buộc hay không bắt

buộc nhập khi nhập

liệu hoặc thêm

Vi dụ - Tạo bảng đơn giản

Page 25: cosodulieu06

25

QUAN SÁT CỬA SỔ ENTERPRISE MANAGER

Khi tạo bảng NHANVIEN trực tiếp với các thuộc tính tương ứng

Tương đương với lệnh CREATE TABLE NHANVIEN...

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

Kích thƣớc (tƣơng ứng

số byte lƣu trữ)

Cho phép Null

Mô tả thuộc tính

Page 26: cosodulieu06

26

Tạo bảng NHANVIEN có khai báo các khóa

chính, khóa ngoại

CREATE TABLE NhanVien(

MaNV char(8) not null,

HoNV nvarchar(50) not null,

TenLot nvarchar(50) not null,

TenNV nvarchar(50) not null,

NgSinh datetime,

Phai nvarchar(5),

Dchi nvarchar(100),

Ma_NQL char(8) not null,

Phong char(4) not null,

MLuong real,

Primary Key (MaNV),

Foreign Key (Ma_NQL) References NhanVien(MaNV),

Foreign Key (Phong) References PhongBan(MaPhg)

)

Khai báo khóa chính

Khai báo khóa ngoai QUAN HỆ CHA

QUAN HỆ CON

Page 27: cosodulieu06

27

Ví dụ - Tạo bảng

CREAT TABLE MONHOC (

Mamon char(4) NOT NULL,

Tenmon char(20) NOT NULL,

Mato char(2),

Sotietquidinh int,

CHECK (Sotietquidinh > 0),

PRIMARY KEY (Mamon),

UNIQUE (Tenmon),

FOREIGN KEY (Mato) REFERENCES TOBM(MaBM)

)

Tạo bảng MONHOC có khai báo các khóa chính, khóa

ngoại và kiểm tra duy nhất

Khai báo tên môn là duy nhất (điểm

khác biệt với PK là đƣợc phép xuất

hiện nhiều lần

Kiểm tra thuộc tính Sotietquidinh

phải lớn hơn 0

QUAN HỆ CHA

QUAN HỆ CON

Có thể bỏ qua (kô báo lỗi)

Hệ thống tự đặt tên ràng buộc

Page 28: cosodulieu06

28

Ví dụ - Tạo bảng

CREATE TABLE PHONGBAN(

MaPhg char(4) NOT NULL,

TenPhg nvarchar(100) NOT NULL,

TrPhg char(8) DEFAULT '88556611',

NgNC datetime,

CONSTRAINT PK_PhongBan PRIMARY KEY (MaPhg),

CONSTRAINT U_PhongBan UNIQUE (TenPhg),

CONSTRAINT FK_PhongBan

FOREIGN KEY (TrPhg) REFERENCES NhanVien(MaNV)

ON DELETE SET DEFAULT ON UPDATE CASCADE

)

Tạo bảng PHONGBAN có khai báo các ràng buộc (có đặt

tên ràng buộc)

Tao ràng buộc khóa ngoai, có kiểm tra khi xóa, sửa

Tao ràng buộc tên phòng ban là duy nhất

Tao ràng buộc khóa chính

Đặt giá trị mặc nhiên là ‘88556611’

Page 29: cosodulieu06

29

Thao tác chỉnh sửa cấu trúc

Đƣợc dùng để

Thay đổi cấu trúc bảng

Thay đổi các ràng buộc (RB)

Thêm cột

Xóa cột

Mở rộng cột

ALTER TABLE <Tên_bảng> ADD <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>

Page 30: cosodulieu06

30

Vi dụ - Thay đổi cấu trúc bảng

ALTER TABLE NHANVIEN ADD NGHENGHIEP CHAR(20)

ALTER TABLE NHANVIEN DROP COLUMN NGHENGHIEP

ALTER TABLE NHANVIEN ALTER COLUMN NGHENGHIEP CHAR(50)

THÊM CỘT

XOÁ CỘT

THAY ĐỔI ĐỘ RỘNG CỘT

ALTER TABLE NHANVIEN ADD PRIMARY KEY (MANV)

ALTER TABLE NHANVIEN ADD FOREIGN KEY (PHONG) REFERENCES PHONGBAN (MAPHG)

BỔ SUNG KHOÁ CHÍNH, KHOÁ NGOẠI

Page 31: cosodulieu06

31

Thêm ràng buộc

Xóa ràng buộc

ALTER TABLE <Tên_bảng> ADDCONSTRAINT <Ten_RBTV> <RBTV>,

CONSTRAINT <Ten_RBTV> <RBTV>,

ALTER TABLE <Tên_bảng> DROP <Tên_RBTV>

Thao tác chỉnh sửa cấu trúc

Page 32: cosodulieu06

32

CREATE TABLE PhongBan(

MaPhg char(4) not null,

TenPhg nvarchar(100) not null,

)

ALTER TABLE PhongBan ADD TrPhg char(8), NgNC datetime

ALTER TABLE PhongBan ADD CONSTRAINT fk_PhongBan

FOREIGN KEY (TrPhg) REFERENCES NhanVien(MaNV)

SAU KHI TẠO BẢNG PHONGBAN, TẠO BẢNG NHANVIEN

BỔ SUNG THÊM CÁC RÀNG BUỘC

ALTER TABLE PhongBan ADD CONSTRAINT pk_PhongBan

PRIMARY KEY (MaPhg)

TẠO RÀNG BUỘC KHÓA CHÍNH

TẠO BẢNG PHONG BAN

Page 33: cosodulieu06

33

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

Vi dụ

DROP TABLE <Tên_bảng>

DROP TABLE NHANVIEN

DROP TABLE PHONGBAN

CHÚ Ý ĐẾN THỨ TỰ KHI XOÁ LIÊN QUAN ĐẾN RELATIONSHIP

Page 34: cosodulieu06

34

Lệnh xóa bảng (tt)

NHANVIEN

TENNVHONV TENLOT MANV NGSINH DCHI PHAI LUONG MA_NQL PHG

PHONGBAN

TRPHGTENPHG MAPHG NG_NHANCHUC

ALTER TABLE PHONGBAN DROP COLUMN TRPHG (xoá cột TRPHG)

ALTER TABLE PHONGBAN DROP fk_PHONGBAN (xoá RB fk_PHONGBAN)

DROP TABLE NHANVIEN

DROP TABLE PHONGBAN

HAY

(1)

(2)

(3)

(1)

(2)

(3)

Page 35: cosodulieu06

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: [email protected]

Website: http://www.2learner.edu.vn

Truy vấn dữ liệu

XEM CHAPTER 5 – SIMPLE QUERIES

Ở SQL SERVER 2000-A BEGINNER’S GUIDE

Page 36: cosodulieu06

36

Khai thác CSDL bằng SQL

Title Author Publisher Year

Intro to DB Systems Date Addison-Wesley 1986

Fund. of DB Systems Elmasri Addison-Wesley 1989

London Fields Amis Penguin 1989

100 years of solitude Marquez Picador 1982

The history man Bradbury Arrow Books 1977

BOOKINSERT INTO BOOKVALUES('Fund of...','..')

INSERT INTO BOOKVALUES('Fund of...','..')

DELETE FROM BOOKWHERE TITLE='London

Fields'

DELETE FROM BOOKWHERE TITLE='London

Fields'

UPDATE BOOKSET YEAR='1975'WHERE TITLE=The

history man'

UPDATE BOOKSET YEAR='1975'WHERE TITLE=The

history man'

SELECT TITLE, AUTHORFROM BOOKWHERE YEAR='1989'

SELECT TITLE, AUTHORFROM BOOKWHERE YEAR='1989'

Title AuthorFund. of DB lmasri Systems

London Amis Fields

Page 37: cosodulieu06

37

Truy vấn dữ liệu

Là ngôn ngữ rút trich dữ liệu thỏa một số điều kiện nào đó

Dựa trên

Lệnh cơ bản để rút trich thông tin từ CSDL: SELECT

Lệnh SELECT không hoàn toàn giống phép chọn/chiếu trong ĐSQH:

Cho phép 1 bảng có nhiều dòng trùng nhau

Bảng kết quả truy vấn là tập các bộ (đa bộ - tuples)

Phép toán ĐSQH Một số bổ sung

Page 38: cosodulieu06

38

CÚ PHAP CÂU LỆNH SELECT

SELECT <Danh sách các cột đƣợc chọn>

FROM < Danh sách các bảng>

WHERE <Điều kiện chọn>

GROUP BY <Danh sách cột cần nhóm>

HAVING < Điều kiện nhóm>

ORDER BY < Danh sách cột cần sắp xếp>

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”

Page 39: cosodulieu06

39

Câu 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>

Gần giống phép chiếu

Tƣơng ứng phép chọn

Tƣơng ứng phép tích

Page 40: cosodulieu06

40

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 CL (C (R))

Tƣơng ứng giữa SQL và ĐSQH

Page 41: cosodulieu06

41

Vi dụ

SELECT *

FROM NHANVIEN

WHERE PHONG=‘NC’

Lấy tất cả các cột của quan hệ kết quả

MANV,HONV,TENLOT,TENNV,NGSINH,DCHI,PHAI,LUONG,MA_NQL,PHONG (PHONG=„NC‟ (NHANVIEN))

PHONG=„NC‟ (NHANVIEN)HAY

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

008 Tran Hong Van 1976-07-04 Nu 980 Le HongPhong,Q10,HCM 004 NC 1800000.0

Liệt kê các nhân viên ở phòng Nghiên

cứu (MÃ PHÒNG = „NC‟)

Gía trị chuỗi phải để

trong nháy đơn ‘

Page 42: cosodulieu06

42

SELECT MANV, HONV, TENLOT, TENNV

FROM NHANVIEN

WHERE PHONG=‘NC’ AND PHAI=‘Nam’

SỬ DỤNG THÊM CÁC TOÁN TỬ LUẬN LÝ AND, OR, NOT, LIKE, BETWEEN

Vi dụLiệt kê manv, honv, tenlot, tennv của các nhân

viên nam ở phòng Nghiên cứu (PHONG = „NC‟)

MANV HONV TENLOT TENNV

002 Nguyen Thanh Tung

004 Dinh Ba Tien

006 Nguyen Manh Hung

Sử dụng nháy đơn nếu là chuỗi

Page 43: cosodulieu06

43

Đặt tên/bi danh khi truy vấn

SELECT MANV, HONV AS HONV, TENLOT AS „TEN LOT‟, TENNV AS “TÊN ”

FROM NHANVIEN

WHERE PHONG=„NC‟ AND PHAI=„Nam‟

Tên bí danh - Alias

Sư khác nhau khi đặt tên có thêm

nháy đơn/nháy kép và không có

Có thể có hoặc

không

MANV HONV TEN LOT TÊN

002 Nguyen Thanh Tung

004 Dinh Ba Tien

006 Nguyen Manh Hung

ĐẶT BÍ DANH CHO QUAN HỆ CŨNG TƯƠNG TỰ - NHANVIEN AS NV

Page 44: cosodulieu06

44

Nối các thuộc tinh

SELECT MANV, HONV + ‘ ‘ + TENLOT + ‘ ‘ + TENNV AS ‘HỌ TÊN’

FROM NHANVIEN

WHERE PHONG=‘NC’ AND PHAI=‘Nam’

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

Ví dụ Liệt kê manv, họ tên của các nhân viên nam ở

phòng Nghiên cứu (PHONG = „NC‟)

Page 45: cosodulieu06

45

Mở rộng thuộc tinh hiển thị

SELECT MANV, LUONG*1.1 AS ‘LUONG 10%’

FROM NHANVIEN

WHERE PHG=5 AND PHAI=‘Nam’

Mở rộng với các biểu thức số học

MANV LUONG 10%

002 2750000.0

004 2420000.0

006 2200000.0

Ví dụ Liệt kê manv, lương tăng thêm 10% của các nhân

viên nam ở phòng Nghiên cứu (PHONG = „NC‟)

Page 46: cosodulieu06

46

Sử dụng toán tử Between

SELECT MANV, TENNV

FROM NHANVIEN

WHERE MLUONG>=2000000 AND MLUONG<=3000000

SELECT MANV, TENNV

FROM NHANVIEN

WHERE MLUONG BETWEEN 2000000 AND 3000000

HAY CÓ THỂ VIẾT LẠI SỬ DỤNG TOÁN TỬ BETWEEN

Lƣơng nhân viên từ 2000000 đến 3000000

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

MANV TENNV

001 Quyen

002 Tung

003 Nhan

004 Tien

005 Vu

006 Hung

007 Tam Chú ý Between lấy Từ đâu ….. Đến đâu

Page 47: cosodulieu06

47

SELECT MANV, TENNV

FROM NHANVIEN

WHERE MLUONG NOT BETWEEN 2000000 AND 3000000

TOÁN TỬ NOT BETWEEN

SELECT MANV, TENNV

FROM NHANVIEN

WHERE MLUONG < 2000000 OR MLUONG > 3000000

TƢƠNG ĐƢƠNG VỚI CÁCH VIẾT:

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

Page 48: cosodulieu06

48

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

SELECT MANV, TENNV

FROM NHANVIEN

WHERE MLUONG = 2500000 OR MLUONG =3000000

TƢƠNG ĐƢƠNG VỚI CÁCH VIẾT:

SELECT MANV, TENNV

FROM NHANVIEN

WHERE MLUONG IN (2500000, 3000000)

MANV TENNV

001 Quyen

002 Tung

003 Nhan

Hoặc 2500000 hoặc 3000000

Thuộc các giá trị 2500000 hoặc 3000000

Toán tử tập hợp

Page 49: cosodulieu06

49

SELECT DISTINCT MLUONG

FROM NHANVIEN

WHERE PHONG=‘NC’

Loại bỏ các dòng trùng nhau

- Loại bỏ sẽ tốn chi phí thời gian

- Người dùng muốn thấy

- Khi dùng ham kêt hợp nêu tự

động loại bỏ có thể cho kêt qua sai

SELECT MLUONG

FROM NHANVIEN

WHERE PHONG=‘NC’

SQL HIỂN THỊ CÁC BỘ TRÙNG

NHAU TRONG KẾT QUẢ TRUY VẤN

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‟)

MLUONG

2500000.0

2200000.0

2000000.0

2200000.0

1800000.0

MLUONG

1800000.0

2000000.0

2200000.0

2500000.0

-Kêt qua cho thây

đã được sắp thứ tự

một cach phân biêt

Page 50: cosodulieu06

50

SELECT MANV, TENNV

FROM NHANVIEN

WHERE TENNV LIKE ‘Va_’

TOÁN TỬ LIKE – so sánh chuỗi tương đối

SELECT MANV, TENNV

FROM NHANVIEN

WHERE TENNV LIKE ‘T%’

Chuỗi bất kỳ tối đa 255 ký tự

(tai vị trí đó trở đi)

1 Ký tự bất kỳ

_ : ký tự đại diện cho 1 ký tự tại vị trí dấu

% : ký tự đại diện cho 1 nhóm ký tự tại vị trí dấu

Sử dụng toán tử Like

Kí tự gạch nối dưới

Kí tự phần trăm

Liệt kê manv, tennv của nhân viên có tên bắt đầu

bằng vần “Va”

Liệt kê manv, tennv của nhân viên có tên bắt đầu

bằng kí tự “T”

MANV TENNV

008 Van

MANV TENNV

002 Tung

004 Tien

007 Tam

Page 51: cosodulieu06

51

SELECT MANV, TENNV

FROM NHANVIEN

WHERE TENNV LIKE ‘%u%’ OR TENNV LIKE ‘%o%’

SELECT MANV, TENNV

FROM NHANVIEN

WHERE TENNV NOT LIKE ‘T%’

TOÁN TỬ LIKE – so sánh chuỗi tương đối

_ : ký tự đại diện cho 1 ký tự tại vị trí dấu

% : ký tự đại diện cho 1 nhóm ký tự tại vị trí dấu

Sử dụng toán tử Like

Kí tự gạch nối dưới

Kí tự phần trăm

TOÁN TỬ NOT LIKE

Liệt kê manv, tennv của nhân viên có tên chứa vần “u”hoặc vần “o”

MANV TENNV

001 Quyen

002 Tung

005 Vu

006 Hung Liệt kê manv, tennv của nhân viên có tên KHÔNG

bắt đầu bằng vần “T”

MANV TENNV

001 Quyen

003 Nhan

005 Vu

006 Hung

008 Van

Page 52: cosodulieu06

52

TOÁN TỬ LIKE – so sánh chuỗi tương đối

Sử dụng toán tử Like

SELECT MANV, TENNV

FROM NHANVIEN

WHERE DCHI LIKE ‘%TP HCM%’

Liệt kê manv, tennv của nhân viên có địa chỉ ở TP.HCMMANV TENNV

002 Tung

003 Nhan

004 Tien

005 Vu

007 Tam

008 Van Toán tử LIKE đƣợc sử dụng kèm với nhiều kí tư

(Wildcard Character) nhƣ: %, _, [ ], [^] và từ khóa

Escape

Page 53: cosodulieu06

53

Gọi từ menu Start

Start/All Programs/Microsoft SQL Server/Book Online

Gọi trực tiếp từ ứng dụng

Bấm F1

Chọn tab Search,

gõ từ cầm tra cứu

Page 54: cosodulieu06

54

Search với từ khóa Escape, chọn topic LIKE

Gọi từ menu Start

Start/All Programs/Microsoft SQL Server/Book Online

Gọi trực tiếp từ ứng dụng

Bấm F1

Page 55: cosodulieu06

55

Wildcard character Description Example

% Any string of zero or more

characters.

WHERE title LIKE '%computer%' finds all

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 within

the specified range ([a-f]) or

set ([abcdef]).

WHERE au_lname LIKE '[C-P]arsen' finds

author last names ending with arsen and

beginning with any single character between C

and P, for example Carsen, Larsen, Karsen,

and so on.

[^] Any single character not

within the specified range

([^a-f]) or set ([^abcdef]).

WHERE au_lname LIKE 'de[^l]%' all author

last names beginning with de and where the

following letter is not l.

Cú pháp

Thuộc tính so trùng [ NOT ] LIKE giá trị [ ESCAPE kí tự ]

KẾT QUẢ TÌM KIẾM – TRA CỨU HIỂN THỊ …

Page 56: cosodulieu06

56

YYYY-MM-DD

MM/DD/YYYY

„1955-12-08‟

‟12/08/1955‟

„Dec 8, 1955‟ hay „Dec, 8 1955‟

HH:MI:SS‟17:30:00‟

‟05:30PM‟

„1955-12-08 17:30:00‟

HH:MIPM (OR AM)

Thể hiện ngày giờCác dạng thể hiện trong SQL

SELECT MANV,NGSINH

FROM NHANVIEN

WHERE NGSINH > 'Jan 1, 1970'MANV NGSINH

005 1972-07-19 00:00:00.000

006 1973-09-15 00:00:00.000

007 1975-07-31 00:00:00.000

008 1976-07-04 00:00:00.000

SELECT MANV,NGSINH

FROM NHANVIEN

WHERE NGSINH > '1970-01-01'

SELECT MANV,NGSINH

FROM NHANVIEN

WHERE NGSINH > '1970-01-01 00:00:00'

hay

hay

thể hiện ngày giờ

trong cặp nháy đơn

Liệt kê manv, ngsinh của nhân viên có

ngày sinh sau ngày 1/1/1970

Page 57: cosodulieu06

57

SELECT MANV, TENNV

FROM NHANVIEN

WHERE NGSINH BETWEEN ‘1955-01-01’ AND ‘1966-12-31’

Thể hiện ngày giờ

Ví dụ Liệt kê manv, tennv của các nhân viên có ngày

sinh từ ngày 1/1/1955 đến ngày 31/12/1966

MANV TENNV

001 Quyen

002 Tung

003 Nhan

SELECT MANV, TENNV

FROM NHANVIEN

WHERE NGSINH <= ‘Dec, 31 1960’ OR NGSINH >=‘Jan, 1 1975’

MANV TENNV

001 Quyen

002 Tung

003 Nhan

007 Tam

008 Van

Liệt kê manv, tennv của các nhân viên có ngày

sinh từ trước ngày 31/12/1960 và đến sau ngày

1/1/1975

Page 58: cosodulieu06

58

Sử dụng hàm Datetime của SQL

Tên hàm Ý nghĩa Ví dụ minh họa

GETDATE( )

or DATE( )

Returns the current date in

datetime format.

SELECT MaHD FROM HOADON

WHERE NgayHD = GETDATE()

DATEDIFF( )Calculates an interval between

two dates.

SELECT * FROM NHANVIEN WHERE

DATEDIFF(year, NGSINH, GETDATE()) > 5

DATEPART( )

Returns the specified portion

of a date or datetime column,

including the day, month, or

year.

SELECT DATEPART(year, NGSINH)

FROM NHANVIEN

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)

Page 59: cosodulieu06

59

Sử dụng hàm Datetime của SQL

The table lists dateparts and abbreviations recognized by Microsoft® SQL Server™.

Datepart Abbreviations

Year yy, yyyy

quarter qq, q

Month mm, m

dayofyear dy, y

Day dd, d

Week wk, ww

Hour hh

minute mi, n

second ss, s

millisecond ms

SELECT GETDATE() AS 'Current Date'

Here is the result set:

Current Date ---------- 2006-12-13 14:56:07.117

SELECT DATEPART(month, GETDATE()) AS 'Month Number'

Here is the result set:

Month Number -------- 12

This example assumes the date May 29.

SELECT DATEPART(month, GETDATE())

Here is the result set:

----------- 5 (1 row(s) affected)

In this example, the date is specified as a number. Notice that SQL

Server interprets 0 as January 1, 1900.

SELECT DATEPART(m, 0), DATEPART(d, 0), DATEPART(yy, 0)

Here is the result set:

----- ------ --- 1 1 1900

SELECT MANV, TENNV

FROM NHANVIEN

where year(getdate())-year(ngsinh)>=40

VD: Liệt kê manv, tennv của NV có tuôi từ 40

trở lên

SELECT MANV, TENNV

FROM NHANVIEN

where datepart(yy,getdate())-datepart(yy, ngsinh)>=40

SELECT MANV, TENNV

FROM NHANVIEN

where datediff(yy, ngsinh, getdate()) >=40

Page 60: cosodulieu06

60

Sử dụng trong trƣờng hợp• Không biết giá trị (value unknown)

• Giá trị không thể áp dụng (value inapplicable)

• Không tôn tai giá trị (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

• Tương tự cho phép toan -, *, /

Những biểu thức so sánh có liên quan đến giá trị NULL sẽ cho ra kết quả là NULL (UNKNOWN)

• x = 3 cho ra kết quả là UNKNOWN (x có giá trị NULL)

• Tương tự cho phép toan >, <, <>, not, and, or

Sử dụng giá trị Null

Xem tai liêu SQL Server 2000: A Beginer’s Guide, pp 74

Page 61: cosodulieu06

61

Sử dụng giá trị Null

SELECT MANV, TENNV

FROM NHANVIEN

WHERE MA_NQL IS NULL

SELECT MANV, TENNV

FROM NHANVIEN

WHERE MA_NQL IS NOT NULL

LIỆT KÊ CÁC NHÂN VIÊN KHÔNG CÓ NGƢỜI QUẢN LÝ

LIỆT KÊ CÁC NHÂN VIÊN CÓ NGƢỜI QUẢN LÝ

MANV TENNV

001 Quyen

MANV TENNV

002 Tung

003 Nhan

004 Tien

005 Vu

006 Hung

007 Tam

008 Van

Page 62: cosodulieu06

62

CAC ĐIỂM LƢU Ý

SELECT MANV, TENNV

FROM NHANVIEN, PHONGBAN

WHERE TENPHG=‘Nghien cuu’ AND PHONG=MAPHG

Biểu thức luận lý

TRUE TRUE

Các toán tử toán học

Các toán tử toán học bao gôm các phép toán +, -, *, / và các

phép toán so sánh >, < , <> , >=, <=, …

Các toán tử logic

Các toán tử logic là các toán tử đƣợc dùng trong biểu thức điều

kiện: AND, OR, NOT,..

Các toán tử khác

LIKE, EXISTS, ANY/SOME, ALL, IN

Sử dụng 2 bảng

nên phải sử dụng

phép kết

Page 63: cosodulieu06

63

SELECT MANV, TENNV

FROM NHANVIEN, PHONGBAN

WHERE (TENPHG=‘Nghien cuu’ OR TENPHG=‘Quan ly’) AND PHONG=MAPHG

ĐỘ ƯU TIÊN CÁC TOÁN TỬ

(I) (II)

ƯU TIÊN TRONG NGOẶC SẼ THỰC HIỆN TRƯỚC

CAC ĐIỂM LƢU Ý (tt)

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ýVi dụ

MANV TENNV

001 Quyen

002 Tung

004 Tien

006 Hung

007 Tam

008 Van

Page 64: cosodulieu06

64

SELECT MANV, PHONG, MAPHG

FROM NHANVIEN, PHONGBAN

Không sử dụng mệnh đề WHERE PHÉP TÍCH DESCARTES

MANV, PNONG, MAPHG(NHANVIEN X PHONGBAN)

Tính tích Descartes của hai bảng

NHANVIEN và PHONGBAN và chiếu

trên hai cột MANV, PHONG, MAPHG

MANV PHONG MAPHG

001 QL DH

002 NC DH

003 DH DH

004 NC DH

005 DH DH

006 NC DH

007 NC DH

008 NC DH

001 QL NC

002 NC NC

003 DH NC

…. …. ….

CAC ĐIỂM LƢU Ý (tt)

Page 65: cosodulieu06

65

SELECT TENPHG, DIADIEM

FROM PHONGBAN, DIADIEM_PHG

WHERE MAPHG=MAPHG

SELECT TENPHG, DIADIEM

FROM PHONGBAN AS PB, DIADIEM_PHG AS DD

WHERE PB.MAPHG=DD.MAPHG

SELECT TENNV, NGSINH, TENTN, NGSINH

FROM NHANVIEN, THANNHAN

WHERE MANV=MA_NVIEN

SELECT TENNV, NV.NGSINH, TENTN, TN.NGSINH

FROM NHANVIEN NV, THANNHAN TN

WHERE MANV=MA_NVIEN

TRƯỜNG HỢP CÁC THUỘC TÍNH Ở CÁC QUAN HỆ KHÁC NHAU BỊ TRÙNG TÊN

SỬ DỤNG TÊN BÍ DANH Tên bí danh

Tên bí danh

Server: Msg 209, Level 16, State 1, Line 1

Ambiguous column name 'MAPHG'.

Server: Msg 209, Level 16, State 1, Line 1

Ambiguous column name 'MAPHG'.

CAC ĐIỂM LƢU Ý (tt)

Page 66: cosodulieu06

66

Sử dụng mệnh đề ORDER BY

Dùng để hiển thị kết quả câu truy vấn theo một thứ tự nào đó (sắp xếp kết quả hiển thị)

Cú pháp

ASC: sắp xếp tăng (mặc định)

DESC: sắp xếp 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>

Page 67: cosodulieu06

67

Mệnh đề ORDER BY (tt)

Vi dụ

SELECT MANV, MADA

FROM PHANCONG

ORDER BY MANV DESC, MADA

Liệt kê manv, mada mà nhân viên đó tham gia đề án

theo thứ tự manv giảm dần, nếu trùng manv thì liệt

kê theo thứ tự tăng dần

MANV MADA

008 DT002

008 TH001

007 TH001

007 TH002

006 DT001

004 DT001

004 DT002

003 TH001

002 DT001

002 DT002

002 TH001

002 TH002

001 TH001

001 TH002

MADA tăng dần

MANV giảm dần

Page 68: cosodulieu06

68

MANV HO TEN NV

001 Vuong Ngoc Quyen

003 Le Thi Nhan

005 Bui Thuy Vu

007 Tran Thanh Tam

008 Tran Hong Van

002 Nguyen Thanh Tung

004 Dinh Ba Tien

006 Nguyen Manh Hung

SELECT MANV, HONV + ' ‘ + TENLOT+' ‘ + TENNV AS "HỌ TÊN NV"

FROM NHANVIEN

ORDER BY PHAI DESC, MANV

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

PHAI giảm dần

MANV tăng dần

Mệnh đề ORDER BY (tt)

Page 69: cosodulieu06

Kết hợp mệnh đề TOP n

69Edited by Duc-Long, Le - 2009

Ví dụLiệt kê 3 nhân viên (manv) có tham gia đề án „TH001‟ với

thời gian được phân công nhiều nhất

SELECT TOP 3 MANV

FROM PHANCONG

WHERE MADA = ‘TH001’

ORDER BY THOIGIAN DESC

Xem mệnh đê TOP n ở trang 570-572 trong sách SQL Server 2000:

A Beginner’s Guide

Ý 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

Page 70: cosodulieu06

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: [email protected]

Website: http://www.2learner.edu.vn

Truy vấn dữ liệu

XEM CHAPTER 5 – SIMPLE QUERIES

Ở SQL SERVER 2000-A BEGINNER’S GUIDE

Page 71: cosodulieu06

71

Câu truy vấn trên nhiều bảng

Phân tich tƣơng tự nhƣ trong ĐSQH

Sau đó ánh xạ tự ĐSQH SQL

Lƣu ý ở mệnh đề

From: chỉ ra các bảng cần liên kết

Where: chỉ ra thêm điều kiện kết

SELECT MASV,TENSV,SVIEN.MAKHOA,TENKHOA

FROM SVIEN,KHOA

WHERE SVIEN.MAKHOA='CNTT' AND SVIEN.MAKHOA=KHOA.MAKHOA

Page 72: cosodulieu06

72

Tìm họ tên nhân viên và tên phòng ban nhân

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 ))

Ví dụ 1

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

Page 73: cosodulieu06

73

Lập danh sách các thân nhân dưới 18 tuôi

của các nhân viên.Ví dụ 2

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 ham lây gia trị ngay thang hiên hanh)

SELECT NV.MANV,TENNV, TENTN, TN.PHAI, TN.NGSINH, QUANHE

FROM NHANVIEN NV,THANNHAN TN

WHERE NV.MANV =TN.MANV AND YEAR(GETDATE())-YEAR(TN.NGSINH)<18

MANV TENNV TENTN PHAI NGSINH QUANHE

003 Nhan Tran Minh Tien Nam 1990-11-12 Con

003 Nhan Tran Ngoc Linh Nu 1993-10-03 Con

005 Vu Nguyen Manh Tam Nam 2003-01-13 Con

Server: Msg 209, Level 16, State 1, Line 1

Ambiguous column name 'MANV'.

Server: Msg 209, Level 16, State 1, Line 1

Ambiguous column name 'NGSINH'.

Bắt buộc nếu kô sẽ báo lỗi !!!

Page 74: cosodulieu06

74

Ví dụ 3Với mỗi phòng ban, cho biết tên phòng ban và

địa điểm phòng

TENPHG, DIADIEM (PHONGBAN PHONGBAN.MAPHG = DIADIEM_PHG.MAPHG DIADIEM_PHG ))

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

Page 75: cosodulieu06

75

Ví dụ 4Tìm tên những người trưởng phòng của từng

phòng ban

HONV, TENLOT, TENNV, TENPHG(PHONGBAN TRPHG = MANVNHANVIEN))

SELECT TENPHG,HONV+' '+TENLOT+' '+TENNV AS TENTP

FROM NHANVIEN,PHONGBAN

WHERE MANV=TRPHG

TENPHG TENTP

Dieu Hanh Le Thi Nhan

Nghien Cuu Nguyen Thanh Tung

Quan Ly Vuong Ngoc Quyen

Page 76: cosodulieu06

76

Ví dụ 5

TENDA, MADA, DDIEM_DA, PHONG, TENPHG, MAPHG, TRPHG, NGNC(PHONGBAN MAPHG = PHONGDEAN ))

Tìm TENDA, MADA, DDIEM_DA, PHONG,

TENPHG, MAPHG, TRPHG, NGNC

SELECT TENDA,MADA,DDIEM_DA,MAPHG,TENPHG,TRPHG,NGNC

FROM DEAN,PHONGBAN

WHERE PHONG=MAPHG

TENDA MADA DDIEM_DA MAPHG TENPHG TRPHG NGNC

DAO TAO 1 DT001 NHATRANG DH Dieu Hanh 003 2002-10-10

DAO TAO 2 DT002 HANOI DH Dieu Hanh 003 2002-10-10

TIN HOC HOA 1 TH001 HANOI NC Nghien Cuu 002 2002-03-15

TIN HOC HOA 2 TH002 TPHCM NC Nghien Cuu 002 2002-03-15

Page 77: cosodulieu06

77

Ví dụ 6Tìm tên và địa chỉ của tất cả các nhân viên

của phòng "Nghien cuu".

SELECT TENNV,DCHI

FROM PHONGBAN,NHANVIEN

WHERE PHONG = MAPHG AND TENPHG='Nghien cuu'

TENNV,DCHI (TENPHG=”Nghien cuu”(PHONGBAN MAPHG=PHONGNHANVIEN))

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

Page 78: cosodulieu06

78

Ví dụ 7Tìm tên những nữ nhân viên và tên người

thân của họ

TENNV,TENTN(PHAI=”Nu”(NHANVIEN MANVTHANNHAN))

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

Page 79: cosodulieu06

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: [email protected]

Website: http://www.2learner.edu.vn

Cám ơn đã theo dõi …

79