Repository navigation
Expand file tree
/
Copy path02_SQL_select-queries.sql
More file actions
179 lines (146 loc) · 5.03 KB
/
Copy path02_SQL_select-queries.sql
File metadata and controls
179 lines (146 loc) · 5.03 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
USE MyDatabase; -- uzywamy tej samej bazy danych z ktorych chcemy dostac wynik selecta
GO
SELECT* -- pokazuje wszystkie kolumny i wiersze z danej tabeli w danej bazie damych
FROM dbo.customers
/*task: Retrieve all Order Data*/
SELECT*
FROM dbo.orders
/*task: Retrieve each customer's name country and score*/
SELECT
first_name, --jesli chcemy wyswietlic konkretne kolumny zamiast gwiazdki wypisujemy nazwy kolumn
country,
score
FROM dbo.customers
/*task: Retrieve customers with a score not equal to 0*/
SELECT
id,
first_name
FROM dbo.customers
WHERE score != 0 --dajemy warunek ze score ma byc nierowny 0;
/*task: Retrieve customers from Germany*/
SELECT
id,
first_name,
country
FROM dbo.customers
WHERE country = 'Germany' --uzywamy '' gdy porownujemy ze string values
-------------------------------------------------------------------------------------------------------------------------------------
/*task: Retrive all customers and sort the results by the highest score first*/
SELECT
first_name,
score
FROM dbo.customers
ORDER BY score DESC --to polecenie porzadkuje wiersze
--(w tym przypadku po score zaczynajac od najwyzszego bo mamy DESC a nie ASC czy domyslny ORDER BY)
/*task: Retrive all customers and sort the results by the lowest score first*/
SELECT
first_name,
score
FROM dbo.customers
ORDER BY score ASC
/*task: Retrieve all customers and sort the results by the country and then by the highest score */
SELECT
first_name,
country,
score
FROM dbo.customers
ORDER BY
country ASC,
score DESC -- mozliwe jest sortowanie w po wiecej niz jednym warunku, w tym przypadku najpierw sortujemy po country a potem po score
----------------------------------------------------------------------------------------------------------------------------------------
/*
GROUP BY
dziala nieco dziwnie na pierwszy rzut oka,
pod from jesli damy GROUP BY, np country to wtedy SQL
wie ze ma zgrupowac wiersze po np country i wyswietlic dla nich
agregacje, które piszemy z kolei jeszcze nad FROM
ex.
JOHN GERMANY 200
GINA GERMANY 300
pokaze: GERMANY 500
*/
/*task: Find the total score for each country*/
SELECT
country AS customer_country,
first_name AS imiona,
SUM(score) AS total_points
FROM dbo.customers
GROUP BY country
/*task: podaj laczny score danego kraju i podaj ile ma on klientow*/
SELECT
country,
SUM(score) AS total_score,
COUNT(id) AS ilosc_osob -- liczy ilosc "zlaczen" spowodowanych przez agregacje w tym przypadku
FROM dbo.customers
GROUP BY country -- dziala to tak jak ma byc. grupujemy po country i wyswietlamy dla tego zgrupowania wszystkie agregacje.
ORDER BY total_score DESC
-------------------------------------------------------------------------------------------------------------------------------------------
/*
HAVING
Używamy HAVING do filtrowania danych PO agregacji (GROUP BY). DO warunku HAVING uzywamy
z'agregowanych kolumn
*/
/*task: Find the average score for each county considering only
customers with a score not equal to 0. And return only those countries with
an average score greater than 430 */
SELECT
country,
AVG(score) AS srednia
FROM dbo.customers
WHERE score != 0
GROUP BY country
HAVING AVG(score) > 430 -- nie mozemy dac warunku po 'srednia' poniewaz alias dodaje sie w selectcie a one wykonuja sie pozniej
-- mozna by natomiast dac ORDER BY srenia i to by zadzialo (nie tak samo) poniuewaz ORDER BY wykonuje sie na prawie na koncu (pozniej jest tylko TOP)
---------------------------------------------------------------------------------------------------------------------------------------------
USE MyDatabase
GO
SELECT*
FROM dbo.customers
/*task: Return Unique list of all countries*/
SELECT DISTINCT -- distinct zwraca nam wartosci ktore sie pojawiaja tylko raz.
--np jesli niemcy wystapily 2 razy to pokaza sie raz
country
FROM dbo.customers
--NOTE: nie używaj distinct chyba ze faktycznie trzeba. zwalnia one zapytania
/*task: Retrieve only 3 Customers */
SELECT TOP 3 -- Top [value] pokazuje ile gornych wierszy w tabeli wyswietlic
id,
first_name
FROM dbo.customers
/* task: Retrieve the Top 3 Customers with the Highest Scores */
SELECT TOP 3 *
FROM dbo.customers
ORDER BY score DESC
/*task: Retrieve the Lowest 2 Customers based on the Score */
SELECT TOP 2 *
FROM dbo.customers
ORDER BY
score ASC,
id ASC -- to zadziala dopiero wtedy gbydy np 2 osoby mialy ten sam score to wtedy osoba z nizszym id byla by wyzej
SELECT*
FROM dbo.orders
/*task: Get the Two Most Recent Orders */
SELECT TOP 2 *
FROM dbo.orders
ORDER BY order_date DESC
-------------------------------------------------------------------------------------------------------------------------------------------------
/*
CODING ORDER:
SELECT DISTINCT TOP 2
Col1,
SUM(Col2)
FROM Table
WHERE score = 10
GROUP BY Col1 --ta co ma byc zgrupowana nie ta po ktorej grupujemy!
HAVING SUM(Col2) > 30
ORDER BY Col1 ASC
---------------------------------------
EXECUTE ORDER:
1. FROM
2. WHERE
3. GROUP BY (will start aggregating the data)
4. HAVING
5. SELECT (DISTINCT) -- pod tym kolumny ktore wzkazalismy do zaznaczenia
6. ORDER BY
7. TOP
*/