最近接触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 分组

按照字段进行分组,这里有一个需要注意的小问题,除了分组字段之外,取分组后的每一组的第一行作为标识。举个简单的例子:




sql sum 求和的字段需要加索引吗 sql语句sum求和查询_sql sum求和 值小于不显示


sql sum 求和的字段需要加索引吗 sql语句sum求和查询_多列_02


可以看到,不是分组字段取第一行做标识,其他行都被丢弃掉了。

当进行多列分组时,当且仅当多列的值相同时,才会被分到一组。

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 过滤条件