Hướng Dẫn Học SQLe Cho Người Mới Bắt Đầu

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 33

Hng dn hc SQL cho ngi mi bt u (SQLServer)

1- Gii thiu
2- C s d liu hc SQL (LearningSQL)
3- Bt u nhanh
3.1- Cng c lm vic vi SQLServer
4- Cc cu lnh truy vn (Query)
4.1- SQL Select
4.2- SQL Distinct
4.3- SQL Where
4.4- SQL And Or (V, hoc)
4.5- SQL IN (Trong phm vi..)
4.6- SQL Between (Nm gia ...)
4.7- SQL Wildcard
4.8- SQL Like (Ging vi ...)
4.9- SQL Order By (Sp xp bi)
4.10- SQL Group By (Nhm bi ...)
4.11- SQL Having
5- Cc cu lnh trn d liu (Insert)
5.1- Cu lnh Insert Into
5.2- Cu lnh Insert Into Select
6- Cu lnh cp nhp (Update)
7- Cu lnh xa d liu (Delete)
8- SQL Functions
8.1- SQL Count
8.2- SQL Sum
8.3- SQL AVG
8.4- SQL MIN
8.5- SQL MAX
9- SQL Join
9.1- INNER JOIN (Hoc JOIN)
9.2- LEFT OUTER JOIN (Hoc LEFT JOIN)
9.3- RIGHT OUTER JOIN (Hoc RIGHT JOIN)
9.4- FULL OUTER JOIN (Hoc OUTER JOIN)
10- Cu truy vn con (Subquery)
10.1- Subquery trong mnh Where
10.2- Subquery trong mnh From
10.3- Subquery trong mnh Select

TI LIU ANG C CP NHP 85%

1- Gii thiu
Ti liu ny hng dn cho nhng ngi mi bt u lm quen vi SQL. Ti liu hng dn da trn:

SQLServer
Ni dung bao gm

Ngn ng SQL

Ng php SQL (Ng php c bn, tiu chun cho mi loi DB)

Ng php SQL ring ca SQLServer.

2- C s d liu hc SQL (LearningSQL)


Ti liu ny s dng c s d liu LearningSQL (phin bn SQLServer). Bn cn to c s d liu
tin cho vic hc (Bn ch mt khng qu 5 pht lm vic ny).
Script to c s d liu v cu trc ca c s d liu ny bn c th xem ti:

http://o7planning.org/web/fe/default/vi/document/20852/co-so-du-lieu-hoc-sql-learningsqlsqlserver

3- Bt u nhanh

3.1- Cng c lm vic vi SQLServer


y ti s dng SQLServer Management Studio 2008, mt cng c sn c sau khi bn ci
t SQLServer. Bn c th xem qua hng dn ci tSQLServer ti:

http://o7planning.org/web/fe/default/vi/document/20457/huong-dan-cai-dat-va-cau-hinhsqlserver-express-2008

4- Cc cu lnh truy vn (Query)

4.1- SQL Select

Cu lnh Select l mt cu lnh c bn nht trong SQL, mc ch l truy vn d liu trong cc bng
(Table).

PRODUCT_TYPE: Bng d liu cc kiu sn phm (Kiu dch v ca ngn hng).

y l cu lnh truy vn d liu trn bng PRODUCT_TYPE


?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

-- Truy vn d liu trn bng Product_Type


-- Truy vn ton b cc ct.
Select * From Product_Type;
-- Cu lnh truy vn trn v cu lnh di y l tng ng nhau.
-- Pty l alias (tn b danh t cho bng Product_Type).
Select Pty.* From Product_Type Pty;
-- Truy vn mt vi ct
-- C th lit k ra.
Select Pty.Product_Type_Cd
,Pty.Name
From Product_Type Pty;

Kt qu truy vn:

Truy vn d liu trn bng EMPLOYEE:


?

1
2
3
4
5
6
7
8

-- Truy vn 4 ct trn bng Employee (Bng nhn vin).


-- S dng Emp l Alias (Tn b danh) cho bng Employee.
Select Emp.Emp_Id
,Emp.First_Name
,Emp.Last_Name
,Emp.Dept_Id
From Employee Emp;

Kt qu truy vn:

t Alias cho ct:


?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

-- Hm Convert(Varchar, <intvalue>) chuyn mt s thnh ch (Varchar) (Hm ca


-- S dng ton t + ni hai chui (C th khng c h tr bi DB khc)
-- Chng ta c mt ct mi s dng 'as' nh ngha tn ct cho ct mi ny.
Select Emp.Emp_Id
,Emp.First_Name
,Emp.Last_Name
,Emp.Dept_Id
,'EMP' + Convert(Varchar,Emp.Emp_Id) As Emp_No2 -- Ct mi
From Employee Emp;
-- C th khng cn s dng 'as' trong nh ngha Alias cho ct.
Select Emp.Emp_Id
,Emp.First_Name
,Emp.Last_Name
,Emp.Dept_Id
,'EMP' + Convert(varchar,Emp.Emp_Id ) Emp_No2 -- Ct mi
From Employee Emp;

Kt qu truy vn:

4.2- SQL Distinct


Cu lnh Distinct c s dng cng vi Select, dng select cc d liu, b qua cc d liu trng
nhau. C php l:
?

Select distinct <column1>, <column2>

....

Xem v d:
?

1
2
3
4
5
6
7
8
9
10
11
12
13

-- Truy vn sn phm (Sn phm dch v ca Ngn hng)


-- Ct m sn phm, tn v kiu sn phm.
Select Pro.Product_Cd
,Pro.Name
,Pro.Product_Type_Cd
From Product Pro;
-- Truy vn cc kiu sn phm (Product_Type_Cd) trong bng Product.
-- D liu l nhiu, nhng trng nhau.
Select Pro.Product_Type_Cd from Product Pro;
-- Cn s dng Distinct loi b vic trng lp.
Select Distinct Pro.Product_Type_Cd from Product Pro;

Kt qu chy cc cu lnh trn:

4.3- SQL Where


Where l cu lnh nhm gii hn phm vi tm kim. Chng hn bn mun tm kim nhng sn phm
dch v c kiu "Cho vay c nhn v kinh doanh".

Product_Type_Cd = 'LOAN'.

Bn cn truy vn trong bng PRODUCT, ti cc v tr c Product_Type_Cd= 'LOAN'.


?

1
2
3
4

-- Truy vn bng Product tm cc sn phm dch v c kiu:


-- "Cho vay c nhn v kinh doanh".
-- ng vi ct Product_Type_Cd = 'LOAN'.
Select * From Product Pro Where Pro.Product_Type_Cd = 'LOAN';

Kt qu truy vn:

Mt v d khc s dng where v nhiu iu kin km theo.

4.4- SQL And Or (V, hoc)


And v Or l 2 lnh iu kin s dng trong where:
Chng hn bn mun tm danh sch cc nhn vin c tn bt u bi ch S v thuc phng iu hnh
(Operations).
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

-- Cu lnh tm kim cc Nhn vin c tn bt u bi ch S.


Select Emp.Emp_Id
,Emp.First_Name
,Emp.Last_Name
,Emp.Dept_Id
From Employee Emp
Where Emp.First_Name Like 'S%';
-- Cu lnh tm kim cc nhn vin c tn bt u bi ch S
-- v thuc phng iu hnh (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;

Kt qu chy cc cu truy vn:

V d vi cu lnh Or.
?

1
2
3
4
5
6
7
8
9
10

-- Tm kim cc nhn vin c tn bt u bi ch S hoc P.


-- v trong phng iu hnh (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;

Kt qu chy cu lnh:

4.5- SQL IN (Trong phm


vi..)
Cu lnh in trong where s dng trong tnh hung tm kim gi tr thuc mt tp hp nht nh.
?

1
2
3
4
5
6
7
8
9
10

-- Cu lnh ny tm kim cc nhn vin c tn


-- hoc Susan hoc Paula hoc 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');

Kt qu chy cu lnh:

4.6- SQL Between


(Nm gia ...)
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

-- Tm cc nhn vin c Emp_Id trong khong 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);
-- Cu lnh trn tng ng vi:
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;

Kt qu cu lnh:

Cu lnh BETWEEN cng c s dng trong vic gii hn thi gian. Chng hn bn tm kim cc
nhn vin bt u lm trong khong thi gian t

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

-- Cu lnh ny tm kim cc nhn vin bt u vo lm vic trong 1 khong thi


-- xc nh trong mnh where.
-- 03-05-2002 ==> 09-08-2002 (Theo dd-MM-yyyy)
Select Emp.Emp_Id
,Emp.First_Name
,Emp.Last_Name
,Emp.Start_Date
, -- Hm Convert(Varchar, <Date>, 105) chuyn Date thnh Varchar dng DD-- y l hm ca SQLServer. khng dng cho DB khc.
Convert(Varchar, Emp.Start_Date
,105) Start_Date_Vn
From Employee Emp
Where
-- Hm Convert(Datetime, <Varchar>, 105) chuyn text dng DD-MM-YYYY sang Datet
-- (y l hm ca SQLServer, c th ko c trn cc DB khc)
( -Emp.Start_Date Between Convert(Datetime, '03-05-2002'
,105) And
Convert(Datetime,'09-08-2002'
,105) -);

Kt qu chy cu lnh:

4.7- SQL
Wildcard
C 2 k t c bit trong SQL:
1. K t %
2. K t _
ngha:

% m t 0, 1 hoc nhiu k t

_ m t chnh xc mt k t.

Hai k t ny thng c s dng trong iu kin like.


?

1
2
3
4
5
6
7
8
9
10

-----

Tm kim cc Khch hng (Customer) c s FED_ID theo nh dng:


Phn trc bt k, ri ti du - , ri ti 2 k t, ri ti du -, v cui b
S dng 2 du _ minh ha rng l 2 k t.
(Mi du _ l chnh xc mt k t).

Select Cus.Cust_Id
,Cus.Fed_Id
,Cus.Address
From Customer Cus
where cus.fed_id like '%-__-%';

Kt qu chy v d:

Cu lnh ny chng ta lm quen trn mt s v d trn.

4.8SQL
Like
(Ging
vi ...)

4.9SQL
Order
By
(Sp
xp
bi)

Vic query d liu cho mt tp kt qu, m c th n sp xp khng nh mun, s dng Order by


sp xp kt qu tr v.
?

1
2
3

-- C php
SELECT "column_name"

4
5
6
7
8
9
10

FROM "table_name"
[WHERE "condition"]
ORDER BY "column_name1" [ASC, DESC], "column_name2" [ASC, DESC];
-- Ghi ch:
-- ASC: ngha l sp xp tng dn (Mc nh)
-- DESC: Ngha l sp xp gim dn.

V d:
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

-- Sp xp u tin Product_Type_Cd tng dn


-- Sau mi ti Name (Cng tng dn)
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 mc nh.


-- V vy c th ko cn vit ASC.
Select Pro.Product_Cd
,Pro.Product_Type_Cd
,Pro.Name
From Product Pro
Order By Pro.Product_Type_Cd
,Pro.Name;
-- Sp xp u tin Product_Type_Cd gim dn
-- Sau mi ti Name (Tng dn)
Select Pro.Product_Cd
,Pro.Product_Type_Cd
,Pro.Name
From Product Pro
Order By Pro.Product_Type_Cd Desc
,Pro.Name
Asc;

Kt qu chy v d:

Order By bao gi cng ng sau where.


?

1
2
3
4
5
6
7
8
9

-- Tm cc nhn vin c tn bt u bi S.
-- Sp xp gim dn theo ngy bt u vo lm vic.
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;

Kt qu chy cu lnh:

C php SQLServer: (Khng phi l tiu chun ca SQL, do vy c th khng c h tr


bi Database khc)
?

1
2
3

-----

y l c php ca SQLServer(C th khng c h tr bi Database khc).


S dng th t ca ct vo trong cu Order by.
First_Name l ct th 2 trong cu Select
C th s dng: Order by 2 thay cho Order by First_Name.

4
5
6
7
8
9
10

Select Emp.Emp_Id
,Emp.First_Name
,Emp.Last_Name
,Emp.Start_Date
From Employee Emp
Order By 2 Desc;

Trc ht chng ta cn hiu cc hm tng hp (Aggregate Functions) l g:

Sum: Hm tnh tng

Avg: Hm ly trung bnh

Count: Hm tnh s ln

Min: Hm tm gi tr nh nht

Max: Hm tm gi tr ln nht

l mt s hm tng hp (Aggregate) thng dng. Chng c th tham gia vo cu lnh nhm


(Group by).
?

1
2
3
4
5
6
7

-- Truy vn d liu trong bng Account.


Select Acc.Account_Id
,Acc.Product_Cd
,Acc.Avail_Balance
,Acc.Pending_Balance
From Account Acc;

4.10SQL
Group
By
(Nhm
bi ...)

Cu hi t ra bn mun xem tng s tin c trong ti khon, ng vi mi loi dch v (Product_Cd)


khc nhau. iu c ngha l bn cn nhm trn cc Product_Cd.
?

1
2
3
4
5
6

Select Acc.Product_Cd
,Count(Acc.Product_Cd) As Count_Acc -- S ti khon
,Sum(Acc.Avail_Balance) As Sum_Avail_Balance -- Tng s tin trong ti kho
,Avg(Acc.Avail_Balance) As Avg_Avail_Balance -- S tin trung bnh
From Account Acc
Group By Acc.Product_Cd;

Kt qu:

Nh vy bn c mt ci nhn nh gi:

C 4 ti khon tham gia dch v "Tin gi tit kim" (SAV) vi tng s tin l 1855.76 v
trung bnh mi ti khon c 463.94.

...

4.11- SQL
Having

Having l mt cu lnh iu kin ca Group by.


Gi s bn mun nhm cc loi hnh dch v (Product_Cd) trn bng Account, v ch hin th ra cc
loi hnh no c s ngi tham gia > 3.
?

1
2
3
4
5
6
7

Select Acc.Product_Cd
,Count(Acc.Product_Cd) As Count_Acc -- S ti khon
,Sum(Acc.Avail_Balance) As Sum_Avail_Balance -- Tng s tin trong ti kho
,Avg(Acc.Avail_Balance) As Avg_Avail_Balance -- S tin trung bnh
From Account Acc
Group By Acc.Product_Cd
Having Count(Acc.Product_Cd) > 3;

Kt qu chy v d:

Phn bit Where & Having


Bn cn phn bit Where v Having trong cng mt cu lnh.

Where l cu lnh lc bt d liu trc khi nhm (Group)

Having l cu lnh lc bt d liu sau khi nhm (Group)

Trng hp bn mun c cc thng tin tng hp ca mt chi nhnh ngn hng (Bng BRANCH). Bn
c th s dng where lc bt d liu trc khigroup.

1
2
3
4
5
6
7
8
9
10

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 dng Where lc bt d liu trc khi group.
Where Acc.Open_Branch_Id = 1
Group By Acc.Product_Cd
-- S dng Having lc bt d liu sau khi group
Having Count(Acc.Product_Cd) > 1;

Kt qu chy v d:

5- Cc cu lnh trn d liu (Insert)

5.1- Cu lnh Insert Into


C php:
?

1
2
3
4

-- C php cu lnh Insert Into:


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

V d bn trn thm mt giao dch khch hng vo bng ACC_TRANSACTION:


?

1
2
3
4
5

-- Trn 1 dng d liu vo bng Acc_Trasaction


-- Ct Txn_ID t ng c sinh ra.
-- (Txn_ID khng tham gia vo trong cu Insert)
-- Current_Timestamp l hm ca SQLServer ly ra gi h thng (System Date)
-- Current_Timestamp : Gi hin ti.
Insert Into Acc_Transaction

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

(Amount
,Funds_Avail_Date
,Txn_Date
,Txn_Type_Cd
,Account_Id
,Execution_Branch_Id
,Teller_Emp_Id)
Values
(100 -- Amount
,Current_Timestamp -- Funds_Avail_Date
,Current_Timestamp -- Txn_Date
,'CDT' -- Txn_Type_Cd
,2 -- Account_Id
,Null -- Execution_Branch_Id
,Null -- Teller_Emp_Id
);

5.2- Cu lnh Insert Into Select


Bn c th s dng cu Select cung cp d liu trn vo bng. Thng qua cu lnh Insert Into ...
Select.
?

1
2
3
4
5

-- Ng php cu lnh INSERT INTO .. SELECT


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

V d:
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

-- Txn_Id t sinh ra (Khng cn phi tham gia vo cu Insert)


-- Trn nhiu dng d liu vo bng Acc_Transaction
-- Ly d liu t cu Select.
Insert Into Acc_Transaction
( Txn_Date
,Account_Id
,Txn_Type_Cd
,Amount
,Funds_Avail_Date)
Select 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';

6- Cu lnh cp nhp (Update)


?

1
2
3
4
5

-- C php cu lnh Update:


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

V d bn mun tng tin trong cc ti khon ca khch hng c CUST_ID = 1 ln 2%.


Theo logic, mi khch hng c th c mt hoc nhiu ti khon, mi ti khon ng vi 1 sn
phm dch v ca ngn hng.

Cu lnh Update:
?

1
2
3
4
5

-- Update, tng s tin trong ti khon ln 2% cho khch hng CUST_ID = 1.


Update Account
Set Avail_Balance
= Avail_Balance + 2 * Avail_Balance / 100
,Pending_Balance = Pending_Balance + 2 * Pending_Balance / 100
Where Cust_Id = 1;

Truy vn li, sau khi Update.

7- Cu lnh xa d liu (Delete)


C php xa d liu trong bng.
?

1
2
3
4

-- C php xa cc dng d liu trong bng.


DELETE FROM "table_name"
WHERE "condition";

1
2
3
4
5

-- Xa 2 dng d liu trong bng Acc_Transaction:


Delete From Acc_Transaction
Where Txn_Id In (25
,26);

8.1- SQL Count

8- SQL Functions

Count l mt hm, m s dng trong cu Query. Thng thng n thng c s dng cng
vi Group by.
?

1
2
3

-- m s row (dng) c trong bng Account


Select Count(Acc.Account_Id) As Count_Acc From Account Acc;

m s ti khon ngn hng, c giao dch vi ngn hng (Bng Acc_Transaction)


?

1
2
3

-- m s ti khon c giao dch vi ngn hng.


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

S dng vi Group by:


Mt khch hng c th m nhiu ti khon, mi ti khon ng vi mt sn phm dch v ca ngn
hng.

Bn mun lit k cc khch hng (CUST_ID) v tng ng l s ti khon h m.


?

1
2
3
4
5
6

-- m s ti khon m ng vi mi khch hng.


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 hm dng tnh tng gi tr mt ct trong cu SQL.
?

1
2

-- C php:

3
4
5

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

V d:
?

1
2
3
4
5
6
7
8
9
10
11
12

-- Tnh tng s tin trong cc ti khon ca khch hng vi Cust_ID = 1


Select Sum(Acc.Avail_Balance) As Sum_Avail_Balance
From Account Acc Where Acc.Cust_Id = 1;

-- S dng vi Group by.


-- Tnh tng s tin trong ti khon ng vi mi khch hng
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 hm tnh trung bnh trn ct.
?

1
2
3
4

-- C php:
SELECT AVG("column_name")
FROM "table_name";

V d:

-- Tnh s tin trung bnh ng vi loi hnh gi tit kim.


Select Avg(Acc.Avail_Balance) As Avg_Avail_Balance

2
3
4
5
6
7
8
9
10
11
12
13
14
15

From Account Acc


Where Acc.Product_Cd = 'SAV';

-- S dng vi Group by.


-- Mt khch hng c th c 1 hoc nhiu ti khon.
-- Tnh s tin trung bnh mi ti khon ng vi tng khch hng
-- (ti ngn hng 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 hm tm gi tr nh nht trn ct.
?

1
2
3
4

-- C php:
SELECT MIN ("column_name")
FROM "table_name";

V d:
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14

-- Tm s tin gi tit kim nh nht.


Select Min(Acc.Avail_Balance) As Min_Avail_Balance
From Account Acc
Where Acc.Product_Cd = 'SAV';

-- S dng vi Group by.


-- Mt khch hng c th c 1 hoc nhiu ti khon.
-- M ti cc chi nhnh khc nhau.
-- Tm s tin trong ti khon nh nht ng vi tng chi nhnh
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


Min l hm tm gi tr ln nht trn ct. Cch s dng ging MIN, bn c th tham kho cc v d ti
MIN.
?

1
2
3
4

-- C php:
SELECT MAX("column_name")
FROM "table_name";

9- SQL Join
t ra mt tnh hung bn xem thng tin mt nhn vin trong bng EMPLOYEE. Bn c th thy
nhn vin bit ID phng ban ca nhn vin ny. Nhng l mt con s v ngha. Mun bit tn
phng ban, bn phi tra cu sang bng DEPARTMENT. Vic ni 2 bng vi nhau c mt thng
tin y c gi l JOIN.

C 4 hnh thc Join:

INNER JOIN (JOIN)

LEFT OUTER JOIN (LEFT JOIN)

RIGHT OUTER JOIN (RIGHT JOIN)

FULL OUTER JOIN

CROSS JOIN

(OUTER JOIN)

9.1- INNER JOIN (Hoc JOIN)


INNER JOIN t kha chn tt c cc dng t hai bng min l c s n khp d liu gia cc ct
trong c hai bng.

C php:
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

-- C php
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
-- C th thay INNER JOIN bi JOIN
-- ngha v kt 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 bng 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 php ring ca SQLServer:


?

1
2
3
4
5
6
7
8
9
10
11
12
13

-- C php ny cng c h tr bi Oracle & MySQL


-- Vic INNER JOIN theo cch vit khc ca SQLServer thc s n gin.
-- SQLServer y iu kin JOIN hai bng xung 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 (Hoc LEFT JOIN)


LEFT OUTER JOIN l t kha tr v tt c cc hng (rows) t bng bn tri (table1), vi cc hng
tng ng trong bng bn phi (table2). Chp nhn c d liu NULL bng 2.

Hy xem hnh minh ha di 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 bi LEFT JOIN ( ngha v kt qu l ging n
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;

Kt qu:

9.3- RIGHT OUTER JOIN (Hoc RIGHT


JOIN)
RIGHT OUTER JOIN ngc li vi LEFT OUTER JOIN:

9.4- FULL OUTER JOIN (Hoc OUTER


JOIN)
FULL OUTER JOIN l s kt hp ca LEFT OUTER JOIN v RIGHT OUTER JOIN

1
2

-- C php: (FULL OUTER JOIN)


-- C th vit FULL JOIN

3
4
5
6
7
8

SELECT columns
FROM table1
FULL [OUTER] JOIN table2
ON table1.column = table2.column;

10- Cu truy vn con


(Subquery)
Trong SQLServer, mt subquery l mt truy vn trong mt truy vn. Bn c th to cc truy vn con
trong cu lnh SQL ca bn. Nhng truy vn con c th nm trong mnh WHERE, mnh
FROM, hoc mnh SELECT.

10.1- Subquery trong mnh Where


Kh thng xuyn, cc subquery s c tm thy trong mnh WHERE. Nhng truy vn con cn
c gi l truy vn con lng 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 mnh From


Mt truy vn ph cng c th c tm thy trong mnh FROM. Chng c gi l inline views.
?

1
2
3
4
5
6
7
8
9
10
11
12

Select Cus.Cust_Id
,Cus.Address
,Cus.Fed_Id
,Acc2.Sum_Avail_Balance
From Customer Cus
, -- Cu Subquery nh ngha 1 bng 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 mnh Select


Mt truy vn ph cng c th c tm thy trong mnh SELECT.
?

1
2
3
4

Select Cus.Cust_Id
,Cus.Address
,Cus.Fed_Id
,(Select Sum(Acc.Avail_Balance)
From Account Acc

5
6
7
8

Where Acc.Cust_Id = Cus.Cust_Id) As Sum_Avail_Balance


From Customer Cus;

You might also like