III-TRUY XUẤT DỮ LIỆU : (DATA QUERY LANGUAGE) :
SELECT
[INTO new_table ]
[FROM ]
[WHERE <điều kiện chọn dòng> ]
[GROUP BY ]
[HAVING <điều kiện chọn nhóm> ]
[ORDER BY [ASC | DESC ]]
Cú pháp đầy đủ của phát biểu Select khá phức tạp. Chúng ta sẽ lần lượt làm rõ từng phần của phát biểu này.
-1FROM CLAUSE :
Chỉ định nguồn dữ liệu. Để truy vấn thông tin từ nhiều bảng, Sử dụng phép kết giữa các bảng trong mệnh đề FROM: (theo ANSI)
ON
: Gồm các phép kết :
INNER JOIN, LEFT [OUTER] JOIN; RIGHT [OUTER] JOIN;
FULL [OUTER] JOIN : kết hợp Left Join và Right Join
CROSS JOIN : không có mệnh đề ON và là phép tích Cartesian.
: chỉ định điều kiện liên kết giữa 2 bảng.
-2SELECT CLAUSE :
SELECT [DISTINCT] [TOP n [PERCENT] [ WITH TIES] ]
[FROM ]
-
DISTINCT : Chỉ hiện những dòng có dữ liệu phân biệt.Mặc định các dòng trùng dữ liệu đều được xuất hiện trong kết quả.
-
TOP n [PERCENT] : chỉ hiện n dòng hoặc n% dòng đầu tiên. n là số nguyên tứ 0 đến 100.
-
WITH TIES: hiện luôn những dòng có cùng giá trị của những cột khóa sắp xếp trong mệnh đề ORDER BY.
-
::= { * | { table_name | view_name | table_alias }.*
| column_name [ [AS] column_alias ]
| expression [ [AS] column_alias ]
| column_alias = expression } [,...n]
-
Dấu * : hiển thị tất cả các cột của các table
-
{ TableName | ViewName | TableAlias }.* : Hiện tất cả các cột của bảng chỉ định.
-
ColumnName [AS] ColunmAlias : Đổi tên cột trên bảng nguồn. Nếu bí danh có dấu cách hoặc trùng với từ khoá của SS, bạn phải ghi bí danh trong dấu nháy đơn hoặc dấu ngoặc vuông ([…])
-
column_alias = expression hoặc expression [AS] column_alias: Tạo cột tính toán. Nếu không chỉ định Column Alias thì cột không có tên.
expression là dãy các toán hạng (Operand) nối với nhau bởi các phép toán (Operator):
-aCác phép toán có thể là:
Các phép toán số học: * (nhân), / (chia), % (phần dư); + (cộng), - (trừ). Thứ tự ưu tiên cao nhất theo 3 cụm từ trái qua phải.
Phép nối chuỗi : ( + )
-bToán hạng có thể là:
Tên thuộc tính (có thể kèm theo tên bảng và dấu chấm đứng trước).
Hàm (function).
Trực hằng (Literals): bao gồm hằng số (Number - Ví dụ. 1234.56 1234.56), hằng văn bản (Text) và ngày giờ trong cặp dấu nháy đơn (Ví dụ. ‘Nguyễn Hồng Anh’ ) và hằng lôgic (True hay False); Giá trị NULL.
Tên biến (Variable)
-cCác hàm toán học:
ABS(x) : Trị tuyệt đối của x
SQRT(x) : Căn bậc hai của x
SQUARE( x) : x2
POWER( y, x ) : yx
LOG(x) : Logarit tự nhiên của x
EXP(x) : Hàm mũ cơ số e của x: ex.
SIGN(x) : Lấy dấu của số x (-1: x<0, 0: x=0, +1: x>0)
ROUND(x,n) : Làm tròn tới n số lẻ.
CEILING( x) : Số nguyên nhỏ nhất nhưng lớn hơn x
FLOOR(X) : Số nguyên lớn nhất nhưng nhỏ hơn x
... và các hàm lượng giác: SIN, COS, TAN, ASIN, ACOS, ATAN ...
-dCác hàm xử lý chuỗi ký tự:
ACSII( ch ) : Mã ASCII của ký tự ch
CHAR( n ) : Ký tự có mã ASCII là n
LOWER( str ) : Trả về chuỗi chữ thường
UPPER(str) : Trả về chuỗi chữ hoa
LTRIM(str) : Trả về chuỗi không có dấu cách bên trái
RTRIM(str) : Trả về chuỗi không có dấu cách bên phải
LEFT(str,n): Lấy n ký tự phía trái của dãy str.
RIGHT(str,n): Lấy n ký tự phía phải của dãy str.
SUBSTRING(str, start, n): Lấy n ký tự của dãy str kể từ vị trí start trong dãy.
REPLACE(str1, str2, str3): thay thế tất cả str2 trong str1 bằng str3.
STUFF(str1, start, n, str2 ): Thay thế n ký tự trong str1 từ vị trí start bằng chuỗi str2.
STR( x, len [, Dec]): Chuyển số x thành chuỗi.
-eCác hàm xử lý ngày tháng và thời gian:
GETDATE(): Cho ngày tháng năm hiện tại (Oracle: SYSDATE)
DAY(dd): Cho số thứ tự ngày trong tháng của biểu thức ngày dd.
MONTH(dd): Cho số thứ tự tháng trong năm của biểu thức ngày dd.
YEAR(dd): Cho năm của biểu thức ngày dd.
DATEPART(datepart, date)
DATEADD(datepart,number, date)
DATEDIFF(datepart, date1, date2)
|
Datepart
|
Abbreviations
|
Year
|
yy, yyyy
|
Quarter
|
qq, q
|
Month
|
mm, m
|
Day of year
|
dy, y
|
Day of Month
|
dd, d
|
Week of year
|
wk, ww
|
Weekday
|
dw
|
Hour
|
hh
|
Minute
|
mi, n
|
Second
|
ss, s
|
Millisecond
|
Ms
| -fCác hàm chuyển đổi kiểu giá trị:
CAST(expression AS data_type[(length)])
CONVERT (data_type[(length)], expression [, style])
Style : Dạng thức kiểu ngày mà bạn muốn khi chuyển đổi dữ liệu kiểu datetime hoặc smalldatetime tới kiểu ký tự (nchar, nvarchar, char, varchar, nchar, or nvarchar), Hoặc dạng chuỗi mà bạn muốn khi chuyển dữ liệu kiểu số (float, real, money, or smallmoney) sang kiểu ký tự(nchar, nvarchar, char, varchar, nchar, or nvarchar).
Trong bảng, 2 cột bên trái biểu diễn dạng giá trị datetime hoặc smalldatetime chuyển sang character. Cộng thêm 100 cho giá trị style để được dạng năm 4 chữ số.
Without
century (yy)
|
With century
(yyyy)
|
Standard
|
Input/Output**
|
-
|
0 or 100 (*)
|
Default
|
mon dd yyyy hh:miAM (or PM)
|
1
|
101
|
USA
|
mm/dd/yy
|
2
|
102
|
ANSI
|
yy.mm.dd
|
3
|
103
|
British/French
|
dd/mm/yy
|
4
|
104
|
German
|
dd.mm.yy
|
5
|
105
|
Italian
|
dd-mm-yy
|
6
|
106
|
-
|
dd mon yy
|
7
|
107
|
-
|
mon dd, yy
|
8
|
108
|
-
|
hh:mm:ss
|
-
|
9 or 109 (*)
|
Default+milliseconds
|
mon dd yyyy hh:mi:ss:mmmAM (or PM)
|
10
|
110
|
USA
|
mm-dd-yy
|
Ví dụ: Select Conver(Char(8), GetDate(), 2) -- kết quả : 04.09.16
Giá trị Style để chuyển kiểu float hay real sang kiểu ký tự.
0 (the default): Tối đa 6 chữ số, dùng trong ký hiệu khoa học.
1 luôn luôn 8 chữ số. Luôn dùng trong ký hiệu khoa học.
2 luôn luôn 16 chữ số. Luôn dùng trong ký hiệu khoa học..
In the following table, the column on the left represents the style value for money or smallmoney conversion to character data.
0 (the default) Không dấu phẩy phân cách hàng ngàn; có 2 chữ số thập phân.
Ví dụ: 4235.98.
1 Có dấu phân cách hàng ngàn và 2 chữ số thập phân;
Ví dụ: 3,510.92.
2 Không dấu phẩy phân cách hàng ngàn, ; có 4 chữ số thập phân.
Ví dụ: 4235.9819.
-gMột số hàm hệ thống:
ISDATE(variable | column name): Kiểm tra dạng ngày hợp lệ. Trả về 1 nếu hợp lệ và 0 nếu không hợp lệ.
ISNUMERIC(variable | column name): Kiểm tra dạng số hợp lệ. Trả về 1 nếu hợp lệ và 0 nếu không hợp lệ.
ISNULL(expression, value) : Trả về giá trị value nếu expression có giá trị NULL, ngược lại trả về giá trị của expression. Giá trị trả về cùng kiểu với exoression.
NULLIF(exp1, exp2) : Trả về giá trị NULL nếu exp1 = exp2.
COALESCE(exp1, exp2, .., expN) : trả về biểu thức khác NULL đầu tiên.
@@ROWCOUNT: Trả về số dòng (kiểu integer) trả về bởi phát biểu cuối cùng.
Ví dụ: cập nhật dữ liệu với UPDATE và dùng @@ROWCOUNT để xác định số dòng đã được thay đổi.
UPDATE authors SET au_lname = 'Jones'
WHERE au_id = '999-888-7777'
IF @@ROWCOUNT = 0
print 'Warning: No rows were updated'
@@ERROR : Trả về mã lỗi (integer) nếu có của phát biểu T-SQL cuối cùng. Trả về số 0 nếu không có lỗi.
Ví dụ: Dùng @@ERROR để kiểm tra vi phạm ràng buộc (error #547) trong phát biều cập nhật.
USE pubs
GO
UPDATE authors SET au_id = '172 32 1176'
WHERE au_id = "172-32-1176"
IF @@ERROR = 547
print "Vi phạm ràng buộc"
-3WHERE CLAUSE:
Chọn lựa những mẫu tin theo điều kiện.
Syntax: WHERE |
::= column_name { *= | =* } column_name
3.1 Các phép toán so sánh: <, <=, !<, >, >=, !>, =, <> hay !=.
Kết quả phép so sánh là giá trị lôgíc (True hoặc False).
3.2 Các phép toán lôgic: NOT, AND (conjunction), OR (disjunction).
Kết quả các phép toán lôgíc là một giá trị lôgíc.
3.3 Các phép toán phạm vi:
IS [NOT] NULL
[NOT] IN ()
[NOT] BETWEEN AND
[NOT] LIKE ‘Mẫu v.bản’ --Dùng ký hiệu thay thế là dấu % và dấu (_ )
[NOT] EXISTS(SubQuery) : Trả về True nếu tồn tại ít nhất 1 mẫu tin.
3.4 <phép so sánh> [<lượng từ>] (SubQuery):
-
có thể là các phép so sánh số học (>, >=, <, <=, <>, =) hoặc phép toán tập hợp IN, LIKE hoặc NOT LIKE.
-
<Lượng từ> có thể là ALL, ANY (hoặc SOME). Phép so sánh = ANY có thể được thay tương đương bằng phép toán IN; phép so sánh <> ALL có thể thay tương đương bằng phép toán NOT IN.
3.5 Phép kết ngoài (outer join): column_name { *= | =* } column_name
Trong đó, phép toán (*= ) Left outer join và phép toán (=*) Right outer join.
Chú ý: Để định lại thứ tự các phần của kiểu ngày phù hợp với hằng kiểu ngày trong biểu thức điều kiện. Sử dụng lệnh : SET DATEFORMAT mdy | dmy | ymd | ydm | myd | dym
-4ORDER BY CLAUSE:
Mệnh đề ORDER BY dùng sắp xếp kết quả tìm được. Cú pháp mệnh đề này là:
ORDER BY | [ASC | DESC], | [ASC | DESC], ...
-5Tổng hợp dữ liệu:
5.1 Các hàm tổng hợp:
AVG( [Distinct] Column_name)
Count( * )
Count([Distinct] Column_name)
Max(Column_name)
Min(Column_name)
Sum([Distinct] Column_name)
Ví dụ: Cho biết số mặt hàng đã bán trong ngày cuối cùng:
SELECT COUNT( DISTINCT MaMH) FROM HoaDon, CTHD
WHERE HoaDon.NgayHD IN (SELECT MAX(NgayHD) FROM HoaDon)
AND HoaDon.MaHD = CTHD.MaHD
5.2 GROUP BY CLAUSE:
Cú pháp: GROUP BY [ALL]
Phân nhóm mẫu tin theo giá trị của các cột làm chuẩn phân nhóm, Mỗi nhóm dữ liệu trả về một dòng tổng hợp.
Mệnh đề GROUP BY ALL trả về tất cả các nhóm, kể cả những nhóm không thỏa mãn điều kiện của mệnh đề WHERE.
Chú ý: Mệnh đề GROUP BY phải chứa tất cả các cột không tổng hợp có trong mệnh đề SELECT.
5.3 HAVING CLAUSE:
Cú pháp: HAVING <điều kiện chọn nhóm>
Dùng chỉ định những dòng tổng hợp xuất hiện phải thỏa mãn điều kiện chỉ định.
Chia sẻ với bạn bè của bạn: |