SELECT语法;
基本的查询语句:
- 查询所有列(效率低,不推荐):
select * from 表名;
- 查询特定列(效率高):
select 列名1,列名2 from 表名;
查询常量值:SELECT 100; 查询表达式:SELECT 100%98;
别名(AS)
别名 :代码块内使用, 减轻你的代码工作量。。。
3. 给列取别名:
select 你要取别名的列 as 你要取的别名(尽量短捷) from 表名;
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200805154655203.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2MDUyOTM5,size_16,color_FFFFFF,t_70)
- 给表取别名:
select 列名 from 表名 as 别名;
注意as可以省略!!!
去重(DISTINCT)关键字:
> SELECT DISTINCT 字段名1,字段名2,... from 表名
过滤和排序数据
- 过滤:
select * from 表名 where 条件(Boolean表达式)
简单条件运算符:> < = <>(不等于) >= <= <=>(完全等于类型和值全等)
逻辑操作符:
比较操作符:
(LIKE)关键字:
通配符:
% 任意多个字符,包含0个字符
_ 任意单个字符
SELECT 列名 from 表名 where 列名 like 通配符组成的条件;
LIKE配合ESCAPE关键字
SELECT last_name #字段名
FROM t_mysql_employees #表名
WHERE last_name LIKE '_$_%' ESCAPE '$';#条件
查询此字段的第二个字符为"_"的员工;
between and区间查询
介于…与…之间。
SELECT first_name,last_name #字段名
FROM t_mysql_employees #表名
WHERE employee_id BETWEEN 100 AND 120; #条件
这个字段的id介于100到200之间!
in关键字
示例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
排序查询(order by )
语法:
select 查询字段
from 表名
【where 筛选条件】
order by 排序的字段或表达式;
这里最后加上asc代表升序,默认升序可以省略;
desc代表降序;
- 按单字段排序:
- 添加筛选条件再排序:
- 按多个字段排序
limit语句(MySQL方言)
如果只想只显示数据的一部分 可以使用LIMIT关键字 此乃MYSQL特有
LIMIT同样也可以指定显示区间 不过其中下标是从0开始的
分组函数
1. COUNT
SELECT COUNT(*) FROM 表名;//计算表中所有列都不是NULL的值 不过很多书上写
SELECT COUNT(1) FROM 表名;//更快
SELECT COUNT(字段) FROM 表名;//计算表中该字段列有多少个不是NULL的值
2.MAX
SELECT COUNT(字段) FROM 表名;//查询该字段列中数据最大的值
3.MIN
SELECT COUNT(字段) FROM 表名;//查询该字段列中数据最小的值
4.SUM
SELECT SUM(字段) FROM 表名;//查询该字段下所有列的数据和
5.AVG
SELECT AVG(字段) FROM 表名;//查询该字段下所有列数据和的平均值
!!!注意:分组函数不能出现在where后!!!
分组查询
语法:
select 查询列表
from 表
【where 筛选条件】
group by 分组的字段
【order by 排序的字段】;
1. 简单的分组
SELECT 分组字段,分组函数 FROM 表名 group by 分组字段
2.分组前进行过滤!
注意!!!:此过滤条件的字段一定要是在分组前就存在的
SELECT 分组字段,聚合函数 FROM 表名 WHERE ... group by 分组字段;
3.分组后进行过滤!(HAVING)
这里注意having的查询列段一定要跟分组的列段相关!!!
SELECT 分组字段,聚合函数 FROM 表名 group by 分组字段 having ...;
!!!注意使用顺序!!!
select ... from ... where ... group by ... havin ... order by ... limit ...
多表查询
这里我们为了避免笛卡尔集可以在where内加入有效的连接条件!!
- 使用连接在多个表中查询数据
• 在 WHERE 子句中写入连接条件。
• 在表中有相同列时,在列名之前加上表名前缀 - 区分重复的列名
• 在不同表中具有相同列名的列可以用表的别名
加以区分。
• 如果使用了表别名,则在select语句中需要使
用表别名代替表名
• 表别名最多支持32个字符长度,但建议越少越
好
- 等值连接
① 多表等值连接的结果为多表的交集部分
②n表连接,至少需要n-1个连接条件
③ 多表的顺序没有要求
④一般需要为表起别名
⑤可以搭配前面介绍的所有子句使用,比如排序、分组、筛选
示例:查询t_mysql_locations 表和t_mysql_departments 表中每个城市 的部门个数
示例2:查询 t_mysql_departments 表和t_mysql_employees 表内有奖金 的 每个部门 的 部门名和部门的领导编号 和该部门的最低工资