单表查询:
一 关键字的执行优先级:
- from #来自表
- where #来自字段 可以用 [字段名] like(regexp) 'ab%'(正则) 选择以该字段数据以'ab'开头的
- group by #分组; 想拿到别的字段必须和 group_concat(函数一起使用)
- having #过滤; 必须是在分组之后进行的进一步的过滤, 而且可以使用聚合函数
- select #查询, 选择
- distinct #去重
- order by #排序 asc #升序, 默认的 desc #降序
- limit #限制条数
二 单表查询的语法:
select * from, #这个 select * 指的是要查询所有字段的数据.
select distinct 字段 1, 字段 2... from [库名. 表名] #from 后面是说从库的某个表中去找数据, MySQL 会去找到这个库对应的文件夹下去找到你表名对应的那个数据文件, 找不到就直接报错了, 找到了就继续后面的操作
where #条件 #从表中找符合条件的数据记录, where 后面跟的是你的查询条件
group by [字段名] #分组
注意: 我们按照 post 字段分组, 那么 select 查询的字段只能是 post, 想要获取组内的其他相关信息, 需要借助函数 group_concat(). 例如: 查询 t1 表中岗位名称以及岗位中所包含的员工名字
select post,group_concat(name) from t1 group by post
having 筛选 #过滤, 过滤之后执行 select 后面的字段筛选, 就是说我要确定一下需要哪个字段的数据, 你查询的字段数据进行去重, 然后在进行 having 过滤的操作
order by [字段名] #将结果按照后面的字段进行排序
limit 限制条数 #将最后的结果加一个限制条数, 就是说我要过滤或者说限制查询出来的数据记录的条数
三 函数
- concat('姓名:' , [字段名] , '年薪:' , [字段名]*12) #函数用于连接字符串, 且只有一个字段
- concat('姓名:' , [字段名]),concat('年薪:' , [字段名]*12) #设置了两个字段来显示连接的字符串
select count(*) from [表名]; #count 是统计个数用的
select count(*) from [表名] where depart_id=1; #后面跟 where 条件的意思是统计一下满足 depart_id=1 这个的所有记录的个数
select max([字段名]) from [表名]; #max() 统计分组后每组的最大值, 这里没有写 group by, 那么就是统计整个表中所有记录中薪资最大的, 薪资的值
select min([字段名]) from [表名]; #最小值
select avg([字段名]) from [表名]; #平均值
select sum([字段名]) from [表名]; #和
多表查询:
select [字段名] from [表名 1] <inner | left | right> join [表名 2] on [两个表关联的条件] where [过滤条件];
一定要注意:(查询出来的虚拟表, 一定要赋予一个新名字才可以被查询拿值)
sql 逻辑查询语句的执行顺序: select 语句关键字的定义顺序 join 模式有 inner ,left ,right
select distinct <select_list>
from < 左边表 >
<join 模式 > join < 右边表 >
on <join 条件 >
where <where 条件 >
group by <group_by 条件 >
having <having 条件 >
order by <order_by 条件 >
limit <limit 条件 (索引, 数字)>
来源: http://www.bubuko.com/infodetail-2930463.html