Chương 5: NGÔN NGỮ SQL

download Chương 5: NGÔN NGỮ SQL

of 43

Transcript of Chương 5: NGÔN NGỮ SQL

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    1/115

    CHƯƠNG  5

    NGÔN NGỮ SQL

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    2/115

    KNOWLEDGE FOR SHARE

    Tài liệu tham khảo

    [1] Đỗ Phúc, Nguyễn Đăng Tỵ.Giáo trình cơ sở dữ liệu.Đại học Quốc gia Tp.HCM.

    [2] Đồng Thị Bích Thủy.

    Giáo trình cơ sở dữ liệu.Đại học Quốc gia Tp.HCM.

    [3] Trần Ngọc Bảo.Slide bài giảng CSDL

    Đại học Sư Phạm TP.HCM[4] Lê Minh Triết.

    Slide bài giảng CSDLĐại học Sư Phạm TP.HCM

    3/22/2013 2

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    3/115

    KNOWLEDGE FOR SHARE

    Nội dung

    1. Giới thiệu về SQL2. Kiểu dữ liệu

    3. Định nghĩa dữ liệu4. Truy vấn dữ liệu

    5. Cập nhật dữ liệu6. Một số vấn đề khác

    3/22/2013 3

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    4/115

    KNOWLEDGE FOR SHARE

    1. 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

    3/22/2013 4

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    5/115

    KNOWLEDGE FOR SHARE

    1. Giới thiệu

    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ộ

    3/22/2013 5

    Lý thuyếtChuẩn SQL-92,

    SQL Server 2000

    Minh họaSQL Server 2000

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    6/115

    KNOWLEDGE FOR SHARE

    1. Giới thiệu về SQL

    3/22/2013 6

    Ngôn ngữ định nghĩa dữ liệu DDL - Data Definition Language Các lệnh dùng để định nghĩa CSDL: tạo lập (create),

    thay đổi (alter) và hủy bỏ (drop) các đối tượng dữ liệu,thiết lập các ràng buộc.

    Ngôn ngữ thao tác dữ liệu DML - Data Manipulation Language Các lệnh dùng để bảo trì và truy vấn CSDL: thêm

    (insert), sửa (update), xóa (delete) dữ liệu của bảng,truy vấn (select).

     Ngôn ngữ điều khiển dữ liệu DCL - Data Control Language Các lệnh dùng để điều khiển CSDL: quản trị các quyền

    (grant, revoke).

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    7/115

    KNOWLEDGE FOR SHARE

    1. Giới thiệu về SQL

    3/22/2013 7

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    8/115

    KNOWLEDGE FOR SHARE

    2. Kiểu dữ liệu

    3/22/2013 8

    Kiểu dữ liệu trong SQL Server 

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    9/115

    KNOWLEDGE FOR SHARE

    2. Kiểu dữ liệu

    3/22/2013 9

    Kiểu dữ liệu trong SQL Server 

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    10/115

    KNOWLEDGE FOR SHARE

    2. Kiểu dữ liệu

    3/22/2013 10

    Kiểu dữ liệu trong SQL Server 

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    11/115

    KNOWLEDGE FOR SHARE

    3. Đị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ệ Các lệnh thông dụng – CREATE TABLE (tạo bảng) –  ALTER TABLE (sửa bảng) – DROP TABLE (xóa bảng) – CREATE DOMAIN (tạo miền giá trị) – CREATE DATABASE – …

    3/22/2013 11

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    12/115

    KNOWLEDGE FOR SHARE

    3. Định nghĩa dữ liệu

    Để đị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

    3/22/2013 12

    CREATE TABLE 

    ( [], [],…[]

    )

    Tạo bảng

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    13/115

    KNOWLEDGE FOR SHARE

    3. Định nghĩa dữ liệu

    3/22/2013 13

    CREATE TABLE NHANVIEN(

    MANV  CHAR (9),

    HONV  NVARCHAR (10),

    TENLOT NVARCHAR (20),

    TENNV  NVARCHAR (10),

    NGSINH DATETIME ,

    DCHI NVARCHAR (50),

    PHAI CHAR (3),

    LUONG INT ,MA_NQL CHAR (9),

    PHG INT

    )

    Tạo bảng

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    14/115

    KNOWLEDGE FOR SHARE

    3. Định nghĩa dữ liệu

    3/22/2013 14

    NOT NULL

    NULL

    UNIQUE (khóa chỉ định)

    DEFAULTPRIMARY KEY

    FOREIGN KEY / REFERENCES

    CHECK (đk ràng buộc)

     Đặt tên cho RBTVCONSTRAINT 

    Tạo bảng

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    15/115

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    16/115

    KNOWLEDGE FOR SHARE

    3. Định nghĩa dữ liệu

    3/22/2013 16

    CREATE TABLE PHONGBAN(

    TENPB NVARCHAR (20) UNIQUE ,

    MAPHG INT NOT NULL ,

    TRPHG CHAR (9),

    NG_NHANCHUC DATETIME DEFAULT (GETDATE()))

    CREATE TABLE PHANCONG

    (

    MANV CHAR (9) FOREIGN KEY (MANV)

    REFERENCES NHANVIEN(MANV),MADA INT REFERENCES DEAN(MADA),

    THOIGIAN DECIMAL(3,1),

    PRIMARY KEY (MANV,MADA)

    )

    Tạo bảng

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    17/115

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    18/115

    KNOWLEDGE FOR SHARE

    3. Định nghĩa dữ liệu

    3/22/2013 18

    CREATE TABLE PHANCONG

    (

    MANV  CHAR (9),

    MADA INT ,

    THOIGIAN DECIMAL(3,1),CONSTRAINT PC_MANV_MADA_PK 

    PRIMARY KEY (MANV, MADA),

    CONSTRAINT PC_MANV_FK FOREIGN KEY (MANV)

    REFERENCES NHANVIEN(MANV),

    CONSTRAINT PC_MADA_FK FOREIGN KEY (MADA)

    REFERENCES DEAN(MADA)

    )

    Tạo bảng

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    19/115

    KNOWLEDGE FOR SHARE

    3. Định nghĩa dữ liệu

    Thay đổi cấu trúc bảng – Thêm cột

     – Xóa cột

     – Mở rộng cột

    Thay đổi ràng buộc toàn vẹn (RBTV)

     – Thêm RBTV 

     – Xóa RBTV 

    3/22/2013 19

    Sửa bảng

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    20/115

    KNOWLEDGE FOR SHARE

    3. Định nghĩa dữ liệu

    3/22/2013 20

     S  ử  a b  ả n

     g

     ALTER TABLE  ADD COLUMN []

     ALTER TABLE  DROP COLUMN 

     ALTER TABLE  ALTER COLUMN

     ALTER TABLE  ADD

    CONSTRAINT  ,

    CONSTRAINT  ,…

     ALTER TABLE  DROP 

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    21/115

    KNOWLEDGE FOR SHARE

    3. Định nghĩa dữ liệu

    3/22/2013 21

    Sửa bảng

     ALTER TABLE NHANVIEN ADD NGHENGHIEP CHAR (20)

     ALTER TABLE NHANVIENDROP COLUMN NGHENGHIEP

     ALTER TABLE NHANVIEN ALTER COLUMN NGHENGHIEP CHAR (50)

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    22/115

    KNOWLEDGE FOR SHARE

    3. Định nghĩa dữ liệu

    3/22/2013 22

    CREATE TABLE PHONGBAN(

    TENPB   VARCHAR (20),

    MAPHG   INT NOT NULL,

    TRPHG   CHAR (9),

    NG_NHANCHUC DATETIME)

     ALTER TABLE PHONGBAN ADD

    CONSTRAINT PB_MAPHG_PK  PRIMARY KEY  (MAPHG),

    CONSTRAINT PB_TRPHG FOREIGN KEY  (TRPHG)

    REFERENCES NHANVIEN(MANV),

    CONSTRAINT PB_NGNHANCHUC_DF DEFAULT (GETDATE())

    FOR  (NG_NHANCHUC),

    CONSTRAINT PB_TENPB_UNI UNIQUE (TENPB)

    Sửa bảng

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    23/115

    KNOWLEDGE FOR SHARE

    3. Định nghĩa dữ liệu

    Đượ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ụ

    3/22/2013 23

    Xóa bảng

    DROP TABLE 

    DROP TABLE NHANVIEN

    DROP TABLE PHONGBAN

    DROP TABLE PHANCONG

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    24/115

    KNOWLEDGE FOR SHARE

    3. Định nghĩa dữ liệu

    3/22/2013 24

    Xóa bảngNHANVIEN

    TENNVHONV TENLOT MANV NGSINH DCHI PHAI LUONG MA_NQL PHG

    PHONGBAN

    TRPHGTENPHG MAPHG NG_NHANCHUC

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    25/115

    KNOWLEDGE FOR SHARE

    3. Định nghĩa dữ liệu

    Tạo ra một kiểu dữ liệu mới kế thừanhững kiểu dữ liệu có sẳn Cú pháp

     Ví dụ

    3/22/2013 25

    Tạo miền GT

    CREATE DOMAIN  AS 

    CREATE DOMAIN kieu_MANV AS CHAR(9)

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    26/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    1. Truy vấn cơ bản2. Tập hợp, so sánh tập hợp

    3. Truy vấn lồng

    4. Hàm kết hợp, gom nhóm

    5. Một số kiểu truy vấn khác

    3/22/2013 26

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    27/115

    KNOWLEDGE FOR SHARE

    4. 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

    Lệnh cơ bản để rút trích thông tin: SELECT Cho phép 1 bảng có nhiều dòng trùng nhau Bảng là  b ag  (đa bộ)  quan hệ là  se t  (tập hợp)

    3/22/2013 27

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

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    28/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

     – Tên các cột cần được hiển thị trong kết quả truy vấn

     – Tên các bảng liên quan đến câu truy vấ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

    3/22/2013 28

    Truy vấn cơ bảnSELECT 

    FROM 

    WHERE 

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    29/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/2013 29

    Truy vấn cơ bản

    SELECT 

    FROM WHERE 

    ×

    SELECT L

    FROM R,S

    WHERE C

    L (C (RxS))

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    30/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/2013 30

    Truy vấn cơ bảnSELECT *

    FROM NHANVIEN

    WHERE PHG=5

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

    PHG=5 (NHANVIEN)

    TENNVHONV NGSINH DCHI PHAI LUONG PHG

    TungNguyen 12/08/1955 638 NVC Q5 Nam 40000 5

    HungNguyen 09/15/1962 Ba Ria VT Nam 38000 5

    333445555

    987987987

    MANV MA_NQL

    888665555

    333445555

    TENLOT

    Thanh

    Manh

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    31/115

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    32/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/2013 32

    Truy vấn cơ bản

    SELECT MANV, HONV AS [HỌ], TENLOT AS [TÊN LÓT], TENNV AS [TÊN]

    FROM NHANVIEN

    WHERE PHG=5 AND PHAI= ‘Nam’ 

    MANV,HỌ,TÊN LÓT,TÊN(MANV,HONV,TENLOT,TENNV(PHG=5∧PHAI=‘Nam’ (NHANVIEN)))

    TÊNHỌ

    TungNguyen

    HungNguyen

    TÊN LÓT

    Thanh

    Manh

    333445555

    987987987

    MANV

    Tên bí danh

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    33/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/2013 33

    Truy vấn cơ bản

    SELECT MANV, HONV + ‘ ’  + TENLOT + ‘ ’  + TENNV AS [HỌ TÊN]FROM NHANVIEN

    WHERE PHG=5 AND PHAI= ‘Nam’ 

    HỌ TÊN

    Nguyen Thanh Tung

    Nguyen Manh Hung

    333445555

    987987987

    MANV

    Mở rộng

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    34/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/2013 34

    Truy vấn cơ bảnSELECT MANV, LUONG*1.1 AS [LUONG10%]

    FROM NHANVIEN

    WHERE PHG=5 AND PHAI= ‘Nam’ 

    MANV,LUONG10%(MANV,LUONG*1.1(PHG=5∧PHAI=‘Nam’ (NHANVIEN)))

    LUONG10%

    33000

    27500

    333445555

    987987987

    MANV

    Mở rộng

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    35/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/2013 35

    Truy vấn cơ bản

    SELECT   LUONG

    FROM NHANVIENWHERE PHG=5 AND PHAI= ‘Nam’ 

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

    - Tốn chi phí 

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

    LUONG

    30000

    25000

    25000

    38000

    LUONG

    30000

    25000

    38000

    SELECT DISTINCT LUONG

    FROM NHANVIENWHERE PHG=5 AND PHAI= ‘Nam’ 

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    36/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    Cho biết MANV và TENNV làm việc ởphòng ‘Nghien cuu’ 

    3/22/2013 36

    Truy vấn cơ bản

    R1  NHANVIEN   PHG=MAPHG PHONGBANKQ MANV, TENNV (TENPHG=‘Nghien cuu’ (R1))

    SELECT MANV, TENNV

    FROM NHANVIEN, PHONGBANWHERE TENPHG= ‘Nghien cuu’  AND PHG=MAPHG

    Biểu thức luận lý

    TRUE   TRUE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    37/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/201337

    Truy vấn cơ bản

    SELECT MANV, TENNV

    FROM NHANVIEN, PHONGBAN

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

    Độ ưu tiên

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    38/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/201338

    Truy vấn cơ bảnSELECT MANV, TENNV

    FROM NHANVIEN

    WHERE   LUONG>=20000 ANDLUONG

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    39/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/201339

    Truy vấn cơ bảnSELECT MANV, TENNV

    FROM NHANVIEN

    WHERE DCHI LIKE ‘Nguyen _ _ _ _’ 

    LIKE

    SELECT MANV, TENNV

    FROM NHANVIENWHERE DCHI LIKE ‘Nguyen %’ 

    Chuỗi bất kỳ

    Ký tự bất kỳ

    SELECT MANV, TENNV

    FROM NHANVIEN

    WHERE HONV NOT NOT LIKE ‘Nguyen’ 

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    40/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/201340

    Truy vấn cơ bảnSELECT MANV, TENNV

    FROM NHANVIEN

    WHERE DCHI LIKE ‘% Nguyens _%’  ESCAPE ‘s’ 

    ESCAPE

     ‘Nguyen_’ 

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    41/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/201341

    Truy vấn cơ bảnNgày giờ

    SELECT MANV, TENNVFROM NHANVIEN

    WHERE NGSINH BETWEEN ‘1955-12-08’  AND ‘1966-07-19’ 

     YYYY-MM-DD

    MM/DD/YYYY 

     ‘1955-12-08’ 

    ’12/08/1955’ 

     ‘December 8, 1955’ 

    HH:MI:SS’17:30:00’ 

    ’05:30 PM’ 

     ‘1955-12-08 17:30:00’ 

    SELECT MANV, TENNV

    FROM NHANVIEN

    WHERE NGSINH =   ‘1955-12-08’ 

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    42/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    Convert(kiểu_dữ_liệu, biểu_thức [,kiểu_chuyển_đổi])

    Hàm có chức năng chuyển đổi giá trị của biểu thứcsang kiểu_dữ_liệu.

    Tham số kiểu_chuyển_đổi là một giá trị số thườngđược sử dụng khi chuyển đổi giá trị kiểu ngày sangkiểu chuỗi nhằm quy định khuôn dạng dữ liệu đượchiển thị.

    3/22/201342

    Truy vấn cơ bảnHàm CONVERT

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    43/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/201343

    Truy vấn cơ bảnHOADON(SoHD, MaKH, ngaylap, trigia)

    Ví dụ: định dạng ngày theo dạng dd/mm/yyyy

    SELECT SoHD, MaKH, CONVERT(varchar(10),ngaylap,103) as ngaylap

    FROM HOADON

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    44/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/201344

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    45/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    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

    3/22/201345

    Truy vấn cơ bảnNULL

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    46/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/201346

    Truy vấn cơ bảnNULLSELECT MANV, TENNV

    FROM NHANVIEN

    WHERE MA_NQL IS NULL

    SELECT MANV, TENNV

    FROM NHANVIEN

    WHERE MA_NQL IS NOT NULL

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    47/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/201347

    Truy vấn cơ bản

    WHERE TRUE

    SELECT MANV, MAPHG

    FROM NHANVIEN, PHONGBAN

    Không sử dụngmệnh đề WHERE(Tích chéo RxS)

    MAPHG

    1

    4

    333445555

    333445555

    MANV

    5

    1987987987

    987987987

    333445555

    4

    5987987987

    … …

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    48/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/201348

    Truy vấn cơ bản

    SELECT TENPHG, DIADIEM

    FROM PHONGBAN, DDIEM_PHG

    WHERE MAPHG=MAPHG

    Tên bí danh

    SELECT TENPHG, DIADIEM

    FROM PHONGBAN PB, DDIEM_PHG DD

    WHERE PB.MAPHG=DD.MAPHG

    SELECT TENNV, NGSINH, TENTN, NGSINHFROM NHANVIEN, THANNHAN

    WHERE MANV=MA_NVIEN  SELECT TENNV, NV.NGSINH, TENTN, TN.NGSINH

    FROM NHANVIEN NV, THANNHAN TN

    WHERE MANV=MA_NVIEN

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    49/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    1. Với những đề án ở ‘Ha Noi’, cho biết mã đề án, mãphòng ban chủ trì đề án, họ tên trưởng phòng cùng

    với ngày sinh và địa chỉ của người ấy2. Tìm họ tên của nhân viên phòng số 5 có tham gia vàođề án “Sản phẩm X” với số giờ làm việc trên 10 giờ

    3. Tìm họ tên của từng nhân viên và người phụ trách

    trực tiếp nhân viên đó4. Tìm họ tên của những nhân viên được “Nguyen ThanhTung” phụ trách trực tiếp

    3/22/201349

    Truy vấn cơ bản – Bài tập

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    50/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    Dùng để hiển thị kết quả câu truy vấntheo một thứ tự nào đó

    Cú pháp

     – ASC: tăng (mặc định) – DESC: giảm

    3/22/2013 50

    Truy vấn cơ bản – Sắp xếp

    SELECT 

    FROM 

    WHERE 

    ORDER BY  

    ORDER BY 

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    51/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/2013 51

    Truy vấn cơ bản – Sắp xếpORDER BY SELECT MA_NVIEN, SODA

    FROM PHANCONG

    ORDER BY  MA_NVIEN DESC, SODA

    SODA

    10

    30

    999887777

    999887777

    MA_NVIEN

    10

    30987987987

    987654321

    987987987

    10

    20987654321

    30987654321

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    52/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    DISTINCT BETWEEN LIKE ESCAPE NGÀY GIỜ  CONVERT

    NULL TÍCH CHÉO ĐẶT TÊN ORDER BY 

    3/22/2013 52

    Truy vấn cơ bản – Tổng kết

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    53/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    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

    3/22/2013 53

    Phép toán tập hợp trong SQL

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    54/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/2013 54

    Phép toán tập hợp trong SQLSELECT  FROM  WHERE 

    UNION [ALL]

    SELECT  FROM  WHERE 

    SELECT  FROM  WHERE 

    INTERSECT [ALL]

    SELECT  FROM  WHERE 

    SELECT  FROM  WHERE 

    EXCEPT [ALL]

    SELECT  FROM  WHERE 

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    55/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    Cho biết các mã đề án có – Nhân viên với họ là ‘Nguyen’ tham gia đề án

    hoặc

     – Trưởng phòng chủ trì đề án với họ là ‘Nguyen’ 

    3/22/2013 55

    Phép toán tập hợp trong SQL

    SELECT MADA

    FROM NHANVIEN, PHANCONG

    WHERE MANV=MA_NVIEN AND HONV= ‘Nguyen’ 

    UNIONSELECT MADA

    FROM NHANVIEN, PHONGBAN, DEAN

    WHERE MANV=TRPHG AND MAPHG=PHONG AND HONV= ‘Nguyen’ 

    Phép hợp

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    56/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    Tìm nhân viên có người thân cùngtên và cùng giới tính

    3/22/2013 56

    Phép toán tập hợp trong SQL

    SELECT TENNV, PHAI, MANV FROM NHANVIEN

    INTERSECT

    SELECT TENTN, PHAI, MA_NVIEN FROM THANNHAN

    SELECT NV.*FROM NHANVIEN NV, THANNHAN TN

    WHERE NV.MANV=TN.MA_NVIEN

     AND NV.TENNV=TN.TENTN AND NV.PHAI=TN.PHAI

    Phép giao

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    57/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    Tìm những nhân viên không có thânnhân nào

    3/22/2013 57

    Phép toán tập hợp trong SQL

    Phép trừ

    SELECT MANV FROM NHANVIEN

    EXCEPT

    SELECT MA_NVIEN AS MANV FROM THANNHAN

    SELECT MANVFROM NHANVIEN

    WHERE MANV NOT IN

    (SELECT MANV FROM THANNHAN)

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    58/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    Tìm nhân viên có người thân

    3/22/201358

    Truy vấn lồng

    SELECT MANV

    FROM NHANVIENWHERE MANV IN

    (SELECT MANV FROM THANNHAN)

    SELECT DISTINCT NV.MANV,HONV + ‘ ’ + TENNV [HỌ TÊN]

    FROM NHANVIEN NV, THANNHAN TNWHERE NV.MANV=TN.MANV

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    59/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/201359

    Truy vấn lồng

    SELECT 

    FROM WHERE  (

    SELECT 

    FROM 

    WHERE )

    Câu truy vấn cha

    (Outer query)

    Câu truy vấn con(Subquery)

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    60/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    Các lệnh SELECT có thể lồng nhau ở nhiều mức Các câu truy vấn con trong cùng một mệnh đề WHERE

    được kết hợp bằng phép nối logic Câu truy vấn con thường trả về một tập các giá trị Mệnh đề WHERE của câu truy vấn cha

     –  – So sánh tập hợp thường đi cùng với một số toán tử 

    • IN, NOT IN• ALL

    • ANY hoặc SOME – Kiểm tra sự tồn tại

    • EXISTS• NOT EXISTS

    3/22/201360

    Truy vấn lồng

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    61/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/201361

    SELECT *

    FROM NHANVIEN

    WHERE MLUONG >= ALL

    (SELECT MLUONG FROM NHANVIEN)

    SELECT *

    FROM NHANVIEN

    WHERE MLUONG >= ANY/SOME

    (SELECT MLUONG FROM NHANVIEN)

    Truy vấn lồng

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    62/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    1. Lồng phân cấp – Mệnh đề WHERE của truy vấn con không tham chiếu

    đến thuộc tính của các quan hệ trong mệnh đề FROMở truy vấn cha

     – Khi thực hiện, câu truy vấn con sẽ được thực hiệntrước

    2. Lồng tương quan

     – Mệnh đề WHERE của truy vấn con tham chiếu ít nhấtmột thuộc tính của các quan hệ trong mệnh đề FROMở truy vấn cha

     – Khi thực hiện, câu truy vấn con sẽ được thực hiệnnhiều lần , mỗi lần tương ứng với một bộ của truy vấncha

    3/22/2013

    62

    Truy vấn lồng

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    63/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/2013

    63

    Hãy tìm

     Đề án mà nhân viên tham gia đề án có họ ‘Nguyen’

    HOẶC

     Đề án có trưởng phòng chủ trì đề án có họ ‘Nguyen’

    Truy vấn lồng – Phân cấpSELECT MADAFROM NHANVIEN NV, PHANCONG PC

    WHERE NV.MANV=PC.MA_NVIEN AND NV.HONV= ‘Nguyen’ 

    UNION

    SELECT MADA

    FROM NHANVIEN NV, PHONGBAN PB, DEAN DA

    WHERE NV.MANV=PB.TRPHG AND PB.MAPHG=DA.PHONG

     AND NV.HONV= ‘Nguyen’ 

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    64/115

    KNOWLEDGE FOR SHARE

    4. Truy vấn dữ liệu

    3/22/2013

    64

    SELECT DISTINCT TENDA

    FROM DEAN

    WHERE   MADA IN (

    SELECT MADA

    FROM NHANVIEN, PHANCONG

    WHERE MANV=MA_NVIEN AND HONV= ‘Nguyen’  )

    OR    MADA IN (

    SELECT MADA

    FROM NHANVIEN, PHONGBAN PB, DEAN DAWHERE MANV=TRPHG AND PB.MAPHG=DA.PHONG

     AND HONV= ‘Nguyen’  )

    Truy vấn lồng – Phân cấp

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    65/115

    4. Truy vấn dữ liệu

    3/22/2013 65

    Truy vấn lồng – Phân cấpSELECT *

    FROM NHANVIEN

    WHERE MANV NOT IN (

    SELECT MA_NVIEN

    FROM THANNHAN )

    SELECT *

    FROM NHANVIENWHERE MANV  ALL (

    SELECT MA_NVIEN

    FROM THANNHAN )

    Hãy tìmnhững nhân viên

    không có thân nhân

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    66/115

    4. Truy vấn dữ liệu

    1. Tìm những nhân viên có lương lớn hơnlương của ít nhất một nhân viên

    phòng 4

    2. Tìm những nhân viên có lương lớn hơnlương của tất cả nhân viên phòng 4

    3. Tìm những trưởng phòng có tối thiểumột thân nhân

    3/22/2013

    66

    Truy vấn lồng – Phân cấp

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    67/115

    4. Truy vấn dữ liệu

    3/22/2013

    67

    Truy vấn lồng – Phân cấpSELECT *

    FROM NHANVIEN

    WHERE LUONG > ANY (

    SELECT LUONG

    FROM NHANVIEN

    WHERE PHG=4 )

    SELECT NV1.*

    FROM NHANVIEN NV1, NHANVIEN NV2

    WHERE NV1.LUONG > NV2.LUONG AND

    NV2.PHG=4

    SELECT *

    FROM NHANVIEN

    WHERE LUONG > ALL (

    SELECT LUONG

    FROM NHANVIEN

    WHERE PHG=4 )

    SELECT *FROM NHANVIEN

    WHERE MANV IN (SELECT MA_NVIEN FROM THANNHAN)

     AND MANV IN (SELECT TRPHG FROM PHONGBAN)

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    68/115

    4. Truy vấn dữ liệu

    3/22/2013

    68

    SELECT MANV, TENNV

    FROM NHANVIEN

    WHERE EXISTS (

    SELECT *FROM PHONGBAN

    WHERE TENPHG= ‘Nghien cuu’  AND PHONG=MAPHG )

    Truy vấn lồng – Tương quanSELECT MANV, TENNVFROM NHANVIEN, PHONGBAN

    WHERE TENPHG= ‘Nghien cuu’  AND PHONG=MAPHG

    Tìm nhân viênPhòng nghiên cứu

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    69/115

    4. Truy vấn dữ liệu

    3/22/2013

    69

    Truy vấn lồng – Tương quanTìm nhân viêncó thân nhân

    cùng tên, cùng phái

    SELECT *

    FROM NHANVIEN NV

    WHERE EXISTS (

    SELECT *

    FROM THANNHAN TN

    WHERE NV.MANV=TN.MA_NVIEN

     AND NV.TENNV=TN.TENTN

     AND NV.PHAI=TN.PHAI )

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    70/115

    4. Truy vấn dữ liệu

    1. Tìm những nhân viên không có thânnhân nào

    2. Tìm những nhân viên có lương lớn hơnlương của ít nhất một nhân viên phòng4

    3. Tìm những trưởng phòng có tối thiểumột thân nhân

    3/22/2013

    70

    Truy vấn lồng – Tương quan

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    71/115

    4. Truy vấn dữ liệu

    IN – IN  – Thuộc tính ở mệnh đề SELECT của truy vấn con

    phải có cùng kiểu dữ liệu với thuộc tính ở mệnhđề WHERE của truy vấn cha EXISTS

     – Không cần có thuộc tính, hằng số hay biểu thứcnào khác đứng trước

     – Không nhất thiết liệt kê tên thuộc tính ở mệnhđề SELECT của truy vấn con – Những câu truy vấn có = ANY hay IN đều có thể 

    chuyển thành câu truy vấn có EXISTS

    3/22/2013

    71

    Truy vấn lồng – Tương quan

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    72/115

    4. Truy vấn dữ liệu

    R ÷S là tập các giá trị ai trong R sao chokhông có giá trị bi nào trong S làm cho bộ(ai, bi) không tồn tại trong R 

    3/22/2013

    72

    Phép chia trong SQL A B

    a

    a

      a

      a

      a

      a

      a

      a

    C D

    a

    b

      a

      a

      b

      a

      b

      b

    E

    1

    3

    1

    1

    1

    1

    1

    1

    R    D E

    a

    S

    b

    1

    1

     A B C

      a  

      a  

    R ÷S

    aibi

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    73/115

    4. Truy vấn dữ liệu

    3/22/2013

    73

    SELECT R1.A, R1.B, R1.CFROM R R1

    WHERE NOT EXISTS (

    SELECT *

    FROM SWHERE NOT EXISTS (

    SELECT *

    FROM R R2

    WHERE R2.D=S.D AND R2.E=S.E

     AND R1.A=R2.A AND R1.B=R2.B AND R1.C=R2.C

    )

    )

    Sử dụng

    NOT EXISTSđể biểu diễn

    Phép chia trong SQL

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    74/115

    4. Truy vấn dữ liệu

    3/22/2013

    74

    Phép chia trong SQL

    SELECT R.A,R.B,R.C

    FROM R

    WHERE R.A+R.B+R.C NOT IN

    (   SELECT Q2.A+Q2.B+Q2.C

    FROM (SELECT R.A,R.B,R.C,S.* FROM R,S) Q2WHERE Q2.A+Q2.B+Q2.C+Q2.D+Q2.E NOT IN

    (SELECT R.A+R.B+R.C+R.D+R.E FROM R)

    ) -- Q3 LÀ A,B,C KHÔNG THAM GIA ĐẦY ĐỦ VÀO S

    Sử dụng truy vấn lồng

    để biểu diễn phép chia

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    75/115

    4. Truy vấn dữ liệu

    3/22/2013

    75

    Phép chia trong SQL

    SELECT MANV,COUNT(MADA)FROM PHANCONG

    GROUP BY MANVHAVING COUNT(MADA)=(SELECT COUNT(MADA) FROM DEAN)

    Sử dụng hàm count

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    76/115

    4. Truy vấn dữ liệu

    Tìm tên các nhân viên được phân công làm tấtcả các đề án

     – Tìm tên các nhân viên mà không có đề án nào làkhông được phân công làm

     – Tập bị chia: PHANCONG(MA_NVIEN, MADA)

     – Tập chia: DEAN(MADA)

     – Tập kết quả: KQ(MA_NVIEN)

     – Kết KQ với NHANVIEN để lấy ra TENNV 

    3/22/2013

    76

    Phép chia trong SQL

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    77/115

    4. Truy vấn dữ liệu

    3/22/2013

    77

    Phép chia trong SQLSELECT NV.TENNV

    FROM NHANVIEN NV, PHANCONG PC1

    WHERE NV.MANV=PC1.MANV

     AND NOT EXISTS (

    SELECT *

    FROM DEAN DA

    WHERE NOT EXISTS (

    SELECT *FROM PHANCONG PC2

    WHERE PC2.MADA=DA.MADA

     AND PC1.MANV=PC2.MANV ))

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    78/115

    4. Truy vấn dữ liệu

    COUNT1. COUNT(*) đếm số dòng2. COUNT() đếm số giá trị khác NULL của

    thuộc tính3. COUNT(DISTINCT ) đếm số giá trị khác

    nhau và khác NULL của thuộc tính

    MIN

    MAX SUM  AVG Các hàm kết hợp được đặt ở mệnh đề SELECT

    3/22/2013

    78

    Hàm kết hợp

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    79/115

    4. Truy vấn dữ liệu

    3/22/2013

    79

    Hàm kết hợpSELECT SUM(LUONG), MAX(LUONG), MIN(LUONG), AVG(LUONG)

    FROM NHANVIEN

    SELECT COUNT(*) AS SL_NV

    FROM NHANVIEN, PHONGBAN

    WHERE PHG=MAPHG AND TENPHG= ‘Nghien cuu’ 

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    80/115

    4. Truy vấn dữ liệu

    Cú pháp

    Sau khi gom nhóm: mỗi nhóm các bộsẽ có cùng giá trị tại các thuộc tínhgom nhóm

    3/22/2013

    80

    Gom nhóm

    SELECT 

    FROM WHERE 

    GROUP BY  

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    81/115

    4. Truy vấn dữ liệu

    3/22/2013

    81

    Gom nhómSELECT PHG, COUNT(*) AS SL_NV

    FROM NHANVIEN

    GROUP BY  PHG

    SELECT TENPHG, COUNT(*) AS SL_NV

    FROM NHANVIEN, PHONGBAN

    WHERE PHG=MAPHGGROUP BY  TENPHG

    SELECT

    cột nàoGROUP BY

    cột đó

    (ngoại trừ hàm kết hợp)

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    82/115

    4. Truy vấn dữ liệu

    1. Với mỗi nhân viêncho biết mã số, họtên, số lượng đề án

    và tổng thời gianmà họ tham gia

    2. Cho biết những

    nhân viên tham giatừ 2 đề án trở lên

    3/22/2013 82

    Gom nhóm SODA THOIGIAN1 32.5

    2 7.5

    123456789

    123456789

    MA_NVIEN

    2 10.0

    3 10.0

    333445555

    33344555510 10.0333445555

    20 20.0

    10 35.0

    888665555

    987987987

    30 5.0987987987

    30 20.0987654321

    20 15.0987654321

    1 20.0453453453

    2 20.0453453453

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    83/115

    4. Truy vấn dữ liệu

    3/22/2013 83

    Gom nhómSELECT 

    FROM 

    WHERE 

    GROUP BY  HAVING 

    SELECT MANV 

    FROM PHANCONG

    GROUP BY MANV 

    HAVING COUNT(*) >= 2

    KNOWLEDGE FOR SHARE

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    84/115

    4. Truy vấn dữ liệu

    3/22/2013 84

    Gom nhóm

    SELECT PHONG, AVG(LUONG) AS LUONG_TB

    FROM NHANVIEN

    GROUP BY  PHONG

    HAVING AVG(LUONG) > 20000

    SELECT TENPHG, AVG(LUONG) AS LUONG_TB

    FROM NHANVIEN, PHONGBAN

    WHERE PHG=MAPHGGROUP BY  TENPHG

    HAVING AVG(LUONG) > 20000

    Cho biết những phòng ban (TENPHG)có lương trung bình của các nhân viên lớn lơn 20000

    KNOWLEDGE FOR SHARE

    ấ ệ

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    85/115

    4. Truy vấn dữ liệu

    Mệnh đề GROUP BY  – Các thuộc tính trong mệnh đề SELECT (trừ những

    thuộc tính trong các hàm kết hợp) phải xuất hiện

    trong mệnh đề GROUP BY  Mệnh đề HAVING

     – Sử dụng các hàm kết hợp trong mệnh đề SELECTđể kiểm tra một số điều kiện nào đó

     – Chỉ kiểm tra điều kiện trên nhóm, không là điềukiện lọc trên từng bộ – Sau khi gom nhóm điều kiện trên nhóm mới được

    thực hiện

    3/22/2013 85

    Gom nhóm

    KNOWLEDGE FOR SHARE

    4 ấ ữ iệ

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    86/115

    4. Truy vấn dữ liệu

    Chọn ra những dòng thỏa điều kiện trongmệnh đề WHERE

    Những dòng này sẽ được gom thành nhiềunhóm tương ứng với mệnh đề GROUP BY 

     Áp dụng các hàm kết hợp cho mỗi nhóm Bỏ qua những nhóm không thỏa điều kiện

    trong mệnh đề HAVING Rút trích các giá trị của các cột và hàm kết

    hợp trong mệnh đề SELECT

    3/22/2013 86

    Gom nhóm – Thứ tự câu lệnh

    KNOWLEDGE FOR SHARE

    4 T ấ dữ liệ

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    87/115

    4. Truy vấn dữ liệu

    3/22/2013 87

    Một số dạng truy vấn khác

    KNOWLEDGE FOR SHARE

    4 T ấ dữ liệ

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    88/115

    4. Truy vấn dữ liệu

    Kết quả trả về của một câu truy vấnphụ là một bảng

     – Bảng trung gian trong quá trình truy vấn – Không có lưu trữ thật sự 

    Cú pháp

    3/22/2013 88

    Một số dạng truy vấn khác

    SELECT FROM R1, R2, () AS tên_bảng

    WHERE 

    KNOWLEDGE FOR SHARE

    4 T ấ dữ liệ

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    89/115

    4. Truy vấn dữ liệu

    Kết bằng

    Kết ngoài

    3/22/2013 89

    Một số dạng truy vấn khác

    SELECT 

    FROM R1 [INNER ] JOIN R2 ON  

    WHERE 

    SELECT 

    FROM R1 LEFT|RIGHT [OUTER ] JOIN R2 ON  

    WHERE 

    FULL JOIN

    FULL

    KNOWLEDGE FOR SHARE

    4 T ấ dữ liệ

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    90/115

    4. Truy vấn dữ liệu

    Cho phép kiểm tra điều kiện và xuấtthông tin theo từng trường hợp

    Cú pháp

    3/22/2013 90

    Cấu trúc CASE

    CASE 

    WHEN  THEN 

    WHEN  THEN 

    [ELSE ]

    END

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    91/115

    KNOWLEDGE FOR SHARE

    4 T ấ dữ liệ

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    92/115

    4. Truy vấn dữ liệu

    3/22/2013 92

    QUY TRÌNH XỬ LÝ CÂU TRUY VẤN

    KNOWLEDGE FOR SHARE

    4 T ấ dữ liệ

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    93/115

    4. Truy vấn dữ liệu

    3/22/2013 93

    KNOWLEDGE FOR SHARE

    4 T ấ dữ liệ

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    94/115

    4. Truy vấn dữ liệu

    3/22/2013 94

    SELECT Year,

    SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1,

    SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2,

    SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3,

    SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4

    FROM Pivot

    GROUP BY Year 

    Cross-Tab

    KNOWLEDGE FOR SHARE

    5 Cập nhật dữ liệ

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    95/115

    5. Cập nhật dữ liệu

    Sử dụng để thêm 1 hay nhiều dòng vào bảng Cú pháp:

     Ví dụ:

    3/22/2013

    95

    THÊM DỮ LIỆU VÀO BẢNG

    INSERT INTO ()

     VALUES ()

    KNOWLEDGE FOR SHARE

    5 Cập nhật dữ liệu

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    96/115

    5. Cập nhật dữ liệu

    3/22/2013

    96

    THÊM DỮ LIỆU VÀO BẢNGINSERT INTO NHANVIEN(HONV, TENLOT, TENNV, MANV)

     VALUES (N ‘Lê’ , N ‘Văn’ , N ‘Tuyển’ , ‘635635635’ )

    INSERT INTO NHANVIEN

     VALUES ( ‘Le’ , ‘Van’ , ‘Tuyen’ , ‘635635635’ , ’12/30/1952’ , ’98 HV’ , ‘Nam’ , ‘37000’ , 4)

    INSERT INTO NHANVIEN(HONV, TENLOT, TENNV, MANV, DCHI)

     VALUES ( ‘Le’ , ‘Van’ , ‘Tuyen’ , ‘635635635’ , NULL)

    KNOWLEDGE FOR SHARE

    5 Cập nhật dữ liệu

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    97/115

    5. Cập nhật dữ liệu

    Thứ tự các giá trị phải trùng với thứ tự cáccột

    Có thể thêm giá trị NULL ở những thuộc tínhkhông là khóa chính và NOT NULL Câu lệnh INSERT sẽ gặp lỗi nếu vi phạm

    RBTV 

     – Khóa chính – Tham chiếu – NOT NULL - các thuộc tính có ràng buộc NOT

    NULL bắt buộc phải có giá trị

    3/22/2013

    97

    THÊM DỮ LIỆU VÀO BẢNG

    KNOWLEDGE FOR SHARE

    5 Cập nhật dữ liệu

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    98/115

    5. Cập nhật dữ liệu

    3/22/2013

    98

    THÊM NHIỀU DÒNG DL VÀO BẢNGINSERT INTO ()

    CREATE TABLE THONGKE_PB

    (TENPHG VARCHAR (20),SL_NV INT,LUONG_TC INT

    )

    INSERT INTO THONGKE_PB(TENPHG, SL_NV, LUONG_TC)SELECT TENPHG, COUNT(MANV), SUM(LUONG)FROM NHANVIEN, PHONGBANWHERE PHG=MAPHGGROUP BY  TENPHG

    KNOWLEDGE FOR SHARE

    5 Cập nhật dữ liệu

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    99/115

    5. Cập nhật dữ liệu

    3/22/2013

    99

    XÓA DỮ LIỆU TRONG BẢNG

    DELETE FROM 

    [WHERE ]

    DELETE FROM NHANVIEN

    WHERE HONV= ‘Tran’ 

    DELETE FROM NHANVIEN

    WHERE MANV= ‘345345345’ 

    DELETE FROM NHANVIEN

    KNOWLEDGE FOR SHARE

    5 Cập nhật dữ liệu

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    100/115

    5. Cập nhật dữ liệu

    3/22/2013

    100

    DELETE FROM NHANVIEN

    WHERE PHG IN (

    SELECT MAPHGFROM PHONGBAN

    WHERE TENPHG= ‘Nghien cuu’ )

    XÓA DỮ LIỆU TRONG BẢNG

    Xóa nhân viênở phòng nghiên cứu

    KNOWLEDGE FOR SHARE

    5 Cập nhật dữ liệu

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    101/115

    5. Cập nhật dữ liệu

    Số lượng số dòng bị xóa phụ thuộc vào điều kiện ởmệnh đề WHERE

    Nếu không chỉ định điều kiện ở mệnh đề WHERE, tất

    cả các dòng trong bảng sẽ bị xóa Lệnh DELETE có thể gây ra vi phạm RB tham chiếu

     – Không cho xóa

     –  Xóa luôn những dòng có giá trị đang tham chiếuđến

    • CASCADE

     – Đặt NULL cho những giá trị tham chiếu

    3/22/2013

    101

    XÓA DỮ LIỆU TRONG BẢNG

    KNOWLEDGE FOR SHARE

    5 Cập nhật dữ liệu

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    102/115

    5. Cập nhật dữ liệu

    3/22/2013

    102

    XÓA DỮ LIỆU TRONG BẢNGTENNVHONV NGSINH DCHI PHAI LUONG PHG

    TungNguyen 12/08/1955 638 NVC Q5 Nam 40000 5

    HungNguyen 09/15/1962 Ba Ria VT Nam 38000 5

    333445555

    987987987

    MANV MA_NQL

    888665555

    333445555

    TENLOT

    Thanh

    Manh

    HangBui 07/19/1968 33 NTH Q1 Nu 38000 4999887777 987654321Ngoc

    NhuLe 07620/1951 219 TD Q3 Nu 43000 4987654321 888665555Quynh

     VinhPham 11/10/1945 450 TV HN Nam 55000 1888665555 NULL Van

    TamTran 07/31/1972 543 MTL Q1 Nu 25000 5453453453 333445555Thanh

    QuangTran 04/08/1969 980 LHP Q5 Nam 25000 4987987987 987654321Hong

    SODA THOIGIANMA_NVIEN

    10 10.0333445555

    20 20.0888665555

    30 20.0987654321

    1 20.0453453453

    10 35.0987987987

    30 5.0987987987

    KNOWLEDGE FOR SHARE

    5 Cập nhật dữ liệu

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    103/115

    5. Cập nhật dữ liệu

    3/22/2013103

    CẬP NHẬT DỮ LIỆU TRONG BẢNGUPDATE 

    SET =,

    =,

    [WHERE ]

    UPDATE NHANVIEN

    SET NGSINH=’08/12/1965’ 

    WHERE MANV= ‘333445555’ 

    UPDATE NHANVIEN

    SET LUONG=LUONG*1.1

    Với đề án có mã số 10, hãy thay đổinơi thực hiện đề án thành ‘Vung Tau’ vàphòng ban phụ trách là phòng 5

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    104/115

    KNOWLEDGE FOR SHARE

    6 Một số vấn đề khác

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    105/115

    6. Một số vấn đề khác

    Bảng là một quan hệ được tổ chức lưutrữ vật lý trong CSDL

    Khung nhìn cũng là một quan hệ – Không được lưu trữ vật lý (bảng ảo) – Không chứa dữ liệu

     – Được định nghĩa từ những bảng khác – Có thể truy vấn hay cập nhật thông qua

    khung nhìn

    3/22/2013105

    KHUNG NHÌN - VIEW

    KNOWLEDGE FOR SHARE

    6 Một số vấn đề khác

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    106/115

    6. Một số vấn đề khác

    Tại sao phải sử dụng khung nhìn? – Che dấu tính phức tạp của dữ liệu

     – Đơn giản hóa các câu truy vấn – Hiển thị dữ liệu dưới dạng tiện dụng nhất – An toàn dữ liệu

    3/22/2013106

    KHUNG NHÌN - VIEW

    KNOWLEDGE FOR SHARE

    6 Một số vấn đề khác

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    107/115

    6. Một số vấn đề khác

    Cú pháp

    Bảng ảo này có – Danh sách thuộc tính trùng với các thuộc tính

    trong mệnh đề SELECT – Số dòng phụ thuộc vào điều kiện ở mệnh đềWHERE

     – Dữ liệu được lấy từ các bảng ở mệnh đề FROM

    3/22/2013107

    KHUNG NHÌN - VIEW

    CREATE VIEW   AS

    DROP VIEW 

    KNOWLEDGE FOR SHARE

    6 Một số vấn đề khác

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    108/115

    6. Một số vấn đề khác

    3/22/2013108

    KHUNG NHÌN - VIEWCREATE VIEW NV_P5 ASSELECT MANV, HONV, TENLOT, TENVN

    FROM NHANVIEN

    WHERE PHG=5

    CREATE VIEW TONGLNG_SLNV_PB AS

    SELECT MAPHG, TENPHG, COUNT(*) AS SLNV,SUM(LUONG) AS TONGLNG

    FROM NHANVIEN, PHONGBANWHERE PHG=MAPHG

    GROUP BY  TENPHG, MAPHG

    KNOWLEDGE FOR SHARE

    6 Một số vấn đề khác

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    109/115

    6. Một số vấn đề khác

    3/22/2013109

    TRUY VẤN TRÊN KHUNG NHÌNSELECT TENNV

    FROM NV_P5

    WHERE HONV LIKE ‘Nguyen’ 

    Tuy không chứa dữ liệu nhưngcó thể thực hiện các câu truy vấntrên khung nhìn

    Có thể viết câu truy vấn dữ liệutừ khung nhìn và bảng

    SELECT HONV, TENVN, TENDA, THOIGIAN

    FROM NV_P5, PHANCONG, DEAN

    WHERE MANV=MA_NVIEN AND SODA=MADA

    KNOWLEDGE FOR SHARE

    6. Một số vấn đề khác

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    110/115

    6. Một số vấn đề khác

    Có thể dùng các câu lệnh INSERT, DELETEvà UPDATE cho các khung nhìn đơn giản – Khung nhìn được xây dựng trên 1 bảng và có

    khóa chính của bảng

    Không thể cập nhật dữ liệu nếu – Khung nhìn có dùng từ khóa DISTINCT – Khung nhìn có sử dụng các hàm kết hợp

     – Khung nhìn có mệnh đề SELECT mở rộng – Khung nhìn được xây dựng từ bảng có RB trên

    cột – Khung nhìn được xây dựng từ nhiều bảng

    3/22/2013110

    CẬP NHẬT TRÊN KHUNG NHÌN

    KNOWLEDGE FOR SHARE

    6. Một số vấn đề khác

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    111/115

    6. Một số vấn đề khác

    Sửa lại họ cho nhân viên mã ‘123456789’ ở phòng 5 là ‘Pham’ 

    3/22/2013111

    CẬP NHẬT TRÊN KHUNG NHÌN

    UPDATE NV_P5

    SET HONV=‘Pham’ 

    WHERE MANV= ‘123456789’ 

    KNOWLEDGE FOR SHARE

    6. Một số vấn đề khác

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    112/115

    6. Một số vấn đề khác

    Chỉ mục trên thuộc tính A là một cấutrúc dữ liệu làm cho việc tìm kiếm mẫutin có chứa A hiệu quả hơn

    3/22/2013112

    INDEX – CHỈ MỤC

    SELECT *

    FROM NHANVIEN

    WHERE PHG=5 AND PHAI= ‘Nu’ 

    KNOWLEDGE FOR SHARE

    6. Một số vấn đề khác

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    113/115

    6. Một số vấn đề khác

    Cú pháp

     Ví dụ

    3/22/2013113

    INDEX – CHỈ MỤC

    CREATE INDEX  ON ()

    CREATE INDEX PHG_IND ON NHANVIEN(PHG)

    CREATE INDEX PHG_PHAI_IND ON NHANVIEN(PHG, PHAI)

    DROP INDEX 

    KNOWLEDGE FOR SHARE

    6. Một số vấn đề khác

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    114/115

    6. Một số vấn đề khác

    Nhận xét – Tìm kiếm nhanh trong trường hợp so sánh

    với hằng số và phép kết

     – Làm chậm đi các thao tác thêm, xóa vàsửa

     – Tốn chi phí • Lưu trữ chỉ mục• Truy xuất đĩa nhiều

    Chọn lựa cài đặt chỉ mục hợp lý???

    3/22/2013114

    INDEX – CHỈ MỤC

  • 8/19/2019 Chương 5: NGÔN NGỮ SQL

    115/115

    HẾT