- Bài 1: SQL Server là gì? Đặc điểm và vai trò của nó
- Bài 2: Cách cài đặt và kết nối SQL Server
- Bài 3: Khởi tạo Database trong SQL Server
- Bài 4: Khởi tạo, xóa, sửa Table trong SQL Server
- Bài 5: Kiểu dữ liệu trong SQL Server
- Bài 6: Khóa chính trong SQL Server
- Bài 7: Khóa ngoại trong SQL Server
- Bài 8: Câu lệnh Insert, Update và Delete trong SQL Server
- Bài 9: Các function thông dụng trong SQL Server
- Bài 10: Truy vấn dữ liệu trong SQL Server (Phần 1)
- Bài 11: Truy vấn dữ liệu trong SQL Server (Phần 2)
- Bài 12: SQL Joins
Bài 12: SQL Joins - Học SQL Server cơ bản
Đăng bởi: Admin | Lượt xem: 2669 | Chuyên mục: SQL
1. Giới thiệu
Mệnh đề Joins trong SQL được sử dụng để kết hợp các bản ghi từ hai hoặc nhiều bảng trong một Database. Một JOIN là một phương tiện để kết hợp các trường từ hai bảng bằng việc sử dụng các giá trị chung của mỗi bảng.
Ta sử dụng cơ sở dữ liệu như sau:
-- 1/ Tạo DB + Sử dụng DB
Create Database Bkit
Go
Use Bkit
Go
-- 2/ Tạo các table + Khoá chính
create table BOMON
(
MABM nchar(4),
TENBM nchar (50),
PHONG char(3),
DIENTHOAI char(11),
TRUONGBM nchar(3),
MAKHOA nchar (4),
NGAYNHANCHUC date,
primary key (MABM)
)
go
create table GIAOVIEN
(
MAGV nchar(3),
HOTEN nvarchar(50),
LUONG float,
PHAI nchar(3),
NGSINH date,
DIACHI nchar(50),
GVQLCM nchar(3),
MABM nchar(4),
primary key (MAGV)
)
go
-- 3/ Tạo khoá ngoại
--Tạo khóa ngoại ở bảng GIAOVIEN
Alter table GIAOVIEN
add constraint FK_HG9_MABM
foreign key (MABM)
references BOMON(MABM)
go
-- 4/ Nhập data
--Nhập data cho bảng GIAOVIEN
Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI)
values ('001',N'Nguyễn Hoài An',2000.0,N'Nam','1973-02-15',N'25/3 Lạc Long Quân, Q.10,TP HCM')
Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI)
values ('002',N'Trần Trà Hương',2500.0,N'Nữ','1960-06-20',N'125 Trần Hưng Đạo, Q.1, TP HCM')
Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI,GVQLCM)
values ('003',N'Nguyễn Ngọc Ánh',2200.0,N'Nữ','1975-05-11',N'12/21 Võ Văn Ngân Thủ Đức, TP HCM',N'002')
Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI)
values ('004',N'Trương Nam Sơn',2300.0,N'Nam','1959-06-20',N'215 Lý Thường Kiệt,TP Biên Hòa')
Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI)
values ('005',N'Lý Hoàng Hà',2500.0,N'Nam','1954-10-23',N'22/5 Nguyễn Xí, Q.Bình Thạnh, TP HCM')
Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI,GVQLCM)
values ('006',N'Trần Bạch Tuyết',1500.0,N'Nữ','1980-05-20',N'127 Hùng Vương, TP Mỹ Tho',N'004')
Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI)
values ('007',N'Nguyễn An Trung',2100.0,N'Nam','1976-06-05',N'234 3/2, TP Biên Hòa')
Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI,GVQLCM)
values ('008',N'Trần Trung Hiếu',1800.0,N'Nam','1977-08-06',N'22/11 Lý Thường Kiệt,TP Mỹ Tho',N'007')
Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI,GVQLCM)
values ('009',N'Trần Hoàng nam',2000.0,N'Nam','1975-11-22',N'234 Trấn Não,An Phú, TP HCM',N'001')
Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI,GVQLCM)
values ('010',N'Phạm Nam Thanh',1500.0,N'Nam','1980-12-12',N'221 Hùng Vương,Q.5, TP HCM',N'007')
go
--Nhập data cho bảng BOMON
Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,MAKHOA)
values (N'CNTT',N'Công nghệ tri thức','B15','0838126126',N'CNTT')
Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,MAKHOA)
values (N'HHC',N'Hóa hữu cơ','B44','0838222222',N'HH')
Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,MAKHOA)
values (N'HL',N'Hóa Lý','B42','0838878787',N'HH')
Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,TRUONGBM,MAKHOA,NGAYNHANCHUC)
values (N'HPT',N'Hóa phân tích','B43','0838777777','007',N'HH','2007-10-15')
Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,TRUONGBM,MAKHOA,NGAYNHANCHUC)
values (N'HTTT',N'Hệ thống thông tin','B13','0838125125','002',N'CNTT','2004-09-20')
Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,TRUONGBM,MAKHOA,NGAYNHANCHUC)
values (N'MMT',N'Mạng máy tính','B16','0838676767','001',N'CNTT','2005-05-15')
Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,MAKHOA)
values (N'SH',N'Sinh hóa','B33','0838898989',N'SH')
Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,MAKHOA)
values (N'VLĐT',N'Vật lý điện tử','B23','0838234234',N'VL')
Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,TRUONGBM,MAKHOA,NGAYNHANCHUC)
values (N'VLUD',N'Vật lý ứng dụng','B24','0838454545','005',N'VL','2006-02-18')
Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,TRUONGBM,MAKHOA,NGAYNHANCHUC)
values (N'VS',N'Vi Sinh','B32','0838909090','004',N'SH','2007-01-01')
go
--Cập nhật thêm dữ liệu cho bảng GIAOVIEN
update GIAOVIEN
set MABM = 'MMT'
where (MAGV = '001')
update GIAOVIEN
set MABM = 'HTTT'
where (MAGV = '002')
update GIAOVIEN
set MABM = 'HTTT'
where (MAGV = '003')
update GIAOVIEN
set MABM = 'VS'
where (MAGV = '004')
update GIAOVIEN
set MABM = N'VLĐT'
where (MAGV = '005')
update GIAOVIEN
set MABM = 'VS'
where (MAGV = '006')
update GIAOVIEN
set MABM = 'HPT'
where (MAGV = '007')
update GIAOVIEN
set MABM = 'HPT'
where (MAGV = '008')
update GIAOVIEN
set MABM = 'MMT'
where (MAGV = '009')
update GIAOVIEN
set MABM = 'HPT'
where (MAGV = '010')
GO
Ta có hai bảng như sau:
Dữ liệu hai bảng như sau:
Bảng GIAOVIEN:
Bảng BOMON:
Giả sử bây giờ, chúng ta cần hiển thị các thông tin bao gồm mã và tên giáo viên, đồng thời là mã bộ môn và tên bộ môn giáo viên đó đang giảng dạy, ta sử dụng câu lệnh sau:
SELECT GIAOVIEN.MAGV,GIAOVIEN.HOTEN,GIAOVIEN.MABM,BOMON.TENBM
FROM GIAOVIEN,BOMON
WHERE BOMON.MABM=GIAOVIEN.MABM
Kết quả thu được:
Ở đây, điều đáng chú ý là, JOIN được thực hiện trong mệnh đề WHERE. Một số toán tử có thể được sử dụng để kết hợp các bảng là: =, <, >, <>, <=, >=, !=, BETWEEN, LIKE, và NOT; tất cả toán tử này có thể được sử dụng để kết hợp các bảng. Tuy nhiên, toán tử được sử dụng phổ biến nhất là dấu bằng (=).
Các Join cơ bản trong SQL Server
- Inner Join.
- Left Join
- Right Join
- Full Join
3. Inner Join
Từ khóa INNER JOIN để 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:
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ụ, tương tự như phần giới thiệu, nhưng ở đây, chúng ta sử dụng cú pháp của Inner Join
SELECT GIAOVIEN.MAGV,GIAOVIEN.HOTEN,GIAOVIEN.MABM,BOMON.TENBM
FROM GIAOVIEN INNER JOIN BOMON
ON BOMON.MABM=GIAOVIEN.MABM
Kết quả thu được cũng tương tự như phần giới thiệu.
4. Left Join và Right Join
Từ khóa LEFT OUTER JOIN trả về tất cả các hàng (rows) từ bảng bên trái (table1), với các hàng tương ứng trong bảng bên phải (table2). Chấp nhận cả dữ liệu NULL ở bảng 2 nếu nó không khớp.
Cú pháp tương tự Inner Join nhưng thay Inner bằng Left.
Ví dụ, trong bảng BOMON có nhiều môn mà giáo viên trong bảng GIAOVIEN không giảng dạy, nếu sử dụng Inner Join thì khi hiển thị, những bộ môn đó sẽ không được hiển thị, như các ví dụ ở trên.
Trong trường hợp này nếu muốn hiển thị cả những môn không có giáo viên giảng dạy, chúng ta sử dụng Left Join, với vai trò table1 là BOMON, table2 là GIAOVIEN.
Câu lệnh sẽ là:
SELECT GIAOVIEN.MAGV,GIAOVIEN.HOTEN,GIAOVIEN.MABM,BOMON.TENBM
FROM BOMON LEFT JOIN GIAOVIEN
ON BOMON.MABM=GIAOVIEN.MABM
Như các bạn có thể thấy, khi sử dụng left join, thì bảng kết quả sẽ hiển thị cả tên những môn không có giáo viên giảng dạy.
Right Join cũng có cách sử dụng tương tự, nhưng thay vì trả về tất cả các hàng (rows) từ bảng bên trái (table1) thì sẽ trả về tất cả các hàng (rows) từ bảng bên phải (table2).
5. Full Join
Full Join là sự kết hợp của Left Join và Right Join, trả về tất cả các hàng của 2 bảng.
Ví dụ:
SELECT GIAOVIEN.MAGV,GIAOVIEN.HOTEN,GIAOVIEN.MABM,BOMON.TENBM
FROM BOMON FULL JOIN GIAOVIEN
ON BOMON.MABM=GIAOVIEN.MABM
Như vậy, thông qua bài học này, mình đã giới thiệu đến các bạn những Join cơ bản trong SQL Server. Cảm ơn các bạn đã đọc.
Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!
- Bài 1: SQL Server là gì? Đặc điểm và vai trò của nó
- Bài 2: Cách cài đặt và kết nối SQL Server
- Bài 3: Khởi tạo Database trong SQL Server
- Bài 4: Khởi tạo, xóa, sửa Table trong SQL Server
- Bài 5: Kiểu dữ liệu trong SQL Server
- Bài 6: Khóa chính trong SQL Server
- Bài 7: Khóa ngoại trong SQL Server
- Bài 8: Câu lệnh Insert, Update và Delete trong SQL Server
- Bài 9: Các function thông dụng trong SQL Server
- Bài 10: Truy vấn dữ liệu trong SQL Server (Phần 1)
- Bài 11: Truy vấn dữ liệu trong SQL Server (Phần 2)
- Bài 12: SQL Joins