Gộp 2 Bảng Trong Sql Làm Thế Nào??? Union Trong Mysql

Mệnh đề Join trong SQL Server dùng để kết nối các bảng, view, sub query lại với nhau thông qua các foreign key hoặc các cột có giá trị tương ứng ở cả hai bảng, view hoặc các sub query.Mệnh đề Join trong SQL Server dùng để liên kết những bảng, view, sub query lại với nhau trải qua những foreign key hoặc những cột có giá trị tương ứng ở cả hai bảng, view hoặc những sub query .Bạn đang xem : Gộp 2 bảng trong sql

ii. Chuẩn bị

Trước hết bạn hãy tạo ra hai table rất đơn giản và insert vào đó một ít dữ liệu như đoạn script sau:

Trước hết bạn hãy tạo ra hai table rất đơn giản và insert vào đó một ít dữ liệu như đoạn script sau:

create table Item( MaHang nvarchar(20) primary key, TenHang nvarchar(200))insert Item(MaHang, TenHang) values(“NO1700″, N”Điện thoại Nokia 1700”), (“NO1200″, N”Điện thoại Nokia 1200”), (“IPHONE3″, N”Điện thoại Iphone 3”), (“IPHONE4″, N”Điện thoại Iphone 4”), (“IPHONE5″, N”Điện thoại Iphone 5”), (“IPHONE6″, N”Điện thoại Iphone 6”)create table OrderDetail( ID int identity primary key, NgayDatHang datetime, MaHang nvarchar(20), SoLuong decimal(19,6) default 0 not null)insert OrderDetail(NgayDatHang, MaHang, SoLuong) values(“20140401”, “NO1700”, 5), (“20140402”, “NO1700”, 1), (“20140402”, “IPHONE3”, 2), (“20140401”, “IPHONE4”, 1), (“20140401″,”NO0001”, 1000) Chúng ta đã có 2 bảng dữ liệu với liên kết như trên, vậy nếu muốn truy xuất cùng lúc thông tin đặt hàng và thông tin hàng thì ta phải làm thế nào? Đây chính là nhiệm vụ của liên kết hay JOIN các bảng lại với nhau.Trong SQL hỗ trợ các kiểu JOIN như sau:

1. INNER JOIN

INNER JOIN hay viết tắt là JOIN trả về kết quả là tập hợp dữ liệu từ 2 bảng trong đó giá trị dùng để join đều có ở cả 2 bảng, nói cách khác kiểu join này giống phép giao trong tập hợpHình minh họa
*
Câu truy vấn SQL cụ thể như sau:SELECT t2.MaHang, t1.TenHang, t2.SoLuongFROM Item t1 INNER JOIN OrderDetail t2 ON t1.MaHang = t2.MaHang– Hoặc dạng viết tắtSELECT t2.MaHang, t1.TenHang, t2.SoLuongFROM Item t1 JOIN OrderDetail t2 ON t1.MaHang = t2.MaHangKết quả là tập hợp sau:
*
Bốn mã hàng hóa ở cột MaHang đều có trong table Item và table OrderDetail.

2. OUTER JOIN

a. LEFT OUTER JOIN

Viết tắt: LEFT JOINCó thể diễn giải LEFT JOIN trong SQL như sau: “Lấy toàn bộ các dòng dữ liệu ở table bên trái và những dòng dữ liệu ở bảng bên phải CÓ giá trị MaHang tồn tại ở bảng bên trái.”.Kết quả minh họa như hình sau, kết quả trả về là hình oval màu xanh:
*
SELECT t1.MaHang, t1.TenHang, t2.SoLuongFROM Item t1 LEFT JOIN OrderDetail t2 ON t1.MaHang = t2.MaHang
*
Một số dòng có SoLuong == null là do các MaHang này không tồn tại ở bảng bên phải (OrderDetail), nhưng có tồn tại ở bảng bên trái (Item).
Viết tắt: RIGHT JOINTrái ngược với LEFT JOIN, RIGHT JOIN trong SQL Server lấy toàn bộ dữ liệu của bảng bên phải và dữ liệu của bảng bên trái nhưng giá trị cột JOIN cũng tồn tại trong bảng bên phải.
Viết tắt: FULL JOINFULL OUTER JOIN trong SQL Server chính là kết quả gộp lại của cả hai table bên trái và bên phải.Hình minh họa:
*
SELECT t1.MaHang, t1.TenHang, t2.SoLuongFROM Item t1 FULL JOIN OrderDetail t2 ON t1.MaHang = t2.MaHang
Quan sát kết quả trên có thể thấy:Các dòng có MaHang = null là do bảng bên phải (OrderDetail) có giá trị nhưng table bên trái (Item) không có giá trị MaHang tương ứng.Các dòng có SoLuong = null là do các mặt hàng IPHONE5, 6, NO1200 có trong bảng Item nhưng không có dòng nào tương ứng trong table OrderDetail.INNER JOIN hay viết tắt là JOIN trả về hiệu quả là tập hợp tài liệu từ 2 bảng trong đó giá trị dùng để join đều có ở cả 2 bảng, nói cách khác kiểu join này giống phép giao trong tập hợpHình minh họaCâu truy vấn SQL đơn cử như sau : SELECT t2. MaHang, t1. TenHang, t2. SoLuongFROM Item t1 INNER JOIN OrderDetail t2 ON t1. MaHang = t2. MaHang — Hoặc dạng viết tắtSELECT t2. MaHang, t1. TenHang, t2. SoLuongFROM Item t1 JOIN OrderDetail t2 ON t1. MaHang = t2. MaHangKết quả là tập hợp sau : Bốn mã sản phẩm & hàng hóa ở cột MaHang đều có trong table Item và table OrderDetail. Viết tắt : LEFT JOINCó thể diễn giải LEFT JOIN trong SQL như sau : ” Lấy hàng loạt những dòng tài liệu ở table bên trái và những dòng tài liệu ở bảng bên phải CÓ giá trị MaHang sống sót ở bảng bên trái. “. Kết quả minh họa như hình sau, tác dụng trả về là hình oval màu xanh : SELECT t1. MaHang, t1. TenHang, t2. SoLuongFROM Item t1 LEFT JOIN OrderDetail t2 ON t1. MaHang = t2. MaHangMột số dòng có SoLuong = = null là do những MaHang này không sống sót ở bảng bên phải ( OrderDetail ), nhưng có sống sót ở bảng bên trái ( Item ). Viết tắt : RIGHT JOINTrái ngược với LEFT JOIN, RIGHT JOIN trong SQL Server lấy hàng loạt tài liệu của bảng bên phải và tài liệu của bảng bên trái nhưng giá trị cột JOIN cũng sống sót trong bảng bên phải. Viết tắt : FULL JOINFULL OUTER JOIN trong SQL Server chính là hiệu quả gộp lại của cả hai table bên trái và bên phải. Hình minh họa : SELECT t1. MaHang, t1. TenHang, t2. SoLuongFROM Item t1 FULL JOIN OrderDetail t2 ON t1. MaHang = t2. MaHangQuan sát hiệu quả trên hoàn toàn có thể thấy : Các dòng có MaHang = null là do bảng bên phải ( OrderDetail ) có giá trị nhưng table bên trái ( Item ) không có giá trị MaHang tương ứng. Các dòng có SoLuong = null là do những loại sản phẩm IPHONE5, 6, NO1200 có trong bảng Item nhưng không có dòng nào tương ứng trong table OrderDetail .Xem thêm : 4 Tuyến Đường Đi Vũng Tàu Bằng Xe Máy Gần Nhất !, Cách Đi Từ Hồ Chí Minh Đến Vũng Tàu Nhanh Và Gần

d. CROSS JOIN

CROSS JOIN trong SQL ít được sử dụng hơn so với các loại JOIN ở trên do tính ít ý nghĩa của nó, kết quả trả về của CROSS JOIN là lấy số dòng của bảng bên trái x số dòng của bảng bên phải. Ví dụ bảng Item có 6 dòng, bảng OrderDetail có 5 dòng, kết quả trả về là 30 dòng.Dữ liệu được nhân lên do cứ tương ứng với 1 dòng trong Item thì sẽ nối với toàn bộ 5 dòng trong OrderDetail mà không cần quan tâm đến tiêu chí so sánh nào (không có mệnh đề ON t1.ColumnA = t2.ColumnB như các kiểu JOIN khác). Cái này là phép nhân Đề các 2 quan hệ với nhau.
Câu truy vấn:
SELECT t1.*, t2.*FROM Item t1 CROSS JOIN OrderDetail t2
Tương tự khi như ta viết:SELECT t1.*, t2.*FROM Item t1, OrderDetail t2Kết quả trả về:
CROSS JOIN trong SQL ít được sử dụng hơn so với những loại JOIN ở trên do tính ít ý nghĩa của nó, tác dụng trả về của CROSS JOIN là lấy số dòng của bảng bên trái x số dòng của bảng bên phải. Ví dụ bảng Item có 6 dòng, bảng OrderDetail có 5 dòng, hiệu quả trả về là 30 dòng. Dữ liệu được nhân lên do cứ tương ứng với 1 dòng trong Item thì sẽ nối với hàng loạt 5 dòng trong OrderDetail mà không cần chăm sóc đến tiêu chuẩn so sánh nào ( không có mệnh đề ON t1. ColumnA = t2. ColumnB như những kiểu JOIN khác ). Cái này là phép nhân Đề những 2 quan hệ với nhau. Câu truy vấn : SELECT t1. *, t2. * FROM Item t1 CROSS JOIN OrderDetail t2Tương tự khi như ta viết : SELECT t1. *, t2. * FROM Item t1, OrderDetail t2Kết quả trả về :