8- SQL Functions
8.1- SQL Count
-
Count() là một hàm, đếm số dòng trong câu Query. Thông thường nó thường được sử dụng cùng với Group by.
1
2
3
-- Đếm số row (dòng) có trong bảng Account
Select
Count
(Acc.Account_Id)
As
Count_Acc
From
Account Acc;
-
-
Đếm số tài khoản ngân hàng, có giao dịch với ngân hàng (Bảng Acc_Transaction)
1
2
3
-- Đếm số tài khoản có giao dịch với ngân hàng.
Select
Count
(
distinct
txn.Account_id)
as
Distinct_Acc
From
Acc_Transaction txn;
- Count() là một hàm, đếm số dòng trong câu Query. Thông thường nó thường được sử dụng cùng với Group by.
- 123
-- Đếm số row (dòng) có trong bảng Account
Select
Count
(Acc.Account_Id)
As
Count_Acc
From
Account Acc;
- Đếm số tài khoản ngân hàng, có giao dịch với ngân hàng (Bảng Acc_Transaction)
1
2
3
| -- Đếm số tài khoản có giao dịch với ngân hàng. Select Count ( distinct txn.Account_id) as Distinct_Acc From Acc_Transaction txn; |
Sử dụng với Group by:
Một khách hàng có thể mở nhiều tài khoản, mỗi tài khoản ứng với một sản phẩm (dịch vụ) của ngân hàng.
Bạn muốn liệt kê các khách hàng ( CUST_ID) và tương ứng là số tài khoản họ đã mở.
1
2
3
4
5
6
-- Đếm số tài khoản đã mở ứng với mỗi khách hàng.
Select
Acc.Cust_Id
,
Count
(Acc.Account_Id)
As
Count_Acc
From
Account Acc
Group
By
Acc.Cust_Id;
Một khách hàng có thể mở nhiều tài khoản, mỗi tài khoản ứng với một sản phẩm (dịch vụ) của ngân hàng.
Bạn muốn liệt kê các khách hàng ( CUST_ID) và tương ứng là số tài khoản họ đã mở.
1
2
3
4
5
6
| -- Đếm số tài khoản đã mở ứng với mỗi khách hàng. Select Acc.Cust_Id , Count (Acc.Account_Id) As Count_Acc From Account Acc Group By Acc.Cust_Id; |
8.2- SQL Sum
Sum() là hàm dùng để tính tổng giá trị một cột số.
1
2
3
4
-- Cú pháp:
SELECT
SUM
(
"column_name"
)
FROM
"table_name"
;
Ví dụ:
1
2
3
4
5
6
7
8
9
10
11
12
-- Tính tổng số tiền trong các tài khoản của khách hàng với Cust_ID = 1
Select
Sum
(Acc.Avail_Balance)
As
Sum_Avail_Balance
From
Account Acc
Where
Acc.Cust_Id = 1;
-- Sử dụng với Group by.
-- Tính tổng số tiền trong tài khoản ứng với mỗi khách hàng
Select
Acc.Cust_Id
,
Sum
(Acc.Avail_Balance)
As
Sum_Avail_Balance
From
Account Acc
Group
By
Acc.Cust_Id;
Sum() là hàm dùng để tính tổng giá trị một cột số.
1
2
3
4
| -- Cú pháp: SELECT SUM ( "column_name" ) FROM "table_name" ; |
1
2
3
4
5
6
7
8
9
10
11
12
| -- Tính tổng số tiền trong các tài khoản của khách hàng với Cust_ID = 1 Select Sum (Acc.Avail_Balance) As Sum_Avail_Balance From Account Acc Where Acc.Cust_Id = 1; -- Sử dụng với Group by. -- Tính tổng số tiền trong tài khoản ứng với mỗi khách hàng Select Acc.Cust_Id , Sum (Acc.Avail_Balance) As Sum_Avail_Balance From Account Acc Group By Acc.Cust_Id; |
8.3- SQL AVG
AVG() là hàm tính trung bình trên cột số.
1
2
3
4
-- Cú pháp:
SELECT
AVG
(
"column_name"
)
FROM
"table_name"
;
Ví dụ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- Tính số tiền trung bình ứng với loại hình gửi tiết kiêm.
Select
Avg
(Acc.Avail_Balance)
As
Avg_Avail_Balance
From
Account Acc
Where
Acc.Product_Cd =
'SAV'
;
-- Sử dụng với Group by.
-- Một khách hàng có thể có 1 hoặc nhiều tài khoản.
-- Tính số tiền trung bình mỗi tài khoản ứng với từng khách hàng
-- (tại ngân hàng Branch_ID = 1)
Select
Acc.Cust_Id
,
Avg
(Acc.Avail_Balance)
As
Avg_Avail_Balance
From
Account Acc
Where
Acc.Open_Branch_Id = 1
Group
By
Acc.Cust_Id;
AVG() là hàm tính trung bình trên cột số.
1
2
3
4
| -- Cú pháp: SELECT AVG ( "column_name" ) FROM "table_name" ; |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| -- Tính số tiền trung bình ứng với loại hình gửi tiết kiêm. Select Avg (Acc.Avail_Balance) As Avg_Avail_Balance From Account Acc Where Acc.Product_Cd = 'SAV' ; -- Sử dụng với Group by. -- Một khách hàng có thể có 1 hoặc nhiều tài khoản. -- Tính số tiền trung bình mỗi tài khoản ứng với từng khách hàng -- (tại ngân hàng Branch_ID = 1) Select Acc.Cust_Id , Avg (Acc.Avail_Balance) As Avg_Avail_Balance From Account Acc Where Acc.Open_Branch_Id = 1 Group By Acc.Cust_Id; |
8.4- SQL MIN
Min là hàm tìm giá trị nhỏ nhất trên cột số.
1
2
3
4
| -- Cú pháp: SELECT MIN ( "column_name" ) FROM "table_name" ;
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| -- Tìm số tiền gửi tiết kiệm nhỏ nhất. Select Min (Acc.Avail_Balance) As Min_Avail_Balance From Account Acc Where Acc.Product_Cd = 'SAV' ; -- Sử dụng với Group by. -- Một khách hàng có thể có 1 hoặc nhiều tài khoản. -- Mở tại các chi nhánh khác nhau. -- Tìm số tiền trong tài khoản nhỏ nhất ứng với từng chi nhánh Select Acc.Open_Branch_Id , Min (Acc.Avail_Balance) As Min_Avail_Balance From Account Acc Group By Acc.Open_Branch_Id; |
8.5- SQL MAX
MAX() là hàm tìm giá trị lớn nhất trên một cột số. Cách sử dụng giống MIN, bạn có thể tham khảo các ví dụ tại mục MIN.
1
2
3
4
| -- Cú pháp: SELECT MAX ( "column_name" ) FROM "table_name" ; |
9- SQL Join
Đặt ra một tình huống bạn xem thông tin một nhân viên trong bảng EMPLOYEE. Bạn có thể thấy nhân viên biết ID phòng ban của nhân viên này. Nhưng đó là một con số vô nghĩa. Muốn biết tên phòng ban, bạn phải tra cứu sang bảng DEPARTMENT. Việc nối 2 bảng đó với nhau để có một thông tin đầy đủ được gọi là JOIN.
Có 4 hình thức để Join 2 bảng:
- INNER JOIN (JOIN)
- LEFT OUTER JOIN (LEFT JOIN)
- RIGHT OUTER JOIN (RIGHT JOIN)
- FULL OUTER JOIN (OUTER JOIN)
- CROSS JOIN
9.1- INNER JOIN (Hoặc JOIN)
- Từ khóa INNER JOIN để chọn tất cả các dòng từ hai bảng miễn là có sự ăn khớp dữ liệu giữa các cột trong cả hai bảng.
Cú pháp:
- 1234567891011121314
-- Cú pháp
SELECT
column_name(s)
FROM
table1
INNER
JOIN
table2
ON
table1.column_name=table2.column_name;
-- Có thể thay INNER JOIN bởi JOIN
-- Ý nghĩa và kết quả là như nhau.
SELECT
column_name(s)
FROM
table1
JOIN
table2
ON
table1.column_name=table2.column_name;
- Ví dụ:
1
2
3
4
5
6
7
8
9
10
11
| -- INNER JOIN 2 bảng EMPLOYEE và DEPARTMENT. Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id ,Dep. Name Dept_Name From Employee Emp Inner Join Department Dep On Emp.Dept_Id = Dep.Dept_Id Order By Emp.Emp_Id; |
Cú pháp riêng của SQLServer:
1
2
3
4
5
6
7
8
9
10
11
12
13
| -- Cú pháp này cũng được hỗ trợ bởi Oracle & MySQL -- Việc INNER JOIN theo cách viết khác của SQLServer thực sự đơn giản. -- SQLServer đẩy điều kiện JOIN hai bảng xuống WHERE. Select Emp.Emp_Id ,Emp.First_Name ,Emp.Last_Name ,Emp.Dept_Id ,Dep. Name Dept_Name From Employee Emp ,Department Dep Where Emp.Dept_Id = Dep.Dept_Id Order By Emp.Emp_Id; |
9.2- LEFT OUTER JOIN (Hoặc LEFT JOIN)
Từ khóa LEFT OUTER JOIN trả về tất cả các hàng (rows) từ bảng bên trái (table1), với các hàng tương ứng trong bảng bên phải (table2). Chấp nhận cả dữ liệu NULL ở bảng 2 nếu nó không khớp.
Hãy xem hình minh họa dưới đây:
Ví dụ:
1
2
3
4
5
6
7
8
9
10
11
12
| -- Customer LEFT OUTER JOIN Officer -- Có thể thay thế LEFT OUTER JOIN bởi LEFT JOIN (Ý nghĩa và kết quả là giống nhau) Select Cus.Cust_Id ,Cus.Fed_Id ,Cus.State ,Ofc.Cust_Id As Ofc_Cust_Id ,Ofc.Officer_Id ,Ofc.Start_Date ,Ofc.Title From Customer Cus -- Table1 Left Outer Join Officer Ofc -- Table2 On Cus.Cust_Id = Ofc.Cust_Id; |
Kết quả:
9.3- RIGHT OUTER JOIN (Hoặc RIGHT JOIN)
RIGHT OUTER JOIN khá giống với LEFT OUTER JOIN:
9.4- FULL OUTER JOIN (Hoặc OUTER JOIN)
FULL OUTER JOIN là sự kết hợp của LEFT OUTER JOIN và RIGHT OUTER JOIN
1
2
3
4
5
6
7
| -- Cú pháp: (FULL OUTER JOIN) -- Có thể viết FULL JOIN SELECT columns FROM table1 FULL [ OUTER ] JOIN table2 ON table1. column = table2. column ; |
10- Câu truy vấn con (Subquery)
Trong SQLServer, một subquery là một truy vấn trong một truy vấn. Bạn có thể tạo các truy vấn con trong câu lệnh SQL của bạn. Những truy vấn con có thể nằm trong mệnh đề WHERE, mệnh đề FROM, hoặc mệnh đề SELECT.
10.1- Subquery trong mệnh đề Where
- Khá thường xuyên, các subquery sẽ được tìm thấy trong mệnh đề WHERE. Những truy vấn con còn được gọi là truy vấn con lồng nhau.
- 1234567
Select
Acc.Account_Id
,Acc.Open_Date
,Acc.Product_Cd
,Acc.Avail_Balance
From
Account Acc
Where
Acc.Cust_Id
In
(
Select
Cus.Cust_Id
From
Customer Cus
Where
Cus.Cust_Type_Cd =
'B'
)
10.2- Subquery trong mệnh đề From
- Một truy vấn phụ cũng có thể được tìm thấy trong mệnh đề FROM. Chúng được gọi là inline views.
1
2
3
4
5
6
7
8
9
10
11
| Select Cus.Cust_Id ,Cus.Address ,Cus.Fed_Id ,Acc2.Sum_Avail_Balance From Customer Cus , -- Câu Subquery định nghĩa 1 bảng ảo (inline view) ( Select Acc.Cust_Id , Sum (Acc.Avail_Balance) As Sum_Avail_Balance From Account Acc Group By Acc.Cust_Id) Acc2 Where Cus.Cust_Id = Acc2.Cust_Id; |
10.3- Subquery trong mệnh đề Select
Một subquery cũng có thể được tìm thấy trong mệnh đề SELECT.
1
2
3
4
5
6
7
| Select Cus.Cust_Id ,Cus.Address ,Cus.Fed_Id ,( Select Sum (Acc.Avail_Balance) From Account Acc Where Acc.Cust_Id = Cus.Cust_Id) As Sum_Avail_Balance From Customer Cus; |
No comments:
Post a Comment