Where:
如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中:
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
读取 runoob_tbl 表中 runoob_author 字段值为 菜鸟教程 的所有记录:
SELECT * from runoob_tbl WHERE runoob_author='菜鸟教程';
1.查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
2.你可以在 WHERE 子句中指定任何条件。
3.你可以使用 AND 或者 OR 指定一个或多个条件。
4.WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
5.WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。
6.当提供的查询字段为NULL时,不能用=和!=这些符号,需要用IS NULL和IS NOT NULL
以下为操作符列表,可用于 WHERE 子句中。
下表中实例假定 A 为 10, B 为 20
操作符 | 描述 | 实例 |
---|---|---|
= | 等号,检测两个值是否相等,如果相等返回true | (A = B) 返回false。 |
<>, != | 不等于,检测两个值是否相等,如果不相等返回true | (A != B) 返回 true。 |
> 大于号, | 检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true | (A > B) 返回false。 |
< 小于号, | 检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true | (A < B) 返回 true。 |
>= | 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true | (A >= B) 返回false。 |
<= | 小于等于号,检测左边的值是否小于于或等于右边的值, 如果左边的值小于或等于右边的值返回true | (A <= B) 返回 true。 |
Like:
SQL SELECT 语句使用 LIKE 子句从数据表中读取数据的通用语法:
SELECT field1, field2,...fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
实例:
#runoob_tbl 表中获取 runoob_author 字段中以 COM 为结尾的的所有记录:
SELECT * from runoob_tbl WHERE runoob_author LIKE '%COM';
WHERE 子句中可以使用等号 = 来设定获取数据的条件,如 “runoob_author = ‘RUNOOB.COM’”。
但是有时候我们需要获取 runoob_author 字段含有 “COM” 字符的所有记录,这时我们就需要在 WHERE 子句中使用 SQL LIKE 子句。
Like中的%类似与python中的*,是一种通配符;
UNION 连接符:
MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
MySQL UNION 操作符语法格式:
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
1.expression1, expression2, … expression_n: 要检索的列。
2.tables: 要检索的数据表。
3.WHERE conditions: 可选, 检索条件。
4.DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
5.ALL: 可选,返回所有结果集,包含重复数据
排序:
可以使用 MySQL 的 order by 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。
SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
1.你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
2.你可以设定多个字段来排序。
3.你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
4.你可以添加 WHERE…LIKE 子句来设置条件。
实例:
#使用 ORDER BY 子句来读取MySQL 数据表 runoob_tbl 中的数据:
SELECT * from runoob_tbl ORDER BY submission_date ASC;
统计分组 GROUP BY:
在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
SELECT column_name, [function(column_name)]
FROM table_name
WHERE column_name operator value
GROUP BY column_name;(column_name需要相同)
可以使用 GROUP BY 来读取数据表中不重复的数据
实例:
SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;
±-------±---------+
| name | COUNT(*) |
±-------±---------+
| 小丽 | 1 |
| 小明 | 3 |
| 小王 | 2 |
±-------±---------+(COUNT()计算元素出现次数)
再统计 WITH ROLLUP:
WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。
实例:
SELECT coalesce(name,’总数’), SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
±-------±-------------+
| name | singin_count |
±-------±-------------+
| 小丽 | 2 |
| 小明 | 7 |
| 小王 | 7 |
| 总数 | 16 |
±-------±-------------+(SUM(singin)将singi的值加起来)
表的连接分组查询:
通过使用join可以连接多个表,每个join后的匹配条件可以不同
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author; (ON语句后是匹配条件)
±------------±----------------±---------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
±------------±----------------±---------------+
| 1 | 菜鸟教程 | 10 |
| 2 | 菜鸟教程 | 10 |
| 3 | RUNOOB.COM | 20 |
| 4 | RUNOOB.COM | 20 |
±------------±----------------±---------------+
分页查询
语法:
select 查询列表
from 表
【join type join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段】
limit 【offset,】size;
offset要显示条目的起始索引(起始索引从0开始)
size 要显示的条目个数
#案例1:查询前五条员工信息
SELECT * FROM employees LIMIT 0,5;
SELECT * FROM employees LIMIT 5;
#案例2:查询第11条——第25条
SELECT * FROM employees LIMIT 10,15;
#案例3:有奖金的员工信息,并且工资较高的前10名显示出来
SELECT
*
FROM
employees
WHERE commission_pct IS NOT NULL
ORDER BY salary DESC
LIMIT 10 ;