MySQL 基础语法,select 查询相关。
0. 数据表
接下来的示例会使用一个 world 数据表,表中存储了世界上的所有国家的相关信息。
name:国家名称
continent:洲份
area:面积
population:人口
gdp:国内生产总值
1. SELECT 查询语句
SELECT 查询语句
SELECT 语句,从表中查询一个或多个数据列。
SELECT 语句包含了两个部分,查询什么,以及从什么地方查询。
SELECT name FROM world; |
SELECT 多列查询
想从表中查询出多列数据,使用相同的 SELECT 语句。区别是在 SELELCT 关键字后给出多个列名,列名之间使用逗号间隔。
// 多个列名之间使用逗号间隔 |
SELECT 所有列查询
除了可以指定查询列外,还可以使用 (*) 通配符查询表中所有的列。
// 使用 (*) 通配符查询所有列 |
注意: 除了明确需要表中的所有列,否则最好别使用 (*) 通配符。查询不需要的列通常会降低查询和应用程序的性能。
DISTINCT 查询不同行
SELECT 返回的所有匹配的行,但是有可能出现重复的数据。使用 DISTINCT 关键字只会返回不同的数据(去重复)。
// 使用 DISTINCT 关键字去除重复的数据 |
LIMIT 限制结果
使用 LIMIT 子句可以对结果进行截取。比如,截取返回结果前几行。
// 使用 LIMIT 子句对结果进行截取 |
LIMIT 子句使用两个参数可以在结果的中间进行截取。第一个参数为开始位置,第二个参数为需要查询的行数。
// 使用 LIMIT 子句对结果进行截取 |
注意: 查询出来的结果是从“行0”开始而不是“行1”,所以“行5”实际上是第六行。
2. ORDER BY 排序子句
ORDER BY 排序子句
ORDER BY 子句,根据需要排序查询出的数据。
在上面的示例中,查询结果都是没有特定顺序的。使用 ORDER BY 子句可以根据需要对结果进行排序。
// 使用 ORDER BY 子句对结果排序 |
提示: ORDER BY 子句还可以使用非查询列进行排序。
ORDER BY 多列排序
ORDER BY 子句还可以对多个列进行排序,首先排序的列放在前,后排序的列放在后。
// 使用 ORDER BY 子句进行多列排序 |
ORDER BY 排序方向
在上面的示例中,都没有明确说明排序的方向,是因为默认为升序排序。如果希望进行降序排序使用 DESC 关键字。
// 使用 ORDER BY 子句进行多列排序 |
注意: DESC 关键字只应用于前面一个列名,不同的列需要单独指明。与 DESC 相反的是 ASC (升序) ,因为默认就是升序所以不常用。
3. WHERE 数据过滤
WHERE 数据过滤
WHERE 子句,指定查询条件。
数据库表包含了大量的数据,我们通常只需要获取我们需要的特定的数据。使用 WHERE 子句指定查询条件进行数据过滤,获取我们需要的数据。
// 使用 WHERE 子句进行数据过滤 |
基本操作符
基本操作符的使用与上个示例类似。
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN 范围值操作符
BETWEEN 操作符用于检查某个范围的值,第一个值为开始值,第二值为结束值。
// 使用 BETWEEN 进行范围值查询 |
NULL 空值
NULL 是指无值,与 0,空字符或仅包含空格的值不同。
// 使用 NULL 进行查询 |
WHERE 多条件数据过滤
通常我们还需要进行多个条件的数据过滤,我们就需要使用 AND/OR 子句对 WHERE 子句进行组合。
AND 子句
// 使用 AND 子句组合条件 |
OR 子句
// 使用 OR 子句组合条件 |
计算次序
当 AND/OR 混合使用时,AND 子句优先度更高。可以使用圆括号明确计算次序。
// AND OR 混合使用 |
IN 条件范围操作符
IN 操作符用来指定条件范围,范围中的每个条件都可以进行匹配。
// 使用 IN 操作符 |
可以看出,IN 操作符与 OR 子句效果相同。
continent IN (‘Asia’, ‘Europe’) 等同于 (continent = ‘Asia’ OR continent = ‘Europe’)。
为什么使用 IN 操作符
- 语法更清晰直观。
- 计算次序更容易管理(操作符更少)。
- IN 操作符比 OR 子句执行更快。
- IN 可以包含其他 SELECT 语句,使得可以动态建立 WHERE 子句。
NOT 否定操作符
NOT 操作符用于否定条件。
// 使用 NOT 操作符 |
4. LIKE 模糊查询
LIKE 模糊查询
LIKE 操作符,利用通配符进行模糊查询。
(%) 通配符,匹配任意数量的任意字符。
// 使用 (%) 通配符进行模糊查询 |
(_) 通配符,匹配单个任意字符。
// 使用 (_) 通配符进行模糊查询 |
通配符使用技巧
- 通配符搜索时间会更长,不要过度使用通配符。
- 除非绝对有必要,否则不要在开始处使用通配符。这种情况搜索起来最慢。
- 注意通配符位置,避免放错位置。
5. REGEXP 正则表达式操作符
REGEXP 正则表达式操作符
REGEXP 操作符,可以使用正则表达式控制数据过滤。
// 使用 REGEXP 操作符 |
涉及正则表达式语法,所以就不做演示了。
6. UNION 组合查询操作符
大多数 SQL 查询都只会包含单条 SELECT 语句返回的数据,MySQL 也支持执行多条 SELELCT。使用 UNION 操作符可以将合并数条 SQL 查询。
// 使用 UNION 合并查询 |
使用 WHERE 多条件过滤同样能达到 UNION 的效果。上面的示例可能不太明显,在处理复杂的查询时,UNION 操作符可能会比 WHERE 多条件更加清晰。
UNION 规则
- 必须由两条或两条以上 SELECT 语句组成。
- SELECT 语句必须包含相同的列、表达式或聚集函数。
- 列数据类型必须兼容。
PS: 在使用 UNION 操作符时,不同的 SELECT 语句查询出相同的结果时默认会去除重复数据。如果希望保留重复数据可以使用 UNION ALL 操作符(这是 WHERE 多条件做不到的)。
UNION 组合查询排序
UNION 排序与 SELECT 有所不同,UNION 不允许每条 SELECT 单独排序。UNION 统一在多条 SELECT 语句后进行排序。
// 使用 UNION 合并查询排序 |