Saturday, July 20, 2019

P2. Hướng dẫn học SQL cho người mới bắt đầu với SQL Server

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;

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;

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;

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;

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";

Ví dụ:
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 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.
1
2
3
4
5
6
7
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;
Bí quyết để đặt một subquery trong mệnh đề select là subquery phải trả lại một giá trị duy nhất. Đây là lý do tại sao một các hàm tổng hợp như hàm SUMCOUNTMIN, hoặc MAX thường được sử dụng trong subquery.

Over 50 Ebooks Excel and VBA free Download

1. Statistics and Probability for Engineering Applications With Microsoft Excel by W.J. DeCoursey - PDF Free Download Download Siz...