1

Chương 5

Ngôn ngữ SQL

2

Nội dung

 Giới thiệu chung  Nhóm lệnh DDL  Nhóm lệnh DML  Câu lệnh SELECT  Lệnh Insert  Lệnh Delete  Lệnh Update

3

Giới thiệu chung ngôn ngữ SQL

 Là ngôn ngữ chuẩn cho các CSDL quan hệ

 Đặc điểm của ngôn ngữ SQL:

 Ngôn ngữ tựa tiếng Anh

 Ngôn ngữ phi thủ tục

4

Giới thiệu chung ngôn ngữ SQL

 Gồm 3 nhóm lệnh:

 DDL (Data Definition Language)

 DML (Data Manipulation Language)

 DCL (Data Control Language)

5

DDL

 Là ngôn ngữ định nghĩa dữ liệu gồm các lệnh

 CREATE/ALTER/DROP DATABASE

 CREATE/ALTER/DROP TABLE

6

DML

 Là ngôn ngữ thao tác dữ liệu

 Gồm các lệnh:

 SELECT

 INSERT

 UPDATE

 DELETE

7

DCL

 Là ngôn ngữ điều khiển dữ liệu  Gồm các lệnh

 GRANT/REVOKE/DENY

 COMMIT/ROLLBACK

8

Tạo CSDL CREATE DATABASE

CREATE DATABASE database_name

[ ON

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

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

9

CREATE DATABASE - Filespec/filegroup < filespec > ::=

( NAME = logical_name,

FILENAME = 'path\filename', SIZE = size_in_MB, MAXSIZE = size_in_MB | UNLIMITED, FILEGROWTH = %_or_MB )

::= { FILEGROUP [ DEFAULT ] [ ,...n

] }

10

CREATE DATABASE Sales ON PRIMARY ( NAME = SPri1_dat,

Ví dụ lệnh tạo CSDL

FILENAME = 'c:\program files\data\SPri1dat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 15% ),

( NAME = SPri2_dat,

continued

FILENAME = 'c:\program files\data\SPri2dt.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 15% ), FILEGROUP SalesGroup1 ( NAME = SGrp1Fi1_dat,

FILENAME = 'c:\program files\data\SG1Fi1dt.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 )

( NAME = SGrp1Fi2_dat,

11

Ví dụ lệnh tạo CSDL

FILENAME = 'c:\program files\data\SG1Fi2dt.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ), LOG ON ( NAME = 'Sales_log',

FILENAME = 'c:\program files\data\salelog.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB )

GO

12

Thay đổi cấu trúc CSDL ALTER DATABASE

 Thêm files hay filegroups vào CSDL  Thêm log files vào CSDL  Xoá files hay filegroups từ 1 CSDL  Cài đặt các tuỳ chọn của CSDL

13

ALTER DATABASE

ALTER DATABASE database_name

ADD FILE filespec [TO FILEGROUP filegroup_name]

| ADD LOG FILE filespec

| REMOVE FILE logical_filename

| ADD FILEGROUP filegroup_name

| REMOVE FILEGROUP filegroup_name

| MODIFY FILE filespec

| MODIFY FILEGROUP filegroup_name filegroup_property

14

Xoá CSDL Dropping a database

 Khi 1 CSDL bị xóa thì tất cả các file vật lý của nó cũng sẽ

 Cú pháp:

bị xóa

DROP DATABASE database_name

15

Tạo bảng - CREATE TABLE

CREATE TABLE [ database_name.[ owner .]] table_name

({ < column_definition >

|column_name AS computed_column_expression | < table_constraint > } [ ,...n ]

) [ ON { filegroup | DEFAULT } ]

16

Định nghĩa cột - Column definition

< column_definition > ::=

{ column_name data_type } [ [ DEFAULT constant_expression ] | [ IDENTITY [ ( seed , increment ) ] ] ] [ < column_constraint > ] [ ...n ]

Ví dụ 1

CREATE TABLE cthoadon

( sohd int NOT NULL,

MaHang char(4) NOT NULL,

SoLuong int NOT NULL,

DonGia money,

ThanhTien AS SoLuong*DonGia

17

)

IDENTITY [ ( seed , increment )]

 Tạo giá trị gia tăng duy nhất cho 1 cột, và cột này thường được dùng làm khoá chính cho bảng. Chỉ dùng các kiểu dữ liệu sau: tinyint, smallint, int, bigint, decimal(p,0).

 Trong mỗi bảng chỉ cho phép 1 cột là identity mà thôi.

 Seed: là giá trị đầu tiên được tạo.

 Increment: là bước tăng để tạo ra giá trị kế tiếp.

 Giá trị mặc định thường là (1,1).

18

Ví dụ 2

CREATE TABLE jobs

job_id smallint IDENTITY(1,1) ,

(

)

19

job_desc varchar(50) NOT NULL

20

Cách khai báo ràng buộc cột

::=

[ CONSTRAINT constraint_name ]

{ { PRIMARY KEY | UNIQUE }

| [ FOREIGN KEY ] REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]

[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET

DEFAULT } ]

[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET

DEFAULT } ]

| CHECK ( logical_expression ) }

Ví dụ 1

CREATE TABLE jobs

job_id smallint PRIMARY KEY NOT NULL,

(

DEFAULT 'New Position - title not formalized yet'

job_desc varchar(50) NOT NULL

21

)

Ví dụ 2

CREATE TABLE Employee

LastName varchar(20) NOT NULL,

( EmpID int primary key NOT NULL,

job_id smallint NOT NULL DEFAULT 1 REFERENCES jobs(job_id)

)

22

FirstName varchar(10) NOT NULL,

23

Ví dụ các ràng buộc Check

CHECK (cContractCode LIKE '[0-9][0-9][0-9][0-9]')

CHECK (mTotalPaid BETWEEN 0 AND 50000)

CHECK(cCity IN ('Berkeley', 'Boston', 'Chicago', ' Dallas‘))

24

Các mức ràng buộc

 Có hai mức ràng buộc :  Mức cột (Column level)

 Mức bảng (Table level)

 Ràng buộc mức bảng: tương tự như ràng buộc mức cột nhưng điều kiện ràng buộc có thể liên quan đến nhiều cột

25

Ví dụ về ràng buộc mức bảng

CREATE TABLE cthoadon

( sohd int NOT NULL,

MaHang char(4) NOT NULL,

SoLuong int NOT NULL,

DonGia money,

CONSTRAINT pk_ctHoadon primary key(sohd, MaHang)

)

26

Lệnh ALTER TABLE ALTER TABLE [ database_name . [ schema_name ] . | schema_name . ]

table_name

{ ALTER COLUMN column_name { [ type_schema_name. ] type_name | [ WITH { CHECK | NOCHECK } ] | ADD { | |

| } [ ,...n ]

| DROP { [ CONSTRAINT ] constraint_name | COLUMN column_name } [

,...n ]

| { CHECK | NOCHECK } CONSTRAINT { ALL | constraint_name [ ,...n ] } | { ENABLE | DISABLE } TRIGGER { ALL | trigger_name [ ,...n ] }

27

Cú pháp lệnh SELECT

SELECT [ ALL | DISTINCT ]

[TOP ( expression ) [PERCENT] [ WITH TIES ] ]

[ FROM { } [ ,...n ] ]

[ WHERE search_condition ]

[ GROUP BY group_by_expression [ HAVING search_condition ] ]

[ ORDER BY order_expression [ ASC | DESC ] ]

28

Mệnh đề SELECT

 TOP n [PERCENT]: chỉ xuất n hàng đầu tiên hay n% của

 WITH TIES: cho phép 1 số hàng được thêm vào bảng kết quả gốc nếu các hàng này có cùng giá trị trong cột ORDER BY với hàng cuối cùng của n hàng đầu tiên được xác định.

các hàng của bảng kết quả.

29

Ví dụ

 Liệt kê 3 hoá đơn có cước phí cao nhất

SELECT top 3 with ties OrderID, Freight

FROM Orders

ORDER BY Freight DESC

Nếu hàng thứ tư có cùng cước phí (freight) với hàng thứ ba

trong bảng kết quả thì sao???

Không WITH TIES

Có WITH TIES

30

Tham số