-
Notifications
You must be signed in to change notification settings - Fork 6
/
SQL120.sql
390 lines (225 loc) · 7.36 KB
/
SQL120.sql
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
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
/*
Kurs SQL120 - Język SQL w 2 godziny
www.kursysql.pl
Tomasz Lbera | MVP Data Platform | [email protected]
*/
USE AdventureWorks2017
GO
/*
1. Wprowadzenie do SSMS
- wyświetl zawartość kilku tabel, wybierająć z menu podręcznego
"Select Top 1000 Rows"
*/
/*
2. Pierwsze zapytania
*/
-- NAZWA_SCHEMATU.NAZWA_TABELI
SELECT * FROM Production.Product
SELECT * FROM Person.Person
-- brakuje nazwy schematu
SELECT * FROM Person
SELECT * FROM dbo.DatabaseLog
-- schemat dbo to domyślny schemat
SELECT * FROM DatabaseLog
-- j.w. zaznaczenie kilku zapytań - wykonywanie wsadu
-- w tym przypadku nawiasy kwadratowe są opcjonalne
SELECT * FROM [Person].[Person]
-- zmiana nazwy na taką ze spacją
sp_rename 'HumanResources.JobCandidate', 'Job Candidate'
-- nawiasy kwadratowe - obowiązkowe
SELECT * FROM [HumanResources].[Job Candidate]
--!
SELECT * FROM HumanResources.Job Candidate
-- powrót do oryginalnej nazwy
sp_rename 'HumanResources.Job Candidate', 'JobCandidate'
-- wybieranie kolumn
SELECT ProductID, Name, Color, Size
FROM Production.Product
-- ProductID = klucz główny (PRIMARY KEY, PK)
-- aliasy
SELECT ProductID AS ID, Name AS Nazwa, Color AS Kolor, Size AS Rozmiar
FROM Production.Product
/*
3. Podpowiadanie składni - Intellisense
*/
SELECT * FROM Production.Product
-- zapytanie bez kolumn - jak ro zrobić
/*
4. Sortowanie danych
*/
-- domyślny porządek sortowania
SELECT * FROM Production.Product
-- wiersze posortowane ROSNĄCO wg zawartości kolumny Name
-- = produkty posortowanie wg nazwy
SELECT * FROM Production.Product
ORDER BY Name
-- porządek sortowania malejący
SELECT * FROM Production.Product
ORDER BY Name DESC
-- dwa poziomy sortowania
-- produkty posortowane wg koloru, a te które mają ten sam kolor - wg nazwy
SELECT * FROM Production.Product
ORDER BY Color, Name
-- malejąco wg koloru i rosnąco wg nazwy
SELECT * FROM Production.Product
ORDER BY Color DESC, Name
/*
5. Filtrwanie danych
*/
SELECT ProductID, Name, Color, Size
FROM Production.Product
WHERE ProductID = 707
SELECT ProductID, Name, Color, Size
FROM Production.Product
WHERE ProductID > 100
SELECT ProductID, Name, Color, Size
FROM Production.Product
WHERE ProductID BETWEEN 13 AND 290
-- wartości tekstowe - w pojedynczych apostrofach
SELECT ProductID, Name, Color, Size
FROM Production.Product
WHERE Color = 'Red'
SELECT ProductID, Name, Color, Size
FROM Production.Product
WHERE Size = 'M'
-- Operator LIKE
SELECT * FROM Production.Product
WHERE Name LIKE 'B%'
-- % - dowolony znak w dowolnej liczbie
SELECT * FROM Production.Product
WHERE Name LIKE '%Bike%'
-- _ dowolny pojedynczy znak
SELECT * FROM Production.Product
WHERE Name LIKE 'Mountain Bike Socks, _'
--! = zamiast LIKE
SELECT * FROM Production.Product
WHERE Name = '%Bike%'
-- Operatory AND OR
-- produkty koloru czarnego, o rozmiarze M
SELECT ProductID, Name, Color, Size
FROM Production.Product
WHERE Color = 'Black' AND Size = 'M'
-- produkty koloru czarnego, srebrnego i niebieskiego
SELECT ProductID, Name, Color, Size
FROM Production.Product
WHERE Color = 'Black' OR Color = 'Silver' OR Color = 'Blue'
-- łączymy razem...
SELECT * FROM Production.Product
WHERE Name LIKE '%Bike%' AND Color = 'White'
-- NULL
-- na początku w kolumnie kolor wartości nieokreślone
SELECT * FROM Production.Product
ORDER BY Color
--! czy na pewno nie ma takich wierszy
SELECT * FROM Production.Product
WHERE Color = NULL
SELECT * FROM Production.Product
WHERE Color IS NULL
SELECT * FROM Production.Product
WHERE Color IS NOT NULL
-- łączymy razem...
SELECT * FROM Production.Product
WHERE Color = 'Black' AND Size IS NOT NULL AND Name LIKE '%Frame%'
-- nawiasy...
-- produkty koloru czarnego i rozmiarze M LUB czerwone produkty związane z szosą
SELECT * FROM Production.Product
WHERE (Color = 'Black' AND Size = 'M') OR (Color = 'Red' AND Name LIKE '%Road%')
--! uwaga na warunki wykluczające się
SELECT * FROM Production.Product
WHERE Color = 'Black' AND Color = 'Red'
-- zamiast tego...
SELECT * FROM Production.Product
WHERE Color = 'Black' OR Color = 'Red'
-- zamiast tego...
SELECT * FROM Production.Product
WHERE Color = 'Black' OR Color = 'Red'
SELECT * FROM Production.Product
WHERE Color IN ('Black', 'Red')
/*
6. Logiczna kolejność wykonywania zapytania
*/
--! odwołanie się do aliasu kolumny w WHERE nie zadziała
SELECT ProductID, Name, Color AS Kolor, Size
FROM Production.Product
WHERE Kolor = 'Red'
-- odwołanie się do aliastu kolumny w ORDER BY - jest OK
SELECT ProductID, Name, Color AS Kolor, Size
FROM Production.Product
ORDER BY Kolor
-- kolejność wykonywania instrukcji SELECT
SELECT ProductID, Name, Color AS Kolor, Size -- 2
FROM Production.Product -- 1
ORDER BY Kolor -- 3
-- bez aliastu też się uda
SELECT ProductID, Name, Color AS Kolor, Size
FROM Production.Product
ORDER BY Color
/*
7. Funkcje
*/
-- skalarne
SELECT GETDATE()
SELECT GETDATE() AS CurrentDateTime
SELECT UPPER('Bardzo ładny rower') AS CurrentDateTime
-- godziny/ miesiace/ lata.... , OD KIEDY, DO KIEDY
SELECT DATEDIFF(HOUR, '20190801 12:15', '20190801 15:15')
SELECT DATEDIFF(MONTH, '20190801', '20201201')
SELECT DATEDIFF(YEAR, '20190801', '20201201')
SELECT DATEDIFF(YEAR, GETDATE(), '20401201')
SELECT DATEDIFF(DAY, GETDATE(), '20401201')
SELECT DATEDIFF(HOUR, GETDATE(), '20401201')
-- nazwy produktów wielkimi literami
SELECT ProductID, UPPER(Name) AS Name, Color AS Kolor, Size
FROM Production.Product
-- ile dni upłynęło od początku sprzedaży
SELECT ProductID, Name, Color AS Kolor, Size, DATEDIFF(DAY, SellStartDate, GETDATE())
FROM Production.Product
-- Funkcje agregujące
SELECT COUNT(*) AS FnCount FROM Production.Product
SELECT SUM(ListPrice) AS FnSum FROM Production.Product
SELECT MIN(ListPrice) AS FnMIN FROM Production.Product
/*
8. Grupowanie danych
*/
SELECT COUNT(*) AS Cnt FROM Production.Product
-- liczba produktów koloru czerwonego
SELECT COUNT(*) AS Cnt FROM Production.Product
WHERE Color = 'Red'
-- liczba produktów poszczególnych kolorów
SELECT Color, COUNT(*) AS Cnt
FROM Production.Product
GROUP BY Color
--! nie możemy wyświetlać kolumn, po których nie pogrupowaliśmy
SELECT Color, Size, COUNT(*) AS Cnt
FROM Production.Product
GROUP BY Color
-- ... chyba, że po nich również pogrupujemy
SELECT Color, Size, COUNT(*) AS Cnt
FROM Production.Product
GROUP BY Color, Size
/*
9. Łączenie tabel
*/
SELECT * FROM Production.Product
SELECT * FROM Production.ProductSubcategory
SELECT *
FROM Production.Product
JOIN Production.ProductSubcategory
ON Production.Product.ProductSubcategoryID = Production.ProductSubcategory.ProductSubcategoryID
--! obie tabele zawierają kolumnę Name
SELECT ProductID, Name, Color, Size, Name
FROM Production.Product
JOIN Production.ProductSubcategory
ON Production.Product.ProductSubcategoryID = Production.ProductSubcategory.ProductSubcategoryID
SELECT ProductID, Production.Product.Name, Color, Size, Production.ProductSubcategory.Name
FROM Production.Product
JOIN Production.ProductSubcategory
ON Production.Product.ProductSubcategoryID = Production.ProductSubcategory.ProductSubcategoryID
-- aliasy tabel
SELECT ProductID, p.Name, Color, Size, ps.Name, p.ProductSubcategoryID, ps.ProductSubcategoryID
FROM Production.Product AS p
JOIN Production.ProductSubcategory AS ps
ON p.ProductSubcategoryID = ps.ProductSubcategoryID
/*
skrypt: www.kursysql.pl
*/