SELECT, columns and aliases
SELECT picks which columns come back from a table, can work out new ones from them, and AS gives any column the name you want.
Pick the columns you want
A query starts with what you want back, then where it lives:
SELECT title, year
FROM songs;SELECT lists the columns, in the order you want them. FROM names the table. You get every row of songs, but only those two columns. SELECT * means every column, which is handy for a first look at a table and messy in anything you keep.
SQL does not care about capitals or line breaks: select title from songs works too. Writing keywords in capitals and one clause per line just makes queries easier to read.
Work things out and rename them
A column in SELECT does not have to exist in the table. You can do maths on the ones that do:
SELECT title, seconds / 60.0 AS minutes
FROM songs;AS gives the new column a name. Without it, the heading would be the whole expression, seconds / 60.0. Two things to know: an integer divided by an integer stays a whole number in SQLite (seconds / 60 gives 2, not 2.97), and ROUND(x, 1) rounds to one decimal place.
Run it: song lengths in minutes
Run it, then change one thing and run it again.
Tables artists, songs, listeners, plays
| id | name | country | genre |
|---|---|---|---|
| 1 | Nova Lane | UK | pop |
| 2 | The Tidewater | US | indie |
| 3 | Kaito Mori | JP | electronic |
| 4 | Amara Osei | GH | afrobeats |
| 5 | Lumen Choir | SE | pop |
| 6 | Rust & Velvet | UK | rock |
| 7 | Pixel Hearts | KR | pop |
| 8 | Juno Bay | AU | indie |
| id | title | artist_id | seconds | year |
|---|---|---|---|---|
| 1 | Neon Rain | 6 | 178 | 2022 |
| 2 | Slow Motion | 1 | 158 | 2025 |
| 3 | Paper Planes | 2 | 233 | 2023 |
| 4 | Static | 1 | 269 | 2020 |
| 5 | Golden Hour | 1 | 162 | 2022 |
| 6 | Night Bus | 7 | 157 | 2020 |
| 7 | Echoes | 2 | 281 | 2022 |
| 8 | Sugar Rush | 1 | 284 | 2019 |
| 9 | Low Tide | 4 | 289 | 2019 |
| 10 | Glass House | 7 | 152 | 2020 |
| 11 | Satellite | 1 | 282 | 2025 |
| 12 | Wildfire | 3 | 214 | 2022 |
First 12 of 30 rows. Query the table to see the rest.
| id | username | age | country |
|---|---|---|---|
| 1 | maya_k | 15 | UK |
| 2 | devraj | 17 | IN |
| 3 | lucia.p | 16 | ES |
| 4 | tom_h | 14 | UK |
| 5 | ana.s | 18 | BR |
| 6 | kenji | 16 | JP |
| 7 | zoe_r | 15 | US |
| 8 | femi | 17 | NG |
| 9 | liv | 13 | SE |
| 10 | oscar.b | 16 | NULL |
| id | listener_id | song_id | day | skipped |
|---|---|---|---|---|
| 1 | 10 | 16 | 2026-09-01 | 0 |
| 2 | 8 | 3 | 2026-09-01 | 0 |
| 3 | 5 | 16 | 2026-09-01 | 0 |
| 4 | 2 | 2 | 2026-09-01 | 0 |
| 5 | 5 | 21 | 2026-09-01 | 0 |
| 6 | 5 | 23 | 2026-09-02 | 0 |
| 7 | 6 | 1 | 2026-09-02 | 0 |
| 8 | 6 | 6 | 2026-09-02 | 0 |
| 9 | 8 | 2 | 2026-09-02 | 1 |
| 10 | 5 | 5 | 2026-09-02 | 0 |
| 11 | 7 | 13 | 2026-09-02 | 0 |
| 12 | 2 | 6 | 2026-09-03 | 0 |
First 12 of 70 rows. Query the table to see the rest.
SELECT title,
seconds,
seconds / 60 AS whole_minutes,
ROUND(seconds / 60.0, 1) AS minutes
FROM songs
ORDER BY seconds DESC
LIMIT 5;
How old is each song
For every song, return its title, its year, and a column named age that says how many years old it is in 2026.
SELECT title FROM songs;