-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCommand_II.sql
More file actions
299 lines (234 loc) · 5.44 KB
/
Command_II.sql
File metadata and controls
299 lines (234 loc) · 5.44 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
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
/*
==================================================
BASIC SELECT QUERIES
================================================== */
-- Select specific column
SELECT name
FROM customers;
-- Select all columns
SELECT *
FROM customers;
-- Select unique values
SELECT DISTINCT name
FROM customers;
-- Copy data into a new table
SELECT *
INTO customers
FROM customers_backup;
-- Select top N rows
SELECT TOP 50 *
FROM customers;
-- Select top percentage
SELECT TOP 50 PERCENT *
FROM customers;
/* ==================================================
ALIASES
================================================== */
-- Rename column using alias
SELECT name AS first_name
FROM customers;
/* ==================================================
FILTERING DATA
================================================== */
-- WHERE clause
SELECT name
FROM customers
WHERE name = 'Bob';
-- AND condition
SELECT name
FROM customers
WHERE name = 'Bob'
AND age = 55;
-- OR condition
SELECT name
FROM customers
WHERE name = 'Bob'
OR age = 55;
-- BETWEEN range
SELECT name
FROM customers
WHERE age BETWEEN 45 AND 55;
-- LIKE pattern matching
SELECT name
FROM customers
WHERE name LIKE '%Bob%';
-- IN multiple values
SELECT name
FROM customers
WHERE name IN ('Bob', 'Fred', 'Harry');
-- NULL checks
SELECT name
FROM customers
WHERE name IS NULL;
SELECT name
FROM customers
WHERE name IS NOT NULL;
/* ==================================================
CREATE STATEMENTS
================================================== */
-- Create database
CREATE DATABASE dataquestDB;
-- Create table
CREATE TABLE customers (
customer_id INT,
name VARCHAR(255),
age INT
);
-- Create index
CREATE INDEX idx_name
ON customers (name);
-- Create view
CREATE VIEW bob_customers AS
SELECT name, age
FROM customers
WHERE name = 'Bob';
/* ==================================================
DROP STATEMENTS (USE WITH CAUTION)
================================================== */
-- Drop database
DROP DATABASE dataquestDB;
-- Drop table
DROP TABLE customers;
-- Drop index
DROP INDEX idx_name;
/* ==================================================
UPDATE & DELETE
================================================== */
-- Update records
UPDATE customers
SET age = 56
WHERE name = 'Bob';
-- Delete specific records
DELETE FROM customers
WHERE name = 'Bob';
/* ==================================================
ALTER TABLE
================================================== */
-- Add column
ALTER TABLE customers
ADD surname VARCHAR(255);
-- Remove column
ALTER TABLE customers
DROP COLUMN surname;
/* ==================================================
AGGREGATE FUNCTIONS
================================================== */
-- Count rows
SELECT COUNT(*)
FROM customers;
-- Sum values
SELECT SUM(age)
FROM customers;
-- Average
SELECT AVG(age)
FROM customers;
-- Minimum
SELECT MIN(age)
FROM customers;
-- Maximum
SELECT MAX(age)
FROM customers;
/* ==================================================
GROUPING & FILTERING AGGREGATES
================================================== */
-- Group by
SELECT name, AVG(age)
FROM customers
GROUP BY name;
-- Having clause
SELECT COUNT(customer_id), name
FROM customers
GROUP BY name
HAVING COUNT(customer_id) > 2;
/* ==================================================
SORTING & PAGINATION
================================================== */
-- Order by ascending
SELECT name
FROM customers
ORDER BY age;
-- Order by descending
SELECT name
FROM customers
ORDER BY age DESC;
-- Offset rows
SELECT name
FROM customers
ORDER BY age
OFFSET 10 ROWS;
-- Fetch rows
SELECT name
FROM customers
ORDER BY age
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
/* ==================================================
JOINS
================================================== */
-- Inner join
SELECT name
FROM customers
INNER JOIN orders
ON customers.customer_id = orders.customer_id;
-- Left join
SELECT name
FROM customers
LEFT JOIN orders
ON customers.customer_id = orders.customer_id;
-- Right join
SELECT name
FROM customers
RIGHT JOIN orders
ON customers.customer_id = orders.customer_id;
-- Full outer join
SELECT name
FROM customers
FULL OUTER JOIN orders
ON customers.customer_id = orders.customer_id;
/* ==================================================
SUBQUERIES
================================================== */
-- Exists
SELECT name
FROM customers
WHERE EXISTS (
SELECT 1
FROM orders
WHERE orders.customer_id = customers.customer_id
);
/* ==================================================
PERMISSIONS
================================================== */
-- Grant permissions
GRANT SELECT, UPDATE
ON customers
TO usr_bob;
-- Revoke permissions
REVOKE SELECT, UPDATE
ON customers
FROM usr_bob;
/* ==================================================
TRANSACTIONS
================================================== */
-- Savepoint
SAVEPOINT before_delete;
-- Commit transaction
COMMIT;
-- Rollback
ROLLBACK TO before_delete;
/* ==================================================
TRUNCATE
================================================== */
-- Remove all records, keep table
TRUNCATE TABLE customers;
/* ==================================================
UNION
================================================== */
-- Union (removes duplicates)
SELECT name FROM customers
UNION
SELECT name FROM orders;
-- Union all (keeps duplicates)
SELECT name FROM customers
UNION ALL
SELECT name FROM orders;