WHERE子句

WHERE子句用于指定从一个表或多个表中获取数据的条件。

  • 如果条件满足给定的条件,即为真(**True**)时,从表中返回特定的值

    1. SELECT column1, column2, columnN
    2. FROM table_name
    3. WHERE [condition];

    UPDATE...SET...

    UPDATE用于修改表中已有的记录(行数据)。可以使用带有**WHERE**子句的**UPDATE**查询来更新选定行,否则所有的行都会被更新

    1. UPDATE table_name
    2. SET column1 = value1, column2 = value2...., columnN = valueN
    3. WHERE [condition];

    DELETE

    DELETE用于删除表中已有的记录。可以使用带WHERE子句的DELETE查询来删除指定行,否则所有的记录都会被删除

    1. DELETE FROM table_name
    2. WHERE [condition];

    LIKE子句(功能与GLOB类似)

    LIKE运算符用来匹配通配符指定模式的文本值

  • 如果搜索表达式模式表达式匹配**LIKE**返回真(**True**

  • 以下两个通配符与LIKE运算符一起使用。
    • 百分号%);
      • 代表匹配零个、一个或多个数字或字符
    • 下划线_)。
      • 代表匹配单一的数字或字符。 ```sql

        方式1:

        SELECT column_list FROM table_name WHERE column LIKE ‘str/num%’;

方式2:

SELECT columnlist FROM table_name WHERE column LIKE ‘str/num‘;

  1. | **语句** | **描述** |
  2. | --- | --- |
  3. | WHERE SALARY LIKE '**200%**' | 查找以 200 **开头**的任意值 |
  4. | WHERE SALARY LIKE '**%200%**' | 查找**任意位置**包含 200 的任意值 |
  5. | WHERE SALARY LIKE '**_00%**' | 查找**第二位和第三位为 00 的任意值** |
  6. | WHERE SALARY LIKE '**2_%_%**' | 查找**以 2 开头,且长度至少为 3 个字符的任意值** |
  7. | WHERE SALARY LIKE '**%2**' | 查找**以 2 结尾的任意值** |
  8. | WHERE SALARY LIKE '**_2%3**' | 查找**第二位为 2,且以 3 结尾的任意值** |
  9. | WHERE SALARY LIKE '**2___3**' | 查找**长度为 5 位数,且以 2 开头以 3 结尾的任意值** |
  10. | WHERE SALARY LIKE '**%-%**' | 查找**字符串中包含一个连字符(-)的任意字符串** |
  11. <a name="BfiBl"></a>
  12. # `GLOB`子句
  13. `GLOB`运算符**用来匹配通配符指定模式的文本值**。
  14. - 搜索表达式与模式表达式匹配,`GLOB`返回真(`True`);
  15. - `**GLOB**`**对大小写敏感**;
  16. - 星号(`*`);
  17. - **代表匹配零个、一个或多个数字或字符**。
  18. - 问号(`?`)。
  19. - **代表匹配单一的数字或字符。**
  20. ```sql
  21. # 方式1:
  22. SELECT FROM table_name
  23. WHERE column GLOB 'XXXX*';
  24. # 方式2:
  25. SELECT FROM table_name
  26. WHERE column GLOB 'XXXX?';
语句 描述
WHERE SALARY GLOB ‘200* 查找以 200 开头的任意值
WHERE SALARY GLOB ‘200 查找任意位置包含 200 的任意值
WHERE SALARY GLOB ‘?00* 查找第二位和第三位为 00 的任意值
WHERE SALARY GLOB ‘2?? 查找以 2 开头,且长度至少为 3 个字符的任意值
WHERE SALARY GLOB ‘*2 查找以 2 结尾的任意值
WHERE SALARY GLOB ‘?2*3 查找第二位为 2,且以 3 结尾的任意值
WHERE SALARY GLOB ‘2???3 查找长度为 5 位数,且以 2 开头以 3 结尾的任意值
WHERE SALARY GLOB ‘- 查找字符串中包含一个连字符(-)的任意字符串

LIMIT子句

LIMIT子句用于限制由SELECT语句返回的数据数量(行数)

# 常规用法:
SELECT column1, column2, columnN 
FROM table_name
LIMIT [no of rows];        # 限定返回行数

# 加入偏移位OFFSET的用法:
SELECT column1, column2, columnN 
FROM table_name
LIMIT [no of rows] OFFSET [row num];    # 从指定OFFSET开始,限定返回行数

ORDER BY子句

ORDER BY用来基于一个或多个列按升序或降序顺序排列数据

SELECT column-list 
FROM table_name 
[WHERE condition] 
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

其中:
ASC:表示升序,即从小到大排序;
DESC:表示降序。

GROUP BY子句

GROUP BY用于与SELECT语句一起使用,对相同的数据进行分组归类

  • SELECT语句中,**GROUP BY**子句放在**WHERE**子句之后,**ORDER BY**子句之前

    SELECT column-list
    FROM table_name
    WHERE [ conditions ]
    GROUP BY column1, column2....columnN
    ORDER BY column1, column2....columnN;
    

    HAVING子句

    HAVING子句允许指定条件来过滤将出现在最终结果中的分组结果

  • HAVING子句用在由**GROUP BY**子句创建的分组上设置条件

    SELECT column1, column2
    FROM table1, table2
    WHERE [ conditions ]
    GROUP BY column1, column2
    HAVING [ conditions ]
    ORDER BY column1, column2;
    

    示例

    ```sql SELECT * FROM COMPANY GROUP BY name HAVING count(name) < 2;

该语句将返回name数量小于2的所有行数据。

<a name="FL2C5"></a>
# `DISTINCT`关键字(去重)
`DISTINCT`关键字与`SELECT`语句一起使用,**用来消除所有重复的记录,并只获取一次记录**。
```sql
SELECT DISTINCT column1, column2,.....columnN 
FROM table_name
WHERE [condition];