-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path10.MultiTableQueries1.sql
More file actions
76 lines (64 loc) · 2.75 KB
/
10.MultiTableQueries1.sql
File metadata and controls
76 lines (64 loc) · 2.75 KB
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
select * from Department
select * from People
-- Cartesian product
select * from People,Department
-- This query combines each record from Department with each record from People
-- Simple multi-table query
-- Query employee info with department info (matching DepartmentId)
select * from People,Department
where People.DepartmentId = Department.DepartmentId
-- Query employee info with rank info
select * from [Rank]
select * from People
select * from People,[Rank]
where People.RankId = [Rank].RankId
-- Query employee info with both department and rank info
select * from People,Department,[Rank]
where People.DepartmentId = Department.DepartmentId
and
People.RankId = [Rank].RankId
-- JOIN query
-- Query employee info with department info
select * from People
inner join Department on People.DepartmentId = Department.DepartmentId
-- Query employee info with rank info
select * from People
inner join [Rank] on People.RankId = [Rank].RankId
-- Query employee info with both department and rank info
select * from People
inner join Department on People.DepartmentId = Department.DepartmentId
inner join [Rank] on People.RankId = [Rank].RankId
-- Common limitation of simple multi-table and JOIN queries:
-- Records without matching relationships won't be displayed
insert into People([DepartmentId],[RankId],[PeopleName],[PeopleSex],[PeopleBirth],
[PeopleSalary],[PeoplePhone],[PeopleAddress],[PeopleAddTime])
values(99,99,'Test','Male','1975-8-9',8000,'13556857548','Test',getdate())
-- Test employee has invalid DepartmentId
select * from Department
select * from People
-- Outer join (includes all records from one or both tables)
select * from People
insert into Department([DepartmentName],[DepartmentRemark])
values('HR','......')
-- Outer join shows all records from one table, with NULL for non-matches
-- Query employee info with department info (all employees)
select * from People
left join Department on People.DepartmentId = Department.DepartmentId
select * from Department
left join People on People.DepartmentId = Department.DepartmentId
-- Query employee info with rank info (all employees)
select * from People
left join [Rank] on People.RankId = [Rank].RankId
-- Query employee info with both department and rank info (all employees)
select * from People
left join Department on People.DepartmentId = Department.DepartmentId
left join [Rank] on People.RankId = [Rank].RankId
-- Note: A left join B = B right join A
-- These two queries are equivalent
select * from People
left join Department on People.DepartmentId = Department.DepartmentId
select * from Department
right join People on People.DepartmentId = Department.DepartmentId
-- Full outer join: shows all records from both tables
select * from People
full join Department on People.DepartmentId = Department.DepartmentId