---
title: SQL常è§é¢è¯é¢æ»ç»ï¼1ï¼
description: SQL常è§é¢è¯é¢æ»ç»ç¬¬ä¸ç¯ï¼æ¶µçSELECTæ£ç´¢æ°æ®ãWHEREæ¡ä»¶è¿æ»¤ãORDER BYæåºãDISTINCTå»éãLIMITå页çåºç¡æ¥è¯¢æä½åç客çé¢è§£æã
category: æ°æ®åº
tag:
- æ°æ®åºåºç¡
- SQL
head:
- - meta
- name: keywords
content: SQLé¢è¯é¢,SELECTæ¥è¯¢,WHEREæ¡ä»¶,ORDER BYæåº,DISTINCTå»é,LIMITå页,SQLåºç¡
---
> é¢ç®æ¥æºäºï¼[ç客é¢é¸ - SQL å¿
ç¥å¿
ä¼](https://www.nowcoder.com/exam/oj?page=1&tab=SQL%E7%AF%87&topicId=298)
## æ£ç´¢æ°æ®
`SELECT` ç¨äºä»æ°æ®åºä¸æ¥è¯¢æ°æ®ã
### ä» Customers è¡¨ä¸æ£ç´¢ææç ID
ç°æè¡¨ `Customers` å¦ä¸ï¼
| cust_id |
| ------- |
| A |
| B |
| C |
ç¼å SQL è¯å¥ï¼ä» `Customers` è¡¨ä¸æ£ç´¢ææç `cust_id`ã
çæ¡ï¼
```sql
SELECT cust_id
FROM Customers
```
### æ£ç´¢å¹¶ååºå·²è®¢è´äº§åçæ¸
å
表 `OrderItems` 嫿é空çå `prod_id` 代表åå idï¼å
å«äºææå·²è®¢è´çååï¼æäºå·²è¢«è®¢è´å¤æ¬¡ï¼ã
| prod_id |
| ------- |
| a1 |
| a2 |
| a3 |
| a4 |
| a5 |
| a6 |
| a7 |
ç¼å SQL è¯å¥ï¼æ£ç´¢å¹¶ååºææå·²è®¢è´ååï¼`prod_id`ï¼çå»éåçæ¸
åã
çæ¡ï¼
```sql
SELECT DISTINCT prod_id
FROM OrderItems
```
ç¥è¯ç¹ï¼`DISTINCT` ç¨äºè¿ååä¸çå¯ä¸ä¸åå¼ã
### æ£ç´¢ææå
ç°å¨æ `Customers` 表ï¼è¡¨ä¸å«æå `cust_id` ä»£è¡¨å®¢æ· idï¼`cust_name` 代表客æ·å§åï¼
| cust_id | cust_name |
| ------- | --------- |
| a1 | andy |
| a2 | ben |
| a3 | tony |
| a4 | tom |
| a5 | an |
| a6 | lee |
| a7 | hex |
éè¦ç¼å SQL è¯å¥ï¼æ£ç´¢ææåã
çæ¡ï¼
```sql
SELECT cust_id, cust_name
FROM Customers
```
## æåºæ£ç´¢æ°æ®
`ORDER BY` ç¨äºå¯¹ç»æéæç
§ä¸ä¸ªåæè
å¤ä¸ªåè¿è¡æåºãé»è®¤æç
§ååºå¯¹è®°å½è¿è¡æåºï¼å¦æéè¦æç
§éåºå¯¹è®°å½è¿è¡æåºï¼å¯ä»¥ä½¿ç¨ `DESC` å
³é®åã
### æ£ç´¢é¡¾å®¢åç§°å¹¶ä¸æåº
æè¡¨ `Customers`ï¼`cust_id` ä»£è¡¨å®¢æ· idï¼`cust_name` 代表客æ·å§åã
| cust_id | cust_name |
| ------- | --------- |
| a1 | andy |
| a2 | ben |
| a3 | tony |
| a4 | tom |
| a5 | an |
| a6 | lee |
| a7 | hex |
ä» `Customers` 䏿£ç´¢ææç顾客åç§°ï¼`cust_name`ï¼ï¼å¹¶æä» Z å° A çé¡ºåºæ¾ç¤ºç»æã
çæ¡ï¼
```sql
SELECT cust_name
FROM Customers
ORDER BY cust_name DESC
```
### 对顾客 ID 忥ææåº
æ `Orders` 表ï¼
| cust_id | order_num | order_date |
| ------- | --------- | ------------------- |
| andy | aaaa | 2021-01-01 00:00:00 |
| andy | bbbb | 2021-01-01 12:00:00 |
| bob | cccc | 2021-01-10 12:00:00 |
| dick | dddd | 2021-01-11 00:00:00 |
ç¼å SQL è¯å¥ï¼ä» `Orders` è¡¨ä¸æ£ç´¢é¡¾å®¢ IDï¼`cust_id`ï¼å订åå·ï¼`order_num`ï¼ï¼å¹¶å
æé¡¾å®¢ ID å¯¹ç»æè¿è¡æåºï¼åæè®¢åæ¥æååºæåã
çæ¡ï¼
```sql
# æ ¹æ®ååæåº
# 注æï¼æ¯ order_date éåºï¼è䏿¯ order_num
SELECT cust_id, order_num
FROM Orders
ORDER BY cust_id,order_date DESC
```
ç¥è¯ç¹ï¼`order by` 对å¤åæåºçæ¶åï¼å
æåºçåæ¾åé¢ï¼åæåºçåæ¾åé¢ãå¹¶ä¸ï¼ä¸åçåå¯ä»¥æä¸åçæåºè§åã
### æç
§æ°éåä»·æ ¼æåº
å设æä¸ä¸ª `OrderItems` 表ï¼
| quantity | item_price |
| -------- | ---------- |
| 1 | 100 |
| 10 | 1003 |
| 2 | 500 |
ç¼å SQL è¯å¥ï¼æ¾ç¤º `OrderItems` 表ä¸çæ°éï¼`quantity`ï¼åä»·æ ¼ï¼`item_price`ï¼ï¼å¹¶ææ°éç±å¤å°å°ãä»·æ ¼ç±é«å°ä½æåºã
çæ¡ï¼
```sql
SELECT quantity, item_price
FROM OrderItems
ORDER BY quantity DESC,item_price DESC
```
### æ£æ¥ SQL è¯å¥
æ `Vendors` 表ï¼
| vend_name |
| --------- |
| æµ·åºæ |
| å°é¾å |
| 大é¾ç |
ä¸é¢ç SQL è¯å¥æé®é¢åï¼å°è¯å°å®æ¹æ£ç¡®ï¼ä½¿ä¹è½å¤æ£ç¡®è¿è¡ï¼å¹¶ä¸è¿åç»ææ ¹æ®`vend_name` éåºæåã
```sql
SELECT vend_name,
FROM Vendors
ORDER vend_name DESC
```
æ¹æ£åï¼
```sql
SELECT vend_name
FROM Vendors
ORDER BY vend_name DESC
```
ç¥è¯ç¹ï¼
- éå·ä½ç¨æ¯ç¨æ¥éå¼åä¸åä¹é´çã
- ORDER BY æ¯æ BY çï¼éè¦æ°å宿´ï¼ä¸ä½ç½®æ£ç¡®ã
## è¿æ»¤æ°æ®
`WHERE` å¯ä»¥è¿æ»¤è¿åçæ°æ®ã
ä¸é¢çè¿ç®ç¬¦å¯ä»¥å¨ `WHERE` åå¥ä¸ä½¿ç¨ï¼
| è¿ç®ç¬¦ | æè¿° |
| :------ | :----------------------------------------------------------- |
| = | çäº |
| <> | ä¸çäºã **注éï¼** å¨ SQL çä¸äºçæ¬ä¸ï¼è¯¥æä½ç¬¦å¯è¢«åæ != |
| > | å¤§äº |
| < | å°äº |
| >= | 大äºçäº |
| <= | å°äºçäº |
| BETWEEN | å¨æä¸ªèå´å
|
| LIKE | æç´¢æç§æ¨¡å¼ |
| IN | æå®é对æä¸ªåçå¤ä¸ªå¯è½å¼ |
### è¿ååºå®ä»·æ ¼ç产å
æè¡¨ `Products`ï¼
| prod_id | prod_name | prod_price |
| ------- | -------------- | ---------- |
| a0018 | sockets | 9.49 |
| a0019 | iphone13 | 600 |
| b0018 | gucci t-shirts | 1000 |
ãé®é¢ãä» `Products` è¡¨ä¸æ£ç´¢äº§å IDï¼`prod_id`ï¼å产ååç§°ï¼`prod_name`ï¼ï¼åªè¿åä»·æ ¼ä¸º 9.49 ç¾å
ç产åã
çæ¡ï¼
```sql
SELECT prod_id, prod_name
FROM Products
WHERE prod_price = 9.49
```
### è¿åæ´é«ä»·æ ¼ç产å
æè¡¨ `Products`ï¼
| prod_id | prod_name | prod_price |
| ------- | -------------- | ---------- |
| a0018 | sockets | 9.49 |
| a0019 | iphone13 | 600 |
| b0019 | gucci t-shirts | 1000 |
ãé®é¢ãç¼å SQL è¯å¥ï¼ä» `Products` è¡¨ä¸æ£ç´¢äº§å IDï¼`prod_id`ï¼å产ååç§°ï¼`prod_name`ï¼ï¼åªè¿åä»·æ ¼ä¸º 9 ç¾å
ææ´é«ç产åã
çæ¡ï¼
```sql
SELECT prod_id, prod_name
FROM Products
WHERE prod_price >= 9
```
### è¿å产å并䏿ç
§ä»·æ ¼æåº
æè¡¨ `Products`ï¼
| prod_id | prod_name | prod_price |
| ------- | --------- | ---------- |
| a0011 | egg | 3 |
| a0019 | sockets | 4 |
| b0019 | coffee | 15 |
ãé®é¢ãç¼å SQL è¯å¥ï¼è¿å `Products` è¡¨ä¸ææä»·æ ¼å¨ 3 ç¾å
å° 6 ç¾å
ä¹é´ç产åçåç§°ï¼`prod_name`ï¼åä»·æ ¼ï¼`prod_price`ï¼ï¼ç¶åæä»·æ ¼å¯¹ç»æè¿è¡æåºã
çæ¡ï¼
```sql
SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 3 AND 6
ORDER BY prod_price
# æè
SELECT prod_name, prod_price
FROM Products
WHERE prod_price >= 3 AND prod_price <= 6
ORDER BY prod_price
```
### è¿åæ´å¤ç产å
`OrderItems` è¡¨å«æï¼è®¢åå· `order_num`ï¼`quantity`äº§åæ°é
| order_num | quantity |
| --------- | -------- |
| a1 | 105 |
| a2 | 1100 |
| a2 | 200 |
| a4 | 1121 |
| a5 | 10 |
| a2 | 19 |
| a7 | 5 |
ãé®é¢ãä» `OrderItems` è¡¨ä¸æ£ç´¢åºææä¸åä¸ä¸éå¤ç订åå·ï¼`order_num`ï¼ï¼å
¶ä¸æ¯ä¸ªè®¢åé½è¦å
å« 100 ä¸ªææ´å¤ç产åã
çæ¡ï¼
```sql
SELECT order_num
FROM OrderItems
GROUP BY order_num
HAVING SUM(quantity) >= 100
```
## é«çº§æ°æ®è¿æ»¤
`AND` å `OR` è¿ç®ç¬¦ç¨äºåºäºä¸ä¸ªä»¥ä¸çæ¡ä»¶å¯¹è®°å½è¿è¡è¿æ»¤ï¼ä¸¤è
å¯ä»¥ç»å使ç¨ã`AND` å¿
é¡» 2 个æ¡ä»¶é½æç«ï¼`OR`åªè¦ 2 个æ¡ä»¶ä¸çä¸ä¸ªæç«å³å¯ã
### æ£ç´¢ä¾åºååç§°
`Vendors` 表æå段ä¾åºååç§°ï¼`vend_name`ï¼ãä¾åºåå½å®¶ï¼`vend_country`ï¼ãä¾åºåå·ï¼`vend_state`ï¼
| vend_name | vend_country | vend_state |
| --------- | ------------ | ---------- |
| apple | USA | CA |
| vivo | CNA | shenzhen |
| huawei | CNA | xian |
ãé®é¢ãç¼å SQL è¯å¥ï¼ä» `Vendors` è¡¨ä¸æ£ç´¢ä¾åºååç§°ï¼`vend_name`ï¼ï¼ä»
è¿åå å©ç¦å°¼äºå·çä¾åºåï¼è¿éè¦æå½å®¶[USA]åå·[CA]è¿è¡è¿æ»¤ï¼æ²¡åå
¶ä»å½å®¶ä¹åå¨ä¸ä¸ª CAï¼
çæ¡ï¼
```sql
SELECT vend_name
FROM Vendors
WHERE vend_country = 'USA' AND vend_state = 'CA'
```
### æ£ç´¢å¹¶ååºå·²è®¢è´äº§åçæ¸
å
`OrderItems` 表å
å«äºææå·²è®¢è´ç产åï¼æäºå·²è¢«è®¢è´å¤æ¬¡ï¼ã
| prod_id | order_num | quantity |
| ------- | --------- | -------- |
| BR01 | a1 | 105 |
| BR02 | a2 | 1100 |
| BR02 | a2 | 200 |
| BR03 | a4 | 1121 |
| BR017 | a5 | 10 |
| BR02 | a2 | 19 |
| BR017 | a7 | 5 |
ãé®é¢ãç¼å SQL è¯å¥ï¼æ¥æ¾ææè®¢è´äºæ°éè³å° 100 个ç `BR01`ã`BR02` æ `BR03` ç订åãä½ éè¦è¿å `OrderItems` 表ç订åå·ï¼`order_num`ï¼ã产å IDï¼`prod_id`ï¼åæ°éï¼`quantity`ï¼ï¼å¹¶æäº§å ID åæ°éè¿è¡è¿æ»¤ã
çæ¡ï¼
```sql
SELECT order_num, prod_id, quantity
FROM OrderItems
WHERE prod_id IN ('BR01', 'BR02', 'BR03') AND quantity >= 100
```
### è¿åææä»·æ ¼å¨ 3 ç¾å
å° 6 ç¾å
ä¹é´ç产åçåç§°åä»·æ ¼
æè¡¨ `Products`ï¼
| prod_id | prod_name | prod_price |
| ------- | --------- | ---------- |
| a0011 | egg | 3 |
| a0019 | sockets | 4 |
| b0019 | coffee | 15 |
ãé®é¢ãç¼å SQL è¯å¥ï¼è¿åææä»·æ ¼å¨ 3 ç¾å
å° 6 ç¾å
ä¹é´ç产åçåç§°ï¼`prod_name`ï¼åä»·æ ¼ï¼`prod_price`ï¼ï¼ä½¿ç¨ AND æä½ç¬¦ï¼ç¶åæä»·æ ¼å¯¹ç»æè¿è¡ååºæåºã
çæ¡ï¼
```sql
SELECT prod_name, prod_price
FROM Products
WHERE prod_price >= 3 and prod_price <= 6
ORDER BY prod_price
```
### æ£æ¥ SQL è¯å¥
ä¾åºå表 `Vendors` æå段ä¾åºååç§° `vend_name`ãä¾åºåå½å®¶ `vend_country`ãä¾åºåç份 `vend_state`
| vend_name | vend_country | vend_state |
| --------- | ------------ | ---------- |
| apple | USA | CA |
| vivo | CNA | shenzhen |
| huawei | CNA | xian |
ãé®é¢ãä¿®æ¹æ£ç¡®ä¸é¢ sqlï¼ä½¿ä¹æ£ç¡®è¿åã
```sql
SELECT vend_name
FROM Vendors
ORDER BY vend_name
WHERE vend_country = 'USA' AND vend_state = 'CA';
```
ä¿®æ¹åï¼
```sql
SELECT vend_name
FROM Vendors
WHERE vend_country = 'USA' AND vend_state = 'CA'
ORDER BY vend_name
```
`ORDER BY` è¯å¥å¿
é¡»æ¾å¨ `WHERE` ä¹åã
## ç¨éé
符è¿è¡è¿æ»¤
SQL éé
符å¿
é¡»ä¸ `LIKE` è¿ç®ç¬¦ä¸èµ·ä½¿ç¨
å¨ SQL ä¸ï¼å¯ä½¿ç¨ä»¥ä¸éé
符ï¼
| éé
符 | æè¿° |
| :------------------------------- | :------------------------- |
| `%` | 代表é¶ä¸ªæå¤ä¸ªå符 |
| `_` | ä»
æ¿ä»£ä¸ä¸ªå符 |
| `[charlist]` | å符åä¸çä»»ä½åä¸å符 |
| `[^charlist]` æè
`[!charlist]` | ä¸å¨å符åä¸çä»»ä½åä¸å符 |
### æ£ç´¢äº§ååç§°åæè¿°ï¼ä¸ï¼
`Products` 表å¦ä¸ï¼
| prod_name | prod_desc |
| --------- | -------------- |
| a0011 | usb |
| a0019 | iphone13 |
| b0019 | gucci t-shirts |
| c0019 | gucci toy |
| d0019 | lego toy |
ãé®é¢ãç¼å SQL è¯å¥ï¼ä» `Products` è¡¨ä¸æ£ç´¢äº§ååç§°ï¼`prod_name`ï¼åæè¿°ï¼`prod_desc`ï¼ï¼ä»
è¿åæè¿°ä¸å
å« `toy` ä¸è¯ç产ååç§°ã
çæ¡ï¼
```sql
SELECT prod_name, prod_desc
FROM Products
WHERE prod_desc LIKE '%toy%'
```
### æ£ç´¢äº§ååç§°åæè¿°ï¼äºï¼
`Products` 表å¦ä¸ï¼
| prod_name | prod_desc |
| --------- | -------------- |
| a0011 | usb |
| a0019 | iphone13 |
| b0019 | gucci t-shirts |
| c0019 | gucci toy |
| d0019 | lego toy |
ãé®é¢ãç¼å SQL è¯å¥ï¼ä» `Products` è¡¨ä¸æ£ç´¢äº§ååç§°ï¼`prod_name`ï¼åæè¿°ï¼`prod_desc`ï¼ï¼ä»
è¿åæè¿°ä¸æªåºç° `toy` ä¸è¯ç产åï¼æåæâ产ååç§°âå¯¹ç»æè¿è¡æåºã
çæ¡ï¼
```sql
SELECT prod_name, prod_desc
FROM Products
WHERE prod_desc NOT LIKE '%toy%'
ORDER BY prod_name
```
### æ£ç´¢äº§ååç§°åæè¿°ï¼ä¸ï¼
`Products` 表å¦ä¸ï¼
| prod_name | prod_desc |
| --------- | ---------------- |
| a0011 | usb |
| a0019 | iphone13 |
| b0019 | gucci t-shirts |
| c0019 | gucci toy |
| d0019 | lego carrots toy |
ãé®é¢ãç¼å SQL è¯å¥ï¼ä» `Products` è¡¨ä¸æ£ç´¢äº§ååç§°ï¼`prod_name`ï¼åæè¿°ï¼`prod_desc`ï¼ï¼ä»
è¿åæè¿°ä¸åæ¶åºç° `toy` å `carrots` ç产åãæå¥½å ç§æ¹æ³å¯ä»¥æ§è¡æ¤æä½ï¼ä½å¯¹äºè¿ä¸ªææé¢ï¼è¯·ä½¿ç¨ `AND` å两个 `LIKE` æ¯è¾ã
çæ¡ï¼
```sql
SELECT prod_name, prod_desc
FROM Products
WHERE prod_desc LIKE '%toy%' AND prod_desc LIKE "%carrots%"
```
### æ£ç´¢äº§ååç§°åæè¿°ï¼åï¼
`Products` 表å¦ä¸ï¼
| prod_name | prod_desc |
| --------- | ---------------- |
| a0011 | usb |
| a0019 | iphone13 |
| b0019 | gucci t-shirts |
| c0019 | gucci toy |
| d0019 | lego toy carrots |
ãé®é¢ãç¼å SQL è¯å¥ï¼ä» Products è¡¨ä¸æ£ç´¢äº§ååç§°ï¼prod_nameï¼åæè¿°ï¼prod_descï¼ï¼ä»
è¿åå¨æè¿°ä¸ä»¥**å
å顺åº**åæ¶åºç° toy å carrots ç产åãæç¤ºï¼åªéè¦ç¨å¸¦æä¸ä¸ª `%` 符å·ç `LIKE` å³å¯ã
çæ¡ï¼
```sql
SELECT prod_name, prod_desc
FROM Products
WHERE prod_desc LIKE '%toy%carrots%'
```
## å建计ç®å段
### å«å
å«åç常è§ç¨æ³æ¯å¨æ£ç´¢åºçç»æä¸éå½å表çååæ®µï¼ä¸ºäºç¬¦åç¹å®çæ¥è¡¨è¦æ±æå®¢æ·éæ±ï¼ãæè¡¨ `Vendors` 代表ä¾åºåä¿¡æ¯ï¼`vend_id` ä¾åºå idã`vend_name` ä¾åºååç§°ã`vend_address` ä¾åºåå°åã`vend_city` ä¾åºååå¸ã
| vend_id | vend_name | vend_address | vend_city |
| ------- | ------------- | ------------ | --------- |
| a001 | tencent cloud | address1 | shenzhen |
| a002 | huawei cloud | address2 | dongguan |
| a003 | aliyun cloud | address3 | hangzhou |
| a003 | netease cloud | address4 | guangzhou |
ãé®é¢ãç¼å SQL è¯å¥ï¼ä» `Vendors` è¡¨ä¸æ£ç´¢ `vend_id`ã`vend_name`ã`vend_address` å `vend_city`ï¼å° `vend_name` éå½å为 `vname`ï¼å° `vend_city` éå½å为 `vcity`ï¼å° `vend_address` éå½å为 `vaddress`ï¼æä¾åºååç§°å¯¹ç»æè¿è¡ååºæåºã
çæ¡ï¼
```sql
SELECT vend_id, vend_name AS vname, vend_address AS vaddress, vend_city AS vcity
FROM Vendors
ORDER BY vname
# as å¯ä»¥çç¥
SELECT vend_id, vend_name vname, vend_address vaddress, vend_city vcity
FROM Vendors
ORDER BY vname
```
### ææ
æä»¬ç示ä¾ååºæ£å¨è¿è¡ææä¿éï¼ææäº§ååéä»· 10%ã`Products` 表å
å« `prod_id` 产å idã`prod_price` 产åä»·æ ¼ã
ãé®é¢ãç¼å SQL è¯å¥ï¼ä» `Products` 表ä¸è¿å `prod_id`ã`prod_price` å `sale_price`ã`sale_price` æ¯ä¸ä¸ªå
å«ä¿éä»·æ ¼ç计ç®å段ãæç¤ºï¼å¯ä»¥ä¹ä»¥ 0.9ï¼å¾å°åä»·ç 90%ï¼å³ 10%çææ£ï¼ã
çæ¡ï¼
```sql
SELECT prod_id, prod_price, prod_price * 0.9 AS sale_price
FROM Products
```
注æï¼`sale_price` æ¯å¯¹è®¡ç®ç»æçå½åï¼è䏿¯åæçååã
## 使ç¨å½æ°å¤çæ°æ®
### 顾客ç»å½å
æä»¬çååºå·²ç»ä¸çº¿äºï¼æ£å¨å建顾客账æ·ãææç¨æ·é½éè¦ç»å½åï¼é»è®¤ç»å½åæ¯å
¶åç§°åæå¨åå¸çç»åã
ç»åº `Customers` 表 å¦ä¸ï¼
| cust_id | cust_name | cust_contact | cust_city |
| ------- | --------- | ------------ | --------- |
| a1 | Andy Li | Andy Li | Oak Park |
| a2 | Ben Liu | Ben Liu | Oak Park |
| a3 | Tony Dai | Tony Dai | Oak Park |
| a4 | Tom Chen | Tom Chen | Oak Park |
| a5 | An Li | An Li | Oak Park |
| a6 | Lee Chen | Lee Chen | Oak Park |
| a7 | Hex Liu | Hex Liu | Oak Park |
ãé®é¢ãç¼å SQL è¯å¥ï¼è¿å顾客 IDï¼`cust_id`ï¼ã顾客åç§°ï¼`cust_name`ï¼åç»å½åï¼`user_login`ï¼ï¼å
¶ä¸ç»å½åå
¨é¨ä¸ºå¤§å忝ï¼å¹¶ç±é¡¾å®¢è系人çå两个å符ï¼`cust_contact`ï¼åå
¶æå¨åå¸çåä¸ä¸ªå符ï¼`cust_city`ï¼ç»æãæç¤ºï¼éè¦ä½¿ç¨å½æ°ãæ¼æ¥åå«åã
çæ¡ï¼
```sql
SELECT cust_id, cust_name, UPPER(CONCAT(SUBSTRING(cust_contact, 1, 2), SUBSTRING(cust_city, 1, 3))) AS user_login
FROM Customers
```
ç¥è¯ç¹ï¼
- æªå彿°`SUBSTRING()`ï¼æªåå符串ï¼`substring(str ,n ,m)`ï¼n è¡¨ç¤ºèµ·å§æªåä½ç½®ï¼m è¡¨ç¤ºè¦æªåçå符个æ°ï¼è¡¨ç¤ºè¿åå符串 str ä»ç¬¬ n 个å符å¼å§æªå m 个å符ï¼
- æ¼æ¥å½æ°`CONCAT()`ï¼å°ä¸¤ä¸ªæå¤ä¸ªåç¬¦ä¸²è¿æ¥æä¸ä¸ªå符串ï¼select concat(A,B)ï¼è¿æ¥å符串 A å Bã
- 大å彿° `UPPER()`ï¼å°æå®å符串转æ¢ä¸ºå¤§åã
### è¿å 2020 å¹´ 1 æçææè®¢åç订åå·åè®¢åæ¥æ
`Orders` 订å表å¦ä¸ï¼
| order_num | order_date |
| --------- | ------------------- |
| a0001 | 2020-01-01 00:00:00 |
| a0002 | 2020-01-02 00:00:00 |
| a0003 | 2020-01-01 12:00:00 |
| a0004 | 2020-02-01 00:00:00 |
| a0005 | 2020-03-01 00:00:00 |
ãé®é¢ãç¼å SQL è¯å¥ï¼è¿å 2020 å¹´ 1 æçææè®¢åç订åå·ï¼`order_num`ï¼åè®¢åæ¥æï¼`order_date`ï¼ï¼å¹¶æè®¢åæ¥æååºæåº
çæ¡ï¼
```sql
SELECT order_num, order_date
FROM Orders
WHERE month(order_date) = '01' AND YEAR(order_date) = '2020'
ORDER BY order_date
```
ä¹å¯ä»¥ç¨éé
符æ¥åï¼
```sql
SELECT order_num, order_date
FROM Orders
WHERE order_date LIKE '2020-01%'
ORDER BY order_date
```
ç¥è¯ç¹ï¼
- æ¥ææ ¼å¼ï¼`YYYY-MM-DD`
- æ¶é´æ ¼å¼ï¼`HH:MM:SS`
æ¥æåæ¶é´å¤çç¸å
³ç常ç¨å½æ°ï¼
| å½ æ° | 说 æ |
| --------------- | ------------------------------ |
| `ADDDATE()` | å¢å ä¸ä¸ªæ¥æï¼å¤©ãå¨çï¼ |
| `ADDTIME()` | å¢å ä¸ä¸ªæ¶é´ï¼æ¶ãåçï¼ |
| `CURDATE()` | è¿åå½åæ¥æ |
| `CURTIME()` | è¿åå½åæ¶é´ |
| `DATE()` | è¿åæ¥ææ¶é´çæ¥æé¨å |
| `DATEDIFF` | 计ç®ä¸¤ä¸ªæ¥æä¹å·® |
| `DATE_FORMAT()` | è¿åä¸ä¸ªæ ¼å¼åçæ¥æææ¶é´ä¸² |
| `DAY()` | è¿åä¸ä¸ªæ¥æç天æ°é¨å |
| `DAYOFWEEK()` | 对äºä¸ä¸ªæ¥æï¼è¿å对åºçææå |
| `HOUR()` | è¿åä¸ä¸ªæ¶é´çå°æ¶é¨å |
| `MINUTE()` | è¿åä¸ä¸ªæ¶é´çåéé¨å |
| `MONTH()` | è¿åä¸ä¸ªæ¥æçæä»½é¨å |
| `NOW()` | è¿åå½åæ¥æåæ¶é´ |
| `SECOND()` | è¿åä¸ä¸ªæ¶é´çç§é¨å |
| `TIME()` | è¿åä¸ä¸ªæ¥ææ¶é´çæ¶é´é¨å |
| `YEAR()` | è¿åä¸ä¸ªæ¥æç年份é¨å |
## æ±æ»æ°æ®
æ±æ»æ°æ®ç¸å
³ç彿°ï¼
| å½ æ° | 说 æ |
| --------- | ---------------- |
| `AVG()` | è¿åæåçå¹³åå¼ |
| `COUNT()` | è¿åæåçè¡æ° |
| `MAX()` | è¿åæåçæå¤§å¼ |
| `MIN()` | è¿åæåçæå°å¼ |
| `SUM()` | è¿åæåå¼ä¹å |
### ç¡®å®å·²å®åºäº§åçæ»æ°
`OrderItems` 表代表å®åºç产åï¼`quantity` 代表å®åºååæ°éã
| quantity |
| -------- |
| 10 |
| 100 |
| 1000 |
| 10001 |
| 2 |
| 15 |
ãé®é¢ãç¼å SQL è¯å¥ï¼ç¡®å®å·²å®åºäº§åçæ»æ°ã
çæ¡ï¼
```sql
SELECT Sum(quantity) AS items_ordered
FROM OrderItems
```
### ç¡®å®å·²å®åºäº§å项 BR01 çæ»æ°
`OrderItems` 表代表å®åºç产åï¼`quantity` 代表å®åºååæ°éï¼äº§å项为 `prod_id`ã
| quantity | prod_id |
| -------- | ------- |
| 10 | AR01 |
| 100 | AR10 |
| 1000 | BR01 |
| 10001 | BR010 |
ãé®é¢ãä¿®æ¹å建çè¯å¥ï¼ç¡®å®å·²å®åºäº§å项ï¼`prod_id`ï¼ä¸º"BR01"çæ»æ°ã
çæ¡ï¼
```sql
SELECT Sum(quantity) AS items_ordered
FROM OrderItems
WHERE prod_id = 'BR01'
```
### ç¡®å® Products 表ä¸ä»·æ ¼ä¸è¶
è¿ 10 ç¾å
çæè´µäº§åçä»·æ ¼
`Products` 表å¦ä¸ï¼`prod_price` 代表ååçä»·æ ¼ã
| prod_price |
| ---------- |
| 9.49 |
| 600 |
| 1000 |
ãé®é¢ãç¼å SQL è¯å¥ï¼ç¡®å® `Products` 表ä¸ä»·æ ¼ä¸è¶
è¿ 10 ç¾å
çæè´µäº§åçä»·æ ¼ï¼`prod_price`ï¼ãå°è®¡ç®æå¾çåæ®µå½å为 `max_price`ã
çæ¡ï¼
```sql
SELECT Max(prod_price) AS max_price
FROM Products
WHERE prod_price <= 10
```
## åç»æ°æ®
`GROUP BY`ï¼
- `GROUP BY` åå¥å°è®°å½åç»å°æ±æ»è¡ä¸ã
- `GROUP BY` 为æ¯ä¸ªç»è¿åä¸ä¸ªè®°å½ã
- `GROUP BY` éå¸¸è¿æ¶åèå`COUNT`ï¼`MAX`ï¼`SUM`ï¼`AVG` çã
- `GROUP BY` å¯ä»¥æä¸åæå¤åè¿è¡åç»ã
- `GROUP BY` æåç»å段è¿è¡æåºåï¼`ORDER BY` å¯ä»¥ä»¥æ±æ»å段æ¥è¿è¡æåºã
`HAVING`ï¼
- `HAVING` ç¨äºå¯¹æ±æ»ç `GROUP BY` ç»æè¿è¡è¿æ»¤ã
- `HAVING` å¿
é¡»è¦ä¸ `GROUP BY` è¿ç¨ã
- `WHERE` å `HAVING` å¯ä»¥å¨ç¸åçæ¥è¯¢ä¸ã
`HAVING` vs `WHERE`ï¼
- `WHERE`ï¼è¿æ»¤æå®çè¡ï¼åé¢ä¸è½å èå彿°ï¼åç»å½æ°ï¼ã
- `HAVING`ï¼è¿æ»¤åç»ï¼å¿
é¡»è¦ä¸ `GROUP BY` è¿ç¨ï¼ä¸è½åç¬ä½¿ç¨ã
### è¿åæ¯ä¸ªè®¢åå·åæå¤å°è¡æ°
`OrderItems` 表å
嫿¯ä¸ªè®¢åçæ¯ä¸ªäº§å
| order_num |
| --------- |
| a002 |
| a002 |
| a002 |
| a004 |
| a007 |
ãé®é¢ãç¼å SQL è¯å¥ï¼è¿åæ¯ä¸ªè®¢åå·ï¼`order_num`ï¼åæå¤å°è¡æ°ï¼`order_lines`ï¼ï¼å¹¶æ `order_lines` å¯¹ç»æè¿è¡ååºæåºã
çæ¡ï¼
```sql
SELECT order_num, Count(order_num) AS order_lines
FROM OrderItems
GROUP BY order_num
ORDER BY order_lines
```
ç¥è¯ç¹ï¼
1. `count(*)`,`count(åå)`é½å¯ä»¥ï¼åºå«å¨äºï¼`count(åå)`æ¯ç»è®¡é NULL çè¡æ°ï¼
2. `order by` æåæ§è¡ï¼æä»¥å¯ä»¥ä½¿ç¨åå«åï¼
3. åç»èåä¸å®ä¸è¦å¿è®°å ä¸ `group by` ,ä¸ç¶åªä¼æä¸è¡ç»æã
### æ¯ä¸ªä¾åºåææ¬æä½ç产å
æ `Products` 表ï¼å«æå段 `prod_price` 代表产åä»·æ ¼ï¼`vend_id` 代表ä¾åºå id
| vend_id | prod_price |
| ------- | ---------- |
| a0011 | 100 |
| a0019 | 0.1 |
| b0019 | 1000 |
| b0019 | 6980 |
| b0019 | 20 |
ãé®é¢ãç¼å SQL è¯å¥ï¼è¿åå为 `cheapest_item` çåæ®µï¼è¯¥å段å
嫿¯ä¸ªä¾åºåææ¬æä½ç产åï¼ä½¿ç¨ `Products` 表ä¸ç `prod_price`ï¼ï¼ç¶å仿使æ¬å°æé«ææ¬å¯¹ç»æè¿è¡ååºæåºã
çæ¡ï¼
```sql
SELECT vend_id, Min(prod_price) AS cheapest_item
FROM Products
GROUP BY vend_id
ORDER BY cheapest_item
```
### è¿åè®¢åæ°éæ»åä¸å°äº 100 çææè®¢åç订åå·
`OrderItems` 代表订ååå表ï¼å
æ¬ï¼è®¢åå· `order_num` åè®¢åæ°é `quantity`ã
| order_num | quantity |
| --------- | -------- |
| a1 | 105 |
| a2 | 1100 |
| a2 | 200 |
| a4 | 1121 |
| a5 | 10 |
| a2 | 19 |
| a7 | 5 |
ãé®é¢ã请ç¼å SQL è¯å¥ï¼è¿åè®¢åæ°éæ»åä¸å°äº 100 çææè®¢åå·ï¼æåç»ææç
§è®¢åå·ååºæåºã
çæ¡ï¼
```sql
# ç´æ¥èå
SELECT order_num
FROM OrderItems
GROUP BY order_num
HAVING Sum(quantity) >= 100
ORDER BY order_num
# åæ¥è¯¢
SELECT a.order_num
FROM (SELECT order_num, Sum(quantity) AS sum_num
FROM OrderItems
GROUP BY order_num
HAVING sum_num >= 100) a
ORDER BY a.order_num
```
ç¥è¯ç¹ï¼
- `where`ï¼è¿æ»¤è¿æ»¤æå®çè¡ï¼åé¢ä¸è½å èå彿°ï¼åç»å½æ°ï¼ã
- `having`ï¼è¿æ»¤åç»ï¼ä¸ `group by` è¿ç¨ï¼ä¸è½åç¬ä½¿ç¨ã
### è®¡ç®æ»å
`OrderItems` 表代表订åä¿¡æ¯ï¼å
æ¬å段ï¼è®¢åå· `order_num` å `item_price` ååå®åºä»·æ ¼ã`quantity` ååæ°éã
| order_num | item_price | quantity |
| --------- | ---------- | -------- |
| a1 | 10 | 105 |
| a2 | 1 | 1100 |
| a2 | 1 | 200 |
| a4 | 2 | 1121 |
| a5 | 5 | 10 |
| a2 | 1 | 19 |
| a7 | 7 | 5 |
ãé®é¢ãç¼å SQL è¯å¥ï¼æ ¹æ®è®¢åå·èåï¼è¿åè®¢åæ»ä»·ä¸å°äº 1000 çææè®¢åå·ï¼æåçç»ææè®¢åå·è¿è¡ååºæåºã
æç¤ºï¼æ»ä»· = item_price ä¹ä»¥ quantity
çæ¡ï¼
```sql
SELECT order_num, Sum(item_price * quantity) AS total_price
FROM OrderItems
GROUP BY order_num
HAVING total_price >= 1000
ORDER BY order_num
```
### æ£æ¥ SQL è¯å¥
`OrderItems` è¡¨å«æ `order_num` 订åå·
| order_num |
| --------- |
| a002 |
| a002 |
| a002 |
| a004 |
| a007 |
ãé®é¢ãå°ä¸é¢ä»£ç ä¿®æ¹æ£ç¡®åæ§è¡
```sql
SELECT order_num, COUNT(*) AS items
FROM OrderItems
GROUP BY items
HAVING COUNT(*) >= 3
ORDER BY items, order_num;
```
ä¿®æ¹åï¼
```sql
SELECT order_num, COUNT(*) AS items
FROM OrderItems
GROUP BY order_num
HAVING items >= 3
ORDER BY items, order_num;
```
## 使ç¨åæ¥è¯¢
åæ¥è¯¢æ¯åµå¥å¨è¾å¤§æ¥è¯¢ä¸ç SQL æ¥è¯¢ï¼ä¹ç§°å
鍿¥è¯¢æå
é¨éæ©ï¼å
å«åæ¥è¯¢çè¯å¥ä¹ç§°ä¸ºå¤é¨æ¥è¯¢æå¤é¨éæ©ãç®åæ¥è¯´ï¼åæ¥è¯¢å°±æ¯æå°ä¸ä¸ª `SELECT` æ¥è¯¢ï¼åæ¥è¯¢ï¼çç»æä½ä¸ºå¦ä¸ä¸ª SQL è¯å¥ï¼ä¸»æ¥è¯¢ï¼çæ°æ®æ¥æºæè
夿æ¡ä»¶ã
åæ¥è¯¢å¯ä»¥åµå
¥ `SELECT`ã`INSERT`ã`UPDATE` å `DELETE` è¯å¥ä¸ï¼ä¹å¯ä»¥å `=`ã`<`ã`>`ã`IN`ã`BETWEEN`ã`EXISTS` çè¿ç®ç¬¦ä¸èµ·ä½¿ç¨ã
åæ¥è¯¢å¸¸ç¨å¨ `WHERE` åå¥å `FROM` åå¥åè¾¹ï¼
- å½ç¨äº `WHERE` å奿¶ï¼æ ¹æ®ä¸åçè¿ç®ç¬¦ï¼åæ¥è¯¢å¯ä»¥è¿ååè¡ååãå¤è¡ååãåè¡å¤åæ°æ®ãåæ¥è¯¢å°±æ¯è¦è¿åè½å¤ä½ä¸º WHERE å奿¥è¯¢æ¡ä»¶çå¼ã
- å½ç¨äº `FROM` å奿¶ï¼ä¸è¬è¿åå¤è¡å¤åæ°æ®ï¼ç¸å½äºè¿åä¸å¼ 临æ¶è¡¨ï¼è¿æ ·æç¬¦å `FROM` å颿¯è¡¨çè§åãè¿ç§åæ³è½å¤å®ç°å¤è¡¨èåæ¥è¯¢ã
> 注æï¼MySQL æ°æ®åºä» 4.1 çæ¬æå¼å§æ¯æåæ¥è¯¢ï¼æ©æçæ¬æ¯ä¸æ¯æçã
ç¨äº `WHERE` åå¥çåæ¥è¯¢çåºæ¬è¯æ³å¦ä¸ï¼
```sql
SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name operator
(SELECT column_name [, column_name ]
FROM table1 [, table2 ]
[WHERE])
```
- åæ¥è¯¢éè¦æ¾å¨æ¬å·`( )`å
ã
- `operator` 表示ç¨äº `WHERE` åå¥çè¿ç®ç¬¦ï¼å¯ä»¥æ¯æ¯è¾è¿ç®ç¬¦ï¼å¦ `=`, `<`, `>`, `<>` çï¼æé»è¾è¿ç®ç¬¦ï¼å¦ `IN`, `NOT IN`, `EXISTS`, `NOT EXISTS` çï¼ï¼å
·ä½æ ¹æ®éæ±æ¥ç¡®å®ã
ç¨äº `FROM` åå¥çåæ¥è¯¢çåºæ¬è¯æ³å¦ä¸ï¼
```sql
SELECT column_name [, column_name ]
FROM (SELECT column_name [, column_name ]
FROM table1 [, table2 ]
[WHERE]) AS temp_table_name [, ...]
[JOIN type JOIN table_name ON condition]
WHERE condition;
```
- ç¨äº `FROM` çåæ¥è¯¢è¿åçç»æç¸å½äºä¸å¼ 临æ¶è¡¨ï¼æä»¥éè¦ä½¿ç¨ AS å
³é®å为该临æ¶è¡¨èµ·ä¸ä¸ªååã
- åæ¥è¯¢éè¦æ¾å¨æ¬å· `( )` å
ã
- å¯ä»¥æå®å¤ä¸ªä¸´æ¶è¡¨åï¼å¹¶ä½¿ç¨ `JOIN` è¯å¥è¿æ¥è¿äºè¡¨ã
### è¿åè´ä¹°ä»·æ ¼ä¸º 10 ç¾å
æä»¥ä¸äº§åç顾客å表
`OrderItems` 表示订ååå表ï¼å«æå段订åå·ï¼`order_num`ã订åä»·æ ¼ï¼`item_price`ï¼`Orders` 表代表订åä¿¡æ¯è¡¨ï¼å«æé¡¾å®¢ `idï¼cust_id` å订åå·ï¼`order_num`
`OrderItems` 表:
| order_num | item_price |
| --------- | ---------- |
| a1 | 10 |
| a2 | 1 |
| a2 | 1 |
| a4 | 2 |
| a5 | 5 |
| a2 | 1 |
| a7 | 7 |
`Orders` 表ï¼
| order_num | cust_id |
| --------- | ------- |
| a1 | cust10 |
| a2 | cust1 |
| a2 | cust1 |
| a4 | cust2 |
| a5 | cust5 |
| a2 | cust1 |
| a7 | cust7 |
ãé®é¢ã使ç¨åæ¥è¯¢ï¼è¿åè´ä¹°ä»·æ ¼ä¸º 10 ç¾å
æä»¥ä¸äº§åç顾客å表ï¼ç»ææ éæåºã
çæ¡ï¼
```sql
SELECT cust_id
FROM Orders
WHERE order_num IN (SELECT DISTINCT order_num
FROM OrderItems
where item_price >= 10)
```
### ç¡®å®åªäºè®¢åè´ä¹°äº prod_id 为 BR01 ç产åï¼ä¸ï¼
表 `OrderItems` 代表订åååä¿¡æ¯è¡¨ï¼`prod_id` 为产å idï¼`Orders` 表代表订å表æ `cust_id` 代表顾客 id åè®¢åæ¥æ `order_date`
`OrderItems` 表ï¼
| prod_id | order_num |
| ------- | --------- |
| BR01 | a0001 |
| BR01 | a0002 |
| BR02 | a0003 |
| BR02 | a0013 |
`Orders` 表ï¼
| order_num | cust_id | order_date |
| --------- | ------- | ------------------- |
| a0001 | cust10 | 2022-01-01 00:00:00 |
| a0002 | cust1 | 2022-01-01 00:01:00 |
| a0003 | cust1 | 2022-01-02 00:00:00 |
| a0013 | cust2 | 2022-01-01 00:20:00 |
ãé®é¢ã
ç¼å SQL è¯å¥ï¼ä½¿ç¨åæ¥è¯¢æ¥ç¡®å®åªäºè®¢åï¼å¨ `OrderItems` ä¸ï¼è´ä¹°äº `prod_id` 为 "BR01" ç产åï¼ç¶åä» `Orders` 表ä¸è¿åæ¯ä¸ªäº§å对åºç顾客 IDï¼`cust_id`ï¼åè®¢åæ¥æï¼`order_date`ï¼ï¼æè®¢è´æ¥æå¯¹ç»æè¿è¡ååºæåºã
çæ¡ï¼
```sql
# åæ³ 1ï¼åæ¥è¯¢
SELECT cust_id,order_date
FROM Orders
WHERE order_num IN
(SELECT order_num
FROM OrderItems
WHERE prod_id = 'BR01' )
ORDER BY order_date;
# åæ³ 2: è¿æ¥è¡¨
SELECT b.cust_id, b.order_date
FROM OrderItems a,Orders b
WHERE a.order_num = b.order_num AND a.prod_id = 'BR01'
ORDER BY order_date
```
### è¿åè´ä¹° prod_id 为 BR01 ç产åçææé¡¾å®¢ççµåé®ä»¶ï¼ä¸ï¼
ä½ æ³ç¥éè®¢è´ BR01 产åçæ¥æï¼æè¡¨ `OrderItems` 代表订åååä¿¡æ¯è¡¨ï¼`prod_id` 为产å idï¼`Orders` 表代表订å表æ `cust_id` 代表顾客 id åè®¢åæ¥æ `order_date`ï¼`Customers` è¡¨å«æ `cust_email` 顾客é®ä»¶å `cust_id` 顾客 id
`OrderItems` 表ï¼
| prod_id | order_num |
| ------- | --------- |
| BR01 | a0001 |
| BR01 | a0002 |
| BR02 | a0003 |
| BR02 | a0013 |
`Orders` 表ï¼
| order_num | cust_id | order_date |
| --------- | ------- | ------------------- |
| a0001 | cust10 | 2022-01-01 00:00:00 |
| a0002 | cust1 | 2022-01-01 00:01:00 |
| a0003 | cust1 | 2022-01-02 00:00:00 |
| a0013 | cust2 | 2022-01-01 00:20:00 |
`Customers` 表代表顾客信æ¯ï¼`cust_id` 为顾客 idï¼`cust_email` 为顾客 email
| cust_id | cust_email |
| ------- | ----------------- |
| cust10 |