Giới thiệu Transact-SQL (T-SQL)
- 18-05-2022
- Toanngo92
- 0 Comments
Mục lục
Giới thiệu về Transact SQL (T-SQL)
SQL là một ngôn ngữ chung được sử dụng trong thế giới cơ sở dữ liệu. Hầu hết các sản phẩm RDBMS hiện đại sử dụng một số loại phương ngữ SQL làm ngôn ngữ truy vấn chính của chúng . SQL có thể được sử dụng để tạo hoặc hủy các đối tượng như bảng trên máy chủ cơ sở dữ liệu và để thao tác với các đối tượng đó, chẳng hạn như thêm, sửa, xóa dữ liệu vào chúng hoặc truy xuất dữ liệu từ chúng.
Transact-SQL (T-SQL) là một phiên bản SQL được Microsoft kế thừa và phát triển, được gọi là T-SQL, ngôn ngữ này được triển khai để thực hiện một cách chuẩn hóa giúp giao tiếp với cơ sở dữ liệu.
Transact-SQL là ngôn ngữ mạnh mẽ cung cấp các tính năng như kiểu dữ liệu (data types), đối tượng tạm thời (temporary objects) và thủ tục lưu trữ (store procedure) mở rộng. Con trỏ có thể cuộn, xử lý có điều kiện, kiểm soát giao dịch, ngoại lệ và xử lý lỗi cũng được hỗ trợ bởi Transact-SQL.
T-SQL trong SQL Server 2019 cải thiện hiệu năng hơn so với các phiên bản trước, tăng các tính năng và hỗ trợ nhiều tính năng nâng cao. Các cải tiến bao gồm các chức năng vô hướng, phân trang, trình tự, phân bổ siêu dữ liệu và hỗ trợ xử lý lỗi tốt hơn…
Các ví dụ phía dưới đều sử dụng AdventureWorks2019, cài đặt AdventureWorks2019 vào máy để test các ví dụ.
Xét câu lệnh Transact-SQL phía dưới, là câu lệnh SELECT, được sử dụng để lấy ra dữ liệu của cột loginID của bảng employee với JobTitle là ‘Design Engineer’ trong bảng Employee:
USE AdventureWorks2019
SELECT LoginID FROM HumanResources.Employee
WHERE JobTitle = 'Design Engineer'
T-SQL bao gồm nhiều phần tử cú pháp được sử dụng bởi hoặc ảnh hưởng đến hầu hết các câu lệnh. Các phần tử này bao gồm kiểu dữ liệu, vị từ, biến hàm, biểu thức, điều khiển luồng, comments và batch seperators.
Danh mục các kiểu câu lệnh T-SQL
SQL Server hỗ trợ 3 kiểu câu lệnh T-SQL là DDL,DML và DCL
Data Defination Language (DDL)
DDL, là một phần của RDBMS, sử dụng để định nghĩa và quản lý tất cả thuộc tính của dữ liệu, bao gồm bố cục hàng, định nghĩa cột, cột khóa chính, ví trí file, cách lưu trữ. Các caua lệnh DDL được sử dụng để xây dựng và chỉnh sửa cấu trúc các bảng và các đối tượng như views triggers, store procedures… Với mỗi đối tượng, có các từ khóa CREATE, ALTER , DROP . Ví dụ: CREATE TABLE, ALTER TABLE, DROP TABLE
Hầu hết các câu lệnh DDL đều tuân thủ theo một tiêu chuẩn, với object_name là tên bảng, view, trigger, store procedure … như sau:
- CREATE object_name
- ALTER object_name
- DROP object_name
Data Manipulation Language (DML)
DML sử dụng để select ( lấy ra), insert (thêm vào), update (cập nhật) hoặc delete (xóa) dữ liệu trong objects (đối tượng) được định nghĩa bằng DDL. Tất cả người dùng trong database có thể sử dụng các câu lệnh này trong các hoạt động trên cơ sở dữ liệu.
Các câu lệnh DML có bao gồm các từ khóa như sau:
- SELECT
- INSERT
- UPDATE
- DELETE
Data Control Language (DCL)
Dữ liệu là một phần quan trọng của database, vì vậy cần thực hiện các bước thích hợp để kiểm tra xem không có người dùng không hợp lệ nào truy cập vào dữ liệu. Ngôn ngữ điều khiển dữ liệu được sử dụng để điều khiển quyền trên các đối tượng cơ sở dữ liệu. Quyền được kiểm soát bằng cách sử dụng các câu lệnh GRANT, REVOKE, DENY. Các câu lệnh DCL cũng được sử dụng để bảo mật cơ sở dữ liệu. Ba câu lệnh DCL cơ bản như sau:
- GRANT (gán)
- REVOKE (thu hồi)
- DENY (từ chối)
Data types (kiểu dữ liệu)
Data type là một thuộc tính định nghĩa kiểu của dữ liệu hoặc đối tượng có thể chứa. Data types phải được cung cấp cho columns (cột), parameters (tham số), variables (biến), function trả về giá trị (function return data values), và sctored procedures có return. T-SQL bao gồm một số các data types như varchar,text,int … Tất cả dữ liệu được lưu trữ trong SQL Server bắt buộc phải tương thích với mộ trong những data types cơ bản.
Các objects có data types:
- Columns ( cột ) biểu diễn trong tables và views
- parameters trong stored procedures
- Variables (biến)
- function có trả về một hoặc nhiều giá trị với kiểu dữ liệu xác định
- Stored procedures có trả về code thuộc về kiểu dữ liệu integer
SQL Server hỗ trợ 3 kiểu data types như sau:
System-defined data types
Kiểu dữ liệu này được cung cấp bởi SQL Server, biểu diễn ở bảng dưới như sau:
Danh mục | Data type | Cột của data type này |
Exact Numerics (số chính xác/ số tự nhiên) | int | Chiếm 4 bypes vùng nhớ, sử dụng để lưu trữ giá trị integer, có thể lưu trữ giá trị từ -2^31(-2,147,483,648) tới 2^31-1 (2,147,483,647) |
smallint | Chiếm 2 bytes vùng nhớ, có thể lưu trữ giá trị integer từ -32.768 tới 32m.767 | |
tinyint | Chiếm 1 byte vùng nhớ, chứa giá trị từ 0 tới 255 | |
bigint | Chiếm 8 bytes vùng nhớ. Nắm giữ dữ liệu từ -2^63 tới 2^63-1 | |
numeric | có độ chính xác và tỉ lệ cố định | |
money | chiếm 8 byte không gian bộ nhớ. Biểu thị các giá trị dữ liệu tiền tệ nằm trong khoảng từ -2 ^ 63/1000 đến 2 ^ 63-1 | |
Approximate Numerics (số gần đúng/số thực) | float | Chiếm 8 bytes vùng nhớ. Biểu diễn số đằng sau dấu chấm động từ -1.79E+308 tới 1.79E+38 |
real | Chiếm 4 bytes vùng nhớ. Biểu diễn số đằng sau dấm chấm động từ -3.40E+38 tới 3.40E+38 | |
Date and Time | datetime | Biểu diễn date time, chiếm 8 bytes trong vùng nhớ ( 2 lần 4 bytes – integer) |
smalldatetime | Biểu diễn date time | |
Character String | char | Lưu trữ dữ liệu ký tự với độ dài xác định và non-Unicode |
varchar | Lưu trữ dữ liệu ký tự có độ dài biến thiên và non-Unicode với tối đa 8,000 ký tự | |
text | Lưu trữ dữ liệu ký tự với độ dài biến thiên và non-Unicode với độ dài tối đa là 2^31 – 1(2,147,483,647) ký tự | |
nchar | Lưu trữ ký tự Unicode với độ dài xác định | |
nvarchar | Lưu trữ dữ liệu ký tự unicode biến thiên. | |
Other Data Types | timestamp | Chiếm 8 bytes vùng nhớ. Giá trị lưu trữ có thể được tự động tạo, các giá trị số nhị phân duy nhất được tạo ra và lưu trữ trong database mô phỏng unix timestamp thời gian thực. |
binary(n) | Lưu trữ dữ liệu nhị phân với độ dài xác định , tối đa 8000 bytes. | |
varbinary(n) | Lưu trữ dữ liệu nhị phân với độ dài biến thiên, tối đa 8000 bytes. | |
image | Lưu trữ giá trị nhị phân biến thiên với độ dài tối đa 2^30-1 (1,073,741,823) bytes. | |
uniqueidentifier | Chiếm 16bytes vùng nhớ, sẽ tự động tạo ra một giá trị duy nhất khái niejem là globally unique identifier (GUID) |
Alias data types (kiểu dữ liệu bí danh)
Những kiểu dữ liệu này dựa vào những kiểu dữ liệu hệ thống cung cấp. Kiểu dữ liệu bí danh được sử dụng khi nhiều bảng lưu trữ cùng một kiểu dữ liệu trong một cột và có các đặc điểm tương tự như độ dài, khả năng null và kiểu dữ liệu. Trong những trường hợp như vậy, một kiểu dữ liệu bí danh có thể được tạo để có thể được sử dụng phổ biến bởi tất cả các bảng này.
Kiểu dữ liệu bí danh có thể được tạo thông qua câu lệnh CREATE TYPE. Cú pháp của câu lệnh CREATE TYPE như sau:
CREATE TYPE [schema_name.]type_name FROM base_type [NULL/NOTNULL];
Ví dụ:
CREATE TYPE usertype from varchar(20) NOT NULL
User-defined types (kiểu dữ liệu người dùng tự định nghĩa)
Ngời dùng có thể tự định nghĩa kiểu dữ liệu bằng cách sử dụng ngôn ngữ lập trình hỗ trợ bởi .NET Framework.
Transact-SQL Language Elements
Các phần tử ngôn ngữ Transact-SQL được sử dụng trong SQL Server 2019 để làm việc trên dữ liệu đã nhập trong cơ sở dữ liệu SQL Server. Các phần tử ngôn ngữ Transact-SQL bao gồm các vị từ (predicates), toán tử (operators),biến (variables), hàm (functons), biểu thức (expressions), kiểm soát luồng (control of flow), lỗi (error) và giao dịch (transactions), comments và dấu phân tách hàng loạt (batch seperators).
Predicates (vị từ)
Predicates (vị từ) có thể hiểu là một biểu thức logic được sử dụng để đánh giá xem biểu thức trả về TRUE,FALSE hay UNKNOWN.
Các mệnh đề trong Transact-SQl sử dụng trong các trường hợp sau:
- Xác định xem một giá trị đã chỉ định có khớp với bất kỳ giá trị nào trong một truy vấn con hoặc một danh sách hay không
- Chỉ định một loạt các giá trị để kiểm tra
- Được sử dụng để so khớp các ký tự với một mẫu được chỉ định
- Tìm kiếm đối sánh chính xác hoặc ít chính xác hơn với các từ và cụm từ đơn lẻ, các từ trong một khoảng cách nhất định với nhau hoặc đối sánh có trọng số
ví dụ các mệnh đề predicates:
Predicate | Ví dụ |
IN | SELECT PersonType, Title, FirstName,LastName FROM AdventureWorks2019.Person.Person WHERE PersonType IN (‘EM’,’SC’) |
BETWEEN | SELECT BusinessEntityID, NationalIDNumber, LoginID, JobTitle, HireDate FROM AdventureWorks2019.HumanResources.Employee WHERE HireDate BETWEEN ’01-01-2010′ AND ’01-01-2013′ |
LIKE | SELECT DepartmentID, Name, GroupName, ModifiedDate FROM AdventureWorks2019.HumanResources.Department WHERE Name LIKE ‘P%’ |
CONTAINS | SELECT * FROM AdventureWorks2019.Person.Address WHERE CONTAINS (AddressLine1,’Street’) |
Operators (toán tử)
Các toán tử được sử dụng để thực hiện phép tính số học, so sánh, nối hoặc gán các giá trị. Ví dụ: dữ liệu có thể được kiểm tra để xác minh rằng cột COUNTRY cho dữ liệu khách hàng được điền (hoặc có giá trị NOT NULL). Trong các truy vấn, bất kỳ ai có thể xem dữ liệu trong bảng yêu cầu toán tử đều có thể thực hiện các thao tác. Các quyền thích hợp được yêu cầu trước khi dữ liệu có thể được thay đổi thành công. SQL Server có bảy loại toán tử:
Operator | Description | Example |
Comparison | So sánh một giá trị với một giá trị khác một biểu thức | =,<,>,>=,<=,!=,!> |
Logical | Kiểm tra kết quả đúng sai (luận lý) của một điều kiện | AND, OR, NOT |
Arithmetic | Thực hiện các phép toán số học như cộng, trừ, nhân và chia | +,-,*,/,% |
Concatenation | Kết hợp 2 chuỗi thày một chuỗi | + |
Assignment | Gán giá trị cho một biến | = |
Thứ tự ưu tiên của các toán tử:
Thứ tự | Toán tử |
1 | () Parentheses |
2 | *, / , % |
3 | + , – |
4 | = , < , > , >= , <= , != , !> |
5 | NOT |
6 | AND |
7 | BETWEEN, IN , CONTAINS, LIKE, OR |
8 | = |
Ví dụ về thứ tự ưu tiên của tooán tử:
DECLARE @Number int;
SET @Number = 2 + 2 * (4 + (5 - 3))
SELECT @Number
Kết quả sẽ hiển thị ra 14, với thứ tự thực hiên như sau:
1. 2 + 2*(4+(5-3))
2. 2 + 2*(4+2)
3. 2 + 2*6
4. 2 + 12
5. 14
Functions (hàm)
Một function là một tập hợp các mệnh đề, câu lệnh T-SQL bao gồm một tập hợp các hàm, cá hàm rất hữu dụng để tính toán hoặc làm việc với dữ liệu. Trong SQL, hàm làm việc với dữ liệu, nhóm dữ liệu, để trả về giá trị yêu cầu, sau đó có thể sử dụng mệnh đề SELECT để lấy dữ liệu trả ra từ biểu thức
có 4 kiểu functions trong SQL Server như sau:
Rowset functions
trong transact-SQL, hàm rowet được sử dụng để trả về một đối tượng có thể được sử dụng thay cho tham chiếu bảng. Ví dụ: OPENDATASOURCE, OPENQUERY, OPENROWSET, và OPENXML là các rowset function
Aggregate functions
T-SQL cung cấp một tập hợp các functions để hỗ trợ tóm tắt khối lượng lớn dữ liệu ví dụ: SUM, MIN, MAX, AVG, COUNT, COUNTBIG …
Ranking functions
Xử lý nhiều tác vụ, chẳng hạn như tạo mảng, tạo số thứ tự, tìm thứ hạng, v.v. có thể được thực hiện một cách dễ dàng hơn và nhanh hơn bằng cách sử dụng các chức năng xếp hạng. Ví dụ: RANK,DENSE_RANK,NTILE, ROW_NUMBER là các ranking functions.
Scalar functions
Trong các hàm vô hướng, đầu vào là một giá trị duy nhất và đầu ra nhận được cũng là một giá trị duy nhất
Một số hàm scalar trong SQL:
Function type | Mô tả | Ví dụ |
Conversion function | Hàm chuyển đổi được sử dụng để chuyển đổi giá trị của một kiểu dữ liệu này sang một kiểu dữ liệu khác. Ngoài ra, nó có thể được sử dụng để lấy định dạng ngày tháng đặc biệt. | CONVERT |
Date and time function | Hàm datetime sử dụng để làm việc với dữ liệu date times, hữu dụng để tính toán thời gian | GETDATE, SYSDATETIME, GETUTCDATE, DATEADD, DATEDIFF, YEAR, MONTH, DAY |
Mathematical function | Các hàm toán học thực hiện các phép toán đại số trên các giá trị số. | RAND, ROUND, POWER, ABS, CELLING, FLOOR |
System function | SQL Server cung cấp các hàm hệ thống trả về metadata hoặc configuration settings | HOST_ID,HOST_NAME,ISNULL |
String function | Các hàm chuỗi sử dụng để vơi input như char hoặc nvarchar. Output có thể là chuỗi hoặc giá trị số | SUBSTRING, LEFT, RIGHT, LEN, DATALENGTH, REPLACE, REPLICATE, UPPER, LOWER, RTRIM, LTRIM |
Ngoài ra còn có một số scalar functions khác trong SQL Server như cursor functions, logical functions, metadata functions, security functions …
Variables (biến)
Biến là một đối tượng có thể lưu trữ giá trị dữ liệu. Trong T-SQL, biến có thể đưojc chia thành local variable và global variable.
Trong T-SQL local variable được tạo và sử dụng để lưu trữ tạm khi các câu lệnh SQL đưojc thực thi. Dữ liệu có thể đưojc truyền qua câu lệnh SQL thông qua local variables. Tên của local variable luôn có tiền tố (prefix) là từ khóa ‘@’.
Ví dụ:
DECLARE @Search NVARCHAR(30)
SET @Search = N'hello'
Trong các phiên bản trước của SQL Server, đã tồn tại một khái niệm gọi là biến toàn cục, dùng để chỉ các biến tích hợp sẵn được hệ thống xác định và duy trì. Trong SQL Server 2019, các thay thế được phân loại như các hàm. Chúng được bắt đầu bằng hai dấu ‘@’. Giá trị trả về của các hàm này có thể được truy xuất bằng một truy vấn SELECT đơn giản.
Ví dụ
SELECT @@LANGUAGE as 'Language'
Chúng sẽ trả về ngôn ngữ đươc sử dụng của SQL SErver
Một số các hàm có thể bắt gặp:
- @@DATEFIRST
- @@LANGUAGE
- @@LOCK_TIMEOUT
- @@MAX_CONNECTIONS
- @@SERVERNAME
- @@VERSION
Expression (biểu thức)
Một biểu thức là kết hợp của các định danh (identifier), giá trị (values) và toán tử (operators) mà SQL Server có thể đánh giá để nhận được kết quả. Các biểu thức có thể được sử dụng ở một số nơi khác nhau khi truy cập hoặc thay đổi dữ liệu.
Ví dụ về một biểu thức kết hợp giữa mệnh đề SELECT, lấy ra current year và tính toán next year
USE AdventureWorks2019
SELECT SalesOrderID, CustomerID, SalesPersonID, TerritoryID, YEAR(OrderDate) AS CurrentYear, YEAR(OrderDate) + 1 AS NextYear FROM Sales.SalesOrderHeader
Control of Flow, Errors, Transactions
Mặc dù transact-SQL chủ yếu là một ngôn ngữ truy xuất dữ liệu, nó hỗ trợ kiểm soát các luồng câu lệnh (control of flow) để thực thi và tìm lỗi.Luồng kiểm soát (control of flow) xác định luồng thực thi của câu lệnh transact-SQL, khối câu lệnh (block of codes), hàm do người dùng định nghĩa (user-defined functions), store procedures (thủ tục lưu trữ).
Các control of flow thường gặp trong T-SQL
Control-of-Flow Statement | Description |
IF … ELSE | Điều khiển phân nhánh dựa trên điều kiện logic |
WHILE | Lặp lại các lệnh hoặc khối câu lệnh khi điều kiện kiểm tra còn đúng |
BEGIN … END | Định nghĩa phạm vi của một khối lệnh T-SQL |
TRY … CATCH | Định nghĩa cấu trúc cho việc xử lý các ngoại lệ và lỗi |
BEGIN TRANSACTION | Đánh dấu một khối câu lệnh là một phần của giao dịch rõ ràng |
Ví dụ về sử dụng IF ELSE trong T-SQL:
IF DATENAME(weekday, GETDATE()) IN (N'Saturday',N'Sunday') SELECT 'It is a Weekend';
ELSE SELECT 'It is Weekday';
Comments
Comments là chuỗi văn bản mô tả, còn được gọi là chú thích, trong mã chương trình sẽ bị trình biên dịch bỏ qua. Các comments có thể được chèn vào bên trong mã nguồn của một câu lệnh, một khối lệnh hoặc một store procedures. Comments giải thích mục đích của chương trình, các điều kiện thực hiện đặc biệt và cung cấp thông tin lịch sử sửa đổi…. Cú pháp:
-- Day la comment inline
-- Day la comment inline
/*day la comment
khoi lenh*/
Batch Separators
Batch (gói lệnh) là một tập hợp một hoặc nhiều câu lệnh T-SQL được gửi đi trong một lần ứng dụng thực thi. Các câu lệnh trong T-SQL trong một batch được đóng gói lại thành một đơn vị thực thi ( 1 lần thực thi ), gọi là execution plan. Tiến trình thực thi các tập câu lệnh bên trong batch gọi là batch processing.
Một batch seperator ( phân tách gói lệnh) được kiểm soát bằng SQL Server client tools như là SSMS để thực thi câu lệnh. Ví dụ, bạn xác định GO như một batch seperator trong SSMS.
Ví dụ batch seperator:
USE AdventureWorks2019
SELECT * FROM HumanResources.Employee
GO
-- cau lenh tiep theo
Sets và Predicate Logic (tập hợp và logic vị từ)
Sets và Predicate Logic là 2 các nguyên tắc cơ bản toán học được sử dụng trong SQL Server 2019. Cả hai lý thuyết này đều được sử dụng để truy vấn dữ liệu trong SQL Sever 2019
Set Theory (lý thuyết tập hợp)
Set theory (lý thuyết tập hợp) là một nền tảng toán học được sử dụng trong mô hình cơ sở dữ liệu quan hệ. Tập hợp là một tập hợp các đối tượng riêng biệt được coi là một tổng thể. Ví dụ, tất cả các nhân viên trong một bảng Employee có thể được coi là một tập hợp.
Set Theory Applications | Application in SQL Server Queries |
Hành động trên toàn bộ tập hợp cùng một lúc | Truy vấn toàn bộ bảng cùng một lúc |
Xử lý, khai báo dựa trên tập hợp | Sử dụng các thuộc tính trong máy chủ SQL để truy xuất dữ liệu cụ thể |
Các phần tử trong tập hợp phải là duy nhất | Định nghĩa khóa duy nhất cho bảng |
Không có hướng dẫn sắp xếp | Kết quả của truy vấn không được truy xuất theo bất kỳ thứ tự nào |
Một trong những toán tử tập hợp là toán tử INTERSECT(giao điểm). Nó trả về các hàng riêng biệt được tạo ra bởi cả toán tử truy vấn đầu vào bên trái và bên phải.
Ví dụ về sử dụng INTERSECT:
USE AdventureWorks2019
GO
SELECT ProductID
FROM Production.Product
INTERSECT
SELECT ProductID
FROM Production.WorkOrder;
Predicate Logic (logic vị từ)
Xem thêm khái niệm predicate logic tại đây: https://vi.wikipedia.org/wiki/Logic_b%E1%BA%ADc_nh%E1%BA%A5t
Predicate logic là một khung toán học bao gồm các bài kiểm tra logic đưa ra một kết quả. Kết quả luôn được hiển thị là true hoặc false. Trong T-SQL, các biểu thức như biểu thức WHERE và CASE dựa trên logic vị từ. Logic vị từ cũng được sử dụng trong các tình huống khác trong T-SQL
Một số Predicate logic trong T-SQL như sau:
- thực thi tính bảo mật của dữ liệu bằng cách sử dụng ràng buộc CHECK
- Kiểm soát luồng sử dụng câu lệnh IF
- Nối các bảng bằng bộ lọc ON
- Lọc dữ liệu trong các truy vấn bằng mệnh đề WHERE và HAVING
- Cung cấp logic có điều kiện cho các biểu thức CASE
- Xác định truy vấn con
Thứ tự logic của các toán tử trong câu lệnh SELECT
Cùng với cú pháp của các phần tử SQL Server khác nhau, người dùng SQL Server cũng phải biết quy trình thực hiện toàn bộ truy vấn như thế nào. Quy trình này là một quy trình logic phá vỡ truy vấn và thực hiện truy vấn theo một tuần tự được xác định trước. Câu lệnh SELECT là một truy vấn sẽ được sử dụng để giải thích quy trình logic thực hiện truy vấn.
Cú pháp câu lệnh SELECT:
SELECT <select list>
FROM <table source>
WHERE <search condition>
GROUP BY <group by list>
HAVING <search condition>
ORDER BY <order by list>
Mô tả các thành phần trong câu lệnh SELECT:
Thành phần | Mô tả |
SELECT <select list> | Định nghĩa những cột được lấy ra |
FROM <table source> | Định nghĩa bảng được truy vấn |
WHERE <search condition> | Lọc các hàng bằng predicate |
GROUP BY <group by list> | Sắp xếp các hàng theo nhóm |
HAVING <search condition> | Lọc nhóm bằng predicate |
ORDER BY <order by list> | Sắp xếp output. |
Xét ví dụ phía dưới:
USE AdventureWorks2019
SELECT SalesPersonID,YEAR(OrderDate) AS OrderYear FROM
Sales.SalesOrderHeader
WHERE CustomerID=30084
GROUP BY SalesPersonID, YEAR(OrderDate)
HAVINg COUNT(*) > 1
ORDER BY SalesPersonID,OrderYear;
Trong ví dụ phía trên, tuần tự thực thi của câu lệnh SELECT như sau:
- Mệnh đề FROM được đánh giá để xác định bảng nguồn sẽ được truy vấn
- Mệnh đề WHERE được đánh giá để lọc các hàng trong bảng nguồn, bộ lọc này được định nghĩa bởi vị từ được đề cập sau mệnh đề WHERE
- Tiếp theo, mệnh đề GROUP BY được đánh giá. Mệnh đề này sắp xếp các dữ liệu đã được lọc trong mệnh đề WHERE
- Mệnh đề HAVING được đánh giá
- Mệnh đề SELECT được thực thi để chỉ ra những cột sẽ xuất hệt ở kết quả truy vấn
- Cuối cùng, câu lệnh ORDER BY được thực thi để hiển thị output
USE AdventureWorks2019
-- thu tu thuc thi cua cau lenh select
5.SELECT SalesPersonID,YEAR(OrderDate) AS OrderYear FROM
1.Sales.SalesOrderHeader
2.WHERE CustomerID=30084
3.GROUP BY SalesPersonID, YEAR(OrderDate)
4.HAVINg COUNT(*) > 1
6.ORDER BY SalesPersonID,OrderYear;
Bài tập
1. Sử dụng Query Editor để thực thi truy vấn, đảm bảo kết nối với server đã được thiết lập.
Bước tiêếp theo, sử dụng AdventureWorks2019 khởi tạo và thực thi các câu lệnh:
- Hiển thị tất cả territory name trong bảng Sales.SalesTerritory.
- Hiể thị ất cả product description trong bảng Production.ProductDescription.
- Hiể thị dữ liệu các cột ProductID,Name, ProductNumber trong bảng Production.Product
- Hiển thị bonus, commission percentage, sales ở năm trước trong bảng Sales.SalesPerson mà có territories (lãnh thổ) có TerritoryID nằm giữa 1 và 3
2. Đoạn mã sau để thêm năm ngày vào một ngày nhất định:
SET NOCOUNT ON DECLARE @startdate DATETIME, @adddays INT; SET @startdate = 'January 10,1900 12:00 AM'; SET @adddays = 5; SET NOCOUNT OFF SELECT @startdate + 1.25 AS 'Start Date', @startdate + @adddays AS 'Add Date';
Tạo mã SQL sẽ trừ sáu ngày kể từ ngày được cho.
3. Sử dụng các toán tử so sánh để thực thi các tác vụ sau:
- Hiển thị tất cả các bản ghi từ Person.Address có city là Montreal
- Hiển thị tất cả bản ghi từ bảng HumanResources.Department mà có giá trị trong DepartmentID lớn hơn hoặc bằng 13
- Hiển thị toàn bộ bản ghi trong bảng Production.ProductCategory mà không có giá trị productCategoryID bằng 3 hoặc bằng 2