-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjoins_scripts.sql
More file actions
174 lines (131 loc) · 4.64 KB
/
Copy pathjoins_scripts.sql
File metadata and controls
174 lines (131 loc) · 4.64 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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
-- =========================================================
-- FILE: joins.sql
-- PROJECT: TechSphere Solutions Database System
-- AUTHOR: Benard Onyango Omoga
-- DATABASE: MySQL
-- DESCRIPTION:
-- Demonstrates INNER JOIN, LEFT JOIN, RIGHT JOIN,
-- SELF JOIN, and multi-table joins using TechSphere schema.
-- =========================================================
-- =========================================================
-- USE DATABASE
-- =========================================================
USE techsphere_solutions;
-- =========================================================
-- SECTION 1: INTRODUCTION TO JOINS
-- PURPOSE:
-- JOINs combine related data from multiple tables
-- using logical relationships (foreign keys).
-- =========================================================
-- View base tables
SELECT * FROM employees;
SELECT * FROM employee_positions;
SELECT * FROM job_roles;
SELECT * FROM departments;
-- =========================================================
-- SECTION 2: INNER JOIN
-- PURPOSE:
-- Returns only matching records in both tables.
-- =========================================================
-- Join employees with their departments
SELECT *
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id;
-- WHAT IT DOES:
-- Returns only employees who belong to a department
-- =========================================================
-- SECTION 3: INNER JOIN (EMPLOYEES + ROLES)
-- =========================================================
-- Join employees with job roles via positions table
SELECT *
FROM employees e
JOIN employee_positions ep
ON e.employee_id = ep.employee_id
JOIN job_roles jr
ON ep.role_id = jr.role_id;
-- WHAT IT DOES:
-- Shows employees and their assigned job roles
-- =========================================================
-- SECTION 4: LEFT JOIN
-- PURPOSE:
-- Returns all records from left table + matches from right
-- =========================================================
-- All employees including those without departments
SELECT *
FROM employees e
LEFT JOIN departments d
ON e.department_id = d.department_id;
-- WHAT IT DOES:
-- Keeps all employees even if department is NULL
-- =========================================================
-- SECTION 5: RIGHT JOIN
-- PURPOSE:
-- Returns all records from right table + matches from left
-- =========================================================
-- All departments including those without employees
SELECT *
FROM employees e
RIGHT JOIN departments d
ON e.department_id = d.department_id;
-- WHAT IT DOES:
-- Ensures all departments appear even if empty
-- =========================================================
-- SECTION 6: SELF JOIN
-- PURPOSE:
-- A table joins with itself for comparisons or pairing
-- =========================================================
-- Example: Pair employees as mentor-mentee (by ID sequence)
SELECT
e1.employee_id AS mentor_id,
e1.first_name AS mentor_name,
e2.employee_id AS mentee_id,
e2.first_name AS mentee_name
FROM employees e1
JOIN employees e2
ON e1.employee_id + 1 = e2.employee_id;
-- WHAT IT DOES:
-- Creates artificial pairing based on employee ID order
-- =========================================================
-- SECTION 7: MULTI-TABLE JOIN
-- =========================================================
-- Employees + Departments + Roles
SELECT *
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id
INNER JOIN employee_positions ep
ON e.employee_id = ep.employee_id
INNER JOIN job_roles jr
ON ep.role_id = jr.role_id;
-- WHAT IT DOES:
-- Combines all related employee data into one dataset
-- =========================================================
-- SECTION 8: LEFT JOIN IN MULTI-TABLE CONTEXT
-- =========================================================
-- Keep all employees even if some data is missing
SELECT *
FROM employees e
INNER JOIN employee_positions ep
ON e.employee_id = ep.employee_id
LEFT JOIN departments d
ON e.department_id = d.department_id;
-- WHAT IT DOES:
-- Ensures employees are not lost due to missing department
-- =========================================================
-- KEY CONCEPT SUMMARY
-- =========================================================
-- INNER JOIN:
-- Only matching records in both tables
-- LEFT JOIN:
-- All left table records + matching right records
-- RIGHT JOIN:
-- All right table records + matching left records
-- SELF JOIN:
-- A table joins itself
-- MULTI-JOIN:
-- Combines more than two related tables
-- =========================================================
-- END OF FILE
-- =========================================================
```