Our first step is to load the sql extension.
%load_ext sql
Then we will connect to the database. In this lecture example, the database is stored in a single file on our own computer called lec18_basic_examples.db.
Note that starting a cell with %%sql tells Jupyter that you are running SQL code, not Python code.
In actual practice, you'd usually connect to some database server via a network connection, e.g. hosted on some computer on the internet.
%%sql
sqlite:///data/lec18_basic_examples.db
Now that we're connected, we can, for example, display the contents of the Dragon table.
%%sql
SELECT * FROM Dragon;
* sqlite:///data/lec18_basic_examples.db Done.
| name | year | cute |
|---|---|---|
| hiccup | 2010 | 10 |
| drogon | 2011 | -100 |
| dragon 2 | 2019 | 0 |
%%sql
SELECT * FROM sqlite_master WHERE type='table'
* sqlite:///data/lec18_basic_examples.db Done.
| type | name | tbl_name | rootpage | sql |
|---|---|---|---|---|
| table | sqlite_sequence | sqlite_sequence | 7 | CREATE TABLE sqlite_sequence(name,seq) |
| table | Dragon | Dragon | 2 | CREATE TABLE Dragon ( name TEXT PRIMARY KEY, year INTEGER CHECK (year >= 2000), cute INTEGER ) |
| table | Dish | Dish | 4 | CREATE TABLE Dish ( name TEXT PRIMARY KEY, type TEXT, cost INTEGER CHECK (cost >= 0) ) |
| table | Scene | Scene | 6 | CREATE TABLE Scene ( id INTEGER PRIMARY KEY AUTOINCREMENT, biome TEXT NOT NULL, city TEXT NOT NULL, visitors INTEGER CHECK (visitors >= 0), created_at DATETIME DEFAULT (DATETIME('now')) ) |
%%sql
SELECT * FROM Dragon;
* sqlite:///data/lec18_basic_examples.db Done.
| name | year | cute |
|---|---|---|
| hiccup | 2010 | 10 |
| drogon | 2011 | -100 |
| dragon 2 | 2019 | 0 |
%%sql
SELECT cute, year FROM Dragon;
* sqlite:///data/lec18_basic_examples.db Done.
| cute | year |
|---|---|
| 10 | 2010 |
| -100 | 2011 |
| 0 | 2019 |
%%sql
SELECT cute AS cuteness, year AS birth FROM Dragon;
* sqlite:///data/lec18_basic_examples.db Done.
| cuteness | birth |
|---|---|
| 10 | 2010 |
| -100 | 2011 |
| 0 | 2019 |
%%sql
SELECT cute AS cuteness,
year AS birth
FROM Dragon;
* sqlite:///data/lec18_basic_examples.db Done.
| cuteness | birth |
|---|---|
| 10 | 2010 |
| -100 | 2011 |
| 0 | 2019 |
%%sql
SELECT name, year
FROM Dragon
WHERE cute > 0;
* sqlite:///data/lec18_basic_examples.db Done.
| name | year |
|---|---|
| hiccup | 2010 |
%%sql
SELECT name, cute, year
FROM Dragon
WHERE cute > 0 OR year > 2015;
* sqlite:///data/lec18_basic_examples.db Done.
| name | cute | year |
|---|---|---|
| hiccup | 10 | 2010 |
| dragon 2 | 0 | 2019 |
%%sql
SELECT *
FROM Dragon
ORDER BY cute DESC;
* sqlite:///data/lec18_basic_examples.db Done.
| name | year | cute |
|---|---|---|
| hiccup | 2010 | 10 |
| dragon 2 | 2019 | 0 |
| drogon | 2011 | -100 |
%%sql
SELECT *
FROM Dragon
LIMIT 2;
* sqlite:///data/lec18_basic_examples.db Done.
| name | year | cute |
|---|---|---|
| hiccup | 2010 | 10 |
| drogon | 2011 | -100 |
%%sql
SELECT *
FROM Dragon
LIMIT 2
OFFSET 1;
* sqlite:///data/lec18_basic_examples.db Done.
| name | year | cute |
|---|---|---|
| drogon | 2011 | -100 |
| dragon 2 | 2019 | 0 |
%%sql
SELECT *
FROM Dish;
* sqlite:///data/lec18_basic_examples.db Done.
| name | type | cost |
|---|---|---|
| ravioli | entree | 10 |
| pork bun | entree | 7 |
| taco | entree | 7 |
| edamame | appetizer | 4 |
| fries | appetizer | 4 |
| potsticker | appetizer | 4 |
| ice cream | dessert | 5 |
%%sql
SELECT type
FROM Dish;
* sqlite:///data/lec18_basic_examples.db Done.
| type |
|---|
| entree |
| entree |
| entree |
| appetizer |
| appetizer |
| appetizer |
| dessert |
%%sql
SELECT type
FROM Dish
GROUP BY type;
* sqlite:///data/lec18_basic_examples.db Done.
| type |
|---|
| appetizer |
| dessert |
| entree |
%%sql
SELECT type, MAX(cost)
FROM Dish
GROUP BY type;
* sqlite:///data/lec18_basic_examples.db Done.
| type | MAX(cost) |
|---|---|
| appetizer | 4 |
| dessert | 5 |
| entree | 10 |
%%sql
SELECT type,
SUM(cost),
MIN(cost),
MAX(name)
FROM Dish
GROUP BY type;
* sqlite:///data/lec18_basic_examples.db Done.
| type | SUM(cost) | MIN(cost) | MAX(name) |
|---|---|---|---|
| appetizer | 12 | 4 | potsticker |
| dessert | 5 | 5 | ice cream |
| entree | 24 | 7 | taco |
%%sql
SELECT type, COUNT(cost)
FROM Dish
GROUP BY type;
* sqlite:///data/lec18_basic_examples.db Done.
| type | COUNT(cost) |
|---|---|
| appetizer | 3 |
| dessert | 1 |
| entree | 3 |
%%sql
SELECT type, COUNT(cost)
FROM Dish
GROUP BY type;
* sqlite:///data/lec18_basic_examples.db Done.
| type | COUNT(cost) |
|---|---|
| appetizer | 3 |
| dessert | 1 |
| entree | 3 |
%%sql
SELECT type, COUNT(*)
FROM Dish
GROUP BY type;
* sqlite:///data/lec18_basic_examples.db Done.
| type | COUNT(*) |
|---|---|
| appetizer | 3 |
| dessert | 1 |
| entree | 3 |
%%sql
SELECT type, cost
FROM Dish
GROUP BY type, cost;
* sqlite:///data/lec18_basic_examples.db Done.
| type | cost |
|---|---|
| appetizer | 4 |
| dessert | 5 |
| entree | 7 |
| entree | 10 |
%%sql
SELECT type, cost, COUNT(*)
FROM Dish
GROUP BY type, cost;
* sqlite:///data/lec18_basic_examples.db Done.
| type | cost | COUNT(*) |
|---|---|---|
| appetizer | 4 | 3 |
| dessert | 5 | 1 |
| entree | 7 | 2 |
| entree | 10 | 1 |
%%sql
SELECT type, COUNT(*)
FROM Dish
GROUP BY type;
* sqlite:///data/lec18_basic_examples.db Done.
| type | COUNT(*) |
|---|---|
| appetizer | 3 |
| dessert | 1 |
| entree | 3 |
%%sql
SELECT type, COUNT(*)
FROM Dish
GROUP BY type
HAVING MAX(cost) < 8
* sqlite:///data/lec18_basic_examples.db Done.
| type | COUNT(*) |
|---|---|
| appetizer | 3 |
| dessert | 1 |
%%sql
SELECT type, COUNT(*)
FROM Dish
WHERE cost < 8
GROUP BY type;
* sqlite:///data/lec18_basic_examples.db Done.
| type | COUNT(*) |
|---|---|
| appetizer | 3 |
| dessert | 1 |
| entree | 2 |
%%sql
SELECT DISTINCT cost
FROM Dish;
* sqlite:///data/lec18_basic_examples.db Done.
| cost |
|---|
| 10 |
| 7 |
| 4 |
| 5 |
%%sql
SELECT DISTINCT type
FROM Dish
WHERE cost < 9;
* sqlite:///data/lec18_basic_examples.db Done.
| type |
|---|
| entree |
| appetizer |
| dessert |
%%sql
SELECT DISTINCT type, cost
FROM Dish
WHERE cost < 9;
* sqlite:///data/lec18_basic_examples.db Done.
| type | cost |
|---|---|
| entree | 7 |
| appetizer | 4 |
| dessert | 5 |
%%sql
SELECT DISTINCT type, cost
FROM Dish;
* sqlite:///data/lec18_basic_examples.db Done.
| type | cost |
|---|---|
| entree | 10 |
| entree | 7 |
| appetizer | 4 |
| dessert | 5 |
%%sql
SELECT type, AVG(cost)
FROM Dish
GROUP BY type;
* sqlite:///data/lec18_basic_examples.db Done.
| type | AVG(cost) |
|---|---|
| appetizer | 4.0 |
| dessert | 5.0 |
| entree | 8.0 |
%%sql
SELECT type, AVG(DISTINCT cost)
FROM Dish
GROUP BY type;
* sqlite:///data/lec18_basic_examples.db Done.
| type | AVG(DISTINCT cost) |
|---|---|
| appetizer | 4.0 |
| dessert | 5.0 |
| entree | 8.5 |