Ngoài việc sử dụng cỏc con số, xõu ký tự cụthể thỡ SQL cung cấp một số toỏn
tử giỳp việc diễn giải điều kiện đơn giản và ngắn gọn hơn cho người dựng, ở đõy sử
dụng toỏn tử IN và BETWEEN.
Toỏn tử In và Between cú cỳ phỏp như sau:
Select…..From….Where …. IN (Tập hợp)
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
Vớ dụ 1: Cho bảng Nhanvien (MaNV, TenNV, Ngaysinh, GT, Luong, MaPB)
Tỡm những nhõn viờn nào cú lương từ 2 triệu đến 3 triệu đồng?
SELECT MANV, TENNV FROM NHANVIEN
WHERE Luong> 2.000.000 AND Luong< 3.000.000
SELECT MANV, TENNV FROM NHANVIEN
WHERE Luong BETWEEN 2.000.000 AND 3.000.000
Vớ dụ 2: Tỡm những nhõn viờn nào cú lương một trong 3 mức sau: 2 triệu, 3 triệu, 4 triệu đồng.
SELECT MANV, TENNV FROM NHANVIEN
WHERE Luong= 2.000.000 OR Luong= 3.000.000 OR Luong=4.000.000
SELECT MANV, TENNV FROM NHANVIEN
WHERE Luong IN ( 2.000.000 , 3.000.000, 4.000.000) Vớ dụ 3:
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP f. Tỡm kiếm cú sắp xếp
Vấn đề đặt ra khi chỳng ta cần sắp xếp dữ liệu truy vấn theo một cỏch nào đú.
SQL cung cấp mệnh đề ORDER BY giỳp chỳng ta thực hiờn việc này.
Từ khoỏORDER BYđược sử dụng để sắp xếp kết quả trả về. Mệnh đề
ORDER BY được dựng để sắp xếp cỏc dũng.
Cỳ phỏp:
Select …..From….Where…..ORDER BY (Danh_sỏch_cột) [ASC|DESC]
Trong đú:
- ASC: Sắp xếp tăng dần (Mặc định khi khụng cú chỉ thị)
- DESC: Sắp xếp giảm dần Vớ dụ: BảngOrders: Company OrderNumber Sega 3412 ABC Shop 5678 W3Schools 2312 W3Schools 6798
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
Để lấy danh sỏch cỏc cụng ty theo thứ tự chữ cỏi (tăng dần): SELECT Company, OrderNumber FROM Orders
ORDER BY Company Kết quả trả về: Company OrderNumber ABC Shop 5678 Sega 3412 W3Schools 6798 W3Schools 2312
Lấy danh sỏch cỏc cụng ty theo thứ tự chữ cỏi (tăng dần) và hoỏ đơn đặt hàng theo thứ tự số tăng dần:
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
Kết quả trả về: Company OrderNumber ABC Shop 5678 Sega 3412 W3Schools 2312 W3Schools 6798
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
Lấy danh sỏch cỏc cụng ty theo thứ tự giảm dần: SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
Kết quả trả về: Company OrderNumber W3Schools 6798 W3Schools 2312 Sega 3412 g. Tỡm kiếm cú chứa phộp tớnh tập hợp
Trong khi truy vấn dữ liệu, việc truy vấn cú thể thực hiện cỏc phộp tớnh trờn tập hợp bao gồm cả việc tỡm kiếm. SQL cung cấp toỏn tử MINUS nhằm phục vụ truy vấn, tỡm kiếm cú chưa cỏc tập hợp.
Toỏn tử MINUS cú tỏc dụng gần giống như một toỏn tử trừ ‘-‘ hai tập hợp.
Vớ dụ:
Bảng Jobs cú trường Job_ID chứa tất cả cỏc mó cụng việc (Job) của một cụng ty A. Bảng Job_history cú trường Job_ID chứa cỏc mó cụng việc mó nhõn viờn đú đó làm trong thỏng. Để tỡm ra mó cụng việc chưa được làm trong thỏng ta sử dụng cõu lệnh truy vấn SQL như sau:
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
Ngoài ra, cõu lệnh dưới đõy cũng là tương đương
2.2.6.3 Truy vấn lồng nhau
Trong phần này trỡnh bày việc tỡm kiếm với nhiều bảng qua việc sử dụng ỏnh xạ lồng nhau hoặc qua phộp kết nối.
Phộp kết nối
Trong phộp kết nối, cỏc cột tham gia kết nối phải cú miền giỏ trị cú thể so sỏnh được với nhau. Tờn cột của cỏc bảng khỏc nhau cú thể được viết tường minh qua tờn
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
Cỳ phỏp: Select ….
From Table1, Table2
Where Table1.ColName = Table2.ColName
Vớ dụ 1: Cho cơ sở dữ liệu quản lý thụng tin bỏn hàng của cỏc đại lý gồm cỏc
quan hệ sau:
S(S#, Sname, City, Status)
P(P#, Pname, Color, Weight, Price) SP(S#, P#, Sdate, QTY) Tỡm tờn cỏc đại lý đó cung cấp ớt nhất một mặt hàng? Select S.SName From S, SP Where S.S# = SP.S# Vớ dụ 2:
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
Ánh xạ lồng
Ngoài cỏch sử dụng phộp nối ta cú thể sử dụng ỏnh xạ lồng để thực hiện cụng việc tương tự. Phộp lồng nhau cú thể được lồng nhiều mức hoặc sử dụng ỏnh xạ lồng với sự dẫn trỏ giữa cỏc khối tới cỏc bảng khỏc nhau.
Về mặt cỳ phỏp cũng tương tự như khi sử dụng phộp nối, tuy nhiờn thay
vỡ sử dụng nhiều bảng trong mỗi mệnh đề select- from- where thỡ ỏnh xạ chỉ dựng
một bảng.
Vớ dụ 1: Cho cơ sở dữ liệu quản lý thụng tin bỏn hàng của cỏc đại lý gồm cỏc
quan hệ sau:
S(S#, Sname, City, Status)
P(P#, Pname, Color, Weight, Price)
SP(S#, P#, Sdate, QTY)
Tỡm tờn cỏc đại lý đó cung cấp ớt nhất một mặt hàng?
Select SName From S
Where S# IN (Select S# from SP)
Vớ dụ 2: Cho cơ sở dữ liệu gồm cỏcbảng:
Job (Job_id, Job_title, Min_Salary, Max_Salary)
Employees (Employee_id, First_name, Last_name, email, phone_number, hire_date, Job_id, salary)
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
2.2.6.4 Truy vấn sử dụng hàm tớnh toỏn và gom nhúma. Tỡm kiếm nhờ mệnh đề GROUP BY a. Tỡm kiếm nhờ mệnh đề GROUP BY
Khi truy vấn mẩu tin trờn một hay nhiều bảng dữ liệu, thụng thường cú những bản ghi nào đú cựng giỏ trị.
Mệnh đề GROUP BY…được thờm vào SQL bởi vỡ cỏc hàm tập hợp (như
SUM) trả về một tập hợp của cỏc giỏ trị trong cột mỗi khi chỳng được gọi, và nếu
khụng cú GROUP BY ta khụng thể nào tớnh được tổng của cỏc giỏ trị theo từng nhúm
riờng lẻ trongcột.
Cỳ phỏp của GROUP BY như sau:
SELECT tờn_cột, SUM (tờn_cột) FROM tờn_bảng GROUP BY tờn_cột
Vớ dụ 1:
Giả sử ta cú bảngSalesnhư sau:
Company Amount
W3Schools 5500
IBM 4500
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
Cõu lệnh SQL sau:
SELECT Company, SUM (Amount) FROM Sales
sẽ trả về kết quả:
Company SUM(Amount)
W3Schools 17100
IBM 17100
W3Schools 17100
Kết quả trả về ở trờn đụi khi khụng phải là cỏi mà ta mong đợi. Ta thờm mệnh đề GROUP BY vào trong cõu lệnh SQL:
SELECT Company, SUM (Amount) FROM Sales GROUP BY Company
và kết quả trả về lần này sẽ là:
Company SUM(Amount)
W3Schools 12600
IBM 4500
Kết quả này đỳng là cỏi mà ta mong muốn.
Vớ dụ 2:Cho cơ sở dữ liệu quản lý thụng tin bỏn hàng của cỏc đại lý gồm cỏc quan hệ sau:
S(S#, Sname, City, Status)
P(P#, Pname, Color, Weight, Price) SP(S#, P#, Sdate, QTY)
Tỡm số lượng cung cấp lớn nhất của từng mặt hàng?
Select P#, max (QTY) From SP
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
Khi sử dụng Group by ta thường sử dụng mệnh đề HAVING đi kốm. Having
được thờm vào SQL vỡ mệnh đề WHERE khụng ỏp dụng được đối với cỏc hàm tập hợp (như SUM). Nếu khụng cú HAVING, ta khụng thể nào kiểm tra được điều kiện với cỏc hàm tập hợp.
Cỳ phỏp của HAVING như sau:
SELECT tờn_cột, SUM (tờn_cột) FROM tờn_bảng
GROUP BY tờn_cột
HAVING SUM (tờn_cột) điều_kiện giỏ_trị
Ta sử dụng lại bảngSalesở trờn. Cõu lệnh SQL sau:
SELECT Company, SUM (Amount) FROM Sales GROUP BY Company
HAVING SUM (Amount) > 10000
sẽ trả về kết quả:
Bảng SP
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
Chỳ ý:
Mệnh đề GROUP BY
Cỏc thuộc tớnh trong mệnh đề GROUP BY phải được xuất hiện trong
mệnh đề SELECT.
Mệnh đề HAVING:
Chỉ kiểm tra điều kiện trờn nhúm, mệnh đề Having khụng lọc trờn từng
bản ghi. (Điều kiện trong mệnh đề Having tỏc động trờn cỏc bản ghi của một nhúm)
Điều kiện trờn nhúm (ở mệnh đề HAVING) được thực hiện sau khi gom
nhúm.
Điều kiện trong mệnh đề Where tỏc động trờn toàn bộ cỏc bản ghi của bảng
b. Cỏc hàm thư viện
o Hàm Count()
Hàm Count() trả về số lượng mẩu tin trong cõu truy vấn trờn bảng.
Cỳ phỏp:
Select Count(tờn_cột) From tờn_bảng…. Vớ dụ :
Company SUM(Amount)
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
Lưu ý:
- Khi sử dụng Count(*) sẽ trả về số bản ghi của bảng
- Cần phõn biệt Cout( tờn_cột) với Count(*): Về cơ bản chỳng giống
nhau tuy nhiờn hàm Count(*) đếm cả những bản ghi cú giỏ trị NULL, Count(tờn_cột) thỡ khụng.
Vớ dụ:
Trong bảng Employees cú 107 bản ghi, thuộc tớnh
Commission_PCT cú vị trớ chứa giỏ trị NULL.
Khi sử dụng hàm Count(*) và hàm Count(Commisson_pct) ta cú :
Để trỏnh đếm những giỏ trị trựng lặp ta cú thể dựng thờm từ khúa DISTINCT.
Vớ dụ:
o Hàm Sum()
Hàm trả về tổng cỏc giỏ trị của trường, cột trong cõu truy vấn
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
o Hàm Min, Max
Hàm min, max trả về giỏ trị nhở nhất, giỏ trị lớn nhất của cột hay trường trong cõu truy vấn.
Cỳ phỏp : Select Min [Max] (tờn_cột) From tờn_bảng [Where điều_kiện] Vớ dụ:
o Hàm tớnh trung bỡnh cộng
Trả về giỏ trị bỡnh quõn của cột hay trường trong cõu truy vấn. Cỳ phỏp : Select AVG (tờn_cột) From tờn_bảng[Where điều_kiện] Vớ dụ:
2.2.6.5. Khung nhỡn (View)
Trong SQL, View là một bảng ảo được tạo ra dựa trờn kết quả của một cõu lệnh
truy vấn SQL. Một view chứa cỏc dũng và cỏc cột, nú chỉ giống như một bảng, mỗi
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
dữ liệu. Với view cú thể sử dụng cỏc hàm truy vấn SQL, mệnh đề Where và cỏc cõu
lệnh Join để xem và hiển thỡ dữ liệu giống như truy vấn từ một bảng đơn bỡnh thường.
Cỳ phỏp:
CREATE VIEW tờn_view (danh_sỏch_tờn_cột) AS mệnh_đề_select
Khi tạo View cần chỳ ý một số điểm sau:
• Tờn view phải tuõn theo quy tắc về định danh và phải duy nhất đối với người sử
dụng.
• Khụng thể ràng buộc cỏc mặc định, cỏc quy tắc cho view.
• Trong cõu lệnh Create view khụng nhất thiết phải chỉ định tờn cột. Tờn của cỏc
cột cũng như kiểu dữ liệu của chỳng sẽ tương ứng với cỏc cột trong danh sỏch
chọncủa cõu lệnh Select.
• Bạn phải xỏc định tờn cột trong cõu lệnh Create view trong cỏc trường hợp sau:
Mỗi cột của view được phỏt sinh từ một biểu thức số học, một hàm cài sẵn
hay một hằng.
Hay nhiều cột của view cú trựng tờn.
Bạn muốn thay đổi tờn cột trongview khỏc với tờn cột của bảng cơ sở.
Vớ dụ 1: Cho database Quanlysinhvien
Y/c: Tạo view Thongtin_sv (masv, hoten, tuoi, tenlop)
Create view thongtin_sv (masv, hoten, tuoi, tenlop) As
Select masv, hoten, datediff(year, ngaysinh, getdate()), tenlop From sinhvien, lop
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
Vớ dụ 2:
2.2.7 Giới thiệu về ngụn ngữ lập trỡnh T-SQL trong SQL Server
2.2.7.1 Biến cục bộ (Local variable)
- Được khai bỏo trong phần thõn của một bú lệnh hoặc một thủ tục.
- Phạm vi hoạt động của biến bắt đầu từ điểm mà nú được khai bỏo cho đến khi
kết thỳc một lụ (batch) hoặc stored procedure hoặc Function mà nú được khai bỏo. - Tờn của biến bắt đầu @
Khai bỏo:
DECLARE @var_name var_type trong đú:
@var_name: Tờn của biến được đặt theo qui tắc định danh.
var_type: Kiểu dữ liệu của biến.
string_expr: Một biểu thức trả về giỏ trị chuỗi.
Vớ dụ:
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
DECLARE @mNHD DATETIME
Gỏn giỏ trị cho biến:
Nếu biến vừa khai bỏo xong thỡ biến mặc nhiờn được gỏngiỏ trị là NULL. Để gỏn
biến ta dựng lệnh SET hoặc dựng cõu lệnh SELECT SET @var_name = expression
SELECT { @var_name = expression } [,...n ]
Vớ dụ: gỏn giỏ trị là ngày 25/03/2014 vào biến mNHD
DECLARE @mNHD DATETIME SET @mNHD='2014-03-25'
In giỏ trị của biến cục bộ:
PRINT msg_str | @local_variable | string_expr Trong đú:
msg_str: Hằng chuỗi;
@local_variable: Biến cục bộ;
Vớ dụ : Tỡm số lượng bỏn được lớn nhất của sản phẩm mó S1
DECLARE @mSL INT SELECT @mSL=MAX(SL) FROM CTHD
WHERE MaSP='S1' PRINT @mSL
Chỳ ý: Khi cú kết hợp với chuỗi, phải đổi kiểu dữ liệu sang kiểu chuỗi bằng hàm CAST hay CONVERT
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
CONVERT(kiểu_DL,Tờn_biến)
Vớ dụ : Tỡm số lượng bỏn được lớn nhất của sản phẩm mó S1
declare @msl int select @msl=max(sl) from cthd
where masp='s1'
print 'max s1 = '+cast(@msl as char(10)) Hoặc
declare @msl int select @msl=max(sl) from cthd
where masp='s1'
print 'max s1 = '+convert(char(10), @msl)
2.2.7.2 Biến hệ thống.
Global variable trong SQL Server gọi là System Function: Từ SQL Server 7.0 biến Global được định nghĩa như là hàm hệ thống. Mỗi kết nối sẽ tạo ra một session, SQL Server tạo ra sẳn một số biến cú sẳn rất tiện ớch trong việc lập trỡnh và quản trị hệ thống.
Cỏc biến này khụng cú kiểu,tờn bắt đầu @@.
Cỏc biến í nghĩa
@@VERSION Phiờn bản của SQL Server và hệ điều hành @@TRANCOUNT Xem coi cú bao nhiờu transaction đang mơ
@@ROWCOUNT Trả về số dũng bị ảnh hưởng đối với lệnh thực thi gần nhất
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
@@ERROR Trả về lỗi số (STT lỗi) của lệnh sau cựng mà SQL thực thi, là 0 cú nghĩa là cõu lệnh thực thi hoàn thành.
@@FETCH_STATUS Trả về trạng thỏi của lệnh Fetch của biến con trỏ cú thành cụng hay khụng (0: Thành cụng, -1: bị lỗi
hoặc vượt quỏ phạm vi; -2: Thất bại)
@@LANGUAGE Tờn của ngụn ngữ đang được sử dụng @@MAX_CONNECTIONS Số kết nối tối đó cú thể
@@SERVERNAME Tờn của mỏy chủ
@@SERVICENAME Tờn của dịch vụ SQL trờn mỏy chủ
@@TIMETICKS Số milliseconds trong một tick trờn mỏy chủ
2.2.7.3 Cỏc toỏn tử.
Toỏn tử số học :
Toỏn tử số học được phộp sử dụng trong việc tớnh toỏn cỏc phộp tớnh : cộng, trừ, nhõn, chia và chia lấy phần dư. Cỏc biểu thức, giỏ trị tớnh toỏn phải cú kiểu dữ liệu là số
khi thực hiện cỏc toỏn tử này. Thứ tự ưu tiờn của cỏc toỏn tử số học là : nhõn, chia và
chia lấy phần dư trước sau đú đến cộng và trừ. Tuy nhiờn bạn nờn chỉ định tường minh thứ tự thực hiện cỏc toỏn tử số học bằng cỏch đưa vào cỏc dấu ngoặc đơn trong một biểu thức tớnh toỏn.
Vớ dụ :
Hai cõu lệnh bờn dưới sẽ trả về kết quả như nhau :
SELECT 10 +15*70/100
Và
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
Tuy nhiờn với cõu lệnh thứ hai, bạn thấy rừ ràng hơn bởi vỡ phộp nhõn bờn trong cựng của dấu ngoặc đơn sẽ thực hiện trước sau đú là tới phộp chia và cuối cựng mới là phộp cộng.
Toỏn tử số học được phộp sử dụng cho cỏc kiểu dữ liệu số như : int, bigint, smallint, tinyint, numeric, decimal, float, real, money và smallmoney. Tuy nhiờn đối với phộp
tớnh chia lấy phần dư chỉ được sử dụng cho cỏc kiểu dữ liệu số nguyờn như : int, bigint,
smallint và tinyint.
Vớ dụ :
Thể hiện phộp chia lấy phần dư của hai số nguyờn 15 và 6. Bạn sử dụng cõu lệnh như sau :
SELECT 15%6
Kết quả trả về là 3.
Toỏn tử nối chuỗi :
Toỏn tử nối chuỗi được phộp sử dụng trong việc kết nối cỏc chuỗi rời rạc thành một chuỗi liờn tục. Cỏc biểu thức, giỏ trị khi nối chuỗi phải cú kiểu dữ liệu là chuỗi hoặc
KHOA CNTT –TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CễNG NGHIỆP
phải được chuyển đổi thành kiểu dữ liệu chuỗi trước khi thực hiện toỏn tử này. Ký hiệu của toỏn tử nối cỏc chuỗi lại với nhau là dấu cộng (+).
Vớ dụ :
Để nối hai chuỗi "Hello" và "The World !" lại thành chuỗi "Hello The World !", bạn sử dụng cõu lệnh sau :
SELECT “Hello”+ “ ” + “The World”
Vớ dụ :
Cho biết ngày đặt hàng của đơn đặt hàng số D007 là bao nhiờu, bạn sử dụng cõu lệnh sau :
SELECT “Ngày đặt hàng D007 là: “
+CASE(NGAYDH AS CHAR(11)) FROM DONDH
WHERE SODH = “D007”
Trong vớ dụ trờn bắt buộc phải chuyển đổi giỏ trị dữ liệu của cột ngày đặt hàng trong bảng DONDH từ kiểu dữ liệu ngày sang kiểu dữ liệu chuỗi trước khi thực hiện toỏn tử nối chuỗi.
Toỏn tử so sỏnh :
Toỏn tử so sỏnh được phộp sử dụng để thực hiện cỏc phộp so sỏnh như : bằng, khỏc, lớn hơn, nhỏ hơn, … cho cỏc biểu thức cần được so sỏnh. Giỏ trị trả về của việc so sỏnh sẽ là đỳng hoặc sai tựy thuộc vào biểu thức điều kiện mà bạn đưa ra để so sỏnh.
Cỏc toỏn tử so sỏnh cú thể được sử dụng trờn nhiều kiểu dữ liệu khỏc nhau như : kiểu