-
Notifications
You must be signed in to change notification settings - Fork 51
/
Copy pathClase_8_practica.sql
285 lines (242 loc) · 4.48 KB
/
Clase_8_practica.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
--SELECT
-- Obtener toda la tabla de tracks
SELECT * FROM tracks;
--Obtener una lista con los campos TrackId, name, composer y UnitPrice
SELECT
trackid,
name,
composer,
unitPrice
FROM
tracks;
--ORDER BY
--Ordenar segun AlbumId en orden ascendente
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC;
--Ordenar por AlbumId y luego por Milliseconds
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC,
milliseconds DESC;
--WHERE
--Obtener los tracks que tengan AlbumId=1
SELECT
name,
milliseconds,
bytes,
albumid
FROM
tracks
WHERE
albumid = 1;
--Obtener los tracks que AlbumId sea 1 y duren mas de 250000 milisegundos
SELECT
name,
milliseconds,
bytes,
albumid
FROM
tracks
WHERE
albumid = 1
AND milliseconds > 250000;
--Obtener los tracks que sean compuestos por un tal Smith
SELECT
name,
albumid,
composer
FROM
tracks
WHERE
composer LIKE '%Smith%'
ORDER BY
albumid;
--Obtener los tracks que su id sea 2 o 3
SELECT
name,
albumid,
mediatypeid
FROM
tracks
WHERE
mediatypeid IN (2, 5);
--LIMIT
--Obtenemos los 10 tracks más grandes
SELECT
trackid,
name,
bytes
FROM
tracks
ORDER BY
bytes DESC
LIMIT 10;
--BETWEEN
--Buscar las facturas que esten entre 14.96 y 18.86
SELECT
InvoiceId,
BillingAddress,
Total
FROM
invoices
WHERE
Total BETWEEN 14.91 and 18.86
ORDER BY
Total;
--JOINS
-- Obtener los nombres de todos los álbumes junto con el nombre del artista
SELECT
Title,
Name
FROM
albums
INNER JOIN artists
ON artists.ArtistId = albums.ArtistId;
--Obtener los tracks, con el album y el artista
SELECT
trackid,
tracks.name AS track,
albums.title AS album,
artists.name AS artist
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
INNER JOIN artists ON artists.artistid = albums.artistid;
--GROUP BY
--Seleccionar la cantidad de tracks por cada album, de mayor a menor
SELECT
tracks.albumid,
COUNT(trackid),
albums.Title
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
GROUP BY
tracks.albumid
ORDER BY COUNT(trackid) DESC
LIMIT 1;
SELECT
tracks.albumid,
AVG(tracks.milliseconds),
albums.Title
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
GROUP BY
tracks.albumid
ORDER BY AVG(tracks.milliseconds) DESC
LIMIT 5;
--Obtener el tamaño total de cada album y la duracion
SELECT
albumid,
SUM(milliseconds) length,
SUM(bytes) size
FROM
tracks
GROUP BY
albumid;
--UNION
--Combinar los empleados y clientes en una sola lista, ordenando por nombre y apellido
SELECT FirstName, LastName, 'Employee' AS Type
FROM employees
UNION
SELECT FirstName, LastName, 'Customer'
FROM customers
ORDER BY FirstName, LastName;
--INSERT
--Insertar un nuevo artista en la tabla
INSERT INTO artists (name)
VALUES('Bud Powell');
--Verificar la insercion
SELECT
ArtistId,
Name
FROM
Artists
ORDER BY
ArtistId DESC
LIMIT 1;
--UPDATE
--Actualizar el apellido del empleado 3 a Smith
UPDATE employees
SET lastname = 'Smith'
WHERE employeeid = 3;
--Verificar
SELECT
employeeid,
firstname,
lastname,
title,
email
FROM
employees
WHERE
employeeid = 3;
--DELETE
--Eliminar un artista
DELETE FROM artists
WHERE artistid = 279;
--verificamos
SELECT
ArtistId,
Name
FROM
artists
ORDER BY
ArtistId DESC
LIMIT 3;
--CREATE TABLE
--Crear la tabla de contactos con nombre, apellido, email y telefono
--Cada contacto puede pertencer a uno o muchos grupos, y cada grupo puede tener 0 o muchos contactos
--contacts, groups, contact_groups
CREATE TABLE contacts (
contact_id INTEGER PRIMARY KEY,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
email TEXT NOT NULL,
phone TEXT NOT NULL
);
CREATE TABLE groups (
group_id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
CREATE TABLE contact_groups(
contact_id INTEGER,
group_id INTEGER,
PRIMARY KEY (contact_id, group_id),
FOREIGN KEY (contact_id)
REFERENCES contacts (contact_id)
ON DELETE CASCADE,
FOREIGN KEY (group_id)
REFERENCES groups (group_id)
ON DELETE CASCADE
);
--ALTER TABLE
--Crear la tabla devices con 3 columnas: name, model y serial
CREATE TABLE devices (
name TEXT NOT NULL,
model TEXT NOT NULL,
serial INTEGER NOT NULL UNIQUE
);
--Cambiar el nombre de devices a equipment
ALTER TABLE devices
RENAME TO equipment;
--Agregar columna location
ALTER TABLE equipment
ADD COLUMN location text;
--Renombrar la columna serial a serialNumber
ALTER TABLE equipment
RENAME COLUMN serial TO serialNumber;
--DROP
DROP TABLE equipment;