Thứ Năm, 5 tháng 11, 2015

Câu trích dẫn hay

Phụ nữ nên phải hiểu rằng, mọi chuyện đều phải dựa vào bản thân, đừng bao giờ hoang đường cho rằng có thể dựa dẫm bất kỳ ai. Tiền, tự mình làm ra. Yêu, tự bản thân yêu lấy chính mình. Hạnh phúc, tự mình cảm nhận.
Nếu như có ai đó tặng tiền tặng tình yêu tặng hạnh phúc cho bạn, vậy thì cũng tốt. Nhưng bạn vẫn phải tự mình tạo lập cuộc sống cho bản thân. Cuộc đời của bạn, chính là thuộc về bạn. Về mặt tinh thần, tốt nhất đừng để người khác làm ảnh hưởng quá nhiều đến chính mình.
{ Nguồn: weibo – Dịch: Hòa Hỏa }

Thứ Tư, 4 tháng 11, 2015

SQL Having



Having là một câu lệnh điều kiện của Group by.
Giả sử bạn muốn nhóm các loại hình dịch vụ (Product_Cd) trên bảng Account, và chỉ hiển thị ra các loại hình nào có số người tham gia > 3.
Select Acc.Product_Cd
     ,Count(Acc.Product_Cd) As Count_Acc -- Số tài khoản
     ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance -- Tổng số tiền trong tài khoản
     ,Avg(Acc.Avail_Balance) As Avg_Avail_Balance -- Số tiền trung bình
From   Account Acc
Group  By Acc.Product_Cd
Having Count(Acc.Product_Cd) > 3;
Kết quả chạy ví dụ:


SQL Group By (Nhóm bởi ...)

Trước hết chúng ta cần hiểu các hàm tổng hợp (Aggregate Functions) là gì:
  • Sum: Hàm tính tổng
  • Avg: Hàm lấy trung bình
  • Count: Hàm tính số lần
  • Min: Hàm tìm giá trị nhỏ nhất
  • Max: Hàm tìm giá trị lớn nhất
Đó là một số hàm tổng hợp (Aggregate) thông dụng. Chúng có thể tham gia vào câu lệnh nhóm (Group by).
-- Truy vấn dữ liệu trong bảng Account.
 
Select Acc.Account_Id
     ,Acc.Product_Cd
     ,Acc.Avail_Balance
     ,Acc.Pending_Balance
From   Account Acc;
Câu hỏi đặt ra bạn muốn xem tổng số tiền có trong tài khoản, ứng với mỗi loại dịch vụ (Product_Cd) khác nhau. Điều đó có nghĩa là bạn cần nhóm trên các Product_Cd.
Select Acc.Product_Cd
     ,Count(Acc.Product_Cd) As Count_Acc -- Số tài khoản
     ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance -- Tổng số tiền trong tài khoản
     ,Avg(Acc.Avail_Balance) As Avg_Avail_Balance -- Số tiền trung bình
From   Account Acc
Group  By Acc.Product_Cd;
Kết quả:
Như vậy bạn có một cái nhìn đánh giá:

  • Có 4 tài khoản tham gia dịch vụ "Tiền gửi tiết kiệm" (SAV) với tổng số tiền là 1855.76 và trung bình mỗi tài khoản có 463.94.
  • ...

SQL Order By (Sắp xếp bởi)


Việc query dữ liệu cho một tập kết quả, mà có thể nó sắp xếp không như ý muốn, sử dụng Order by để sắp xếp kết quả trả về.
-- Cú pháp
 
SELECT "column_name"
FROM "table_name"
[WHERE "condition"]
ORDER BY "column_name1" [ASC, DESC], "column_name2" [ASC, DESC];
 
-- Ghi chú:
-- ASC: nghĩa là sắp xếp tăng dần (Mặc định)
-- DESC: Nghĩa là sắp xếp giảm dần.
Ví dụ:
-- Sắp xếp ưu tiên Product_Type_Cd tăng dần
-- Sau đó mới tới Name (Cũng tăng dần)
Select Pro.Product_Cd
     ,Pro.Product_Type_Cd
     ,Pro.Name
From   Product Pro
Order  By Pro.Product_Type_Cd Asc
        ,Pro.Name            Asc;
        
        
-- Trong Order BY, ASC là mặc định.
-- Vì vậy có thể ko cần viết ASC.
Select Pro.Product_Cd
     ,Pro.Product_Type_Cd
     ,Pro.Name
From   Product Pro
Order  By Pro.Product_Type_Cd
        ,Pro.Name;
 
-- Sắp xếp ưu tiên Product_Type_Cd giảm dần
-- Sau đó mới tới Name (Tăng dần)
Select Pro.Product_Cd
     ,Pro.Product_Type_Cd
     ,Pro.Name
From   Product Pro
Order  By Pro.Product_Type_Cd Desc
        ,Pro.Name            Asc;

SQL Wildcard


Có 2 ký tự đặc biệt trong SQL:
  1. Ký tự %
  2. Ký tự _
Ý nghĩa:
  • % mô tả 0, 1 hoặc nhiều ký tự
  • _ mô tả chính xác một ký tự.
Hai ký tự này thường được sử dụng trong điều kiện like.
-- Tìm kiếm các Khách hàng (Customer) có số FED_ID theo định dạng:
-- Phần trước bất kỳ, rồi tới dấu - , rồi tới 2 ký tự, rồi tới dấu -, và cuối bất kỳ.
-- Sử dụng 2 dấu _ để minh họa rằng đó là 2 ký tự.
-- (Mỗi dấu _ là chính xác một ký tự).
 
Select Cus.Cust_Id
     ,Cus.Fed_Id
     ,Cus.Address
From   Customer Cus
where cus.fed_id like '%-__-%';
Kết quả chạy ví dụ:

SQL Between (Nằm giữa ...)


-- Câu lệnh này tìm kiếm các nhân viên bắt đầu vào làm việc trong 1 khoảng thời gian
-- xác định trong mệnh đề where.
-- 03-05-2002 ==> 09-08-2002  (Theo dd-MM-yyyy)
Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Start_Date
     , -- Hàm Convert(Varchar, , 105) chuyển Date thành Varchar dạng DD-MM-YYYY
      -- Đây là hàm của SQLServer. không dùng cho DB khác.
      Convert(Varchar, Emp.Start_Date
             ,105) Start_Date_Vn
From   Employee Emp
Where
-- Hàm Convert(Datetime, , 105) chuyển text dạng DD-MM-YYYY sang Datetime
-- (Đây là hàm của SQLServer, có thể ko có trên các DB khác)
( --
 Emp.Start_Date Between Convert(Datetime, '03-05-2002'
                               ,105) And
 Convert(Datetime,'09-08-2002'
        ,105) --
);
Kết qu chy câu lnh:

Đặt Alias cho cột


-- Hàm Convert(Varchar, ) chuyển một số thành chữ (Varchar) (Hàm của SQLServer)
-- Sử dụng toán tử + để nối hai chuỗi (Có thể không được hỗ trợ bởi DB khác)
-- Chúng ta có một cột mới sử dụng 'as' để định nghĩa tên cột cho cột mới này.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' +  Convert(Varchar,Emp.Emp_Id) As Emp_No2  -- Cột mới
From   Employee Emp;
 
-- Có thể không cần sử dụng 'as' trong định nghĩa Alias cho cột.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' + Convert(varchar,Emp.Emp_Id ) Emp_No2  -- Cột mới
From   Employee Emp;

Kết quả truy vấn:

SQL And Or (Và, hoặc)

And và Or là 2 lệnh điều kiện sử dụng trong where:
Chẳng hạn bạn muốn tìm danh sách các nhân viên có tên bắt đầu bởi chữ S và thuộc phòng điều hành (Operations).
-- Câu lệnh tìm kiếm các Nhân viên có tên bắt đầu bởi chữ S.
Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp
Where  Emp.First_Name Like 'S%';
 
-- Câu lệnh tìm kiếm các nhân viên có tên bắt đầu bởi chữ S
-- và thuộc phòng điều hành (Operations)  Dept_Id  = 1.
 
Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp
Where  Emp.First_Name Like 'S%'
And    Emp.Dept_Id = 1;
Kết quả chạy các câu truy vấn:
Ví dụ với câu lệnh Or.
-- Tìm kiếm các nhân viên có tên bắt đầu bởi chữ S hoặc P.
-- và trong phòng điều hành (Operations). (Dept_Id = 1)
Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp
Where  (Emp.First_Name Like 'S%' Or Emp.First_Name Like 'P%')
And    Emp.Dept_Id = 1;
Kết quả chạy câu lệnh:

SQL Distinct

Câu lệnh Distinct được sử dụng cùng với Select, dùng để select các dữ liệu, bỏ qua các dữ liệu trùng nhau. Cú pháp là:
Select distinct ,   ....
Xem ví dụ:
-- Truy vấn sản phẩm (Sản phẩm dịch vụ của Ngân hàng)
-- Cột mã sản phẩm, tên và kiểu sản phẩm.
Select Pro.Product_Cd
    ,Pro.Name
    ,Pro.Product_Type_Cd
From   Product Pro;
-- Truy vấn các kiểu sản phẩm  (Product_Type_Cd) trong bảng Product.
-- Dữ liệu là nhiều, nhưng trùng nhau.
Select Pro.Product_Type_Cd from Product Pro;
-- Cần sử dụng Distinct để loại bỏ việc trùng lặp.
Select Distinct Pro.Product_Type_Cd from Product Pro;
Kết quả chạy các câu lệnh trên: