# SQL
## 資料庫創建
```sql=
CREATE DATABASE mydb;
```
## 表格
```sql=
CREATE TABLE myTable (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT
);
```
- id :欄位名稱
- INT :資料型態
- PRIMARY KEY:主鍵
- name :欄位名稱
- VARCHAR(100), : 最多存100個字符的不固定長度字串
- age :欄位名稱
## 插入資料
```sql=
INSERT INTO myTable (id, name, age) VALUES (1, 'John Doe', 30);
```
## 查詢資料
### 全部
```sql=
SELECT * FROM myTable;
```
### 特定列
```sql=
SELECT name, age FROM myTable;
```
## 更新資料
```sql=
UPDATE myTable SET age = 31 WHERE id = 1;
```
## 刪除資料
```sql=
UPDATE myTable SET age = 31 WHERE id = 1;
```
## 聚合函數和分組(EXCEL是你?)
```sql=
SELECT department, COUNT(*) AS num_employees, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;
```
COUNT(), SUM(), AVG(), MAX(), 和MIN()
## 連接(n個拼湊)
```sql=
SELECT orders.id, customers.name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.id;
```
INNER JOIN, LEFT JOIN, RIGHT JOIN, 和FULL OUTER JOIN。
## 子查詢(套娃)
```sql=
SELECT name, (SELECT AVG(salary) FROM employees) AS avg_salary
FROM departments;
```
## LeetCode
### 175. Combine Two Tables
```sql=
SELECT
P.firstName,
P.lastName,
A.city,
A.state
FROM
Person P
LEFT JOIN
Address A ON P.personId = A.personId;
```
從P選firstName,lastName; 從 A選city,state
接著在P的左邊拼一個A在personId
當然,反著做也行
```sql=
SELECT
P.firstName,
P.lastName,
A.city,
A.state
FROM
Address A
RIGHT JOIN
Person P ON A.personId = P.personId;
```