select [distinct 去重] */ 列名1,列名2
from 表名
where 条件
【多表】and 表间关联
[去重必须两条数据完全相同才会去重]
模糊查询 like
%:表示0到多个任意字符
_:表示单个任意字符
查询表结构
desc 表名
select * from 表名
order by 排序字段(asc默认 小到大)|desc(需要定义 大到小)
分页查询
select * from 表名 limit start,rows
从start+1开始取,取出rows行,start从0开始计算
select * from 表名
LIMIT每页显示记录数*(第几页-1),每页显示记录数
count去重
select count (distinct 统计字段)
from 表名
多表查询的自连接 left
把同一张表当作两张表使用,需要给表取别名【select...from 表名 表别名,表名 表别名 即可】
如果列名不明确 可以指定列别名 列名 as 列别名
子查询
单列子查询
查出 表1 满足 条件 的 字段1 的其他信息
select * from 表1
where 字段1 = ([以下即使子查询]
select 字段1
from 表名
where 条件
)
all 和 any
查询出 表1 中 字段1 大于 子查询内所有 字段1的结果的内容(字段5,6...)
或者去掉>all 给子查询的字段1用max包起来即可
select 字段5,字段6,..
from 表1
where 要比较的字段1 > all(
select 字段1
from 表名
where 条件
)
查询出 表1 中 字段1 大于 子查询内某一个 字段1的结果的内容(字段5,6...)
或者去掉>any 给子查询的字段1用min包起来即可
select 字段5,字段6,..
from 表1
where 要比较的字段1 > any(
select 字段1
from 表名
where 条件
)
多列子查询
查询表1 中和 满足条件 字段2 = 'XX' 的 字段9,字段8 相等的内容 并排除条件中的行
select * from 表1
where (字段9,字段8,...)=(
select 字段9,字段8,...
from 表1
where 字段2 = 'XX'
) and 字段2 <>'XX'
外连接
为了使没有关联的表数据也可以被查询出来
左外连接 的意思即是 左 边的表如果和 右 边的的表没有匹配的会显示 左 边表的所有记录
右外连接 的意思即是 右 边的表如果和 左 边的的表没有匹配的会显示右边表的所有记录
1.左外连接(如果左侧的表完全显示我们就说是左外连接)
🐹语法:select... from 左表1 left join 右表2 on 条件
2.右外连接(如果右侧的表完全显示我们就说是右外连接)
🐹语法:select... from 左表1 right join 右表2 on 条件
·
原始方法 无法获取 字段2 不相同 无法匹配到的信息
select 无相同字段1,表1.有相同的字段2,无相同的字段3...
from 表1,表2
where 表1.有相同的字段2 = 表2.有相同的字段2
改成左外连接
显示了 表1 内即使和表2无关联的字段 而且表2的字段3列为 null
select 无相同的表1的字段1,表1.有相同的字段2,无相同的表2的字段3...
from 表1 left join 表2
on 表1.有相同的字段2 = 表2.有相同的字段2
改成右外连接
显示了 表1 内即使和表2无关联的字段 而且表2的字段3列为 null
select 无相同的表1的字段1,表1.有相同的字段2,无相同的表2的字段3...
from 表1 right join 表2
on 表1.有相同的字段2 = 表2.有相同的字段2
绝大多数情况下 用的最多的还是内连接(就是最常用那种连接)
select last_day(now()) #查看当前月的最后一天 now()也可以写日期年月日
last_day (日期) - 2得到日期该月份的倒数第3天