• Đăng ký Thabet
  • Đăng ký Kubet
  • Trang chủ
  • Tải Phầm Mềm
  • Lô đề
  • Nhà Cái
  • Thabet

KUBET

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

1- Giới thiệu

  • ORACLE (10g, 11g)

Nội dung bao gồm

  • Ngôn ngữ SQL
  • Ngữ pháp SQL (Ngữ pháp cơ bản, tiêu chuẩn cho mọi loại DB)
  • Ngữ pháp SQL riêng của Oracle.

Tài liệu này hướng dẫn cho những người mới bắt đầu làm quen với SQL. Tài liệu hướng dẫn dựa trên : Nội dung gồm có

2- Cơ sở dữ liệu học SQL (LearningSQL)

Tài liệu này sử dụng cơ sở dữ liệu LearningSQL (phiên bản Oracle). Bạn cần tạo cơ sở dữ liệu đó để tiện cho việc học (Bạn chỉ mất không quá 5 phút để làm việc này).

Script tạo cơ sở dữ liệu và cấu trúc của cơ sở dữ liệu này bạn có thể xem tại:

 

Bạn đang đọc: Hướng dẫn học SQL cho người mới bắt đầu với Oracle

3- Bắt đầu nhanh

3.1- Ví dụ truy vấn (Query)

Với Oracle, tốt nhất bạn sử dụng một công cụ trực quan, ở đây tôi sử dụng PL/SQL Developer. Bạn có thể cài đặt PL/SQL Developer theo hướng dẫn tại:

4- Một số “thứ” đặc biệt của Oracle

Trước hết chúng ta cần tìm hiểu một chút về một số “thứ” đặc biệt của Oracle. Nó có thể không phải là tiêu chuẩn của các DB khác.

4.1- Dual

Dual giống như một bảng ảo, nó có tại mọi SCHEMA. Và vì vậy bạn có thể truy vấn nó giống một bảng thông thường.


Select * from Dual;

Select 'Dual is special table in Oracle' As Column_Title From Dual;

4.2- Sequence

Sequence là một đối tượng để tạo ra các số tăng dần.

Ví dụ tạo ra một Sequence có tên My_Sequence.


-- Tạo mới một Sequence có tên My_Sequence;

Create Sequence My_Sequence;

Lúc đó trên công cụ trực quan bạn hoàn toàn có thể nhìn thấy Sequence bạn vừa tạo ra .


-- Mỗi lần gọi Nextval giá trị của My_Sequence sẽ tăng dần.
-- Hãy thử thực thi lệnh này vài lần.

Select My_Sequence.Nextval From Dual;

-- Bạn có thể sử dụng Currval để lấy ra giá trị hiện thời của My_Sequence.

Select My_Sequence.Currval From Dual;

5- Các câu lệnh truy vấn (Query)

5.1- SQL Select

Câu lệnh Select là một câu lệnh cơ bản nhất trong SQL, mục đích là truy vấn dữ liệu trong các bảng (Table).

  • PRODUCT_TYPE: Bảng dữ liệu các kiểu sản phẩm (Kiểu dịch vụ của ngân hàng).

Đây là câu lệnh truy vấn dữ liệu trên bảng PRODUCT_TYPE


-- Truy vấn dữ liệu trên bảng Product_Type
-- Truy vấn toàn bộ các cột.

Select * From Product_Type;

-- Câu lệnh truy vấn trên và câu lệnh dưới đây là tương đương nhau.
-- Pty là alias (tên bí danh đặt cho bảng Product_Type).

Select Pty.* From Product_Type Pty;

-- Truy vấn một vài cột
-- Có thể liệt kê ra.

Select Pty.Product_Type_Cd
     ,Pty.Name
From   Product_Type Pty;

Kết quả truy vấn :

Truy vấn dữ liệu trên bảng EMPLOYEE:


-- Truy vấn 4 cột trên bảng Employee (Bảng nhân viên).
-- Sử dụng Emp là Alias (Tên bí danh) cho bảng Employee.

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp;

Kết quả truy vấn :

Đặt Alias cho cột :


-- Sử dụng hàm concat(string1, string2) để nối 2 chuỗi với nhau.
-- 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
     ,Concat('EMP'
            ,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
     ,Concat('EMP'
            ,Emp.Emp_Id)  Emp_No2  -- Cột mới
From   Employee Emp;

-- Với Oracle bạn có thể sử dụng toán tử || để nối 2 chuỗi
-- Toán tử này có thể nối nhiều chuỗi với nhau.
-- (Chú ý chỉ với Oracle).
-- Câu lệnh trên viết lại với Oracle.
Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
     ,'EMP' || Emp.Emp_Id As Emp_No2 -- Cột mới
From   Employee Emp;

Kết quả truy vấn :

5.2- SQL Distinct

Câu lệnh Distinct được sử dụng cùng với Select, dùng để select những tài liệu, bỏ lỡ những tài 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 những câu lệnh trên :

5.3- SQL Where

“Cho vay cá nhân và kinh doanh”.

  • Product_Type_Cd = ‘LOAN’.

Bạn cần truy vấn trong bảng PRODUCT, tại các vị trí có Product_Type_Cd= ‘LOAN’.
Where là câu lệnh nhằm mục đích số lượng giới hạn khoanh vùng phạm vi tìm kiếm. Chẳng hạn bạn muốn tìm kiếm những loại sản phẩm dịch vụ có kiểuBạn cần truy vấn trong bảng, tại những vị trí có


-- Truy vấn bảng Product tìm các sản phẩm dịch vụ có kiểu:
-- "Cho vay cá nhân và kinh doanh".
-- Ứng với cột Product_Type_Cd = 'LOAN'.
Select * From Product Pro Where Pro.Product_Type_Cd = 'LOAN';

Kết quả truy vấn :

Một ví dụ khác sử dụng where và nhiều điều kiện kèm theo kèm theo .

5.4- 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 list những nhân viên cấp dưới có tên bắt đầu bởi chữ S và thuộc phòng quản lý ( 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 những 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 :

5.5- SQL IN (Trong phạm vi..)

Toán tử IN được cho phép kiểm tra một giá trị có thuộc vào một tập hợp cố định và thắt chặt những giá trị nào đó không. Và nó hoàn toàn có thể thao tác với toàn bộ cac loại kiểu tài liệu .


-- Câu lệnh này tìm kiếm các nhân viên có tên
-- Susan hoặc Paula hoặc Helen.
Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp
Where  Emp.First_Name In ('Susan'
                        ,'Paula'
                        ,'Helen');

Kết quả chạy câu lệnh :

5.6- SQL Between (Nằm giữa …)


-- Tìm các nhân viên có Emp_Id trong khoảng từ 5 đến 10.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Start_Date
From   Employee Emp
Where  (Emp.Emp_Id Between 5 And 10);

-- Câu lệnh trên tương đương với:
Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Start_Date
From   Employee Emp
Where  Emp.Emp_Id >= 5
And    Emp.Emp_Id <= 10;

Kết quả câu lệnh :

  • 03-05-2002 ==> 09-08-2002  (Theo dd-MM-yyyy)

Câu lệnh BETWEEN cũng được sử dụng trong việc số lượng giới hạn thời hạn. Chẳng hạn bạn tìm kiếm những nhân viên cấp dưới bắt đầu làm trong khoảng chừng thời hạn từ


-- 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
    , -- To_Char là một hàm của Oracle.
      -- Không dùng cho DB khác.
      -- To_Char chuyển kiểu Date sang text
      -- Theo một định dạng nào đó ở đây là dd-MM-yyyy
      To_Char(Emp.Start_Date
             ,'dd-MM-yyyy') Start_Date_Vn
From   Employee Emp
Where
-- To_Date là một hàm của Oracle (Có thể ko có trên DB khác)
-- To_Date là hàm chuyển Text thành Date
-- Theo một định dạng nào đó, ở đây là dd-MM-yyyy.
( --
 Emp.Start_Date Between To_Date('03-05-2002'
                               ,'dd-MM-yyyy') And
 To_Date('09-08-2002'
        ,'dd-MM-yyyy') --
);

Kết quả chạy câu lệnh :

5.7- SQL Wildcard

  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.
Có 2 ký tự đặc biệt quan trọng trong SQL : Ý nghĩa : Hai ký tự này thường được sử dụng trong điều kiện kèm theo 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ụ :

5.8- SQL Like (Giống với ...)

Câu lệnh này tất cả chúng ta đã làm quen trên một số ít ví dụ ở trên .

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

Kết quả chạy ví dụ :

Order By bao giờ cũng đứng sau where.


-- Tìm các nhân viên có tên bắt đầu bởi S.
-- Sắp xếp giảm dần theo ngày bắt đầu vào làm việc.
Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Start_Date
From   Employee Emp
Where  Emp.First_Name Like 'S%'
Order  By Emp.Start_Date Desc;

Kết quả chạy câu lệnh :

Cú pháp Oracle: (Không phải là tiêu chuẩn của SQL, do vậy có thể không được hỗ trợ bởi Database khác)


-- Đây là cú pháp của Oracle (Có thể không được hỗ trợ bởi Database khác).
-- Sử dụng thứ tự của cột vào trong câu Order by.
-- First_Name là cột thứ 2 trong câu Select
-- Có thể sử dụng: Order by 2 thay cho Order by First_Name.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Start_Date
From   Employee Emp
Order  By 2 Desc;

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

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).
Trước hết tất cả chúng ta cần hiểu những hàm tổng hợp ( ) là gì : Đó là 1 số ít hàm tổng hợp ( ) thông dụng. Chúng hoàn toàn có thể tham gia vào câu lệnh nhóm ( ) .


-- 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 thông tin 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 những 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 sẵn có 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ả :

  • 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.
  • ...

Như vậy bạn có một cái nhìn nhìn nhận :

5.11- 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 những mô hình dịch vụ ( Product_Cd ) trên bảng Account, và chỉ hiển thị ra những mô 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ụ:

Xem thêm: Tải Microsoft Visio 2019 full-Hướng dẫn cài đặt Microsoft Visio 2019 chi tiết.


Phân biệt Where và Having
Where và Having trong cùng một câu lệnh.

  • Where là một mệnh đề để lọc bớt dữ liệu trước khi nhóm (Group)
  • Having là một mệnh đề để lọc bớt dữ liệu sau khi đã nhóm (Group)

Bạn cần phân biệtvàtrong cùng một câu lệnh .

Trường hợp bạn muốn có các thông tin tổng hợp của một chi nhánh ngân hàng (Bảng BRANCH). Bạn có thể sử dụng where để lọc bớt dữ liệu trước khi group.


Select Acc.Product_Cd
     ,Count(Acc.Product_Cd) As Count_Acc
     ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance
     ,Avg(Acc.Avail_Balance) As Avg_Avail_Balance
From   Account Acc
-- Sử dụng Where lọc bớt dữ liệu trước khi group.
Where  Acc.Open_Branch_Id = 1
Group  By Acc.Product_Cd
-- Sử dụng Having lọc bớt dữ liệu sau khi đã group
Having Count(Acc.Product_Cd) > 1;

Kết quả chạy ví dụ :

6- Các câu lệnh trèn dữ liệu (Insert)

6.1- Câu lệnh Insert Into

Cú pháp :


-- Cú pháp câu lệnh Insert Into:

INSERT INTO "table_name" ("column1", "column2", ...)
VALUES ("value1", "value2", ...);

Ví dụ bạn trèn thêm một giao dịch khách hàng vào bảng ACC_TRANSACTION:


-- Trèn 1 dòng dữ liệu vào bảng Acc_Trasaction
-- Cột Txn_ID sẽ có giá trị do Sequence Hibernate_Sequence tạo ra
-- Sysdate là hàm của Oracle lấy ra giờ hệ thống (System Date)
-- Sysdate: Giờ hiện tại.
Insert Into Acc_Transaction
  (Txn_Id
  ,Amount
  ,Funds_Avail_Date
  ,Txn_Date
  ,Txn_Type_Cd
  ,Account_Id
  ,Execution_Branch_Id
  ,Teller_Emp_Id)
Values
  (Hibernate_Sequence.Nextval -- Txn_Id
  ,100 -- Amount
  ,Sysdate -- Funds_Avail_Date
  ,Sysdate -- Txn_Date
  ,'CDT' -- Txn_Type_Cd
  ,2 -- Account_Id
  ,Null -- Execution_Branch_Id
  ,Null -- Teller_Emp_Id
   );

Sau khi thực thi câu lệnh nhấn Commit để hoàn thành, nhấn Rollback để hủy việc trèn dữ liệu:

6.2- Câu lệnh Insert Into Select

Bạn có thể sử dụng câu Select để cung cấp dữ liệu trèn vào bảng. Thông qua câu lệnh Insert Into ... Select.


-- Ngữ pháp câu lệnh INSERT INTO .. SELECT

INSERT INTO "table1" ("column1", "column2", ...)
SELECT "column3", "column4", ...
FROM "table2";

Ví dụ :


-- Trèn nhiều dòng dữ liệu vào bảng Acc_Transaction
-- Lấy dữ liệu từ câu Select.

Insert Into Acc_Transaction
  (Txn_Id
  ,Txn_Date
  ,Account_Id
  ,Txn_Type_Cd
  ,Amount
  ,Funds_Avail_Date)
  Select Hibernate_Sequence.Nextval -- Txn_Id
        ,Acc.Open_Date -- Txn_Date
        ,Acc.Account_Id -- Account_Id
        ,'CDT' -- Txn_Type_Cd
        ,200 -- Amount
        ,Acc.Open_Date -- Funds_Avail_Date
  From   Account Acc
  Where  Acc.Product_Cd = 'CD';
 

7- Câu lệnh cập nhập (Update)


-- Cú pháp câu lệnh Update:

UPDATE "table_name"
SET "column_1" = "new value 1", "column_2"= "new value 2"
WHERE "condition";

Theo logic, mỗi người mua hoàn toàn có thể có một hoặc nhiều thông tin tài khoản, mỗi thông tin tài khoản ứng với 1 mẫu sản phẩm dịch vụ của ngân hàng nhà nước .

Ví dụ bạn muốn tăng tiền trong những thông tin tài khoản của người mua có CUST_ID = 1 lên 2 % .
Câu lệnh Update :


-- Update, tăng số tiền trong tài khoản lên 2% cho khách hàng CUST_ID = 1.
Update Account Acc
Set    Acc.Avail_Balance   = Acc.Avail_Balance + 2 * Acc.Avail_Balance / 100
     ,Acc.Pending_Balance = Acc.Pending_Balance +
                            2 * Acc.Pending_Balance / 100
Where  Acc.Cust_Id = 1;

Truy vấn lại, sau khi Update .

8- Câu lệnh xóa dữ liệu (Delete)

Cú pháp xóa những bản ghi trong bảng .


-- Cú pháp xóa các dòng dữ liệu trong bảng.

DELETE FROM "table_name"
WHERE "condition";


-- Xóa 2 dòng dữ liệu trong bảng Acc_Transaction:

Delete From Acc_Transaction Txn
Where  Txt.Txn_Id In (61
                    ,62);

9- SQL Functions

9.1- SQL Count

COUNT ( ) trả về số dòng tương thích với một tiêu chuẩn đơn cử .


-- Đếm số row (dòng) có trong bảng Account

Select Count(Acc.Account_Id) From Account Acc;


Đếm số thông tin tài khoản ngân hàng nhà nước, có thanh toán giao dịch với ngân hàng nhà nước ( Bảng Acc_Transaction )


-- Đếm số tài khoản có giao dịch với ngân hàng.

Select Count(distinct txn.Account_id) From Acc_Transaction txn;


Sử dụng với Group by :
Một người mua hoàn toàn có thể mở nhiều thông tin tài khoản, mỗi thông tin tài khoản ứng với một mẫu sản phẩm dịch vụ của ngân hàng nhà nước .

Bạn muốn liệt kê những người mua ( CUST_ID ) và tương ứng là số thông tin tài khoản họ đã mở .


-- Đếm số tài khoản đã mở ứng với mỗi khách hàng.

Select Acc.Cust_Id
     ,Count(Acc.Account_Id)
From   Account Acc
Group  By Acc.Cust_Id;
 

9.2- SQL Sum

Sum là hàm dùng để tính tổng giá trị một cột trong câu SQL. ( Chỉ dùng cho cột giá trị số ) .


-- Cú pháp:

SELECT SUM("column_name")
FROM "table_name";

Ví dụ :


-- 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) 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)
From   Account Acc
Group  By Acc.Cust_Id;

9.3- SQL AVG

AVG là hàm tính trung bình trên cột. ( Chỉ dùng cho cột giá trị số ) .


-- Cú pháp:

SELECT AVG("column_name")
FROM "table_name";

Ví dụ:

-- 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)
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)
From   Account Acc
Where  Acc.Open_Branch_Id = 1
Group  By Acc.Cust_Id;

9.4- SQL MIN

Min là hàm tìm giá trị nhỏ nhất trên cột .


-- Cú pháp:

SELECT MIN ("column_name")
FROM "table_name";

Ví dụ :


-- Tìm số tiền gửi tiết kiệm nhỏ nhất.
Select Min(Acc.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)
From   Account Acc
Group  By Acc.Open_Branch_Id;

9.5- SQL MAX

Max là hàm tìm giá trị lớn nhất trên cột. Cách sử dụng giống MIN, bạn hoàn toàn có thể tìm hiểu thêm những ví dụ tại MIN .


-- Cú pháp:

SELECT MAX("column_name")
FROM "table_name";

10- 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 :

  • INNER JOIN   (JOIN)
  • LEFT OUTER JOIN  (LEFT JOIN)
  • RIGHT OUTER JOIN (RIGHT JOIN)
  • FULL OUTER JOIN    (OUTER JOIN)
  • CROSS JOIN

10.1- INNER JOIN (Hoặc JOIN)

INNER JOIN từ khóa 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 :


-- 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ụ :


-- 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 Oracle :


-- Việc INNER JOIN theo cách viết khác của Oracle thực sự đơn giản.
-- Oracle đẩ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;

10.2- LEFT OUTER JOIN (Hoặc LEFT JOIN)

LEFT OUTER JOIN là từ khóa trả về toàn bộ những hàng ( rows ) từ bảng bên trái ( table1 ), với những hàng tương ứng trong bảng bên phải ( table2 ). Chấp nhận cả tài liệu NULL ở bảng 2 .

Hãy xem hình minh họa dưới đây :

Ví dụ :


-- 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ả :

Cú pháp riêng của Oracle


-- LEFT OUTER JOIN theo cú pháp khác của Oracle.
-- Oracle đẩy điều kiện LEFT OUTER JOIN hai bảng xuống WHERE.
-- Sử dụng (+) tại Table2.
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
    ,Officer  Ofc -- Table2
Where  Cus.Cust_Id = Ofc.Cust_Id(+);

10.3- RIGHT OUTER JOIN (Hoặc RIGHT JOIN)

RIGHT OUTER JOIN ngược lại với LEFT OUTER JOIN:

10.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


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

11- Câu truy vấn con (Subquery)

Trong Oracle, một subquery là một truy vấn trong một truy vấn. Bạn hoàn toàn có thể tạo những truy vấn con trong câu lệnh SQL của bạn. Những truy vấn con hoàn toàn có thể nằm trong mệnh đề WHERE, mệnh đề FROM, hoặc mệnh đề SELECT .

11.1- Subquery trong mệnh đề Where

Khá liên tục, những 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 .


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')

11.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.


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;

11.3- Subquery trong mệnh đề Select

Một truy vấn phụ cũng có thể được tìm thấy trong mệnh đề SELECT.

Xem thêm: Tải Photoshop cc 2021 full mới nhất-Hướng dẫn cài đặt Photoshop cc 2021 chi tiết.


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 truy vấn phụ trong mệnh đề select là subquery phải trả lại một giá trị duy nhất. Đây là nguyên do tại sao một những hàm tổng hợp như hàm SUM, COUNT, MIN, hoặc MAX thường được sử dụng trong subquery .

12- Oracle PL/SQL

Bạn có thể tham khảo tiếp tài liệu lập trình Oracle PL/SQL tại đây:

Source: kubet
Category: Tải Phầm Mềm

Article by / Tải Phầm Mềm Leave a Comment

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Giới thiệu

Kubet được gọi tắt là nhà cái KU, đây là nhà cái được đổi tên từ một nhà cái nổi tiếng đó là Thiên Hạ Bet (THA). THA là nhà cái mà người chơi cá độ, lô đề hay casio online cũng không còn quá xa lạ.

Đối tác: Thienhabet

Bài viết mới nhất

  • Mơ thấy bị ngã xuống vách đá đánh con gì, có điềm báo như thế nào?
  • Em hãy tưởng tượng mình mơ thấy Thánh Gióng và hỏi ngài bí quyết, xem ngài khuyên em như thế nào?
  • Mơ Thấy Tai Nạn Giao Thông, Ô Tô Đánh Con Gì ?

chuyên mục

  • Lô đề
  • Nhà Cái
  • Tải Phầm Mềm

Liên Quan Đến

  • Thabet
  • Trang chủ chính thức nhà cái Tha bet casino.