Trong chương này, bạn sẽ tìm hiểu chi tiết về các toán tử SQL bắt đầu với các kiểu Toán tử SQL, cách sử dụng chúng và các ví dụ trong SQL.
Toán tử SQL
Toán tử SQL là một dấu hiệu hoặc ký hiệu có thể thực hiện thao tác giữa các toán hạng hoặc giữa hai hoặc nhiều hơn hai biểu thức.
Các toán tử SQL có thể được chia thành các loại sau:
- Toán tử số học
- Toán tử gán
- Toán tử Bitwise
- Toán tử so sánh
- Toán tử logic
- Toán tử phân giải phạm vi
- Toán tử nối chuỗi
- Toán tử đơn nguyên
- Đặt toán tử
Hãy để chúng tôi thảo luận từng bước từng toán tử được liệt kê ở trên.
Toán tử số học SQL
Để thực hiện một phép toán trên một hoặc nhiều biểu thức của kiểu dữ liệu số, như phép cộng, phép trừ, phép nhân, phép chia và phép chia modulo, thì chúng ta sử dụng một toán tử số học.
Danh sách các toán tử số học được đưa ra dưới đây,
Operator
|
Meaning
|
Example
|
+
|
Addition
|
15 + 2 = 17
|
–
|
Subtraction
|
15 – 2 = 13
|
*
|
Multiplication
|
15 * 2 = 30
|
/
|
Division
|
15 / 2 = 7
|
%
|
Modulo
|
15 % 2 = 1 (Reminder)
|
Ví dụ 1.1
Bằng cách sử dụng mã ở trên, bạn sẽ nhận được đầu ra sau,
Ví dụ 1.2
Giả sử tôi có một bảng tên là TempTable trong đó tôi có 2 cột như a và b và tôi đã chèn một số giá trị của a và b như sau,
Bằng cách sử dụng truy vấn ở trên, bạn sẽ nhận được #TempTable mới, chẳng hạn như sau,
Giờ đây, bạn cũng có thể sử dụng các toán tử số học với truy vấn của mình như,
Đầu ra của Truy vấn trên là,
Toán tử gán SQL
Toán tử gán SQL được sử dụng để gán giá trị cho một biến. Chúng ta thường thấy toán tử gán ‘=’.
Ví dụ 2.1
Trong ví dụ sau, tôi chỉ đơn giản là lấy một biến và gán giá trị.
Vì vậy, chỉ cần chạy đoạn mã trên trong T-SQL và bạn sẽ nhận được kết quả: 15 trong AssiginedColumn.
Tương tự với các ngôn ngữ khác như C, C++, Java, C#, v.v. trong T-SQL, chúng tôi có Toán tử chuyển nhượng tốc ký. Các toán tử gán tốc ký trong SQL là +=, -=, *=, /=, %=. toán tử gán tốc ký được minh họa trong bảng sau.
Câu lệnh với toán tử gán đơn giản
|
Tuyên bố với toán tử chuyển nhượng tốc ký
|
a = a + b
|
a+=b
|
a = a – b
|
a-=b
|
a = a * b
|
a*=b
|
a = a / b
|
a/=b
|
a = a % b
|
a%=b
|
Sau đây là một số ví dụ về toán tử gán tốc ký.
Ví dụ 2.2
Đầu ra của mã ở trên là 25 với tên cột Bổ sung.
Ví dụ 2.3
Đầu ra của đoạn mã trên là 5 với tên cột Phép trừ.
Ví dụ 2.4
Đầu ra của đoạn mã trên là 150 với tên cột là Phép nhân.
Ví dụ 2.5
Đầu ra của đoạn mã trên là 1 với tên cột là Chia.
Ví dụ 2.6
Đầu ra của đoạn mã trên là 5 với tên cột Nhắc nhở.
Ví dụ 2.7
Giả sử bạn có một bảng Employee_Info trong đó bạn có 3 trường id, Name, Salary và bên trong nó có sẵn một số dữ liệu như,
Bây giờ nếu bạn kích hoạt một truy vấn như,
Sau đó, mọi giá trị của mức lương sẽ được đặt thành 10000 và đầu ra của đoạn mã trên sẽ là,
Toán tử SQL Bitwise
Như trong các ngôn ngữ khác (như C, C++, Java, C#, v.v.), SQL cũng hỗ trợ các toán tử đặc biệt là toán tử theo bit. Toán tử bitwise thao tác dữ liệu ở cấp độ bit. Các hoạt động được sử dụng để kiểm tra và/hoặc các bit. Các toán tử bitwise chỉ được áp dụng cho các giá trị số nguyên, chúng không thể được áp dụng cho giá trị float hoặc double.
Có bốn toán tử Bitwise có sẵn trong T-SQL như sau,
Bitwise AND (&)
Phép toán AND logic Bitwise được thực hiện giữa 2 giá trị số nguyên.
Ví dụ 3.1
Giả sử có hai số nguyên 2 và 3 và chúng tôi muốn thực hiện 2 & 3 vì vậy trước tiên chúng tôi chuyển đổi 2 và 3 thành định dạng nhị phân. Sau đó, sau khi thao tác AND được thực hiện trên các bit thì các bit đó sẽ lại được chuyển đổi thành định dạng thập phân và đó sẽ là đầu ra của chúng ta. Minh họa đầy đủ được đưa ra dưới đây trong hình dưới đây,
Bitwise OR ( | )
Hoạt động OR theo logic bit được thực hiện giữa 2 giá trị số nguyên.
Ví dụ 3.2
Giả sử có hai số nguyên 2 và 3 và chúng ta muốn thực hiện 2 | 3 vì vậy trước tiên chúng tôi chuyển đổi 2 và 3 thành định dạng nhị phân. Sau đó, sau khi thao tác OR được thực hiện trên các bit thì các bit đó sẽ lại được chuyển đổi thành định dạng thập phân và đó sẽ là đầu ra của chúng ta. Hình minh họa hoàn chỉnh được đưa ra dưới đây trong hình,
Bitwise XOR ( ^ )
Phép toán Bitwise logic Exclusive-OR được thực hiện giữa 2 giá trị số nguyên.
Ví dụ 3.3
Giả sử có hai số nguyên là 2 và 3 và chúng ta muốn biểu diễn 2^3 nên trước tiên chúng ta chuyển 2 và 3 sang dạng nhị phân. Sau đó, sau khi thao tác XOR được thực hiện trên các bit thì các bit đó sẽ lại được chuyển đổi thành định dạng thập phân và đó sẽ là đầu ra của chúng ta. Hình minh họa hoàn chỉnh được đưa ra dưới đây trong hình,
Bitwise Not ( ~ )
Thao tác NOT logic Bitwise được thực hiện trên chỉ một giá trị số nguyên.
Ví dụ 3.4
Giả sử chúng ta có số 2 và chúng ta muốn thực hiện thao tác ~2 thì đầu tiên 2 sẽ được chuyển đổi thành định dạng nhị phân, sau đó sau khi thao tác không được thực hiện trên các bit thì các bit sẽ lại được chuyển đổi thành định dạng thập phân.
Ví dụ 3.5
Trong ví dụ sau, tôi đang viết một truy vấn SQL cho các ví dụ 3.1, 3.2, 3.3 và 3.4 đã giải thích ở trên.
Đầu ra của truy vấn trước đó sẽ là,
Ví dụ 3.6
Trong ví dụ này, tôi đang trình bày cách thực hiện các thao tác theo bit trên một bảng. Giả sử bạn có một bảng tạm thời trong đó bạn có hai cột val1 và val2, trong đó có một số dữ liệu như,
Bạn có thể thực hiện các thao tác theo bit với truy vấn của mình như,
Đầu ra của đoạn mã trên sẽ là,
Toán tử so sánh SQL
Toán tử so sánh còn được gọi là Toán tử quan hệ. Chúng ta thường so sánh hai đại lượng và tuỳ theo mối quan hệ của chúng mà đưa ra một quyết định nào đó. Ví dụ, chúng ta có thể so sánh tuổi của hai người, hoặc giá của hai mặt hàng, hoặc mức lương của hai người, v.v.
Các loại so sánh này được thực hiện bởi các Toán tử quan hệ hoặc so sánh. Danh sách các toán tử so sánh có sẵn trong T-SQL được đưa ra trong bảng sau,
Nhà điều hành
|
Nghĩa
|
=
|
Tương đương với
|
<
|
Ít hơn
|
>
|
Lớn hơn
|
<=
|
Nhỏ hơn bằng
|
>=
|
Lớn hơn bằng
|
<>
|
không bằng
|
!=
|
Không bằng (Không phải tiêu chuẩn ISO)
|
!<
|
Không ít hơn (Không phải tiêu chuẩn ISO)
|
!>
|
Không lớn hơn (Không phải tiêu chuẩn ISO)
|
Giả sử bạn có một bảng #TempTable (bảng tạm thời) trong đó bạn có hai cột val1 và val2. Một số giá trị cũng được chèn vào nó giống như,
Bây giờ tôi sẽ chỉ cho bạn cách kích hoạt một truy vấn cho tất cả các toán tử so sánh.
Đối với Bằng (=)
Trường hợp val1 và val2 sẽ giống nhau nên các hàng sẽ được chọn.
Ít hơn (<)
Trường hợp val1 sẽ nhỏ hơn từ val2, những hàng đó sẽ được chọn.
Lớn hơn (>)
Đầu ra
Trong trường hợp val1 sẽ lớn hơn từ val2, những hàng đó sẽ được chọn.
Nhỏ hơn hoặc bằng (<=)
Đầu ra
Trong trường hợp val1 sẽ nhỏ hơn hoặc bằng từ val2, những hàng đó sẽ được chọn.
Lớn hơn bằng (>=)
Đầu ra
Trong trường hợp val1 sẽ lớn hơn hoặc bằng từ val2, những hàng đó sẽ được chọn.
Không bằng (!=)
Đầu ra
Trong trường hợp val1 sẽ không bằng val2, những hàng đó sẽ được chọn.
Không bằng (<>)
Đầu ra
Trong trường hợp val1 sẽ không bằng val2, những hàng đó sẽ được chọn. Đầu ra tương tự sẽ giống như đối với Không bằng (!=)
Đầu ra
Trong trường hợp val1 sẽ không nhỏ hơn val2, những hàng đó sẽ được chọn.
Không lớn hơn (!>)
Đầu ra
Trong trường hợp val1 sẽ không lớn hơn so với val2, những hàng đó sẽ được chọn.
Toán tử logic SQL
Các toán tử logic trong SQL được sử dụng để kiểm tra một số điều kiện và trả về một giá trị boolean có thể đúng hoặc sai.
Danh sách các toán tử logic của SQL được liệt kê trong bảng dưới đây.
Nhà điều hành
|
Sự miêu tả
|
Tất cả
|
Kiểm tra tất cả các bộ so sánh.
|
VÀ
|
Kiểm tra xem hai giá trị có đúng không.
|
KHÔNG TÍ NÀO
|
Kiểm tra bộ so sánh của bất kỳ ai.
|
GIỮA
|
Kiểm tra giữa các phạm vi.
|
TỒN TẠI
|
Kiểm tra xem truy vấn phụ có hàng hay không.
|
TRONG
|
Kiểm tra một danh sách các biểu thức.
|
GIỐNG
|
Phù hợp với các mẫu.
|
KHÔNG
|
Đảo ngược giá trị của một giá trị Boolean.
|
HOẶC
|
Kiểm tra giữa hai giá trị và bất kỳ giá trị nào cũng phải đúng.
|
MỘT SỐ
|
Kiểm tra xem một số bộ so sánh có đúng hay không
|
Bây giờ hãy xem giải thích từng bước về tất cả các toán tử logic:
Toán tử này trả về true khi và chỉ khi tất cả các tập hợp so sánh đều đúng. Nó so sánh giá trị vô hướng với một tập giá trị cột đơn.
Ví dụ 5.1
Giả sử bạn có hai bảng #tb1, #tb2 và bạn đã chèn Tên và tuổi vào cả hai bảng như,
Cả hai bảng sẽ có dạng như sau:
#tb1
Bây giờ để hiểu toán tử ALL, hãy sử dụng truy vấn sau.
Vì vậy, đầu ra của truy vấn trước đó sẽ là,
Bởi vì tất cả các bộ so sánh đều đúng đối với #tb2. Nhưng lấy một kịch bản trong đó một độ tuổi lớn hơn ở #tb2 so với tất cả các độ tuổi của #tb1. Giả sử tôi chèn một số dữ liệu như thế này,
Sau khi chèn hàng #tb2 sẽ trở thành,
Bây giờ, một lần nữa, bạn kích hoạt cùng một truy vấn như,
Sau đó, bằng cách sử dụng truy vấn ở trên, bạn sẽ nhận được #tb1 là null. Bởi vì trong #tb2, chúng tôi có độ tuổi của “monika dashora” là “25” và nếu đối chiếu với #tb1 thì độ tuổi sẽ luôn nhỏ hơn 25.
ANY
Bất kỳ toán tử nào cũng trả về true nếu một trong các phép so sánh đã đặt là đúng. Toán tử này cũng so sánh một giá trị vô hướng với một tập giá trị cột đơn.
Ví dụ 5.2
Giả sử bạn có cùng một bảng mà chúng ta đã có trong Ví dụ 5.1, đó là #tb1 và #tb2 và bạn thực hiện truy vấn sau,
Sau đó, bạn sẽ nhận được đầu ra là:
Bởi vì toán tử ANY so sánh một tập hợp các giá trị không phải cho tất cả.
Ghi chú
Sự khác biệt giữa ALL và ANY là,
ALL hoạt động giống như AND, vì vậy nếu tất cả các phép so sánh là đúng thì trả về true, ngược lại nó trả về false, ANY hoạt động giống như OR nên nếu bất kỳ phép so sánh nào là true thì nó trả về true.
SOME
SOME và ANY tương đương nhau, cả hai đều so sánh tập hợp các giá trị của một cột.
AND
Toán tử này được áp dụng giữa hai biểu thức và cũng có thể được áp dụng giữa nhiều hơn hai biểu thức. Nếu tất cả các điều kiện của biểu thức là đúng thì nó trả về true nếu không nó trả về false.
Ví dụ 5.3
Giả sử chúng ta có cùng một bảng mà chúng ta đã có trong Ví dụ 5.1. Bây giờ để xem cách sử dụng toán tử AND, hãy xem truy vấn sau đây,
Bằng cách sử dụng truy vấn ở trên, bạn sẽ nhận được các bộ dữ liệu đó từ bảng (#tb2) sẽ nhỏ hơn 25 nhưng lớn hơn 11,
OR
Toán tử này cũng có thể được áp dụng giữa hai và nhiều hơn hai biểu thức. Nếu bất kỳ điều kiện nào là true thì nó sẽ trả về true.
Ví dụ 5.4
Giả sử chúng ta có cùng một bảng mà chúng ta đã có trong Ví dụ 5.1. Bây giờ để xem cách sử dụng toán tử OR, hãy xem truy vấn sau:
Bằng cách sử dụng truy vấn trên, chúng tôi sẽ nhận được đầu ra sau,
NOT
Toán tử này đảo ngược giá trị của một giá trị Boolean.
Ví dụ 5.5
Giả sử chúng ta có cùng một bảng mà chúng ta đã có trong Ví dụ 5.1. Như tôi vừa nói, toán tử NOT đảo ngược đầu ra nên tôi đang sử dụng ví dụ về toán tử AND ở trên, Ví dụ 5.3, nhưng với toán tử NOT.
Đầu ra của đoạn mã trên là,
Between
Toán tử này trả về giá trị đúng khi và chỉ khi toán hạng nằm trong phạm vi. Toán tử này hoạt động với toán tử AND.
Ví dụ 5.6
Lấy cùng bảng #tb2 của Ví dụ 5.1. Để tìm hiểu cách sử dụng Toán tử giữa, hãy thực hiện truy vấn sau.
Đầu ra của truy vấn trước đó là:
Bạn cũng có thể thực hiện với toán tử NOT để đầu ra sẽ ngược lại.
Exists
Toán tử Exists sẽ trả về true khi truy vấn con chứa bất kỳ hàng nào.
Ví dụ 5.7
Giả sử chúng ta có cùng một bảng mà chúng ta đã có trong Ví dụ 5.1. Bây giờ hãy thực hiện truy vấn sau,
Bằng cách sử dụng mã ở trên, đầu ra sẽ là,
Giả sử bạn viết truy vấn như sau,
Bằng cách sử dụng truy vấn ở trên, chúng ta sẽ nhận được đầu ra dưới dạng bảng rỗng vì truy vấn phụ không có hàng.
IN
Toán tử này trả về true nếu toán hạng bằng một trong danh sách các biểu thức.
Ví dụ 5.8
Giả sử chúng ta có cùng một bảng mà chúng ta đã có trong Ví dụ 5.1, và đối với toán tử IN, chúng ta có thể viết truy vấn như thế này,
LIKE
Toán tử này được sử dụng với mệnh đề WHERE để tìm kiếm mẫu đã chỉ định trong cột.
Ví dụ 5.9
Giả sử chúng ta có một bảng #TempTable (bảng tạm thời) trong đó bạn có 2 cột có tên là First_Name và Last_Name với một số giá trị được chèn bên trong bảng như sau,
Đầu ra
Đoạn mã trên cho thấy cách thức toán tử phân giải phạm vi truy cập thành viên tĩnh GetRoot() của kiểu phân cấp.
Toán tử nối chuỗi SQL
Các toán tử nối chuỗi nối hai hoặc nhiều chuỗi nhị phân. Có sẵn các toán tử nối chuỗi sau:
Nhà điều hành
|
Sự miêu tả
|
+
|
Nối chuỗi
|
+=
|
Nối chuỗi
|
%
|
(Các) ký tự đại diện khớp
|
[]
|
(Các) ký tự đại diện khớp
|
[^]
|
(Các) ký tự đại diện, không khớp
|
_
|
Khớp với chỉ một ký tự
|
+ Toán tử nối chuỗi
Toán tử này nối hai hoặc nhiều chuỗi, ký tự hoặc cột thành một chuỗi.
Ví dụ 7.1
Giả sử chúng ta có một bảng #TempTable (bảng tạm thời) trong đó bạn có 2 cột có tên là First_Name và Last_Name và có một số giá trị được chèn bên trong bảng như sau,
Bây giờ ta đang viết truy vấn sau đây, trong đó ta nhận được tên đầy đủ từ tên và họ bằng cách sử dụng toán tử nối chuỗi +.
Đầu ra
+= Toán tử nối chuỗi
Toán tử này nối các chuỗi với kết quả của phép toán.
Ví dụ 7.2
Giả sử tôi có cùng một bảng mà tôi đã có trong Ví dụ 7.1 trước đó. Bây giờ tôi sử dụng truy vấn sau để nối chuỗi với +=.
Đầu ra của truy vấn trước đó sẽ là,
Toán tử so khớp % ký tự đại diện
Toán tử này khớp với 0 hoặc nhiều ký tự. Toán tử này chủ yếu được sử dụng trong tìm kiếm. Nó được sử dụng như một tiền tố hoặc hậu tố hoặc cho cả hai bên như sau:
%Charecter(s) or Charecter(s)% or %Charecter(s)%
Ví dụ 7.3
Giả sử tôi có cùng một bảng mà tôi đã có trong Ví dụ 7.1 và tôi đang tìm kiếm như sau,
Bây giờ từ đoạn mã trên, tôi sẽ nhận được đầu ra như thế này,
[ ] Toán tử so khớp Ký tự đại diện
Toán tử này chỉ khớp với một ký tự đơn trong phạm vi được chỉ định bên trong dấu ngoặc. Toán tử này chủ yếu được sử dụng để so khớp mẫu giống như một biểu thức chính quy.
Ví dụ 7.4
Để hiểu toán tử này, hãy tạo một bảng #TempTable (bảng tạm thời) với 3 cột First_Name, LastName và Mobile_Number rồi chèn dữ liệu vào đó như sau,
Vì vậy, #TempTable sẽ trông giống như,
Sau khi chèn dữ liệu để hiểu toán tử đối sánh (các) ký tự đại diện [ ], hãy thực hiện một truy vấn như thế này,
Sau khi thực hiện truy vấn ở trên, kết quả của truy vấn sẽ là,
[^ ] Toán tử ký tự đại diện không khớp
Toán tử này ngược lại với toán tử [ ], toán tử này khớp với ký tự đơn không nằm trong phạm vi được chỉ định trong ngoặc.
Ví dụ 7.5
Hãy sử dụng cùng một bảng mà chúng ta đã có trong Ví dụ 7.4 và thực hiện truy vấn sau.
Đầu ra của truy vấn trước sau khi thực hiện sẽ là,
_ Ký tự đại diện Khớp một toán tử ký tự
Toán tử này chỉ khớp với một ký tự đơn trong chuỗi; điều này cũng được sử dụng để so sánh các chuỗi.
Ví dụ
Hãy sử dụng cùng một bảng mà chúng ta đã có trong Ví dụ 7.4 và thực hiện truy vấn sau.
Đầu ra của truy vấn trước đó sẽ là,
Toán tử một ngôi trong SQL
Toán tử một ngôi là toán tử chỉ lấy một toán hạng duy nhất trong một biểu thức hoặc một câu lệnh. Có 3 toán tử đơn ngôi có sẵn trong SQL như được liệt kê trong bảng sau:
Nhà điều hành
|
Sự miêu tả
|
+ (Một cộng)
|
Giá trị số dương
|
– (Dấu trừ một ngôi)
|
Giá trị số âm
|
~ (Bitwise KHÔNG)
|
Cung cấp phần bù của một số
|
Ví dụ 8.1
Sau đây là ví dụ trừ đơn phương và cộng đơn phương.
Ghi chú
Tôi không giải thích về Bitwise NOT ở đây vì tôi đã giải thích về toán tử này trong phần Toán tử Bitwise.
Toán tử tập hợp SQL
Các toán tử này kết hợp các kết quả từ hai hoặc nhiều truy vấn vào một tập kết quả duy nhất. Có ba loại toán tử tập hợp có sẵn như được liệt kê bên dưới,
Nhà điều hành
|
Sự miêu tả
|
NGOẠI TRỪ
|
Trả về bất kỳ giá trị riêng biệt nào từ truy vấn bên trái không thuộc về truy vấn bên phải.
|
GIAO NHAU
|
Trả về các giá trị riêng biệt phổ biến trong cả hai truy vấn.
|
LIÊN HIỆP
|
Kết hợp kết quả của hai hoặc nhiều truy vấn vào một tập kết quả duy nhất thuộc về tất cả các truy vấn trong liên kết.
|
EXCEPT
Toán tử này trả về bất kỳ giá trị riêng biệt nào từ truy vấn bên trái không thuộc về truy vấn bên phải.
Ví dụ 9.1
Giả sử có hai bảng Employee1 và Employee2 như sau,
Các giá trị sau được chèn vào nó,
Nếu bạn thực hiện một truy vấn EXCEPT như,
Đầu ra
INTERSECT
Toán tử này trả về bất kỳ giá trị riêng biệt nào phổ biến trong cả hai truy vấn.
Ví dụ 9.2
Trong ví dụ trên nếu chúng ta sử dụng INTERSECT thay vì EXCEPT thì đầu ra sẽ là,