-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathsql-practice-execises.sql
More file actions
246 lines (214 loc) · 4.7 KB
/
sql-practice-execises.sql
File metadata and controls
246 lines (214 loc) · 4.7 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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
--Ex. 1
SELECT *
FROM shippers;
--Ex. 2
SELECT CategoryName
,Description
FROM Categories;
--Ex. 3
SELECT FirstName
,LastName
,HireDate
FROM Employees
WHERE Title = 'Sales Representative';
--Ex. 4
SELECT FirstName
,LastName
,HireDate
FROM Employees
WHERE Title = 'Sales Representative'
AND Country = 'USA';
--Ex. 5
SELECT OrderId
,OrderDate
FROM Orders
WHERE EmployeeID = 5;
--Ex. 6
SELECT SupplierID
,ContactName
,ContactTitle
FROM Suppliers
WHERE ContactTitle != 'Marketing Manager';
--Ex. 7
SELECT ProductID
,ProductName
FROM Products
WHERE ProductName like '%queso%';
--Ex. 8
SELECT OrderID
,CustomerID
,ShipCountry
FROM Orders
WHERE ShipCountry IN ('France', 'Belgium');
--Ex. 9
SELECT OrderID
,CustomerID
,ShipCountry
FROM Orders
WHERE ShipCountry IN ('Brazil', 'Mexico', 'Argentina', 'Venezuela');
--Ex. 10
SELECT FirstName
,LastName
,Title
,BirthDate
FROM Employees
ORDER BY BirthDate;
--Ex. 11
SELECT FirstName
,LastName
,Title
,CONVERT(DATE, BirthDate, 23)
FROM Employees
ORDER BY BirthDate;
--Ex. 12
SELECT FirstName
,LastName
,CONCAT(FirstName, ' ', LastName) AS FullName
FROM Employees;
--Ex. 13
SELECT OrderId
,ProductID
,UnitPrice
,Quantity
,(UnitPrice * Quantity) AS TotalPrice
FROM OrderDetails;
--Ex. 14
SELECT COUNT(CustomerID) AS TotalCustomers
FROM Customers;
--Ex. 15
SELECT TOP(1) OrderDate
FROM Orders
ORDER BY OrderDate ASC;
--Ex. 16
SELECT Country
FROM Customers
GROUP BY Country;
--Ex. 17
SELECT ContactTitle
,COUNT(ContactTitle) AS TotalCountTitle
FROM Customers
GROUP BY ContactTitle
ORDER BY TotalCountTitle DESC;
--Ex. 18
SELECT P.ProductID
,P.ProductName
,S.CompanyName
FROM Products AS P
JOIN Suppliers AS S
ON S.SupplierID = P.SupplierID
ORDER BY P.ProductID;
--Ex. 19
SELECT O.OrderID
,Convert(Date, O.OrderDate, 23) AS OrderDate
,S.CompanyName
FROM Orders AS O
Join Shippers AS S
ON S.ShipperID = O.ShipVia
WHERE O.OrderID < 10300
ORDER BY O.OrderID;
--Ex. 20
SELECT C.CategoryName
,COUNT(P.CategoryID) AS TotalProducts
FROM Categories AS C
JOIN Products AS P
ON P.CategoryID = C.CategoryID
GROUP BY C.CategoryName
ORDER BY TotalProducts DESC;
--Ex. 21
SELECT Country
,City
,COUNT(CustomerID) AS TotalCustomers
FROM Customers
GROUP BY Country, City
ORDER BY TotalCustomers DESC;
--Ex. 22
SELECT ProductID
,ProductName
,UnitsInStock
,ReorderLevel
FROM Products
WHERE UnitsInStock < ReorderLevel
ORDER BY ProductID;
--Ex. 23
SELECT ProductID
,ProductName
,UnitsInStock
,UnitsOnOrder
,ReorderLevel
,Discontinued
FROM Products
WHERE (UnitsInStock + UnitsOnOrder) <= ReorderLevel
AND Discontinued = 0
ORDER BY ProductID;
--Ex. 24
SELECT CustomerID
,CompanyName
,Region
FROM Customers
ORDER BY CASE
WHEN Region IS NULL THEN 1
ELSE 0
END
,Region
,CustomerID;
--Ex. 25
SELECT TOP(3) ShipCountry
,AVG(Freight) AS AverageFreight
FROM Orders
GROUP BY ShipCountry
ORDER BY AverageFreight DESC;
--Ex. 26
SELECT TOP(3) ShipCountry
,AVG(Freight) AS AverageFreight
FROM Orders
WHERE YEAR(OrderDate) = '2015'
GROUP BY ShipCountry
ORDER BY AverageFreight DESC;
--Ex. 27
/*
The statement presented in the book uses the between clause,
which assumes the time 00:00:00 on December 31 2015. Because
of this, any freight registered later that day is not considered.
Since my implementation only looks at the year of the freight, it
doesn't have this problem.
*/
--Ex. 28
SELECT TOP(3) ShipCountry
,AVG(Freight) AS AverageFreight
FROM Orders
WHERE OrderDate BETWEEN (SELECT DATEADD(YEAR, -1, MAX(OrderDate))
FROM Orders)
AND
(SELECT MAX(OrderDate)
FROM Orders)
GROUP BY ShipCountry
ORDER BY AverageFreight DESC;
--Ex. 29
SELECT ORD.EmployeeID
,EMP.LastName
,ODE.OrderID
,PRO.ProductName
,ODE.Quantity
FROM OrderDetails AS ODE
JOIN Orders AS ORD
ON ORD.OrderID = ODE.OrderID
JOIN Employees AS EMP
ON ORD.EmployeeID = EMP.EmployeeID
JOIN Products AS PRO
ON PRO.ProductID = ODE.ProductID
ORDER BY ODE.OrderID ASC;
--Ex. 30
SELECT C.CustomerID AS Customer_CustomerID
,O.CustomerID AS Orders_CustomerID
FROM Customers AS C
LEFT JOIN Orders AS O
ON C.CustomerID = O.CustomerID
WHERE O.CustomerID IS NULL;
--Ex. 31
SELECT C.CustomerID AS Customer
,O.CustomerID AS [Order]
FROM Customers AS C
LEFT JOIN Orders AS O
ON C.CustomerID = O.CustomerID
AND O.EmployeeID = 4
WHERE O.CustomerID IS NULL;