最近接触sql比较多,发现自己已经遗忘的也差不多,要用到的时候迟迟拿不出来,今天开始会在知乎上纪录一些sql语句学习的内容,内容重在说明查询语句的用法。
一、sql查询语句的初始介绍
1、查询语句的一般写法:select .......from ......where ...... group by ......having ...... order by ...... limit ...... ;
2、执行顺序:①from ② where ③ group by ④ select ⑤ having ⑥ order by ⑦ limit ,对于执行顺序一般来说用处不大,但是遇到需求复杂的sql时,可以给你一种很好的解题思路。
二、常用关键字
1、group by 分组
按照字段进行分组,这里有一个需要注意的小问题,除了分组字段之外,取分组后的每一组的第一行作为标识。举个简单的例子:
可以看到,不是分组字段取第一行做标识,其他行都被丢弃掉了。
当进行多列分组时,当且仅当多列的值相同时,才会被分到一组。
2、聚合函数
① count 计数 ②sum 求和 ③ max 最大值 ④ min 最小值 ⑤ avg 平均值 。当然这不是全部,只是列举了一些常用的,这里主要讲解count。
count()聚合函数括号中可以存放的值。
① count(字段): 纪录null值,即表示满足条件的数据行里参数字段不为NULL的行
② count(1或*):不记录null值
③ distinct 字段: 去重
数据库执行效率(由高到低):* > 1 > 主键 > 普通字段
3、having 过滤关键字
where同样也是过滤关键字,他们的不同在于,having作用于组,筛选分组之后的纪录,having条件中可以包含聚合函数;而where作用于表,筛选聚合前的纪录,where条件中不能包含聚合函数。
4、order by 排序关键字
asc 升序(默认),desc 降序。当按照两列或者两列以上的列数进行排序时,在第一列排序结束后的基础上,对于第一排序列相同值的行,按照第二排序列进行排序,多列情况亦是以此类推。
5、limt a,b
从a行开始取值,要取出的行数为b行。需要注意的是,数据表的行数下标从0开始。
6、left join 左连接(也称左外连接)
语法:table1 left join table2 on 过滤条件
以左表为基准,右表无匹配行时,只显示左表数据,右表显示为null。
7、inner join 内连接
只显示两边都匹配的行,有两种写法,效果一样。
语法:①select * from table1 ,table2 where 过滤条件
②select * from table1 inner join table2 on 过滤条件