Các Loại JOIN Trong SQL Server


Diễn đàn chia sẻ kiến thức, kinh nghiệm về IT và cuộc sống!
 
Trang ChínhGalleryTìm kiếmLatest imagesĐăng kýĐăng Nhập
Top posters
Sakura (1124)
Các Loại JOIN Trong SQL Server Vote_lcapCác Loại JOIN Trong SQL Server Voting_barCác Loại JOIN Trong SQL Server Vote_rcap 
hotboy (705)
Các Loại JOIN Trong SQL Server Vote_lcapCác Loại JOIN Trong SQL Server Voting_barCác Loại JOIN Trong SQL Server Vote_rcap 
Già Làng (373)
Các Loại JOIN Trong SQL Server Vote_lcapCác Loại JOIN Trong SQL Server Voting_barCác Loại JOIN Trong SQL Server Vote_rcap 
con_ca_nho90 (289)
Các Loại JOIN Trong SQL Server Vote_lcapCác Loại JOIN Trong SQL Server Voting_barCác Loại JOIN Trong SQL Server Vote_rcap 
that_true (154)
Các Loại JOIN Trong SQL Server Vote_lcapCác Loại JOIN Trong SQL Server Voting_barCác Loại JOIN Trong SQL Server Vote_rcap 
theanhkkt (143)
Các Loại JOIN Trong SQL Server Vote_lcapCác Loại JOIN Trong SQL Server Voting_barCác Loại JOIN Trong SQL Server Vote_rcap 
phamay (137)
Các Loại JOIN Trong SQL Server Vote_lcapCác Loại JOIN Trong SQL Server Voting_barCác Loại JOIN Trong SQL Server Vote_rcap 
lovelonelyman (134)
Các Loại JOIN Trong SQL Server Vote_lcapCác Loại JOIN Trong SQL Server Voting_barCác Loại JOIN Trong SQL Server Vote_rcap 
o0ovioletstaro0o (128)
Các Loại JOIN Trong SQL Server Vote_lcapCác Loại JOIN Trong SQL Server Voting_barCác Loại JOIN Trong SQL Server Vote_rcap 
stevenhung (122)
Các Loại JOIN Trong SQL Server Vote_lcapCác Loại JOIN Trong SQL Server Voting_barCác Loại JOIN Trong SQL Server Vote_rcap 
Âm - Dương lịch
Clock
Logo
11TH02 Pro!
Liên kết
Tin tức 60s
Tin công nghệ
Thời sự 24h
Game Moblie

Share
 

 Các Loại JOIN Trong SQL Server

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
Sakura

Các Loại JOIN Trong SQL Server Stars7
Sakura

Thú CƯng : Các Loại JOIN Trong SQL Server I-hate-Cats-icon
Nam Scorpio

Số bài viết : 1124
Điểm : 1688
Được cảm ơn : 35
Ngày sinh : 03/11/1990
Tham gia ngày : 16/03/2010
Tuổi : 33
Đến từ : Bình Dương
Ngề nghiệp : IT Student

Các Loại JOIN Trong SQL Server Empty
Bài gửiTiêu đề: Các Loại JOIN Trong SQL Server   Các Loại JOIN Trong SQL Server I_icon_minitime20/3/2011, 10:46

Lâu rồi ko post bài nào, nay hâm nóng mọi thứ lại coi!
OIN là phép kết nối dữ liệu từ nhiều bảng lại với nhau. Khi bạn cần truy vấn các cột dữ liệu từ nhiều bảng khác nhau để trả về trong cùng một tập kết quả, bạn cần dùng JOIN. Đây có lẽ là chức năng được dùng nhiều nhất khi lập trình T-SQL. Nó giúp tái hiện lại thông tin thế giới thực từ dữ liệu lưu trữ trong mô hình quan hệ. Ví dụ, bạn cần JOIN bảng BanHang với bảng SanPham thông qua SanPhamID để lấy về thông tin đầy đủ của một đơn hàng bao gồm cả tên sản phẩm, vì người dùng cần quan tâm đến sản phẩm đó là gì thay vì mã hiệu của nó.
SQL Server cung cấp các kiểu JOIN là INNER JOIN, OUTER JOIN, và CROSS JOIN.

INNER JOIN trả về kết quả là các bản ghi mà trường được join ở hai bảng khớp nhau, các bản ghi chỉ xuất hiện ở một trong hai bảng sẽ bị loại.
[You must be registered and logged in to see this image.]

OUTER JOIN nới lỏng hơn, lấy về các bản ghi có mặt trong cả hai bảng và cả các bản ghi chỉ xuất hiện ở một trong hai bảng. Kiểu JOIN này được chia làm hai loại:

FULL OUTER JOIN: kết quả gồm tất cả các bản ghi của cả hai bảng. Với các bản ghi chỉ xuất hiện trong một bảng thì các cột dữ liệu từ bảng kia được điền giá trị NULL.
[You must be registered and logged in to see this image.]

HALF OUTER JOIN (LEFT hoặc RIGHT): nếu bảng A LEFT OUTER JOIN với bảng B thì kết quả gồm các bản ghi có trong bảng A, với các bản ghi không có mặt trong bảng B thì các cột từ B được điền NULL. Các bản ghi chỉ có trong B mà không có trong A sẽ không được trả về.
[You must be registered and logged in to see this image.]

CROSS JOIN: mỗi bản ghi của bảng A được kết hợp với tất cả các bản ghi của bảng B, tạo thành một tích Đề-các giữa hai bảng (số bản ghi trả về bằng tích của số bản ghi trong hai bảng).

Ví dụ:

Code:
CREATE TABLE T1(ID1 INT, Ten VARCHAR(100) )
INSERT INTO T1
SELECT 1, 'Mozart' UNION ALL
SELECT 2, 'Beethoven' UNION ALL
SELECT 3, 'Chopin'
 
CREATE TABLE T2(ID2 INT, Email VARCHAR(100) )
INSERT INTO T2
SELECT 2, 'beethoven@gmail.com' UNION ALL
SELECT 3, 'chopin@hotmail.com'  UNION ALL
SELECT 4, 'haydn@yahoo.com'  UNION ALL
SELECT 5, 'bach@yahoo.com'

INNER JOIN:
[You must be registered and logged in to see this image.]

FULL OUTER JOIN:
[You must be registered and logged in to see this image.]

LEFT OUTER JOIN:
[You must be registered and logged in to see this image.]

CROSS JOIN:
[You must be registered and logged in to see this image.]

Lưu ý là A INNER JOIN B có thể viết tắt thành A JOIN B, còn A LEFT OUTER JOIN B có thể viết A LEFT JOIN B.

Trong các loại JOIN trên, chỉ trừ HALF OUTER JOIN còn tất cả đều có tính đối xứng, nghĩa là A JOIN B tương tự như B JOIN A. Riêng HALF OUTER JOIN thì phân biệt thứ tự, ví dụ A LEFT JOIN B khác với B LEFT JOIN A. Tuy nhiên, A LEFT JOIN B thì tương đương với B RIGHT JOIN A, vì thế để tránh nhầm lẫn tôi luôn hay dùng LEFT JOIN thay cho RIGHT JOIN, và ngầm qui định trong đầu là A là bảng chính còn B là bảng join (bảng để kéo thêm dữ liệu vào).

Bạn cần đặc biệt chú ý khi dùng CROSS JOIN vì nó có thể tạo ra bùng nổ về số bản ghi. Ví dụ nếu hai bảng có số bản ghi tương ứng là 1 nghìn và 1 triệu thì kết quả sẽ là 1 tỷ bản ghi. Nói chung CROSS JOIN thường được dùng rất ít nhưng vẫn có lúc cần (vì thế mà có nó), ví dụ bảng kết quả điểm thi của sinh viên là CROSS JOIN của bảng sinh viên và bảng môn học.

Các kiểu viết JOIN

Cách viết JOIN như trên gọi là theo kiểu ANSI (ANSI style), cách viết kiểu cũ là đưa điều kiện join vào mệnh đề WHERE:
Code:
--INNER JOIN kiểu ANSI
SELECT *
FROM T1 JOIN T2 ON T1.ID = T2.ID
--INNER JOIN kiểu cũ
SELECT *
FROM T1, T2
WHERE T1.ID = T2.ID
 
-- LEFT OUTER JOIN kiểu ANSI
SELECT *
FROM T1 LEFT JOIN T2 ON T1.ID = T2.ID
--LEFT OUTER JOIN kiểu cũ
SELECT *
FROM T1, T2
WHERE T1.ID *= T2.ID
Cả hai kiểu viết đều cho cùng kết quả và cũng không khác nhau về hiệu năng thực hiện. Tuy vây bạn có thể thấy cách viết kiểu ANSI trong sáng hơn. Kiểu viết này gần với diễn đạt của ngôn ngữ tự nhiên hơn, và đồng thời nó tách điều kiện join ra khỏi điều kiện lọc dữ liệu (dùng ở mệnh đề WHERE). Đây là kiểu viết bạn nên dùng. Microsoft trong 10 năm qua liên tục khuyến cáo dùng kiểu viết ANSI và nhắc nhở, các phiên bản sau có thể sẽ không hỗ trợ kiểu cũ. Và đến nay, bản SQL Server 2008 đã không còn hỗ trợ LEFT JOIN viết theo kiểu cũ (trừ khi bạn phải đặt lại COMPATIBILITY_LEVEL xuống mức thấp hơn).

(Sưu tầm)
Về Đầu Trang Go down
Mr.Cuong

Các Loại JOIN Trong SQL Server Stars14
Mr.Cuong

Thú CƯng : Các Loại JOIN Trong SQL Server Panda-icon
Nam Aquarius

Số bài viết : 117
Điểm : 154
Được cảm ơn : 5
Ngày sinh : 02/02/1990
Tham gia ngày : 22/02/2011
Tuổi : 34
Đến từ : Đâu

Các Loại JOIN Trong SQL Server Empty
Bài gửiTiêu đề: Re: Các Loại JOIN Trong SQL Server   Các Loại JOIN Trong SQL Server I_icon_minitime20/3/2011, 15:08

Thanks bác! hôm đó em nghỉ nên không bít. may quá!hihi
Về Đầu Trang Go down
Sakura

Các Loại JOIN Trong SQL Server Stars7
Sakura

Thú CƯng : Các Loại JOIN Trong SQL Server I-hate-Cats-icon
Nam Scorpio

Số bài viết : 1124
Điểm : 1688
Được cảm ơn : 35
Ngày sinh : 03/11/1990
Tham gia ngày : 16/03/2010
Tuổi : 33
Đến từ : Bình Dương
Ngề nghiệp : IT Student

Các Loại JOIN Trong SQL Server Empty
Bài gửiTiêu đề: Re: Các Loại JOIN Trong SQL Server   Các Loại JOIN Trong SQL Server I_icon_minitime20/3/2011, 15:51

Hj`, có người ủng hộ, thì mình sẽ tiếp tục phát huy!
Về Đầu Trang Go down
Mr.Cuong

Các Loại JOIN Trong SQL Server Stars14
Mr.Cuong

Thú CƯng : Các Loại JOIN Trong SQL Server Panda-icon
Nam Aquarius

Số bài viết : 117
Điểm : 154
Được cảm ơn : 5
Ngày sinh : 02/02/1990
Tham gia ngày : 22/02/2011
Tuổi : 34
Đến từ : Đâu

Các Loại JOIN Trong SQL Server Empty
Bài gửiTiêu đề: Re: Các Loại JOIN Trong SQL Server   Các Loại JOIN Trong SQL Server I_icon_minitime20/3/2011, 19:38

Bài này tương đối dễ hiểu, hôm bữa lên nghe thầy nói lệnh Join mình hết hồn và ko bít gì cả, giờ mới hiểu hết được vấn đề. một lần nữa thanks Cụ Hoàng nhá Very Happy
Về Đầu Trang Go down
Già Làng

Các Loại JOIN Trong SQL Server Stars14
Già Làng

Thú CƯng : Các Loại JOIN Trong SQL Server I-hate-Cats-icon
Nam Libra

Số bài viết : 373
Điểm : 2200708
Được cảm ơn : 53
Ngày sinh : 20/10/1987
Tham gia ngày : 16/03/2010
Tuổi : 37
Đến từ : Bình Dương
Ngề nghiệp : Sinh Viên
Chăm ngôn : Cơm Cha - Áo Mẹ!

Các Loại JOIN Trong SQL Server Empty
Bài gửiTiêu đề: Re: Các Loại JOIN Trong SQL Server   Các Loại JOIN Trong SQL Server I_icon_minitime20/3/2011, 19:58

Mấy bữa nay buồn không đi học nhìn chả hiểu gì hết.hj
Về Đầu Trang Go down
https://itworld.forumvi.net
lovelonelyman

Member Năng Động


Member Năng Động
lovelonelyman

Nam Cancer

Số bài viết : 134
Điểm : 180
Được cảm ơn : 9
Ngày sinh : 15/07/1990
Tham gia ngày : 30/04/2010
Tuổi : 34
Đến từ : Thai Binh

Các Loại JOIN Trong SQL Server Empty
Bài gửiTiêu đề: Re: Các Loại JOIN Trong SQL Server   Các Loại JOIN Trong SQL Server I_icon_minitime23/3/2011, 10:13

thanks ku Hoàng nhe, hay đó,có j thì cứ post nhe
Về Đầu Trang Go down
Mai_meo

Các Loại JOIN Trong SQL Server Stars16
Mai_meo

Thú CƯng : Các Loại JOIN Trong SQL Server Dolphin-icon
Nữ Aquarius

Số bài viết : 1
Điểm : 1
Được cảm ơn : 0
Ngày sinh : 12/02/1990
Tham gia ngày : 21/06/2011
Tuổi : 34
Đến từ : Hòa Bình

Các Loại JOIN Trong SQL Server Empty
Bài gửiTiêu đề: Re: Các Loại JOIN Trong SQL Server   Các Loại JOIN Trong SQL Server I_icon_minitime23/6/2011, 10:50

thanks bạn nhiều nha
Về Đầu Trang Go down
Sponsored content




Các Loại JOIN Trong SQL Server Empty
Bài gửiTiêu đề: Re: Các Loại JOIN Trong SQL Server   Các Loại JOIN Trong SQL Server I_icon_minitime

Về Đầu Trang Go down
 

Các Loại JOIN Trong SQL Server

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

 Similar topics

-
» Các hàm UDFs trong SQL Server
» [SQL Server]Ví dụ về sử dụng case trong SQL
» Thủ thuật trong SQL Server - Update liên tục
» Video hướng dẫn Backup và Restore trong SQL Server
» [SQL Server]Các hàm xử lý chuỗi

Permissions in this forum:Bạn không có quyền trả lời bài viết
IT World! :: HỌC TẬP :: HỌC KỲ VI :: Hệ quản trị cơ sở dữ liệu-