ph nh server - wordpress.com · sql server có nhiều phiên bản (versions) khác nhau và...

107

Upload: others

Post on 02-Jan-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:
Page 2: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

2

© 2018 ngocminhtran.com

Phần I

Nhập môn SQL

Server

Page 3: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

3

© 2018 ngocminhtran.com

Trong phần này, chúng ta sẽ tìm hiểu về:

Giới thiệu và cài đặt SQL Server

Công cụ SQL Server Management Studio

Làm việc với cơ sở dữ liệu

Giới thiệu về SQL Server

Là hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) được phát triển bởi Microsoft và có thể sử

dụng trong hai chế độ là dòng lệnh (command line) và giao diện đồ họa (GUI). SQL

Server cũng hỗ trợ ngôn ngữ SQL hỗ trợ việc truy vấn cơ sở dữ liệu.

Với SQL Server, chúng ta có thể tạo và quản lý cơ sở dữ liệu, phân tích dữ liệu với dịch

vụ SQL Server Analysis Services (SSAS), phát sinh các báo cáo nhờ dịch vụ SQL Server

Reporting Services (SSRS), v.v.

SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. Có

thể tham khảo các phiên bản khác nhau của SQL Server từ trước đến nay tại

https://en.wikipedia.org/wiki/History_of_Microsoft_SQL_Server

Mỗi lần chúng ta cài đặt thành công SQL Sever là chúng ta đã tạo một thể hiện của SQL

Server (instance of SQL Server). Mỗi thể hiện (instance) là một bản sao của phần mềm

SQL Server chúng ta dùng để cài đặt. Nếu chúng ta cài SQL Server n lần sẽ có n thể hiện

của SQL Server và điều này cho phép chúng ta cài đặt nhiều phiên bản SQL Server khác

nhau trên cùng một máy.

Microsoft cung cấp nhiều ấn phẩm (editions) SQL Server khác nhau để phục vụ cho

những đối tượng khác nhau. Ví dụ các sinh viên có thể sử dụng các ấn phẩm miễn phí

như Express hay Compact để phục vụ học tập, các doanh nghiệp có thể dùng các ấn phẩm

như Enterprise hay Standard để phục vụ cho việc quản lý cơ sở dữ liệu tại doanh nghiệp

của mình. Tham khảo các ấn phẩm SQL Server của Microsoft tại

https://www.tutorialspoint.com/ms_sql_server/ms_sql_server_editions.htm. Tài liệu này

sử dụng bản SQL Server Express 2012.

Cài đặt SQL Server

Tham khảo tại

https://www.tutorialspoint.com/ms_sql_server/ms_sql_server_installation.htm

Trong quá trình cài đặt có thể gặp một số vấn đề. Có thể tham khảo thêm bài viết

https://ngocminhtran.com/2016/12/20/nhat-ky-khac-phuc-loi-dang-nhap-trong-sql-server/

Page 4: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

4

© 2018 ngocminhtran.com

SQL Server Management Studio

Như đã đề cập ở trên, SQL Server là phần mềm cho phép chúng ta thao tác trong hai chế

độ là dòng lệnh và đồ họa và SQL Server Management Studio là công cụ cho phép chúng

ta thao tác với giao diện đồ họa. Để mở SQL Server Management Studio chúng ta thực

hiện Start > All Programs > MS SQL Server 2012 > SQL Server Management

Studio và kết quả trông như sau:

Nhấn Connect để truy cập vào SQL Server Management Studio.

Đăng nhập đến cơ sở dữ liệu

Chúng ta có thể đăng nhập đến cơ sở dữ liệu trong SQL Server Management Studio theo

4 cách:

Windows Authentication

SQL Server Authentication

Mapped to certificate

Mapped to asymmetric key

Trong tài liệu này chỉ đề cập Windows Authentication và SQL Server Authentication.

Windows Authentication cho phép chúng ta đăng nhập dựa trên tài khoản Windows và

thường là mặc định khi chúng ta mở SQL Server Management Studio

Page 5: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

5

© 2018 ngocminhtran.com

Server name gồm hai phần tên của máy tính đang dùng (DESKTOP-O6BPUKE) và thể

hiện của SQL Server Express (SQLEXPRESS).

Để đăng nhập với SQL Server Authentication chúng ta cần có một tài khoản riêng (ví

dụ NgocMinhTran). Để tạo tài khoản này chúng ta thực hiện như sau:

Đăng nhập vào SQL Server dùng Windows Authentication (lúc này chúng ta chưa

có tài khoản để dùng SQL Server Authentication).

Tìm đến thư mục Security trong cửa sổ Object Explorer, mở thư mục này và tìm

đến thư mục Logins:

Nhấp chuột phải lên thư mục Logins chọn New Login và một cửa sổ sẽ xuất hiện:

Page 6: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

6

© 2018 ngocminhtran.com

Điền thông tin vào Login name (ví dụ NgocMinhTran), chọn SQL Server

authentication và nhập Password (ví dụ 1984) và Confirm password (1984):

Page 7: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

7

© 2018 ngocminhtran.com

Trong khung Select a page, chọn Server Roles và chọn sysadmin

Page 8: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

8

© 2018 ngocminhtran.com

Tiếp tục chọn User Mapping trong Select a page, chọn master và db_owner:

Page 9: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

9

© 2018 ngocminhtran.com

Tại Status phải đảm bảo các tùy chọn như sau:

Page 10: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

10

© 2018 ngocminhtran.com

Nhấn OK để đóng cửa sổ Login – New.

Nhấn chuột phải vào Server name (mục cao nhất) trong cửa sổ Object Explorer và

chọn Properties

Page 11: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

11

© 2018 ngocminhtran.com

Đến mục Security và chọn SQL Server và Windows Authentication mode và nhấn

OK.

Page 12: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

12

© 2018 ngocminhtran.com

Nhấn chuột phải vào Server name (mục cao nhất) trong cửa sổ Object Explorer và

chọn Restart để khởi động lại SQL Server, một thông báo xuất hiện

Nhấn Yes.

Đóng và mở lại SQL Server Management Studio. Đăng nhập vào SQL Server với

chế độ SQL Server Authentication:

Page 13: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

13

© 2018 ngocminhtran.com

Làm việc với cơ sở dữ liệu

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

Cơ sở dữ liệu (database) trong SQL Server là một tập hợp các đối tượng như tables,

views, stored procedure, function, trigger, v.v. Có hai kiểu cơ sở dữ liệu trong SQL

Server là: cơ sở dữ liệu hệ thống (system database) và cơ sở dữ liệu người dùng (user

database). Cơ sở dữ liệu hệ thống được tạo một cách tự động khi SQL Server được tạo

gồm master, model, msdb, tempdb:

Page 14: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

14

© 2018 ngocminhtran.com

Cơ sở dữ liệu người dùng do người dùng tạo ra bằng cách nhấp chuột phải vào thư mục

Databases trong cửa sổ Object Explorer và chọn New Database. Cửa sổ New Database

xuất hiện:

Page 15: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

15

© 2018 ngocminhtran.com

Nhập tên cơ sở dữ liệu vào mục Database name (ví dụ testDB) và nhấn OK. Cơ sở dữ

liệu mới (testDB) sẽ được tạo:

Page 16: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

16

© 2018 ngocminhtran.com

Xóa một cơ sở dữ liệu

Vào thư mục Databases trong cửa sổ Object Explorer và tìm đến cơ sở dữ liệu cần xóa.

Nhấn chuột phải vào cơ sở dữ liệu này và chọn Delete

Page 17: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

17

© 2018 ngocminhtran.com

Một hộp thoại sẽ xuất hiện:

Nhấn OK để xóa cơ sở dữ liệu.

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

Backup là một bản sao của cơ sở dữ liệu. Tạo các backup cho cơ sở dữ liệu là phương

pháp hiệu quả nhất để bảo vệ dữ liệu.

Để backup cơ sở dữ liệu (ví dụ testDB) trong SQL Server Management Studio chúng ta

vào thư mục Databases trong cửa sổ Object Explorer, tìm đến cơ sở dữ liệu cần backup

(testDB) và kích chuột phải vào cơ sở dữ liệu này chọn Tasks > Back Up…

Page 18: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

18

© 2018 ngocminhtran.com

Cửa sổ Back Up Database sẽ xuất hiện

Page 19: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

19

© 2018 ngocminhtran.com

Có hai kiểu Backup (trong Backup type) là Full (mặc định) và Differential và giả sử

chúng ta chọn kiểu Full cho cơ sở dữ liệu testDB. Chọn vị trí lưu backup trong

Destination. Chấp nhận đường dẫn mặc định hoặc xóa đường dẫn này bằng cách chọn và

nhấn nút Remove sau đó nhấn nút Add để thêm đường dẫn đến vị trí mới

Page 20: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

20

© 2018 ngocminhtran.com

Lưu ý khi lưu tập tin backup phải có phần mở rộng .bak. Nhấn OK

Page 21: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

21

© 2018 ngocminhtran.com

Chọn mục Options trong cửa sổ Select a page và nhấn OK để backup testDB:

Page 22: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

22

© 2018 ngocminhtran.com

Kiểm tra ổ đĩa D: chúng ta sẽ tìm thấy tập tin testDB.bak.

Phục hồi cơ sở dữ liệu

Nếu cơ sở dữ liệu bị mất hay lỗi chúng ta có thể phục hồi lại bằng cách dùng các backup

chúng ta đã tạo. Bây giờ giả sử chúng ta cần phục hồi testDB (nếu testDB vẫn còn trong

thư mục Databases thì hãy xóa nó) bằng cách nhấp chuột phải vào thư mục Databases và

chọn Restore Database

Page 23: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

23

© 2018 ngocminhtran.com

Một cửa sổ sẽ xuất hiện

Page 24: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

24

© 2018 ngocminhtran.com

Chọn Device trong mục Source và nhấn vào nút (…) bên phải để chọn tập tin backup

Trong cửa sổ select backup devices nhấn nút Add để tìm tập tin backup (testDB.bak):

Page 25: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

25

© 2018 ngocminhtran.com

Nhấn OK

Page 26: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

26

© 2018 ngocminhtran.com

Tiếp tục nhấn OK

Page 27: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

27

© 2018 ngocminhtran.com

Nhấn OK để phục hồi cơ sở dữ liệu testDB. Nếu thành công thì kết quả như sau:

Page 28: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

28

© 2018 ngocminhtran.com

Nhấn OK để đóng cửa sổ Restore Database. Kiểm tra lại trong thư mục Databases:

Page 29: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

29

© 2018 ngocminhtran.com

Tạo người dùng (users) và cấp phát quyền truy cập

Chúng ta có thể tạo người dùng đăng nhập đến tài khoản cơ sở dữ liệu trong MS SQL

Server Management Studio như sau:

Đăng nhập đến SQL Server và tìm đến cơ sở dữ liệu testDB. Mở rộng testDB và

tìm đến thư mục Security. Trong Security tìm thư mục Users

Nhấp chuột phải vào thư mục Users chọn New User

Hộp thoại Database User – New xuất hiện, nhập tên user (testUser) trong User

name. Tại Login name nhấp chuột vào nút (…) bên phải

Page 30: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

30

© 2018 ngocminhtran.com

Trong hộp thoại Select Login gõ tên tài khoản đăng nhập của chúng ta trong Enter

the object names to select ( ví dụ tài khoản [NgocMinhTran] đã tạo ở trên):

Page 31: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

31

© 2018 ngocminhtran.com

Nhấn OK để đóng Select Login. Nhấn tiếp OK để đóng Database User – New. Lúc

này trong thư mục Users sẽ xuất hiện người dùng testUser:

Để cấp phát quyền truy cập đến database cho người dùng testUser chúng ta thực hiện như

sau:

Nhấn chuột phải vào testUser chọn Properties. Hộp thoại Database User – testUser

xuất hiện:

Page 32: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

32

© 2018 ngocminhtran.com

Nhấp chuột vào nút Search và chọn Specific objects trong cửa sổ Add Objects:

Nhấn OK. Trong hộp Select Objects nhấn nút Object Types và chọn Database (có thể

chọn các đối tượng khác như Stored procedures, Tables,…) t rong Select Object Types:

Page 33: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

33

© 2018 ngocminhtran.com

Nhấn OK để trở lại Select Objects. Trong Select Objects nhấn Browse để tìm đối tượng

testDB

Nhấn OK, hộp thoại Select Objects lúc này:

Page 34: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

34

© 2018 ngocminhtran.com

Nhấn OK để đóng Select Objects và trở lại hộp Database User – testUser

Tại Permission for testDB chọn cột Grant và chọn Select (tức là chúng ta cấp quyền

Select cho người dùng testUser đối với testDB):

Page 35: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

35

© 2018 ngocminhtran.com

Nhấn OK để đóng Database User – testUser.

Page 36: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

36

© 2018 ngocminhtran.com

Phần II

Thiết kế

cơ sở dữ liệu

Page 37: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

37

© 2018 ngocminhtran.com

Trong phần này, chúng ta sẽ làm việc với cơ sở dữ liệu qua 3 giai đoạn:

Giai đoạn thiết kế

Giai đoạn nhập dữ liệu

Giai đoạn truy vấn dữ liệu

Giai đoạn Thiết kế

Tạo bảng (table)

Thành phần cơ bản nhất của một cơ sở dữ liệu là các bảng (tables). Mỗi bảng được tạo

thành bởi các cột (hay thuộc tính), trong đó có một (hay nhiều) cột đóng vai trò là khóa

chính (primary key - PK). Các bảng trong cùng một cơ sở dữ liệu phải có quan hệ với

nhau.

Ví dụ một cơ sở dữ liệu Album có chứa 2 bảng như sau:

Hình trên gồm 2 bảng tên Genre và Review. Id (đóng vai trò là khóa chính - PK), Name,

SortOrder là các cột (hay thuộc tính) của bảng Genre; Id (đóng vai trò là khóa chính -

PK), Title, Summary,…là các cột (hay thuộc tính) của bảng Review. Hai bảng Genre và

Review có mối quan hệ một - nhiều (thông qua cặp khóa Id (PK của Genre) – GenreId

(FK của Review)).

Tên bảng hay cột tuân theo một số quy tắc chung:

Không dùng khoảng trắng giữa các từ, ví dụ Employee Department là không hợp

lệ vì có khoảng trắng giữa Employee và Department.

Viết hoa chữ cái đầu tiên của mỗi từ, ví dụ EmployeeDepartment, Genre, Review

Page 38: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

38

© 2018 ngocminhtran.com

Không dùng các từ khóa để đặt tên như: int, nvarchar, …

Tên bảng phải là duy nhất trong cơ sở dữ liệu (hay lược đồ) và tên cột phải là duy

nhất trong mỗi bảng.

Tên phải phản ánh được nội dung của bảng hay cột

Lược đồ cơ sở dữ liệu (schema)

Lược đồ của một cơ sở dữ liệu phản ánh mức tổ chức của các đối tượng (như các bảng)

trong cơ sở dữ liệu đó. Ví dụ lược đồ của cơ sở dữ liệu Album thể hiện mối quan hệ giữa

hai bảng Genre và Review:

Mặc định, một lược đồ của một cơ sở dữ liệu sẽ được phát sinh một cách tự động (dbo).

Kiểu dữ liệu (data types) trong SQL Server

Trong quá trình thiết kế các bảng, các cột (hay các đối tượng khác) của mỗi bảng sẽ được

gán đến một kiểu dữ liệu như kiểu số (numeric), kiểu chuỗi (string), kiểu thời gian (date,

time),…Kiểu dữ liệu sẽ quyết định kiểu của giá trị được đặt vào trong các cột (hay các

đối tượng khác). Ví dụ cột Id của bảng Genre có kiểu dữ liệu là kiểu số thì các giá trị của

cột Id phải là kiểu số.

Kiểu số (numeric)

SQL Server cung cấp các kiểu dữ liệu kiểu số sau:

Page 39: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

39

© 2018 ngocminhtran.com

Cột Data Type là các kiểu dữ liệu kiểu số; cột Range quy định phạm vi giá trị của mỗi

kiểu, ví dụ kiểu tinyint có giá trị từ 0 đến 255; cột Storage là hình thức lưu trữ của mỗi

kiểu trong bộ nhớ máy tính (đơn vị byte), ví dụ một giá trị có kiểu int sẽ chiếm một ô nhớ

kích cỡ 4 bytes.

Kiểu chuỗi (string)

Đối với các giá trị dạng văn bản (ví dụ cột Name hay Summary) chúng ta dùng các kiểu

dữ liệu kiểu chuỗi. Có 3 dạng kiều chuỗi: kiểu dữ liệu không phải Unicode (non

Unicode), kiều dữ liệu Unicode (có thể bao hàm cả các giá trị có kiểu non Unicode) và

kiểu nhị phân (binary).

Kiểu dữ liệu không phải Unicode gồm:

char(n): n là chiều dài chuỗi, 1 <= n <= 8000

varchar(n): n tùy ý, giá trị có thể chiếm đến 2GB bộ nhớ.

text: có thể bị xóa trong tương lai và nên sử dụng kiểu vachar thay thế

Kiểu dữ liệu Unicode gồm:

nchar(n): n là chiều dài chuỗi, 1 <= n <= 4000

nvarchar(n): n tùy ý, giá trị có thể chiếm đến 2GB bộ nhớ.

ntext: có thể bị xóa trong tương lai và nên sử dụng kiểu nvachar thay thế

Kiểu dữ liệu nhị phân gồm:

binary(n): n là chiều dài chuỗi, 1 <= n <= 8000

varbinary(n): n tùy ý, giá trị có thể chiếm đến 2GB bộ nhớ.

image: có thể bị xóa trong tương lai và nên sử dụng kiểu varbinary thay thế

Kiểu thời gian (date, time)

SQL Server cung cấp các kiểu dữ liệu cho các giá trị thời gian như giờ, phút, giây hay

ngày, tháng, năm. Các kiểu thời gian gồm:

Page 40: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

40

© 2018 ngocminhtran.com

time(n): lưu trữ thời gian 24 giờ của ngày. n là một số nguyên từ 0 đến 7 phản ánh

độ chính xác phần thập phân của giá trị thời gian. Ví dụ time(2) giá trị có thể là

11:51:04:24, nếu time(3) thì giá trị có thể 11:51:04:245

date: lưu trữ giá trị tháng-ngày-năm có phạm vi từ 01-01-01 đến 12-31-9999

smalldatetime: lưu trữ giá trị thời gian kết hợp date và time, trong đó date có

phạm vi từ 1/1/1900 đến 6/6/2079, time chính xác đến giây. Ví dụ giá trị kiểu

smalldatetime là 4/1/2012 11:15:04

datetime: tương tự smalldatetime nhưng có giá trị lớn hơn với date trong phạm vi

từ 01-01-01 đến 12-31-9999, time chính xác đến phần lẻ. Ví dụ: 4/1/2012

11:15:04:888

datetime2(n) : tương tự datetime nhưng chúng ta có thể kiểm soát độ chính xác

của phần time thông qua n (giống kiểu time(n))

datetimeoffset: tương tự datetime2 nhưng có phản ánh độ lệch giữa các múi giờ

(time-zone). Ví dụ phản ánh múi giờ chênh lệch nhau 6 tiếng: 4/1/2012 03:10:24 -

06:00

Các kiểu dữ liệu khác

Bên cạnh các kiểu dữ liệu cơ bản trên, SQL Server cung cấp nhiều kiểu dữ liệu khác cho

những mục đích đa dạng như cursor, filestream, xml, v.v.

Xem thêm tại https://docs.microsoft.com/en-us/sql/t-sql/data-types/data-types-transact-

sql?view=sql-server-2017

Cột (columns) trong bảng

Mỗi bảng được hình thành từ các cột, ví dụ bảng Genre được tạo từ các cột Id, Name,

SortOrder. Mỗi cột sẽ được gán với một kiểu dữ liệu cụ thể và hầu hết các cột đều Allow

Nulls nghĩa là cột đó có thể rỗng hay không chứa giá trị nào. Đối với các cột có kiểu dữ

liệu số thì có thể chọn thuộc tính Is Identity cho phép phát sinh tự động một giá trị khi

một hàng được thêm vào bảng. Chúng ta sẽ hiểu hơn về các thuộc tính của cột qua phần

sau của tài liệu này.

Tạo các bảng trong SQL Server Management Studio

Bây giờ chúng ta sẽ thực hành tạo các bảng Genre và Review trong cơ sở dữ liệu Album

bằng công cụ SQL Server Management Studio.

Tạo bảng

Đầu tiên chúng ta cần tạo cơ sở dữ liệu Album trong thư mục Databases (xem lại phần I

– Làm việc với cơ sở dữ liệu). Các bảng Genre và Review có thiết kế như sau:

Bảng Genre

Page 41: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

41

© 2018 ngocminhtran.com

Bảng Review

Trong thư mục cơ sở dữ liệu Album, tìm đến và mở rộng thư mục Security. Nhấp chuột

phải vào thư mục Schemas chọn New Schema:

Page 42: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

42

© 2018 ngocminhtran.com

Trong hộp thoại Schema – New gõ GenreReview trong mục Schema Name và gõ dbo

trong Schema owner:

Nhấp OK.

Mở rộng thư mục cơ sở dữ liệu Album, tìm đến và nhấp chuột phải vào thư mục Tables

chọn New Table:

Page 43: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

43

© 2018 ngocminhtran.com

Trong vùng thiết kế bảng sẽ xuất hiện ngay sau đó nhập tên các cột trong Column Name,

chọn kiểu dữ liệu tương ứng trong Data Type, không chọn Allow Nulls cho các cột:

Trong cửa sổ Properties (thường xuất hiện mặc định khi chúng ta tạo bảng mới, nếu chưa

xuất hiện thì chọn View > Properties), tìm đến mục Schema và chọn GenreReview trong

danh sách sổ xuống:

Page 44: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

44

© 2018 ngocminhtran.com

Nhấp chuột phải vào tab tạo bảng mới và chọn Save Table_1:

Trong hộp thoại Choose Name gõ Genre trong mục Enter a name for the table:

Nhấn OK. Bảng Genre đã được thêm vào cơ sở dữ liệu Album:

Page 45: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

45

© 2018 ngocminhtran.com

Một cách tương tự chúng ta sẽ thiết kế bảng Review:

Giá trị cột Id có thể chọn thuộc tính Is Identity trong Column Properties:

Lúc này cơ sở dữ liệu Album sẽ có hai bảng Genre và Review như sau:

Page 46: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

46

© 2018 ngocminhtran.com

Tạo các ràng buộc cho bảng

Một số ràng buộc có thể có gồm:

Ràng buộc khóa chính (primary key constraints): mỗi bảng sẽ có một cột (hay một

nhóm cột) được chọn là khóa chính của bảng

Ràng buộc mặc định (default constraints): chúng ta quy ước mặc định giá trị cho

một cột nào đó. Ví dụ kiểu bit chỉ có thể nhận giá trị 1 hay 0, true hay false, v.v.

nên chúng ta cần quy định trước giá trị.

Ràng buộc duy nhất (unique constraints): thường bị lầm với ràng buộc khóa chính.

Đảm bảo không có sự lặp lại các giá trị trong một cột, ví cột mã sinh viên sẽ chứa

các giá trị duy nhất vì không cho phép hai sinh viên có cùng mã sinh viên.

Ràng buộc kiểm tra (check constraints):kiểm tra giá trị tại một cột có thỏa mãn

điều kiện cho trước nào đó hay không.

Thêm ràng buộc khóa chính đến các bảng trong cơ sở dữ liệu Album

1. Chọn bảng Genre trong cơ sở dữ liệu Album và nhấp chuột phải vào bảng này chọn

Design

2. Nhấp chuột phải vào cột Id và chọn Set Primary Key

Page 47: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

47

© 2018 ngocminhtran.com

Kết quả sẽ xuất hiện một biểu tượng khóa ngay trước cột Id:

Tương tự thiết lập khóa chính cho cột Id của bảng Review.

Thêm ràng buộc mặc định đến các bảng trong cơ sở dữ liệu Album

1. Chọn bảng Review trong cơ sở dữ liệu Album và nhấp chuột phải vào bảng này chọn

Design

2. Chọn cột Authoried cần thiết lập ràng buộc mặc định và trong cửa sổ Column

Properties chọn Default Value or Binding và nhập giá trị mặc định 1:

Page 48: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

48

© 2018 ngocminhtran.com

Thêm ràng buộc duy nhất đến các bảng trong cơ sở dữ liệu Album

1. Chọn bảng Genre (hay Review) trong cơ sở dữ liệu Album và nhấp chuột phải vào

bảng này chọn Design

2. Chọn cột (ví dụ cột Name) cần thiết lập ràng buộc duy nhất, nhấp chuột phải chọn

Indexes/Keys

3. Trong hộp thoại Indexes/Keys nhấn nút Add, tại Type chọn Unique Key, tại Is Unique

chọn Yes, tại Name gõ Unique_Name. Kết quả:

Page 49: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

49

© 2018 ngocminhtran.com

Thêm ràng buộc kiểm tra đến các bảng trong cơ sở dữ liệu Album

1. Chọn bảng Genre (hay Review) trong cơ sở dữ liệu Album và nhấp chuột phải vào

bảng này chọn Design

2. Chọn và nhấp chuột phải vào cột cần thiết lập ràng buộc kiểm tra và chọn Check

Constraints

Trong hộp Check Constraints nhấn nút Add và nhập tên của ràng buộc tại mục Name. Tại

mục Expression nhập biểu thức điều kiện bằng cách nhấn nút (…) bên phải:

Page 50: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

50

© 2018 ngocminhtran.com

Nhập biểu thức điều kiện trong hộp Check Constraint Expression:

Ràng buộc khóa ngoại (Foreign key constraints)

Khóa ngoại đóng vai trò rất quan trọng, đảm bảo tính ràng buộc toàn vẹn dữ liệu trong cơ

sở dữ liệu. Ví dụ trong bảng Review có chứa cột GenreId để đảm bảo chỉ có những genre

(thể loại) nào tồn tại trong bảng Genre thì mới có nội dung trong bảng Review. Điều này

thể hiện mối quan hệ chặt chẽ, toàn vẹn giữa hai bảng Genre và Review. Cột Id trong

bảng Genre và cột GenreId trong bảng Review phải có dữ liệu giống nhau. Cột Id trong

Page 51: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

51

© 2018 ngocminhtran.com

bảng Genre đóng vai trò khóa chính, cột GenreId trong bảng Review đóng vai trò khóa

ngoại.

Tạo quan hệ khóa ngoại cho các bảng của cơ sở dữ liệu Album

1. Chọn và mở rộng bảng GenreReview.Review trong cơ sở dữ liệu Album, chọn và nhấp

chuột phải vào thư mục Keys chọn New Foreign Key:

2. Trong hộp Foreign Key Relationships, nhấn Delete để xóa ràng buộc mặc định

(FK_Genre_Review). Tìm đến thuộc tính Name và gõ tên ràng buộc là

FK_Genre_To_Review_On_GenreId và nhấn nút Add:

Page 52: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

52

© 2018 ngocminhtran.com

3. Tại mục Tables and Columns Specifications nhấn vào nút (…) bên phải:

Trong Tables and Columns chọn Genre (GenreReview) trong Primary key table và chọn

cột Id ngay bên dưới. Tương ứng bên Foreign key table là Review (GenreReview) và cột

GenreId:

Page 53: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

53

© 2018 ngocminhtran.com

4. Đóng các cửa sổ và lưu kết quả.

Trực quan hóa các bảng trong cơ sở dữ liệu

1. Mở rộng cơ sở dữ liệu Album, chọn và nhấn chuột phải vào thư mục Database

Diagrams, chọn New Database Diagram:

Hiện ra thông báo

Chọn Yes. Trong bảng Add Table chọn hai bảng Genre và Review (chọn và giữ phím

Ctrl)

Page 54: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

54

© 2018 ngocminhtran.com

Nhấn nút Add và nhấn Close. Kết quả:

Lưu lại diagram bằng cách nhấn chuột phải trên tab (giống lưu bảng)

Page 55: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

55

© 2018 ngocminhtran.com

Giai đoạn Nhập dữ liệu

Sau khi hoàn tất quá trình thiết kế các bảng, giai đoạn kế tiếp là nhập dữ liệu cho bảng.

Để nhập dữ liệu cho một bảng, chúng ta chọn và nhấp chuột phải vào bảng đó chọn Edit

Top 200 rows

Nhập dữ liệu cho bảng Genre:

Page 56: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

56

© 2018 ngocminhtran.com

Bảng Review

Giai đoạn truy vấn dữ liệu với T-SQL

Khi dữ liệu đã được nhập, việc kế tiếp là sử dụng các dữ liệu với những mục đích khác

nhau thông qua các truy vấn (queries).

Tạo truy vấn trong Microsoft SQL Server Management Studio

Để tạo một truy vấn trong SQL Server Management Studio chúng ta vào mục New Query

Một khung soạn thảo xuất hiện cho phép chúng ta soạn thảo các lệnh T-SQL để truy vấn

dữ liệu theo một mục đích cụ thể:

Page 57: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

57

© 2018 ngocminhtran.com

Ngôn ngữ SQL

Để truy vấn dữ liệu từ cơ sở dữ liệu chúng ta dùng ngôn ngữ SQL. Học ngôn ngữ SQL tại

https://www.w3schools.com/sql/default.asp. Sau đây là một số lệnh SQL cơ bản với dữ

liệu minh họa bên cạnh các bảng Genre và Review của cơ sở dữ liệu Album đã tạo ở trên,

chúng ta sẽ dùng các bảng từ cơ sở dữ liệu Northwind của https://www.w3schools.com

bao gồm:

Bảng Customers:

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

Bảng Categories:

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

Bảng Employees:

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

Bảng Orders:

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

Bảng OrderDetails:

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

Bảng Products:

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

Bảng Shippers:

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

Bảng Suppliers:

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

Một số hình ảnh minh họa cũng được mượn từ https://www.w3schools.com.

1. Lệnh SELECT…FROM

Dùng để chọn các cột cần hiển thị trong một hay nhiều bảng từ cơ sở dữ liệu. Cú pháp:

SELECT cột_1, cột_2, ...

FROM tên_bảng;

Có thể hiển thị tất cả các cột trong một bảng với lệnh SELECT *. Ví dụ muốn hiển thị chỉ

cột Name của bảng Genre chúng ta viết:

SELECT Name

FROM Genre;

Hiển thị tất cả dữ liệu từ bảng Genre có thể viết:

SELECT *

Page 58: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

58

© 2018 ngocminhtran.com

FROM Genre;

Kết quả sẽ hiển thị tất cả các cột từ bảng Genre gồm ID, Name, SortOrder.

2. Lệnh DISTINCT

Dữ liệu trong các bảng khi hiển thị bằng lệnh SELECT có thể trùng nhau, ví dụ hiển thị

cột Country của bảng Customers bằng lệnh sau:

SELECT Country

FROM Customers;

Kết quả có thể như sau:

Chúng ta có thể dùng lệnh DISTINCT để hiển thị các dữ liệu không trùng nhau theo cú

pháp sau:

SELECT DISTINCT cột_1, cột_2, ...

FROM tên_bảng;

Ví dụ hiển thị lại Country từ bảng Customers:

SELECT DISTINCT Country

FROM Customers;

Kết quả:

Page 59: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

59

© 2018 ngocminhtran.com

3. Lệnh WHERE

Chúng ta có thể hiển thị dữ liệu từ một hay nhiều bảng theo các điều kiệu nào đó bằng

lệnh WHERE. Cú pháp:

SELECT cột_1, cột_2, ...

FROM tên_bảng

WHERE điều_kiện;

Ví dụ hiển thị thông tin CustomerID, CustomerName và Country của các khách hàng

(customers) đến từ quốc gia (Country) Mexico, lệnh SQL như sau:

SELECT CustomerID, CustomerName, Country

FROM Customers

WHERE Country='Mexico';

Kết quả:

4. Lệnh AND, OR, NOT

Khi dùng WHERE chúng ta có thể dùng các lệnh AND, OR, hay NOT để kết nối các điều

kiện khác nhau (AND, OR) hay phủ định giá trị một biểu thức điều kiện (NOT). Cú pháp

AND:

SELECT cột_1, cột_2, ...

FROM tên_bảng

Page 60: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

60

© 2018 ngocminhtran.com

WHERE btdk_1 AND btdk_2 AND btdk_3 AND …;

Hiển thị kết quả khi tất cả các điều kiện btdk_1, btdk_2, btdk_3,…thỏa mãn đồng thời. Ví

dụ:

SELECT *

FROM Customers

WHERE Country='Germany' AND City='Berlin';

Lệnh SQL trên hiển thị các khách hàng thỏa mãn đồng thời hai điều kiện là đến từ

Germany (Country) và thành phố Berlin (City). Kết quả:

Nếu muốn hiển thị thông tin chỉ cần thỏa mãn một hay một vài điều kiện nào đó chúng ta

có thể dùng OR theo cú pháp:

SELECT cột_1, cột_2, ...

FROM tên_bảng

WHERE btdk_1 OR btdk_2 OR btdk_3 OR …;

Ví dụ:

SELECT *

FROM Customers

WHERE Country='Germany' OR City='Berlin';

Lệnh SQL trên hiển thị các khách hàng thỏa mãn hoặc đến từ Germany (Country) hoặc

thành phố Berlin (City) hoặc cả hai. Kết quả:

Trong trường hợp muốn hiển thị thông tin theo một ngoại lệ nào đó, ví dụ hiển thị thông

tin khách hàng đến từ tất cả các quốc gia ngoại trừ Germany, chúng ta có thể dùng lệnh

NOT theo cú pháp:

SELECT cột_1, cột_2, ...

FROM tên_bảng

WHERE NOT biểu_thức_điều_kiện;

Page 61: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

61

© 2018 ngocminhtran.com

Ví dụ lệnh SQL

SELECT *

FROM Customers

WHERE NOT Country='Germany';

Sẽ hiển thị thông tin khách hàng đến từ tất cả các quốc gia ngoại trừ Germany.

5. Lệnh IN, BETWEEN, LIKE

Bên cạnh AND, OR, NOT, các lệnh IN, BETWEEN, và LIKE cũng thường được dùng

trong biểu thức điều kiện của WHERE.

Lệnh BETWEEN dùng để chọn giá trị trong một khoảng nào đó. Cú pháp:

SELECT Tên_cột_hiển_thị

FROM Tên_bảng

WHERE Tên_cột BETWEEN giá_trị_1 AND giá_trị_2;

Ví dụ lệnh SQL:

SELECT *

FROM Products

WHERE Price BETWEEN 10 AND 20;

Hiển thị thông tin các sản phẩm (Products) có giá (Price) từ 10 đến 20 (10 <= Price <=

20).

Lệnh IN là một hình thức khác của lệnh OR. Cú pháp:

SELECT Tên_cột_hiển_thị

FROM Tên_bảng

WHERE Tên_cột IN (giá_trị_1, giá_trị_2,…);

Lệnh này tương đương với lệnh OR như sau:

SELECT Tên_cột_hiển_thị

FROM Tên_bảng

WHERE Tên_cột = giá_trị_1 OR tên_cột = giá_trị_2 OR…;

Ví dụ:

SELECT *

Page 62: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

62

© 2018 ngocminhtran.com

FROM Customers

WHERE Country IN ('Germany', 'France', 'UK');

Tương đương:

SELECT *

FROM Customers

WHERE Country = 'Germany' OR Country = 'France' OR Country = 'UK';

Ngoài việc dùng IN, BETWEEN, chúng ta có thể dùng LIKE để xác định dữ liệu trong

những điều kiện phức tạp hơn như tìm kiếm các khách hàng có tên bắt đầu bằng chữ a

hay tên có chữ cái thứ hai là r, v.v. Cú pháp LIKE:

SELECT Tên_cột_hiển_thị

FROM Tên_bảng

WHERE Tên_cột LIKE mẫu_điều_kiện;

mẫu_điều_kiện là biểu thức kết hợp các ký hiệu đặc biệt (wildcard) và hai kí hiệu đặc biệt

thường dùng là:

%: đại diện cho không, một, hay nhiều ký tự

_: đại diện cho một ký tự

Ví dụ lệnh SQL:

SELECT *

FROM Customers

WHERE CustomerName LIKE 'a%';

Lệnh SQL trên hiển thị thông tin các khách hàng có tên bắt đầu bằng chữ a (hay A). Kết

quả

Một lệnh SQL khác:

SELECT *

Page 63: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

63

© 2018 ngocminhtran.com

FROM Customers

WHERE CustomerName LIKE 'a_%_%';

Lệnh SQL trên hiển thị thông tin các khách hàng có tên bắt đầu bằng chữ a (hay A) và

tên chứa ít nhất 3 ký tự.

Tham khảo thêm về cách dùng các wildcards tại

https://www.w3schools.com/sql/sql_wildcards.asp

6. Lệnh ORDER BY

Lệnh ORDER BY dùng để sắp xếp kết quả theo thứ tự tăng (ASC) hay giảm (DESC) dần

theo các cột. Cú pháp:

SELECT cột_1, cột_2, ...

FROM tên_bảng

[ WHERE biểu_thức_điều_kiện ]

ORDER BY cột_1, cột_2, ...ASC | DESC;

Lệnh WHERE đặt trong dấu [] vì có thể có hoặc không khi dùng ORDER BY. Mặc định

khi dủng ORDER BY, các giá trị được xếp tăng dần; nếu muốn xếp giảm dần có thể thêm

từ khóa DESC. Ví dụ sắp xếp thông tin khách hàng tăng dần theo Country

SELECT CustomerID, CustomerName, Country

FROM Customers

ORDER BY Country;

Kết quả:

Có thể sắp xếp giảm dần theo Country:

SELECT CustomerID, CustomerName, Country

Page 64: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

64

© 2018 ngocminhtran.com

FROM Customers

ORDER BY Country DESC;

Kết quả:

7. Lệnh INSERT INTO…VALUES

Chúng ta có thể thêm thông tin đến bảng với lệnh INSERT INTO theo cú pháp sau:

INSERT INTO tên_bảng (cột_1, cột_2, cột_3, ...)

VALUES (giá_trị_1, giá_trị_2, giá_trị_3, ...);

Thêm các giá trị giá_trị_1, giá_trị_2, giá_trị_3, ...tương ứng đến các cột cột_1, cột_2,

cột_3, ... của bảng. Nếu chúng ta thêm các giá trị đến tất cả các cột của bảng thì dùng cú

pháp:

INSERT INTO tên_bảng

VALUES (giá_trị_1, giá_trị_2, giá_trị_3, ...);

Ví dụ:

INSERT INTO Customers (CustomerName, ContactName, Address, City,

PostalCode, Country)

VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger',

'4006', 'Norway');

Các thông tin về khách hàng tên Cardinal sẽ được thêm vào cuối bảng Customers và

CustomerID sẽ tự động tăng một đơn vị.

8. Lệnh UPDATE

Dùng lệnh UPDATE để chỉnh sửa, thay đổi các thông tin có sẵn từ các bảng của cơ sở dữ

liệu. Cú pháp:

UPDATE tên_bảng

Page 65: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

65

© 2018 ngocminhtran.com

SET cột_1 = giá_trị_1, cột_2 = giá_trị_2, ...

WHERE điều_kiện;

Cập nhật giá trị các cột cột_1, cột_2,…tương ứng với giá_trị_1, giá_trị_2,…Cần chú ý

sử dụng WHERE để cập nhật tại một vài hàng dữ liệu nào đó, nếu không dùng WHERE

thì tất cả các hàng trong bảng sẽ được cập nhật.

Ví dụ lệnh SQL:

UPDATE Customers

SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'

WHERE CustomerID = 1;

Cập nhận thông tin về ContactName và City với khách hàng có CustomerID là 1.

9. Lệnh DELETE

Dùng lệnh DELETE để xóa các dữ liệu tồn tại sẵn trong cơ sở dữ liệu. Cú pháp:

DELETE FROM tên_bảng

WHERE điều_kiện;

Sử dụng WHERE để xác định các hàng cần xóa trong bảng. Nếu bỏ qua lệnh WHERE,

tất cả các hàng của bảng sẽ bị xóa.

Ví dụ lệnh SQL sau:

DELETE FROM Customers

WHERE CustomerName='Alfreds Futterkiste';

Xóa tất cả thông tin các khách hàng có tên là Alfreds Futterkiste từ bảng Customers.

10. Lệnh INNER JOIN, LEFT JOIN, RIGHT JOIN, OUTER JOIN

Trong trường hợp muốn hiển thị dữ liệu được lấy từ nhiều bảng có quan hệ với nhau,

chúng ta có thể dùng các lệnh JOIN.

Lệnh INNER JOIN hiển thị dữ liệu thuộc về cả hai bảng. Hình ảnh trực quan INNER

JOIN với hai bảng table1 và table2 như sau:

Page 66: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

66

© 2018 ngocminhtran.com

Cú pháp:

SELECT Các_cột_hiển_thị

FROM Tên_bảng_thứ_nhất

INNER JOIN Tên_bảng_thứ_hai

ON Tên_bảng_thứ_nhất.Tên_cột = Tên_bảng_thứ_hai.Tên_cột;

Các cột trên lệnh ON là các cột thể hiện mối quan hệ giữa hai bảng và các cột này có thể

khác tên nhưng có cùng giá trị. Ví dụ bảng Products và bảng Suppliers có quan hệ với

nhau dựa trên cột SupplierID (khóa chính bảng Suppliers) và cột SupplierID (trong bảng

Products – khóa ngoại).

Ví dụ lệnh SQL sau:

SELECT Products.ProductID, Products.ProductName,Suppliers.SupplierName

FROM Products

INNER JOIN Suppliers

ON Products.SupplierID = Suppliers.SupplierID;

Kết quả

Page 67: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

67

© 2018 ngocminhtran.com

Lệnh LEFT JOIN hiển thị dữ liệu thuộc về bảng bên trái và dữ liệu thuộc về cả hai bảng.

Hình ảnh trực quan LEFT JOIN với hai bảng table1 và table2 như sau:

Cú pháp:

SELECT Các_cột_hiển_thị

FROM Tên_bảng_thứ_nhất

LEFT JOIN Tên_bảng_thứ_hai

ON Tên_bảng_thứ_nhất.Tên_cột = Tên_bảng_thứ_hai.Tên_cột;

Ví dụ lệnh SQL sau:

USE Album; select GenreReview.Genre.Id, GenreReview.Genre.Name, GenreReview.Review.Title from GenreReview.Genre left join GenreReview.Review on GenreReview.Genre.Id = GenreReview.Review.GenreId; Kết quả:

Lệnh SQL trên sẽ hiển thị toàn bộ dữ liệu từ bảng bên trái (Genre) và các dữ liệu chung

của hai bảng. Nội dung Title của Jazz là NULL vì bảng Review không chứa Id của Jazz

(Genreid = 3).

Lệnh RIGHT JOIN hiển thị dữ liệu thuộc về bảng bên phải và dữ liệu thuộc về cả hai

bảng. Hình ảnh trực quan RIGHT JOIN với hai bảng table1 và table2 như sau:

Page 68: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

68

© 2018 ngocminhtran.com

Cú pháp:

SELECT Các_cột_hiển_thị

FROM Tên_bảng_thứ_nhất

RIGHT JOIN Tên_bảng_thứ_hai

ON Tên_bảng_thứ_nhất.Tên_cột = Tên_bảng_thứ_hai.Tên_cột;

Ví dụ lệnh SQL sau:

USE Album; select GenreReview.Genre.Id, GenreReview.Genre.Name, GenreReview.Review.Title from GenreReview.Genre right join GenreReview.Review on GenreReview.Genre.Id = GenreReview.Review.GenreId; Kết quả:

Lệnh SQL trên sẽ hiển thị toàn bộ dữ liệu từ bảng bên phải (Review) và các dữ liệu

chung của hai bảng. Nội dung của Jazz không xuất hiện vì bảng Review không chứa Id

của Jazz (Genreid = 3).

Lệnh FULL OUTER JOIN hiển thị tất cả dữ liệu thuộc về cả hai bảng. Hình ảnh trực

quan FULL OUTER JOIN với hai bảng table1 và table2 như sau:

Page 69: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

69

© 2018 ngocminhtran.com

Cú pháp:

SELECT Các_cột_hiển_thị

FROM Tên_bảng_thứ_nhất

FULL OUTER JOIN Tên_bảng_thứ_hai

ON Tên_bảng_thứ_nhất.Tên_cột = Tên_bảng_thứ_hai.Tên_cột;

Ví dụ lệnh SQL sau:

USE Album; select GenreReview.Genre.Id, GenreReview.Genre.Name, GenreReview.Review.Title from GenreReview.Genre full outer join GenreReview.Review on GenreReview.Genre.Id = GenreReview.Review.GenreId; Kết quả:

Lệnh SQL trên sẽ hiển thị toàn bộ dữ liệu từ hai bảng. Nội dung Title của Jazz là NULL

vì bảng Review không chứa Id của Jazz (Genreid = 3).

11. Các hàm thống kê

T-SQL hỗ trợ một số hàm phục vụ cho việc thống kê số liệu trong các bảng. Chúng ta sẽ

cùng tìm hiểu một số hàm thống kê cơ bản.

Hàm MAX và MIN

Hàm MAX và MIN lần lượt trả về giá trị lớn nhất và nhỏ nhất của cột được chọn. Cú

pháp hàm MIN:

Page 70: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

70

© 2018 ngocminhtran.com

SELECT MIN(Tên_cột_được_chọn)

FROM Tên_bảng

[WHERE điều_kiện];

Điều kiện WHERE có thể có hoặc không. Ví dụ lệnh SQL sau sẽ trả về giá trị nhỏ nhất

trong cột Price của bảng Products:

SELECT MIN(Price)

FROM Products;

Kết quả:

Chú ý: Cột có tiêu đề là MIN (Price) là cột phát sinh trong quá trình truy vấn. Nếu muốn

tên cột phù hợp hơn, ví dụ thay vì là MIN (Price) theo mặc định chúng ta sẽ thay đổi

thành SmallestPrice, chúng ta sẽ dùng từ khóa AS như sau:

SELECT MIN(Price) AS SmallestPrice

FROM Products;

Kết quả:

Đối lập với hàm MIN là hàm MAX với cú pháp:

SELECT MAX(Tên_cột_được_chọn)

FROM Tên_bảng

[WHERE điều_kiện];

Điều kiện WHERE có thể có hoặc không. Ví dụ lệnh SQL sau sẽ trả về giá trị lớn nhất

trong cột Price của bảng Products:

SELECT MAX(Price) AS LargestPrice

FROM Products;

Kết quả:

Page 71: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

71

© 2018 ngocminhtran.com

Hàm SUM

Hàm SUM dùng để tính tổng các giá trị của cột được chọn. Cú pháp:

SELECT SUM(Tên_cột_được_chọn)

FROM Tên_bảng

[WHERE điều_kiện];

Điều kiện WHERE có thể có hoặc không. Ví dụ lệnh SQL sau tính tổng các giá trị từ cột

Quantity của bảng OrderDetails:

SELECT SUM(Quantity) AS Total_Quantity

FROM OrderDetails;

Kết quả:

Hàm AVG

Hàm AVG dùng để tính giá trị trung bình các giá trị của cột được chọn. Cú pháp:

SELECT AVG(Tên_cột_được_chọn)

FROM Tên_bảng

[WHERE điều_kiện];

Điều kiện WHERE có thể có hoặc không. Ví dụ lệnh SQL sau tính giá trị trung bình các

giá trị từ cột Price của bảng Products:

SELECT AVG(Price) AS Average_Price

FROM Products;

Kết quả:

Hàm COUNT

Page 72: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

72

© 2018 ngocminhtran.com

Hàm COUNT dùng để đếm các giá trị của cột được chọn. Cú pháp:

SELECT COUNT(Tên_cột_được_chọn)

FROM Tên_bảng

[WHERE điều_kiện];

Điều kiện WHERE có thể có hoặc không. Ví dụ lệnh SQL sau đếm các sản phẩm dựa vào

cột ProductID của bảng Products:

SELECT COUNT(ProductID) AS NumOfProducts

FROM Products;

Kết quả:

12. Lệnh GROUP BY

Lệnh GROUP BY thường kết hợp với các hàm thống kê dùng để nhóm dữ liệu theo một

hay nhiều cột. Cú pháp tồng quát:

SELECT Tên_các_cột_hiển_thị

FROM Tên_bảng

[WHERE điều_kiện]

GROUP BY Tên_các_cột_dùng_để_nhóm_dữ_liệu

[ORDER BY Tên_các_cột_dùng_để_sắp_xếp];

Các lệnh WHERE và ORDER BY có thể có hoặc không. Lệnh SQL sau dùng để đếm

khách hàng trong bảng Customers dựa trên theo Country như sau:

SELECT COUNT(CustomerID) AS NumOfCustomers, Country

FROM Customers

GROUP BY Country;

Kết quả:

Page 73: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

73

© 2018 ngocminhtran.com

Có thể kết hợp với lệnh GROUP BY để sắp xếp giá trị giảm dần theo số lượng thống kê:

SELECT COUNT(CustomerID) AS NumOfCustomers, Country

FROM Customers

GROUP BY Country

ORDER BY COUNT(CustomerID) DESC;

Kết quả:

12. Lệnh HAVING

Giống như WHERE, lệnh HAVING dùng để xác định điều kiện để lọc dữ liệu nhưng

khác với WHERE, HAVING dùng kết hợp với các hàm thống kê và GROUP BY. Cú

pháp tồng quát:

SELECT Tên_các_cột_hiển_thị

FROM Tên_bảng

[WHERE điều_kiện]

[GROUP BY Tên_các_cột_dùng_để_nhóm_dữ_liệu]

HAVING điều_kiện

[ORDER BY Tên_các_cột_dùng_để_sắp_xếp];

Page 74: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

74

© 2018 ngocminhtran.com

Các lệnh WHERE, ORDER BY có thể có hoặc không. Ví dụ lệnh SQL sau dùng để đếm

khách hàng trong bảng Customers dựa trên theo Country và chỉ hiển thị những quốc gia

(Country) nào có từ 6 khách hàng trở lên:

SELECT COUNT(CustomerID) AS NumOfCustomers, Country

FROM Customers

GROUP BY Country

HAVING COUNT(CustomerID) > 5;

Kết quả:

Tài liệu này chỉ nêu một số lệnh SQL cơ bản và thường sử dụng nhất. Chi tiết về ngôn

ngữ SQL có thể tìm hiểu tại https://www.w3schools.com/sql/default.asp.

Viết lệnh T-SQL trong các truy vấn

Giả sử chúng ta cần xem thông tin về Name và SortOrder của bảng Genre từ cơ sở dữ

liệu Album, chúng ta viết các lệnh T-SQL như sau:

use Album; select Name, SortOrder from GenreReview.Genre;

Có hai vấn đề cần chú ý từ lệnh T-SQL trên:

Dùng lệnh use để tham chiếu đến cơ sở dữ liệu cần truy vấn;

Kết thúc mỗi lệnh là dấu chấm phẩy.

Sau khi gõ lệnh T-SQL chúng ta sẽ lưu lại truy vấn bằng cách nhấn chuột phải vào tab

truy vấn

Page 75: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

75

© 2018 ngocminhtran.com

Gõ tên (ví dụ giữ tên mặc định là SQLQuery1) và chọn vị trí lưu truy vấn.

Thực thi các truy vấn

Để thực thi các truy vấn chúng ta thực hiện các bước sau:

Mở truy vấn cần thực thi, ví dụ SQLQuery1 chúng ta vừa tạo bằng cách vào File

> Open > File

Nhấn vào nút !Execute trên thanh công cụ

Xem kết quả

Page 76: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

76

© 2018 ngocminhtran.com

Page 77: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

77

© 2018 ngocminhtran.com

Phần III

Một số vấn đề nâng

cao

Page 78: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

78

© 2018 ngocminhtran.com

Trong phần này, chúng ta sẽ tìm hiểu một số kỹ thuật và đối tượng nâng cao trong SQL

Server gồm:

Các đối tượng views

Các đối tượng tạm (temporary objects)

Lập trình cơ bản trong SQL Server

Tạo chỉ mục (indexes)

Triggers

Các đối tượng views

View là một đối tượng chứa kết quả được thừa kế từ các truy vấn. Một view giống một

table, tức là cũng được tạo bởi các cột và các hàng.

Tạo một đối tượng view trong SQL Server Management Studio

Để tạo một đối tượng view chúng ta thực hiện các bước sau:

Tìm đến và mở rộng thư mục cơ sở dữ liệu cần tạo view (ví dụ Album), tìm đến

và nhấn chuột phải vào thư mục Views chọn New View

Bảng Add Table xuất hiện

Page 79: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

79

© 2018 ngocminhtran.com

Chọn các bảng (ví dụ Genre và Review) và nhấn nút Add để thêm các bảng đến

môi trường thiết kế view:

Page 80: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

80

© 2018 ngocminhtran.com

Trong bảng Genre chọn các cột Name và SortOrder, trong bảng Review chọn các

cột Title và GenreId

Page 81: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

81

© 2018 ngocminhtran.com

Lưu view vừa tạo bằng cách nhấn chuột phải vào tab chọn Save…

Nhập tên view trong hộp Choose Name và nhấn OK

Đóng tab view.

Page 82: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

82

© 2018 ngocminhtran.com

Trở lại thư mục Views trong cơ sở dữ liệu Album và mở rộng thư mục này để xem

view vừa tạo

Để xem kết quả từ AlbumView chúng ta tạo một truy vấn tên QueryAlbumView với các

lệnh T-SQL như sau:

use Album; select * from dbo.AlbumView;

Thực thi truy vấn

Thay đổi một đối tượng view trong SQL Server Management Studio

Chúng ta có thể thay đổi một đối tượng view có sẵn (ví dụ AlbumView) theo các bước

sau:

Page 83: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

83

© 2018 ngocminhtran.com

Tìm đến view cần thay đổi, ví dụ AlbumView, và nhấn chuột phải chọn Design

Thêm cột Summary của bảng Review vào khung cửa sổ thứ hai bằng cách chọn

một ô trống tại cột Column và gõ Review.Summary:

Page 84: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

84

© 2018 ngocminhtran.com

Kết quả

Lưu thay đổi (nhấn chuột phải vào tab view và chọn Save…) và đóng cửa sổ

Design.

Mở lại truy vấn QueryAlbumView đã tạo ở trên và thực thi

Page 85: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

85

© 2018 ngocminhtran.com

Xóa một đối tượng view trong SQL Server Management Studio

Để xóa một đối tượng view, ví dụ AlbumView, chúng ta thực hiện như sau:

Tìm đến đối tượng view cần xóa, ví dụ AlbumView, và nhấn chuột phải chọn

Delete

Hộp thoại Delete Object xuất hiện, nhấn OK

Page 86: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

86

© 2018 ngocminhtran.com

Các đối tượng tạm trong SQL Server (temporary

objects)

Khi truy vấn dữ liệu trong SQL Server, thỉnh thoảng chúng ta cần lưu trữ dữ liệu tạm thời

trong một đối tượng tạm nào đó để sử dụng cho những lần sau. Các đối tượng tạm phổ

biến trong SQL Server gồm:

Biểu thức bảng chung (Common table expressions - CTE)

Biến bảng (table variables)

Bảng tạm (temporary tables)

Biểu thức bảng chung (CTE)

Page 87: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

87

© 2018 ngocminhtran.com

CTE là tập kết quả được định nghĩa khi thực thi các lệnh như SELET, INSERT,

UPDATE, DELETE, hay CREATE VIEW. CTE chỉ hợp lệ trong thời gian truy vấn và

không được lưu trữ giống như các đối tượng tạm khác. CTE được dùng để thay thế các

views, gộp dữ liệu, thực thi đệ quy, và tạo nhiều tham chiếu đến một bảng. Cú pháp CTE:

WITH <Tên_biểu_thức_CTE> [Danh_sách_các_cột]

AS (Truy_vấn)

Ví dụ tạo một truy vấn tên CTE_Query như sau:

use Album; with tempGenre As ( select Name from GenreReview.Genre ) select * from tempGenre;

Trong ví dụ trên chúng ta đã tạo một CTE tên tempGenre lưu trữ kết quả từ truy vấn:

select Name from GenreReview.Genre

tempGenre có thể được xem như một bảng tạm và chúng ta có thể xem nội dung từ bảng

này như các bảng thông thường:

select * from tempGenre;

Lưu ý rằng, bảng tempGenre chỉ được tạo khi chúng ta thực thi truy vấn CTE_Query và

sẽ bị hủy ngay khi CTE_Query hoàn thành.

Biến bảng

Khái niệm biến bảng tương tự biến cục bộ trong các ngôn ngữ lập trình được dùng để lưu

trữ số lượng dữ liệu nhỏ (dưới 500 hàng) và chỉ được dùng trong các hàm (functions), thủ

tục lưu trú (stored procedures), hay các lô dữ liệu (batch). Cú pháp biến bảng:

DECLARE @Tên_biến_bảng [AS] table

Page 88: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

88

© 2018 ngocminhtran.com

(

[Danh_sách_các_cột_của_bảng]

)

Trước tên biến bảng luôn đi kèm biểu tượng @. Ví dụ tạo một biến bảng varTable

DECLARE @varTable AS table ( ID int, Name text ) insert into @varTable (ID,Name) values (1,'Minh') select * from @varTable;

Ví dụ trên khai báo một biến tên varTable gồm hai cột ID và Name. Sau khi bảng được

khai báo, chúng ta có thể chèn dữ liệu vào varTable và xem nội dung bảng như các bảng

thông thường.

Các bảng tạm

Các bảng tạm có hai phạm vi là toàn cục và cục bộ. Bảng tạm phạm vi cục bộ chỉ tồn tại

trong một phiên (session) giao dịch và sẽ bị hủy khi phiên kết thúc; bảng tạm phạm vi

toàn cục tồn tại trong các phiên và kết thúc khi phiên tạo bảng và các tham chiếu đến các

phiên khác bị đóng.

Bảng tạm cục bộ khai báo với ký hiệu # trước tên bảng, bảng tạm toàn cục khai báo với

ký hiệu ## trước tên bảng.

Các bảng tạm được khai báo với lệnh CREATE TABLE như tạo bảng thông thường. Ví

dụ khai báo bảng cục bộ tempTable:

CREATE TABLE #tempTable ( ID int, Name text ) insert into #tempTable (ID,Name) values (1,'Minh')

Page 89: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

89

© 2018 ngocminhtran.com

select * from #tempTable;

Nhập môn lập trình trong SQL SERVER

T-SQL trong SQL Server cung cấp một tập các từ khóa cho phép chúng ta nhóm và thực

thi các lệnh như trong một ngôn ngữ lập trình.

Chú thích

Chúng ta có thể chú thích theo từng hàng bằng kí hiệu hai dấu gạch liên tiếp (--), ví dụ:

CREATE PROCEDURE displayGenres -- đây là hàng chú thích thứ nhất -- đây là hàng chú thích thứ hai AS BEGIN SELECT * FROM GenreReview.Genre END GO Và có thể chú thích nhiều hàng với cặp /*…*/, ví dụ:

CREATE PROCEDURE displayGenres /* đây là hàng chú thích thứ nhất đây là hàng chú thích thứ hai */ AS BEGIN SELECT * FROM GenreReview.Genre END GO

Các lệnh

Các lệnh T-SQL có thể được viết trong cặp từ khóa BEGIN…END. Cú pháp:

BEGIN

Lệnh T-SQL thứ nhất

Lệnh T-SQL thứ hai

Page 90: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

90

© 2018 ngocminhtran.com

Lệnh T-SQL thứ n

END

Ví dụ:

use Album; BEGIN DECLARE @varTable AS table ( ID int, Name text ) insert into @varTable (ID,Name) values (1,'Minh') select * from @varTable; END

Khai báo biến

Như phần trên, từ khóa DECLARE dùng để khai báo biến bảng – là một biến kiểu table.

Từ khóa này cũng có thể dùng để khai báo một biến kiểu bất kỳ như kiểu int, text, v.v…

(xem lại các kiểu dữ liệu cơ bản trong SQL Server ở phần II ). Lưu ý tên biến bắt đầu

bằng ký hiệu @. Cú pháp:

DECLARE @tên_biến AS kiểu_dữ_liệu

Ví dụ khai báo biến x kiểu int

BEGIN DECLARE @x as int END

Biến có thể được gán giá trị khời tạo trong khi khai báo, ví dụ:

BEGIN DECLARE @x as int = 5 END

Hay sau khi khai báo dùng từ khóa SET, ví dụ:

Page 91: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

91

© 2018 ngocminhtran.com

declare @x as int set @x = 5 set @x = @x + 5

In ra màn hình

Dùng từ khóa Print để in ra màn hình giá trị nào đó. Cú pháp:

PRINT giá_trị

Ví dụ:

BEGIN DECLARE @x as int = 1 PRINT @x END

Kết quả:

Cấu trúc điều kiện IF…ELSE

IF…ELSE thực thi một hay một nhóm lệnh T-SQL theo một điều kiện nào đó. Cú pháp:

IF điều_kiện

BEGIN

Nhóm lệnh T_SQL thứ nhất

END

ELSE

BEGIN

Nhóm lệnh T_SQL thứ hai

END

Thực thi nhóm lệnh T-SQL thứ nhất nếu thỏa điều kiện, ngược lại, thực thi nhóm lệnh T-

SQL thứ hai. Ví dụ:

BEGIN DECLARE @x as int = 1

Page 92: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

92

© 2018 ngocminhtran.com

if (@x > 0) begin print 'x > 0' end else begin print 'x <= 0' end END

Kết quả:

Cấu trúc lặp WHILE

Thực hiện lặp theo một điều kiện nào đó. Cú pháp:

WHILE điều_kiện

BEGIN

Các lệnh T-SQL

END

Ví dụ:

begin declare @x as int = 1 while (@x < 5) begin print @x + ' ' set @x = @x + 1 end end

Kết quả:

Page 93: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

93

© 2018 ngocminhtran.com

Trong WHILE có thể dùng kết hợp các từ khóa CONTINUE và BREAK. CONTINUE

bỏ qua một lần lặp theo điều kiện và di chuyển đến lần lặp kế tiếp. BREAK sẽ thoát khỏi

lệnh lặp theo điều kiện. Ví dụ dùng BREAK:

begin declare @x as int = 1 while (@x < 10) begin if (@x > 5) break else begin print @x end set @x = @x + 1 end end

Kết quả:

Ví dụ về CONTINUE

begin declare @x as int = 1 while (@x < 10) begin if (@x % 2 = 0) begin set @x = @x + 1 continue end else print @x set @x = @x + 1 end

Page 94: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

94

© 2018 ngocminhtran.com

end

Kết quả:

Hàm do người dùng định nghĩa (user-defined functions)

Hàm là một nhóm lệnh thực thi một chức năng nào đó và có thể được sử dụng nhiều lần

bởi ứng dụng hay các hàm khác. Hàm luôn có giá trị trả về và giá trị trả về có thể là:

một giá trị đơn bất kỳ kiểu int, text, v.v. Những hàm này gọi là hàm vô hướng

(scalar functions)

một giá trị kiểu bảng (table-valued functions).

Hàm vô hướng

Định nghĩa

Hàm vô hướng trả về một giá trị đơn bất kỳ kiểu int, text, v.v. Cú pháp:

CREATE FUNCTION Tên_hàm (Danh sách tham số) RETURNS Kiểu_dữ_liệu_trả_về AS

BEGIN RETURN Biểu thức có giá trị là Kiểu_dữ_liệu_trả_về

END

Tạo hàm vô hướng

Để tạo hàm vô hướng chúng ta mở rộng thư mục cơ sở dữ liệu, ví dụ Album, tìm đến và

mở rộng thư mục Programmability tìm đến thư mục Functions. Nhấn chuột phải vào

Functions chọn New > Scalar-valued Function:

Page 95: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

95

© 2018 ngocminhtran.com

Xóa tất cả nội dung trong trình soạn thảo hàm và nhập đoạn mã sau:

create function sumFunc (@x int, @y int) returns int as begin return @x + @y end GO

Đoạn mã trên tạo hàm tên sumFunc với hai tham số kiểu int là @x và @y. Hàm trả về

giá trị kiểu int là tổng @x và @y.

Thực thi truy vấn tạo hàm bằng cách nhấn Execute. Lưu hàm trên và đóng cửa sổ soạn

thảo hàm. Tìm trong thư mục Functions > Scalar-valued Function:

Page 96: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

96

© 2018 ngocminhtran.com

Chỉnh sửa hàm

Chúng ta có thể chỉnh sửa nội dung hàm đã định nghĩa bằng cách nhấn chuột phải vào

hàm đó và chọn Modify. Ví dụ hàm sumFunc:

Xóa hàm

Có thể xóa một hàm đã định nghĩa bằng cách nhấn chuột phải vào hàm đó chọn Delete, ví

dụ:

Page 97: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

97

© 2018 ngocminhtran.com

Sử dụng hàm

Hàm sau khi được tạo có thể được sử dụng trong ứng dụng. Ví dụ tạo một truy vấn mới

sử dụng hàm sumFunc như sau:

begin declare @a as int = 1 declare @b as int = 2 print dbo.sumFunc(3, 5) declare @c as int set @c = dbo.sumFunc(@a,@b) print @c end

Kết quả:

Page 98: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

98

© 2018 ngocminhtran.com

Hàm trả về giá trị kiểu bảng

Hàm Inline Table-valued Function

Hàm trả về tập dữ liệu từ một lệnh SELECT và hàm này còn được gọi là hàm Inline

Table-valued. Cú pháp:

CREATE FUNCTION Tên_hàm ( Danh sách tham số ) RETURNS TABLE AS RETURN ( SELECT... ) GO

Ví dụ tạo hàm getID như sau:

- Nhấn chuột phải tại thư mục Functions và chọn Inline Table-valued Function

- Xóa tất cả nội dung trong cửa sổ tạo hàm và thay bằng đoạn mã sau:

CREATE FUNCTION getID ( @id INT ) RETURNS TABLE AS RETURN ( SELECT * FROM GenreReview.Genre WHERE Genre.Id = @id ) GO

Page 99: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

99

© 2018 ngocminhtran.com

- Nhấn nút Execute để thực thi truy vấn tạo hàm getID. Lưu và đóng truy vấn vừa tạo.

Trong thư mục Functions mở thư mục Table-value Functions

- Sử dụng hàm getID bằng cách tạo một truy vấn mới với nội dung sau:

select * from dbo.getID(2);

Kết quả:

Hàm Multi-statement Table-valued Function

Nếu hàm kiểu Inline Table-valued Function chỉ đơn giản là trả về một bảng từ một lệnh

SELECT, hàm Multi-statement Table-valued Function cũng trả về một bảng nhưng có

chứa một hay nhiều lệnh T-SQL thực hiện một điều kiện nào đó. Cú pháp:

CREATE FUNCTION Tên_hàm ( Danh sách các tham số ) RETURNS Tên_biến_bảng TABLE ( Danh sách các cột của bảng ) AS BEGIN Các lệnh thực thi RETURN END

Ví dụ tạo hàm getID_Muti như sau:

- Nhấn chuột phải vào thư mục Functions chọn New > Muti-statement Table-valued

Function

Page 100: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

100

© 2018 ngocminhtran.com

- Xóa tất cả nội dung trong cửa sổ tạo hàm và thay bằng đoạn mã sau:

CREATE FUNCTION getID_Multi ( @id INT ) RETURNS @DataTable TABLE ( Id INT, Name NCHAR(100), SortOrder INT ) AS BEGIN WITH tempTable (id, name, sortorder) AS ( SELECT * FROM GenreReview.Genre WHERE Genre.Id = @id ) INSERT INTO @DataTable SELECT * FROM tempTable RETURN END GO

- Nhấn nút Execute để thực thi truy vấn tạo hàm getID_Multi. Lưu và đóng truy vấn vừa

tạo. Trong thư mục Functions mở thư mục Table-value Functions

Page 101: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

101

© 2018 ngocminhtran.com

- Sử dụng hàm getID bằng cách tạo một truy vấn mới với nội dung sau:

select * from dbo.getID_Multi(2);

Kết quả:

Xóa và chỉnh sửa các hàm trả về giá trị bảng giống với các hàm vô hướng.

Thủ tục thường trú (stored procedures)

Định nghĩa

Thủ tục thường trú, giống như hàm, là một nhóm lệnh thực thi một chức năng nào đó và

có thể được sử dụng nhiều lần bởi ứng dụng. Điểm khác biệt giữa thủ tục thường trú và

hàm là thủ tục thường trú không trả về một giá trị (do đó không có từ khóa RETURN

giống hàm). Cú pháp định nghĩa một thủ tục thường trú:

CREATE PROCEDURE Tên_thủ_tục Danh sách các tham số AS BEGIN Các lệnh thực thi END GO Chú ý các tham số không phải đặt trong cặp ngoặc đơn giống hàm.

Tạo thủ tục

Để tạo một thủ tục thường trú chúng ta thực hiện như sau:

Page 102: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

102

© 2018 ngocminhtran.com

- Trong thư mục Programmability tìm đến thư mục Stored Procedures và nhấn chuột

phải vào thư mục này chọn New Stored Procedure:

- Trong cửa sổ soạn thảo nội dung chúng ta xóa hết nội dung mặc định và thay bằng nội

dung sau:

CREATE PROCEDURE sumProc @x int, @y int AS BEGIN print @x+@y END GO

- Thực thi truy vấn tạo thủ tục sumProc bằng cách nhấn nút Execute. Lưu và đóng truy

vấn vừa tạo. Xem thủ tục vừa tạo trong thư mục Stored Procedures:

Sử dụng thủ tục

Chúng ta có thể sử dụng thủ tục thường trú bằng lệnh EXEC. Ví dụ tạo một truy vấn sử

dụng thủ tục sumProc có nội dung như sau:

begin declare @a int = 1

Page 103: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

103

© 2018 ngocminhtran.com

declare @b int = 2 exec dbo.sumProc 2,3 exec dbo.sumProc @a, @b end

Chú ý các tham số không phải đặt trong cặp ngoặc đơn giống hàm. Kết quả:

Ví dụ về thủ tục thường trú không chứa tham số:

CREATE PROCEDURE displayGenres --không chứa tham số AS BEGIN SELECT * FROM GenreReview.Genre END GO

Tạo một truy vấn dùng thủ tục này:

exec dbo.displayGenres;

Xóa hay chỉnh sửa các thủ tục thường trú bằng cách nhấn chuột phải vào thủ tục thường

trú và chọn Delete hay Modify.

Page 104: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

104

© 2018 ngocminhtran.com

Triggers

Định nghĩa và cú pháp

Trigger là một tập các lệnh SQL dùng để thực hiện một chức năng nào đó. Trigger được

xem là một kiểu thủ tục thường trú đặc biệt, nhưng khác thủ tục hay hàm, trigger thực thi

chỉ khi một người dùng hay ứng dụng cố gắng chỉnh sửa dữ liệu bằng ngôn ngữ DML

(Data Manipulation Language) gồm các thao tác như INSERT, UPDATE, hay DELETE

trên các bảng hay views.

Trigger bao gồm các kiểu:

AFTER: thực thi sau khi xuất hiện một sự kiện DML.

INSTEAD OF: nếu một thao tác INSERT xuất hiện, trigger INSTEAD OF sẽ thực

thi tại nơi dữ liệu được chèn.

CLR: Vì SQL Server tích hợp với .NET Framework CLR nên chúng ta có thể tạo

CLR triggers bằng các ngôn ngữ .NET.

Cú pháp tạo một trigger AFTER như sau:

CREATE TRIGGER Lược_đồ_cơ_sở_dữ_liệu.Tên_trigger ON Lược_đồ_cơ_sở_dữ_liệu.Tên_bảng AFTER [INSERT| DELETE | UPDATE] AS BEGIN END GO

Trigger trên sẽ thực thi sau khi thao tác INSERT, DELETE hay UPDATE xảy ra. Ví dụ

định nghĩa một trigger như sau:

CREATE TRIGGER GenreReview.Insert_Check ON GenreReview.Genre AFTER INSERT AS BEGIN PRINT 'CHÈN THÀNH CÔNG' END GO

Trigger Insert_Check sẽ thực thi sau khi một hàng dữ liệu được chèn vào bảng Genre.

Page 105: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

105

© 2018 ngocminhtran.com

Tạo trigger

Chúng ta có thể tạo trigger (kiểu AFTER) trong SQL Server Management Studio bằng

cách chọn và mở rộng một bảng bất kỳ, ví dụ bảng Genre, tìm đến thư mục Triggers.

Nhấn chuột phải vào thư mục Triggers chọn New Trigger:

Xóa tất cả nội dung mặc định trong cửa sổ soạn thảo trigger và thay bằng nội dung sau:

CREATE TRIGGER GenreReview.Insert_Check ON GenreReview.Genre AFTER INSERT AS BEGIN PRINT 'CHÈN THÀNH CÔNG' END GO

Thực thi truy vấn tạo trigger bằng cách nhấn nút Execute!. Lưu và đóng cửa sổ truy vấn

tạo trigger. Có thể kiểm tra lại trigger trong thư mục Triggers của bảng Genre:

Page 106: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

106

© 2018 ngocminhtran.com

Tạo một truy vấn mới thêm vào bảng Genre một hàng mới như sau:

USE Album; INSERT INTO GenreReview.Genre (Id,Name,SortOrder) VALUES (6, 'Zumba', 20);

Thực thi truy vấn, kết quả:

Chúng ta thấy rằng trigger Insert_Check đã thực thi sau khi chèn thành công.

Có thể xóa hay chỉnh sửa các triggers bằng cách nhấn chuột phải vào triggers và chọn

Delete hay Modify:

Quản lý theo chỉ mục (indexes)

Định nghĩa và cú pháp

Chỉ mục (index) có thể được dùng trong các bảng giúp cho việc tìm kiếm hay truy vấn dữ

liệu được nhanh hơn. Cú pháp tạo một chỉ mục:

Page 107: Ph Nh Server - WordPress.com · SQL Server có nhiều phiên bản (versions) khác nhau và hiện tại là SQL Server 2017. ... Có thể tham khảo thêm bài viết https:

107

© 2018 ngocminhtran.com

CREATE INDEX Tên_chỉ_mục

ON Tên_bảng (Danh_sách_các_cột);

Nếu muốn tạo một chỉ mục duy nhất, có thể dùng cú pháp:

CREATE UNIQUE INDEX Tên_chỉ_mục

ON Tên_bảng (Danh_sách_các_cột);

Ví dụ tạo một chỉ mục trên cột Name của bảng Genre như sau:

use Album; create index idx_name on GenreReview.Genre (Name);

Dùng chỉ mục giúp việc truy vấn và tìm kiếm nhanh nhưng sẽ làm thao tác cập nhật dữ

liệu chậm hơn so với khi không có chỉ mục. Do đó, chỉ sử dụng chỉ mục cho những cột

thường xuyên dùng để truy vấn hay tìm kiếm.

Xóa chỉ mục

Dùng lệnh DROP để xóa chỉ mục theo cú pháp:

DROP INDEX Tên_bảng.Tên_chỉ_mục;

Ví dụ:

use Album; drop index GenreReview.Genre.idx_name