SQL Cheatsheet - Part One (Fundamentals)
What is SQL?
- Structured Query Language
- A language to interact with data.
How is data saved?
- In tables, within the database
Imagine the database as a library
- Table: one of the bookshelves
- Data: A book
- When we want to retrieve a book, we use SQL.
Learn the SQL fundamentals properly and you will be a powerful engineer.
In PostgreSQL:
"double quotes"→ for table and column names (identifiers)'single quotes'→ for values (string comparisons, data, etc)
We will work with these two tables.
table name: kimetsu
| name | kokyu | feature |
|:-------------:|:-------------:|:---------:|
| 静岡 アダメ | 地獄の呼吸 |突進 |
| 竜宮城 | 炎の呼吸 |眉毛の二段 |
| 岡山 悟 | 水の呼吸 | 天然 |
| 大豆の子 | | 竹 |
| 鱗滝 | 水の呼吸 | 師匠 |
table name: eva
| name | kawaii | role |
|:-------------:|:-------------:|:---------:|
| レイ | 10 |パイロット |
| アスカ | 3 |パイロット |
| ゆい | 6 | |
| ミサト | 4 |作戦部長 |
- The entire thing: table
- Vertical line: a column
- Horizontal line: a record
SELECT: displays the desired columns from the specified table
SELECT "name", "feature" -- column name
FROM kimetsu; -- table name
| name | feature |
|---|---|
| 静岡 アダメ | 突進 |
| 竜宮城 | 眉毛の二段 |
| 岡山 悟 | 天然 |
| 大豆の子 | 竹 |
| 鱗滝 | 師匠 |
AS: renames the desired columns
SELECT "name" AS "名前", "feature" as "特徴"
FROM kimetsu;
| 名前 | 特徴 |
|---|---|
| 静岡 アダメ | 突進 |
| 竜宮城 | 眉毛の二段 |
| 岡山 悟 | 天然 |
| 大豆の子 | 竹 |
| 鱗滝 | 師匠 |
When you don’t have the energy to type out column names (but still want results fast). Only do this on small tables unless you hate your DBA
SELECT *
FROM kimetsu;
| name | kokyu | feature |
|---|---|---|
| 静岡 アダメ | 地獄の呼吸 | 突進 |
| 竜宮城 | 炎の呼吸 | 眉毛の二段 |
| 岡山 悟 | 水の呼吸 | 天然 |
| 大豆の子 | 竹 | |
| 鱗滝 | 水の呼吸 | 師匠 |
DISTINCT: How to hide duplicate data within a column
SELECT "kokyu"
FROM kimetsu;
| kokyu |
|---|
| 地獄の呼吸 |
| 炎の呼吸 |
| 水の呼吸 |
| 水の呼吸 |
SELECT DISTINCT "kokyu"
FROM kimetsu;
| kokyu |
|---|
| 地獄の呼吸 |
| 炎の呼吸 |
| 水の呼吸 |
WHERE: Retrieve entries where kawaii is more than 5
- (Remember, kawaii is subjective, and only a personal opinion.)
WHEREworks with records.
SELECT "name", "kawaii"
FROM eva
WHERE "kawaii" > 5;
| name | kawaii |
|---|---|
| レイ | 10 |
| ゆい | 6 |
AND: Add more conditions to your WHERE record query
SELECT *
FROM eva
WHERE "kawaii" > 5 AND "role" = 'パイロット';
| name | kawaii | role |
|---|---|---|
| レイ | 10 | パイロット |
OR: The record appeals to either those conditions
SELECT *
FROM eva
WHERE "kawaii" > 5 OR "role" = 'パイロット';
| name | kawaii | role |
|---|---|---|
| レイ | 10 | パイロット |
| アスカ | 3 | パイロット |
| ゆい | 6 |
BETWEEN
SELECT *
FROM eva
WHERE "kawaii" BETWEEN 4 AND 6;
| name | kawaii | role |
|---|---|---|
| ゆい | 6 | |
| ミサト | 4 | 作戦部長 |
IN, NOT IN
SELECT *
FROM eva
WHERE "role" IN ('パイロット', '作戦部長');
| name | kawaii | role |
|---|---|---|
| レイ | 10 | パイロット |
| アスカ | 3 | パイロット |
| ミサト | 4 | 作戦部長 |
SELECT *
FROM eva
WHERE "role" NOT IN ('パイロット', '作戦部長');
| name | kawaii | role |
|---|---|---|
| ゆい | 6 |
LIKE: For Searching Data
- This matches anything starting with ア.
SELECT *
FROM eva
WHERE "name" LIKE 'ア%';
- Full pattern matching:
SELECT *
FROM eva
WHERE "name" LIKE 'アス_'; -- _ matches a single character
| name | kawaii | role |
|---|---|---|
| アスカ | 3 | パイロット |
IS NULL/ IS NOT NULL: Look For Empty Data / Not Empty Data
SELECT *
FROM eva
WHERE "role" IS NULL;
| name | kawaii | role |
|---|---|---|
| ゆい | 6 |
LIMIT: When You Don't Want To Query The Entire Column
- SQL result rows start at 1 when displayed, but
LIMITandOFFSETare 0-based. SoLIMIT 2 OFFSET 0returns the first 2 rows. - When there is a lot of data in the column, SQL will slow down or freeze. Use LIMIT to avoid that.
SELECT *
FROM eva
LIMIT 2;
| name | kawaii | role |
|---|---|---|
| レイ | 10 | パイロット |
| アスカ | 3 | パイロット |
ORDER BY: Sort
SELECT *
FROM eva
ORDER BY "kawaii";
| name | kawaii | role |
|---|---|---|
| アスカ | 3 | パイロット |
| ミサト | 4 | 作戦部長 |
| ゆい | 6 | |
| レイ | 10 | パイロット |
SELECT *
FROM eva
ORDER BY "kawaii" DESC;
| name | kawaii | role |
|---|---|---|
| レイ | 10 | パイロット |
| ゆい | 6 | |
| ミサト | 4 | 作戦部長 |
| アスカ | 3 | パイロット |
- SQL queries can be written in lowercase, but prefer uppercase to differenciate between keywords and column / table names. It will reduce errors.
- Insert a new line after each query to improve readability.
- Always use
LIMITin prod, instead of asterisks, for faster queries and to reduce server load.