Lecture 3
Lecture 3
• NOT NULL
• UNIQUE
• PRIMARY KEY
• DEFAULT
• CHECK
• ...
INSERT
INSERT INTO flights
(origin, destination, duration)
VALUES ('New York', 'London', 415);
INSERT INTO flights
(origin, destination, duration)
VALUES ('New York', 'London', 415);
INSERT INTO flights
(origin, destination, duration)
VALUES ('New York', 'London', 415);
INSERT INTO flights
(origin, destination, duration)
VALUES ('New York', 'London', 415);
INSERT INTO flights
(origin, destination, duration)
VALUES ('New York', 'London', 415);
INSERT INTO flights
(origin, destination, duration)
VALUES ('New York', 'London', 415);
SELECT
SELECT * FROM flights;
id origin des,na,on dura,on
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights;
id origin des,na,on dura,on
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT origin, destination FROM flights;
id origin des,na,on dura,on
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT origin, destination FROM flights;
id origin des,na,on dura,on
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights WHERE id = 3;
id origin des,na,on dura,on
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights WHERE id = 3;
id origin des,na,on dura,on
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
SELECT * FROM flights WHERE origin = 'New York';
• SUM
• COUNT
• MIN
• MAX
• AVG
• ...
UPDATE
UPDATE flights
SET duration = 430
WHERE origin = 'New York'
AND destination = 'London';
DELETE
DELETE FROM countries
WHERE destination = 'Tokyo';
Other Clauses
• LIMIT
• ORDER BY
• GROUP BY
• HAVING
• ...
Foreign Keys
flights
id origin des,na,on duration
1 New York London 415
2 Shanghai Paris 760
3 Istanbul Tokyo 700
4 New York Paris 435
5 Moscow Paris 245
6 Lima New York 455
flights
id origin origin_code des,na,on des,na,on_code duration
1 New York JFK London LHR 415
2 Shanghai PVG Paris CDG 760
3 Istanbul IST Tokyo NRT 700
4 New York JFK Paris CDG 435
5 Moscow SVO Paris CDG 245
6 Lima LIM New York JFK 455
locations
id code name
1 JFK New York
2 PVG Shanghai
3 IST Istanbul
4 LHR London
5 SVO Moscow
6 LIM Lima
7 CDG Paris
8 NRT Tokyo
flights
id origin_id destination_id duration
1 1 4 415
2 2 7 760
3 3 8 700
4 1 7 435
5 5 7 245
6 6 1 455
passengers
id name flight_id
1 Alice 1
2 Bob 1
3 Charlie 2
4 Dave 2
5 Erin 4
6 Frank 6
7 Grace 6
JOIN
Types of JOINs
flight_id
1
2
6
SELECT * FROM flights WHERE id IN
(SELECT flight_id FROM passengers
GROUP BY flight_id HAVING COUNT(*) > 1);
flight_id
1
2
6
SELECT * FROM flights WHERE id IN
(SELECT flight_id FROM passengers
GROUP BY flight_id HAVING COUNT(*) > 1);
Password:
SELECT * FROM users
WHERE (username = username)
AND (password = password);
Username:
alice
Password:
12345
SELECT * FROM users
WHERE (username = username)
AND (password = password);
SELECT * FROM users
WHERE (username = 'alice')
AND (password = '12345');
Username:
hacker
Password:
1' OR '1' = '1
SELECT * FROM users
WHERE (username = username)
AND (password = password);
SELECT * FROM users
WHERE (username = 'hacker')
AND (password = '1' OR '1' = '1');
Race Conditions
Race Conditions
Bank Account
$100
Race Conditions
Bank Account
SELECT balance FROM bank
WHERE user_id = 1;
$100
Race Conditions
Bank Account
SELECT balance FROM bank
WHERE user_id = 1;
100
$100
Race Conditions
Bank Account
SELECT balance FROM bank
WHERE user_id = 1;
100
$100
Race Conditions
Bank Account
SELECT balance FROM bank
WHERE user_id = 1;
100
UPDATE bank $0
SET balance = balance - 100
WHERE user_id = 1;
$100
Race Conditions
Bank Account
$100
Race Conditions
Bank Account
SELECT balance FROM bank
WHERE user_id = 1;
$100
Race Conditions
Bank Account
SELECT balance FROM bank
WHERE user_id = 1;
100
$100
Race Conditions
Bank Account
SELECT balance FROM bank
WHERE user_id = 1;
SELECT balance FROM bank
100 WHERE user_id = 1;
$100
Race Conditions
Bank Account
SELECT balance FROM bank
WHERE user_id = 1;
SELECT balance FROM bank
100 WHERE user_id = 1;
100
$100
Race Conditions
Bank Account
SELECT balance FROM bank
WHERE user_id = 1;
SELECT balance FROM bank
100 WHERE user_id = 1;
$100
Race Conditions
Bank Account
SELECT balance FROM bank
WHERE user_id = 1;
SELECT balance FROM bank
100 WHERE user_id = 1;
$100
SQL Transactions
• BEGIN
• COMMIT
SQLAlchemy
Web Programming
with Python and JavaScript