You are on page 1of 23

MỤC LỤC

MỤC LỤC..............................................................................................................................................1
1 GIỚI THIỆU.............................................................................................................................3

2 CÁC KHÁI NIỆM VÀ VIẾT TẮT.........................................................................................4


2.1 VIẾT TẮT................................................................................................................................................4

2.2 CÁC KHÁI NIỆM...................................................................................................................................4


2.2.1 IP.................................................................................................................................................................................. 4

2.2.2 Host của window.........................................................................................................................................................4

2.2.3 DNS.............................................................................................................................................................................. 4

2.2.4 TNS_NAME................................................................................................................................................................5

3 CSDL QUAN HỆ......................................................................................................................6


3.1 Khái niệm CSDL......................................................................................................................................6
3.1.1 UK, PK, FK.................................................................................................................................................................6

3.1.2 Alias – bí danh............................................................................................................................................................6

3.1.3 Cách đọc quan hệ.......................................................................................................................................................6

4 SQL Select.................................................................................................................................8
4.1 Các mệnh đề chính và câu hỏi nghiệp vụ để viết select........................................................................8

4.2 Lưu ý khi đọc cú pháp mệnh đề của oracle...........................................................................................8

4.3 SQL...........................................................................................................................................................8
4.3.1 Select tất cả các cột.....................................................................................................................................................8

4.3.2 Để loại bỏ những dòng trùng nhau...........................................................................................................................8

4.3.3 Đặt alias – bí danh cho cột trong mệnh đề select cần tuân thủ 1 số quy tắc sau:.................................................9

4.3.4 Mệnh đề sắp xếp dữ liệu............................................................................................................................................9

4.3.5 Một số toán tử so sánh...............................................................................................................................................9

4.3.6 Một số điều kiện so sánh logic.................................................................................................................................10

4.4 Một số hàm thường dùng......................................................................................................................10


4.4.1 Hàm với chuỗi ký tự.................................................................................................................................................10

4.4.2 Hàm kiểu số...............................................................................................................................................................11

4.4.3 Hàm kiểu date...........................................................................................................................................................11

4.4.4 Các hàm chuyển đổi.................................................................................................................................................12

4.4.5 Các hàm chung.........................................................................................................................................................13

4.4.6 Hàm rẽ nhánh...........................................................................................................................................................14


4.5 Select từ nhiều bảng...............................................................................................................................14

723226974.docx Trang 2 / 23
1 GIỚI THIỆU
Ngày Tác giả Ghi chú

21-jun-18 Nguyễn Văn Biên Bắt đầu viết

 Tài liệu này nhằm mục đích giúp cho nghiệp vụ nắm được CSDL và có thể select
kiểm soát được luồng dữ liệu
 Tài liệu này viết cho nghiệp vụ nên có những khái niệm đối với kỹ thuật đã biết có
thể sẽ hơi nhàm chán

723226974.docx Trang 3 / 23
2 CÁC KHÁI NIỆM VÀ VIẾT TẮT

2.1 VIẾT TẮT


 CSDL: cơ sở dữ liệu, trong tài liệu này chỉ làm việc với CSDL oracle

2.2 CÁC KHÁI NIỆM

2.2.1 IP
 https://vi.wikipedia.org/wiki/%C4%90%E1%BB%8Ba_ch%E1%BB%89_IP
 Địa chỉ IP (IP là viết tắt của từ tiếng Anh: Internet Protocol - giao thức Internet) là
một địa chỉ đơn nhất mà những thiết bị điện tử hiện nay đang sử dụng để nhận diện
và liên lạc với nhau trên mạng máy tính bằng cách sử dụng giao thức Internet.
 IP là 1 dãy số gồm 4 phân đoạn cách nhau bởi dấu chấm, trong đó mỗi phân đoạn có
thể nhận giá trị từ 0 đến 255, ví dụ: 192.168.1.10
 IP cần phải hiểu rộng hơn là địa chỉ duy nhất trong 1 vùng nào đó, vùng đó có thể là
o Router: thiết bị modem hay wifi
o LAN: mạng của phòng, văn phòng hay công ty
o WAN: mạng của công ty hay tổng công ty
o Internet: toàn thế giới

2.2.2 Host của window


 Nhiều khi bạn cần truy cập vào 1 server nào đó thông qua browser hoặc web
browser (trình duyệt web) thì cần biết IP (địa chỉ) của server đó, nhưng IP là dãy số
vô nghĩa nên rất khó nhớ  vì vậy window hỗ trợ bạn định nghĩa IP đó gắn với 1
tên cụ thể (có nghĩa) do bạn tự đặt ra (tên này có thể chỉ có nghĩa đối với bạn mà
không có nghĩa đối với người khác), ví dụ: 118.69.33.123 PERP_ONLINE
 Vị trí file host của window: <ổ đĩa cài win>\Windows\System32\drivers\etc
o Nếu bạn cài window trên ổ đĩa C thì vị trí của nó là: c:\Windows\System32\
drivers\etc

2.2.3 DNS
 https://vi.wikipedia.org/wiki/Domain_Name_System

723226974.docx Trang 4 / 23
 DNS (viết tắt trong tiếng Anh của Domain Name System - Hệ thống tên miền) là
một hệ thống cho phép thiết lập tương ứng giữa địa chỉ IP và tên miền trên Internet.
 Cũng giống như host của window nhưng host trên window thì tên đó chỉ có ý nghĩa
với thiết bị của bạn, còn DNS là tên được định nghĩa chung trên internet và ai cũng
dùng được.

2.2.4 TNS_NAME
 Đây là nơi định nghĩa 1 bí danh (alias) để kết nối tới CSDL oracle
 Mỗi khi bạn cài 1 sản phẩm của oracle như database full, database client, developer
suite, … sẽ tạo ra 1 oracle_home (là 1 thư mục riêng) trên máy của bạn, mỗi
oracle_home sẽ có 1 file tns_name.ora
 Vị trí của file tns_name.ora thông thường là: <oracle_home>\network\admin

2.2.5 Cách tìm file tns_name từ pl/sql developer

723226974.docx Trang 5 / 23
3 CSDL QUAN HỆ

3.1 Khái niệm CSDL


 Tham khảo: https://hoc247.net/tin-hoc-12/bai-10-co-so-du-lieu-quan-he-l6294.html
 CSDL xây dựng dựa trên mô hình dữ liệu quan hệ gọi là CSDL quan hệ
 Mô hình dữ liệu quan hệ:
o Dữ liệu được thể hiện trong các bảng (hay còn gọi là thực thể, đối tượng)
o Mỗi bảng bao gồm các cột và các dòng thể hiện thông tin của thực thể
o Các cột thể hiện các thuộc tính của thực thể
o Mỗi dòng thể hiện 1 cá thể của thực thể

3.1.1 UK, PK, FK


 NULL: là giá trị chưa xác định, nó không phải là khoảng trắng

 Khóa duy nhất (UK): Là 1 bộ giá trị của các cột xác định duy nhất 1 dòng trong
bảng
- 2 UK trong cùng 1 dòng giống nhau mới tính valid
Ví dụ: EMPLOYEES
A-A, MSNV: ABC STT 1 -> được trùng vì MSNV đã ko còn duy nhất
A-B, MSNV: ABC STT 2 -> được trùng vì MSNV đã ko còn duy nhất
A-A, MSNV: ABC STT 1-> không được trùng báo lỗi
Mỗi UK sẽ có nhiều cột:
Null cũng là giá trị, chẳng qua là chưa xác định nên UK vẫn áp được
A-Null, MSNV: ABC STT Null – Insert lần 1
A-Null, MSNV: ABC STT Null –> Không insert được
Khi select 2 UK sẽ cho đúng row đó

 Khóa chính (PK): là khóa duy nhất UK và các cột của nó không chứa giá trị null
 Khóa ngoại (FK): được xem như tham chiếu (con trỏ) trỏ tới khóa chính của 1 bảng
khác

3.1.2 Alias – bí danh


 Nhiều tên dài khi viết sẽ mất thời gian nên cần viết ngắn lại gọi là alias – bí danh
 Bí danh thông thường có 3 ký tự:

723226974.docx Trang 6 / 23
o Đối với tên có 3 từ thì lấy 3 chữ cái đầu của mỗi từ: PRO_FORMA_INVS -->
PFI
o Đối với tên có 2 từ thì lấy 1 chữ của từ đầu và 2 chữ của từ sau:
SALES_INVOICES --> SIN
o Đối với tên có 1 từ thì lấy 3 chữ cái đầu: EMPLOYEES --> EMP
o sys_bi_co_logo  bcl

3.1.3 Cách đọc quan hệ


 Để biết được quan hệ giữa 2 thực thể A, B thì cần phải đọc được mối liên hệ từ A tới
B và ngược lại từ B về A.
 Trên hệ thống về mặt quan hệ chỉ thể hiện được quan hệ 1-n (một – nhiều), khi đó
khóa chính của bảng 1 được mang sang làm khóa ngoài (khóa tham chiếu) của bảng
nhiều  khi biết bảng B có cột tham chiếu tới khóa chính của A thì có nghĩa quan
hệ A-B là quan hệ 1-n (1 A - nhiều B)
 Cách đọc:
o 1-n: 1 Phiếu xuất (DHE) có 1 hoặc nhiều chi tiết xuất (DLI)
o n-1: 1 chi tiết xuất (DLI) thuộc về 1 và chỉ 1 phiếu xuất (DHE)
o 1-n: receipt_headers: phiếu nhập receipt_lines chi tiết phiếu nhập

 Quan hệ DHE-DLI là 1-n, cách thể trên mô hình quan hệ như sau:

 Muốn thể quan hiện quan hệ n-n (nhiều-nhiều) giữa 2 thực thể thì cần tạo 1 thực thể
trung gian và 2 thực thể gốc sẽ có quan hệ 1-n với thực thể trung gian này.
o Ví dụ 1: Trong nghiệp vụ kho, phương pháp FIFO:
- 1 chi tiết nhập (RLI) có thể được xuất bởi 1 hoặc nhiều chi tiết xuất (DLI)
- 1 chi tiết xuất (DLI) có thể xuất cho 1 hoặc nhiều chi tiết nhập (RLI)
 Bảng trung gian của quan hệ này là RDE, cách thể hiện trên mô hình quan hệ như sau:

723226974.docx Trang 7 / 23
4 SQL Select

4.1 Các mệnh đề chính và câu hỏi nghiệp vụ để viết select


 Các mệnh đề chính
o Select
o From
o Where
o Group by
o Having
o Order by
 Cần trả lời các câu hỏi để đưa vào các mệnh đề cho đúng
o Lấy dữ liệu từ đâu --> đưa vào from
o Cần những thông tin gì --> các cột đưa vào select
o viết đk join nếu nhiều bảng --> where
o Điều kiện lấy dữ liệu --> where
o có nhóm dữ liệu hay không? --> group by
o có lọc dữ liệu nhóm hay không? --> having
o có sắp xếp dữ liệu hay không? --> order by

4.2 Lưu ý khi đọc cú pháp mệnh đề của oracle


 Ví dụ có cú pháp mệnh đề select cơ bản như sau:
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table;
 | là hoặc, có nghĩa trong mệnh đề SELECT ở trên thì bắt buộc là * hoặc
{[DISTINCT] column|expression [alias],...}
 {}: trong cặp ngoặc nhọn này là bắt buộc
 [ ]: trong cặp ngoặc vuông này là tùy chọn

4.3 SQL

4.3.1 Select tất cả các cột


*: dùng trong mệnh đề select để lấy ra tất cả các cột

723226974.docx Trang 8 / 23
4.3.2 Để loại bỏ những dòng trùng nhau
 Dùng từ khóa distinct để loại những dòng trùng nhau (trùng giá trị ở tất cả các cột)
 Từ khóa distinct đứng ngay sau từ khóa select và trước tất cả các cột và chỉ xuất
hiện 1 lần

4.3.3 Đặt alias – bí danh cho cột trong mệnh đề select cần tuân thủ 1 số quy
tắc sau:
 Tên cột và tên bí danh cần cách nhau dấu cách hoặc từ khóa “ as ” (có khoảng cách
2 bên từ khóa “as”)
Vd: Select * From Vbis_Accounts Vac
Select * From Sys_App_Parameters Sap
Select * From sys_bi_co_logo Slo
 Mặc định bí danh sẽ được viết hoa ở kết quả, Nếu bí danh có khoảng cách hoặc
muốn viết Hoa chữ cái đầu thì để tên bí danh trong dấu ngoặc kép “”
Vd: select 'abc' as "ab c" from dual

4.3.4 Mệnh đề sắp xếp dữ liệu


 Cú pháp: Order by {số thứ tự cột trong mệnh đề|bí danh cột|tên cột không có trong
mệnh đề select [desc] [nulls last|first], …}
o desc là sắp xếp giảm dần, mặc định là sắp xếp tăng dần
o Nulls last|first: những giá trị null sẽ sắp xếp ở đầu hay cuối
o Select *
o From Receipt_Headers
o Order By Case
o When Receiver Is Null Then
o 1
o Else
o 0
o End
o ,Receiver Desc

4.3.5 Một số toán tử so sánh


 Toán tử so sánh như trong toán học:
o >: Lớn hơn
o <: nhỏ hơn
o =: bằng

723226974.docx Trang 9 / 23
o >=: Lớn hơn hoặc bằng
o <=: nhỏ hơn hoặc bằng
o <>: Khác
o !=: Khác
 Toán tử so sánh trong SQL
o Between … And … : nằm giữa 2 giá trị bao gồm cả đầu mút (= 2 giá trị đó)
o select * from vbis_accounts where pos_id between 299
and 319;
o In: trong 1 tập hợp giá trị
- Tập này có thể là tập giá trị liệt kê trong ()

- Tập này có thể 1 truy vấn con (subquery)


- select * from vbis_accounts vac where vac.pos_id
in (select pos.pos_id from positions pos where
pos.pos_id = vac.pos_id)
o Like: giống khuôn mẫu
- %: thay thế cho 0 hoặc nhiều ký tự
- _: thay thế cho 1 ký tự
o Is Null: là giá trị Null, để so sánh với giá trị Null bắt buộc phải dùng “is” hoặc
“is not”
select * from vbis_accounts vac where exists (select
pos.pos_id from positions pos where pos.pos_id =
vac.pos_id)

4.3.6 Một số điều kiện so sánh logic


 And: đúng khi cả 2 điều kiện thành phần đúng
 OR: đúng khi 1 trong 2 điều kiện thành phần đúng
 NOT: đúng khi điều kiện sai, một số toán tử dùng NOT như
o Not IN
o Not Between … And…
Nếu trong câu lệnh vừa có OR và And thì điều kiện OR nên đặt trong ngoặc () vì câu
lệnh đọc hiểu theo tuần tự.

4.4 Một số hàm thường dùng

723226974.docx Trang 10 / 23
4.4.1 Hàm với chuỗi ký tự
 Nối cột hoặc biểu thức: ||

o Nếu là kiểu date hoặc ký tự thì cần để trong nháy đơn


Date để trong nháy đơn ko ra được kết quả
 Lower: trả về chữ thường
 Upper: trả về chữ hoa
 Initcap: trả về chữ hoa mỗi chữ cái đầu tiên của mỗi từ

 Concat: nối các cột hoặc các chuỗi


 substr(str, pos, [len]): cắt chuỗi str, từ vị trí pos, với độ dài len
o Lưu ý: pos có thể < 0: substr(emp.name,-3) ba_ky_tu_cuoi
 instr(str1, str2, [pos], [nth]): tìm vị trí chuỗi str2 trong chuối str1, tìm từ vị trí pos và
lần xuất hiện thứ nth.
o Lưu ý pos có thể < 0, khi đó sẽ tìm từ bên phải sang trái chuỗi str1
 lpad(str1,LEN,PAD): thêm vào bên trái chuỗi str1 với ký tự PAD cho đủ độ dài len
 rpad tương tự lpad nhưng thêm vào bên phải
 trim: cắt hai bên
Select Trim('H' From 'HellHoWorldH') Cat_Ky_Tu_Chi_Ro
,Trim(' fdsfds fds ') Cat_Khoang_Trang
From Dual

723226974.docx Trang 11 / 23
 length(str): trả về độ dài của chuỗi str

4.4.2 Hàm kiểu số


 ROUND(so, [right]): làm tròn
o mặc định right = 0
o nếu right > 0 thì làm tròn đến số thập phân
o nếu right < 0 thì làm tròn đến phần nguyên
Select Round('45678.5678', 3)
,Round('45678.5678', -3)
From Dual
 TRUNC(so, [right]): làm tròn xuống
Select Trunc('45678.5678', 3)
,Trunc('45678.5678', -3)
From Dual
 MOD: tương tự excel, chia lấy dư
mod(10,3) = 1

4.4.3 Hàm kiểu date


 months_between(d1, d2): trả về số tháng giữa 2 ngày d1 và d2
o d1 > d2 kết quả trả về > 0
o d1 < d2 kết quả trả về < 0
 add_months(Date, nMon): thêm số tháng nMon vào ngày Date
 next_day(date, 'Thứ'): tìm thứ gần nhất sau ngày date
 last_day(date): tìm ngày cuối tháng (dương lịch) chứa ngày Date
 round: làm tròn
 truncate: cắt

723226974.docx Trang 12 / 23
4.4.4 Các hàm chuyển đổi
 Chuyển đổi tường minh

4.4.4.1 To_Char(date, ‘format_model’): hàm chuyển đối date thành ký tự


 format_model:
o phải đặt trong nháy đơn, có phân biệt hoa thường
o có thể bao gồm bất kỳ thành phần định dạng ngày tháng hợp lệ
o có thể có “fm” để xóa khoảng trắng và số 0 phía trước
 Các định dạng ngày tháng
o YYYY: hiển thị năm đầy đủ với 4 số
o RRRR: hiển thị năm đầy đủ với 4 số

723226974.docx Trang 13 / 23
o YEAR: đánh vần năm theo tiếng anh
o MM: hiển thị tháng với 2 số
o MONTH: Tên tháng đầy đủ theo tiếng anh
o MON: 3 chữ cái đầu của tháng theo tiếng anh
o DY: 3 chữ cái đầu của thứ trong tuần
o DAY: đầy đủ tên thứ trong tuần
o DD: hiển thị ngày trong tháng với 2 số
o HH24: giờ dạng 24
o MI: phút
o SS: giây
o AM: hiển thị AM (sáng), PM (chiều)

4.4.4.2 To_Char(number, ‘format_model’): hàm chuyển đối số thành ký tự


 format_model:
o 9: hiển thị số khi số đó có nghĩa
o 0: hiển thị 1 số 0 đối với số ko có nghĩa
o .: dấu chấm thập phân
o D: dấu chấm thập phân
o ,: dấu phẩy ngăn cách hàng nghìn
o G: dấu phẩy ngăn cách hàng nghìn

4.4.4.3 To_number(char[, ‘format_model’]): hàm chuyển đối ký tự thành số


 format_model giống với format_model phần to_char(number, ‘format_model’)
nhưng lưu ý là nó phải phù hợp chính xác với chuỗi đối “char”

4.4.4.4 To_Date(char[, ‘format_model’]): hàm chuyển đối ký tự thành ngày tháng


 format_model giống với format_model phần to_char(date, ‘format_model’) nhưng
lưu ý là nó phải phù hợp chính xác với chuỗi đối “char”

4.4.5 Các hàm chung


 NVL(expr1,expr2): expr1 not null trả về expr1, ngược lại trả về expr2

723226974.docx Trang 14 / 23
 NVL2(expr1,expr2,expr3): expr1 not null trả về expr2, ngược lại trả về expr3
 NULLIF(expr1, expr2): trả về null nếu 2 thằng bằng nhau, trả về expr1 nếu khác
nhau
 COALESCE (expr1, expr2, ..., exprn): trả về biểu thức not null đầu tiên

4.4.6 Hàm rẽ nhánh


 DECODE:
DECODE(col|expression, search1, result1
[, search2, result2,...,]
[, default])
o So sánh col|expression với những đk search, thỏa mãn cái nào thì trả lại result
tương ứng, không thỏa mãn đk search nào thì trả về default
 Case when
o Cú pháp 1:
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
- Nếu expr = comparison_expr1 thì trả về return_expr1, … ngược lại không
bằng when nào thì trả về else_expr
o Cú pháp 2:
CASE when bt1 = dk1 then kq1
[when bt2 = dk2 then kq2
When btn = dkn then kqn
Else kq_else]
END
- Nếu bt1 = dk1 thì trả về kq1, … ngược lại không đk so sánh nào đúng trả
về kq_else

4.5 Select từ nhiều bảng


 Để join 2 bảng thì lấy khóa chính của bảng này join với khóa ngoài của bảng kia
 Nếu lấy dữ liệu từ n bảng thì cần tối thiếu (n-1) điều kiện join
 Join ngoài: dấu (+) đặt bên thiếu thông tin

4.6 Nhóm dữ liệu


 Cần nhóm thông tin gì thì sẽ đưa vào mệnh đề group by
 Cần lọc thông tin những nhóm nào thì đưa điều kiện vào having

723226974.docx Trang 15 / 23
 Những cột nào trên mệnh đề select không sử dụng hàm nhóm thì phải đưa vào mệnh
đề group by

4.6.1 Một số hàm nhóm


 Max: lấy giá lớn nhất
 Min: lấy giá trị bé nhất
 Sum: tính tổng
 Avg: tính trung bình trên các dòng có giá trị not nul
 Count([distinct] *|col): đếm số lượng dòng bỏ qua dòng có giá trị null
o Distinct: đếm các giá trị không lặp
 Ví dụ:
Select Sup.Short_Name
,Sum(Rli.Accounted_Amount) s_Amt
,Max(Rhe.Receipt_Date) Ngay_Nhap_Sc
,Count(*) Sl_Ct
,Count(Distinct Rhe.Rhe_Id) Sl_Pn
,Avg(Rli.Accounted_Amount) Tb_Theo_Ct
,Sum(Rli.Accounted_Amount) / Count(Distinct Rhe.Rhe_Id)
Tb_Theo_So_Pn
From Receipt_Headers Rhe
,Suppliers Sup
,Receipt_Lines Rli
Where 1 = 1
And Rhe.Sup_Code = Sup.Sup_Code
And Rhe.Rhe_Id = Rli.Rhe_Id
And Rhe.Ape_Id = '2-2018'
And Rhe.Received = 'Y'
Group By Sup.Name
,Sup.Short_Name
Having Sum(Rli.Accounted_Amount) > 1500000000
Order By s_Amt Desc

723226974.docx Trang 16 / 23
5 Một số câu lệnh hỗ trợ

5.1 Một số view của DB


 DBA_TABLES: Lưu toàn bộ bảng của DB
 DBA_TAB_COLS: Lưu toàn bộ cột của DB
 DBA_CONSTRAINTS: Lưu các ràng buộc của toàn bộ DB
 DBA_CONS_COLUMNS: Lưu các cột của ràng buộc trong toàn bộ DB
 USER_TABLES: Lưu các bảng của userdb đang connect
 USER_TAB_COLS: Lưu các cột của userdb đang connect
 USER_CONSTRAINTS: Lưu các ràng buộc của userdb đang connect
 USER_CONS_COLUMNS: Lưu các cột của ràng buộc trong userdb đang connect

5.2 Câu lệnh tìm khóa chính của 1 bảng


 Nếu có quyền DBA
Select Con.Constraint_Name
,Con.Table_Name
,Cco.Column_Name
From Dba_Constraints Con
,Dba_Cons_Columns Cco
Where 1 = 1
And Con.Constraint_Name = Cco.Constraint_Name
And Con.Owner = Cco.Owner
And Con.Owner = 'PERP5' -- Userdb
And Con.Table_Name = 'DISPATCH_LINES' -- Bang
And Con.Constraint_Type = 'P' -- Primary - khoa chinh
 Nếu không có quyền DBA thì connect vào userdb chứa bảng cần tìm
Select Con.Constraint_Name
,Con.Table_Name
,Cco.Column_Name
From User_Constraints Con
,User_Cons_Columns Cco
Where 1 = 1
And Con.Constraint_Name = Cco.Constraint_Name
And Con.Table_Name = 'DISPATCH_LINES' -- Bang
And Con.Constraint_Type = 'P' -- Primary - khoa chinh
 Có thể xem trong pl/sql

723226974.docx Trang 17 / 23
5.3 Câu lệnh tìm các bảng tham chiếu đến 1 bảng cho trước
Select Uco_Pk.Table_Name
,Uco_Pk.Constraint_Name
,Uco_Fk.Table_Name Bang_Fk
From User_Constraints Uco_Pk
,User_Constraints Uco_Fk
Where 1 = 1
And Uco_Pk.Constraint_Type = 'P'
And Uco_Pk.Constraint_Name = Uco_Fk.r_Constraint_Name
And Uco_Fk.Constraint_Type = 'R'
And Uco_Pk.Table_Name = 'INVOICES';

5.4 Tìm các bảng trung gian của 2 bảng


Select Bang_a.Bang_Fk
From (Select Uco_Pk.Table_Name
,Uco_Pk.Constraint_Name
,Uco_Fk.Table_Name Bang_Fk
From User_Constraints Uco_Pk
,User_Constraints Uco_Fk
Where 1 = 1
And Uco_Pk.Constraint_Type = 'P'
And Uco_Pk.Constraint_Name =
Uco_Fk.r_Constraint_Name
And Uco_Fk.Constraint_Type = 'R'
And Uco_Pk.Table_Name = 'INVOICES') Bang_a
,(Select Uco_Pk.Table_Name
,Uco_Pk.Constraint_Name
,Uco_Fk.Table_Name Bang_Fk

723226974.docx Trang 18 / 23
From User_Constraints Uco_Pk
,User_Constraints Uco_Fk
Where 1 = 1
And Uco_Pk.Constraint_Type = 'P'
And Uco_Pk.Constraint_Name =
Uco_Fk.r_Constraint_Name
And Uco_Fk.Constraint_Type = 'R'
And Uco_Pk.Table_Name = 'PAYMENTS') Bang_b
Where 1 = 1
And Bang_a.Bang_Fk = Bang_b.Bang_Fk

5.5 Tìm bảng khi biết alias (chỉ đúng 80%)


Select Uco.Table_Name
From User_Constraints Uco
Where 1 = 1
And Uco.Constraint_Name Like '%IED%'
And Uco.Constraint_Type = 'P'

5.6 Tìm domain khi biết vài giá trị của nó (CRC)
Select d_1.Rv_Domain
From (Select Crc.Rv_Domain
From Cg_Ref_Codes Crc
Where 1 = 1
And Crc.Rv_Low_Value In ('I')) d_1
,(Select Crc.Rv_Domain
From Cg_Ref_Codes Crc
Where 1 = 1
And Crc.Rv_Low_Value In ('K')) d_2
,(Select Crc.Rv_Domain
From Cg_Ref_Codes Crc
Where 1 = 1
And Crc.Rv_Low_Value In ('L')) d_3
Where 1 = 1
And d_1.Rv_Domain = d_2.Rv_Domain
And d_3.Rv_Domain = d_2.Rv_Domain;
--
Select *
From Cg_Ref_Codes Crc
Where 1 = 1
And Crc.Rv_Domain = 'DISTRIBUTION TYPE';

723226974.docx Trang 19 / 23
6 Bài tập
1. Đếm số phiếu xuất và số phiếu đã xác nhận xuất trong mỗi kỳ
2.

723226974.docx Trang 20 / 23
7 Luồng dữ liệu

723226974.docx Trang 21 / 23
8 SQL Select nâng cao dành cho KT

8.1 Union, Minus


8.2 Select tree


8.3 With

8.4 Subquery
 Exists
 Not exists

8.5 DML

8.5.1 Insert
 Insert Into table_name[(column1, …)] values(value1, …);
 Insert Into table_name values v_rec_tab;
 Insert into table_name[(column1, …)] select value1, … from table…;

8.5.2 Update

8.5.3 Delete

723226974.docx Trang 22 / 23
8.5.4 Merge
 Ss

8.6 Analytic function


 https://docs.oracle.com/cd/E11882_01/server.112/e41084/
functions004.htm#SQLRF06174
 Lag
 Lead
 listagg
 Các hàm nhóm

8.7 Select biến cột thành dòng


 Sử dụng unpivot
 Ví dụ trên môi trường nscc
Select Bde_Id
,Thang
,Substr(Replace(Thang, 'BUDGET_VALUE'), 2) Thang
,Value
From Budget_Details Bde Unpivot(Value For Thang
In(M1budget_Value, M2budget_Value, M12budget_Value));

723226974.docx Trang 23 / 23

You might also like