# 欄位與條件

本頁說明如何以 `select()` 指定回傳欄位、以 `where()` 篩選資料列，以及兩者產生的 SQL。

## `select()`

```typescript
MySQLPool.table("users").select("id", "name", "email");
// SELECT `id`, `name`, `email` FROM `users`
```

| 規則 | 範例輸入 | 產生的 SQL |
|---|---|---|
| 未呼叫或不帶參數 | — | `*` |
| 一般欄位加反引號 | `"name"` | `` `name` `` |
| 含 `.`、`(`、`)` 的欄位原樣輸出 | `"users.email"`、`"COUNT(*) AS c"` | `users.email`、`COUNT(*) AS c` |

## `where()`

每次呼叫加入一個條件，多個條件以 `AND` 串接；資料值一律走 `?` 佔位符。

| 寫法 | 範例 | 產生的 SQL |
|---|---|---|
| 兩參數（等值） | `where("status", "active")` | `` `status` = 'active' `` |
| 三參數（比較） | `where("age", ">", 18)` | `` `age` > 18 `` |
| `LIKE` | `where("name", "LIKE", "Jo")` | `` `name` LIKE '%Jo%' ``（自動前後加 `%`） |
| `IN` | `where("id", "IN", [1, 2])` | `` `id` IN ('1', '2') ``（元素轉成字串） |

```typescript
const rows = await MySQLPool
  .table("users")
  .where("status", "active")
  .where("age", ">=", 18)
  .where("name", "LIKE", "John")
  .where("role", "IN", ["admin", "editor"])
  .get();
```

### 欄位名規則

欄位名不含 `(` 也不含 `.` 時加反引號；否則原樣輸出，可寫 `users.id` 或 `DATE(created_at)`。

## 相關頁面

- [資料表關聯](/zh/joins)
- [排序與分頁](/zh/sorting-and-pagination)
