1.显示表结构
例如:describe employees; --------------显示表中字段详细信息
2.列的别名只能在order by 中使用,不能在where中使用
3. MySQL 8.0 新特性:limit … offset …
select * from table_name limit m offset n
# limit 后边跟的是 查询的条数
# OFFSET 后边跟的是 从第几条数据开始查询 。默认从 0 开始。
4. 笛卡尔积
产生原因:
- 省略多个表的关联条件
- 关联条件无效
- 所有表所有行互相连接
为了避免产生笛卡尔积,可以在where后面加上有效的关联条件
**结论:如果有n张表实现多表的查询,则需要至少n-1的关联条件 **
5.内连接
内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行
6.外连接
外连接:合并具有同一列的两个以上的表的行,结果集中除了包含一个表与另一个表匹配的行之外,还查询到左表或右表中不匹配的行。
外连接的分类:左外连接、右外连接、满外连接
7.union 和 union all的区别
-
union
union操作符取两个结果集的并集,并去除重复的数据 -
union all
union all操作符返回两个查询结果集的并集,但是不取除重复的部分。相当于公共部分加了两次。
注意:开发中能用union all 的地方就不要用union,应为要去重,所以效率低,可以跟七种连接方式进行搭配使用
8.七种join实现
- 中图:内连接
select a.id, b.name
from table_users a
inner join table_departments b
on a.depart_id = b.id
-左上图:左外连接
select a.id, b.name
from table_users a
left join table_departments b
on a.depart_id = b.id
-右上图:右外连接
select a.id, b.name
from table_users a
right join table_departments b
on a.depart_id = b.id
-左中图:
select a.id, b.name
from table_users a
left join table_departments b
on a.depart_id = b.id
where b.id is null
-右中图
select a.id, b.name
from table_users a
left join table_departments b
on a.depart_id = b.id
where a.depart_id is null
-左下图:满外连接
方式一(只列举一个例子):
select a.id, b.name
from table_users a
left join table_departments b
on a.depart_id = b.id
union all
select a.id, b.name
from table_users a
left join table_departments b
on a.depart_id = b.id
where a.depart_id is null
- 右下图:左中图 union all 右中图(sql略)
9.自然连接和using
了解一下,使用有要求
10.字符串函数
常用的:contact(),能过进行字符串拼接
11.日期和时间函数
- 获取当前日期和时间
SELECT CURRENT_DATE(), CURRENT_TIME() FROM DUAL
- 日期和时间戳转换
SELECT UNIX_TIMESTAMP(), FROM_UNIXTIME(1670405863) FROM DUAL
12.计算日期和时间函数
SELECT NOW(),DATE_ADD(NOW(),INTERVAL 1 YEAR) FROM DUAL
date_add(): 日期 +
date_sub(): 日期 -
13.流程控制函数
- if(value, value1, value2)
14.聚合函数
1. 常见的几个聚合函数
- AVG / SUM
- MAX / MIN
- COUNT,count的作用:计算指定字段在查询结构中出现的个数
- 计算指定字段的个数的时候是不计算null值的
2.GROUP BY的使用
select中声明的非组函数字段必须声明在group by 中,group by声明的字段可以不出现在select中
3.HAVING 的使用(用来过滤数据的)
结论1:如果过滤条件中使用了聚合函数,则必须使用 having 来替代 where
要求2:having 必须放在 group by 的后面
要求3: where是先筛选后连接,having是先连接后筛选,where的执行效率比having高
4.sql的执行原理
sql语句的执行过程
15.自查询
- 规则