forked from shashank-mishra219/SQL
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSQL_Class_6.txt
More file actions
205 lines (151 loc) · 5.3 KB
/
Copy pathSQL_Class_6.txt
File metadata and controls
205 lines (151 loc) · 5.3 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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
create database test;
use test;
create table employees(
emp_id int,
emp_name varchar(50),
mobile BIGINT,
dept_name varchar(50),
salary int
);
insert into employees values(1,'Shashank',778768768,'Software',1000);
insert into employees values(2,'Rahul',876778877,'IT',2000);
insert into employees values(3,'Amit',098798998,'HR',5000);
insert into employees values(4,'Nikhil',67766767,'IT',3000);
select * from employees;
--- Create views in SQL
create view employee_data_for_finance as select emp_id, emp_name,salary from employees;
select * from employee_data_for_finance;
--- Create logic for department wise salary sum
create view department_wise_salary as select dept_name, sum(salary) from employees group by dept_name;
drop view department_wise_salary;
create view department_wise_salary as select dept_name, sum(salary) as total_salary from employees group by dept_name;
select * from department_wise_salary;
# Union and Union all
create table student
(
stu_id int,
name varchar(50),
email varchar(50),
city varchar(50)
);
insert into student values(1,'Shashank','abc@gmail.com', 'lucknow');
insert into student values(2,'Rahul','abc1@gmail.com', 'mp');
insert into student values(3,'Amit','ab2@gmail.com', 'noida');
insert into student values(4,'Nikhil','abc3@gmail.com', 'bangalore');
insert into student values(5,'Sunny','ab4@gmail.com', 'bangalore');
create table student2
(
stu_id int,
name varchar(50),
email varchar(50),
city varchar(50)
);
insert into student2 values(1,'Shashank','abc@gmail.com', 'lucknow');
insert into student2 values(6,'Anuj','abc5@gmail.com', 'mp');
insert into student2 values(8,'Mohit','ab7@gmail.com', 'noida');
insert into student2 values(10,'Sagar','abc10@gmail.com', 'bangalore');
insert into student2 values(5,'Sunny','ab4@gmail.com', 'bangalore');
select * from student2;
--- We are organizing an tournament between College-1 and College-2, we need details of all students from both college
select * from student
UNION
select * from student2;
--- how to use union all
select * from student
UNION ALL
select * from student2;
--- Case 1 - Not Failed
select stu_id, `name` from student
UNION
select `name`, stu_id from student2;
--- Case 2 - Not Failed
select stu_id, name from student
UNION
select stu_id, name from student2;
--- Case 3 - Not Failed
select stu_id as stu_id_college_1 , name from student
UNION
select stu_id as stu_id_college_2, name from student2;
--- Case 4 - Not Failed
select stu_id from student
UNION
select email from student2;
select 1 as salary
UNION
select 'Shashank' as name;
select 1 as salary, 'Hello' as message
UNION
select 'Shashank' as name;
--- Common table expression
create table amazon_employees(
emp_id int,
emp_name varchar(20),
dept_id int,
salary int
);
insert into amazon_employees values(1,'Shashank', 100, 10000);
insert into amazon_employees values(2,'Rahul', 100, 20000);
insert into amazon_employees values(3,'Amit', 101, 15000);
insert into amazon_employees values(4,'Mohit', 101, 17000);
insert into amazon_employees values(5,'Nikhil', 102, 30000);
create table department
(
dept_id int,
dept_name varchar(20)
);
insert into department values(100, 'Software');
insert into department values(101, 'HR');
insert into department values(102, 'IT');
insert into department values(103, 'Finance');
--- Write a query to print the name of department along with the total salary paid in each department
--- Normal approach
select d.dept_name, tmp.total_salary
from (select dept_id , sum(salary) as total_salary from amazon_employees group by dept_id) tmp
inner join department d on tmp.dept_id = d.dept_id;
--- how to do it using with clause??
with dept_wise_salary as (select dept_id , sum(salary) as total_salary from amazon_employees group by dept_id)
select d.dept_name, tmp.total_salary
from dept_wise_salary tmp
inner join department d on tmp.dept_id = d.dept_id;
select * from dept_wise_salary;
--- Write a Query to generate numbers from 1 to 10 in SQL
with recursive generate_numbers as
(
select 1 as n
union
select n+1 from generate_numbers where n<10
)
select * from generate_numbers;
create table emp_mgr
(
id int,
name varchar(50),
manager_id int,
designation varchar(50),
primary key (id)
);
insert into emp_mgr values(1,'Shripath',null,'CEO');
insert into emp_mgr values(2,'Satya',5,'SDE');
insert into emp_mgr values(3,'Jia',5,'DA');
insert into emp_mgr values(4,'David',5,'DS');
insert into emp_mgr values(5,'Michael',7,'Manager');
insert into emp_mgr values(6,'Arvind',7,'Architect');
insert into emp_mgr values(7,'Asha',1,'CTO');
insert into emp_mgr values(8,'Maryam',1,'Manager');
select * from emp_mgr;
--- for our CTO 'Asha', present her org chart
with recursive emp_hir as
(
select id, name, manager_id, designation from emp_mgr where name='Asha'
UNION
select em.id, em.name, em.manager_id, em.designation from emp_hir eh inner join emp_mgr em on eh.id = em.manager_id
)
select * from emp_hir;
--- Print level of employees as well
with recursive emp_hir as
(
select id, name, manager_id, designation, 1 as lvl from emp_mgr where name='Asha'
UNION
select em.id, em.name, em.manager_id, em.designation, eh.lvl + 1 as lvl from emp_hir eh inner join emp_mgr em on eh.id = em.manager_id
)
select * from emp_hir;