SQL语句之查询
一、 查询(select)
1.简单查询
select * from 表名; (查询所有列)

select 字段1,字段2,… from 表名; (查询指定列)

在select语句中可使用as语句(起别名):select 字段 as 别名 from 表名;

2.带where子句的查询
2.1比较运算符
(1) > < <= >= = <> 大于、小于、大于(小于)等于、不等于


(2)between … and … 显示在某一区间的值
对float类型数据,between…and…取值范围是左开右闭区间(>最小值,<=最大值)
对int类型数据,between…and…取值范围是闭区间(>=最小值,<=最大值)


(3)in() 显示在in列表中的值


(4)like ‘_a%’ 模糊查询
like语句中,%代表零个或多个任意字符,_代表一个字符,例:‘_a%’ 表示第二个字符是a的字符串。


(5)is null 判断是否为空

2.2逻辑运算符
(1)and 多个条件同时成立

(2)or 多个条件任一成立

(3)not 不成立
例:not like; is not null

二、 数据表的排序、聚合、分组命令
1. 排序子句(order by)
语句:
order by 指定排序的列 (asc 升序(默认) / desc 降序)
order by子句对查询结果进行排序,order by子句一般位于select语句的结尾。

2. 常用聚合函数
(1) distinct 对某一列数据去重
select distinct 列名 from 表名; (显示此列不重复的数据)

(2) count 统计总行数
count(*):包括所有列,返回表中的总行数,在统计结果的时候,不会忽略列值为null的行数。
count(1):包括所有行,1表示一个固定值,没实际含义,在统计结果的时候,不会忽略列值为null的行数,和count(*)区别是执行效率不同。

count(列名):只包括列名指定列,返回指定列的行数,在统计结果的时候,不统计列值为null,即列值为null的行数不统计在内。

count(distinct 列名):返回指定列的不重复的行数,在统计结果的时候,会忽略列值为null的行数(不包括空字符串和0),即只有列值为null的行数不统计在内。

(3) max/min/avg/sum 最大值/最小值/平均值/求和
max/min函数返回满足where条件的一列的最大/最小值;
select max(列名) from 表名 where 条件;
select min(列名) from 表名 where 条件;

avg函数返回满足where条件的一列的平均值;
select avg(列名) from 表名 where 条件;
sum函数对返回满足where条件的一列求和。
select sum(列名) from 表名 where 条件;

3. limit 限制返回的行数目
select * from 表名 limit m,n;
注:
m是指从哪行开始,m从0开始取值,0表示第一行;(limit n 等价于 limit 0,n)
n是指从m+1条开始,取n条;

4.分组(group by)
使用group by子句对列进行分组,还可以使用having子句过滤,having通常跟在group by 后,它作用于组。
注:使用group by后只能展示分组的列名+聚合函数结果,因为其余列已经基于分组这一列合并。
(1) 不加having过滤:
select 列名,聚合函数 from 表名 where 子句 group by 列名;

(2) 加上having过滤:
select 列名,聚合函数 from 表名 where 子句 group by 列名 having 聚合函数 过滤条件;

三、 数据表连接查询和子查询(嵌套查询)
1. 连接查询
(1) inner join(内连接)
获取两个表中字段匹配关系的行的所有信息。
select * from 表名 a inner join 表名 b on a.列名=b.列名

(2) left join(左连接)
获取左表所有行的信息,即使右表没有对应匹配的行的信息。右表没有匹配部分用null代替。
select * from 表名 a left join 表名 b on a.列名=b.列名

(3) right join(右连接)
获取右表所有记录,即使左表没有对应匹配的行的所有信息,左表没有匹配部分用null代替。
select * from 表名 a right join 表名 b on a.列名=b.列名

2. 子查询(嵌套查询)
select 列名1 from 表1 where 列名2 in(select 列名2 from 表2 where 列名3 =xx);
注:一般在子查询中,程序先运行在嵌套在最内层的语句,再运行外层。因此在写子查询语句时,可以先测试下内层的子查询语句是否输出了想要的内容,再一层层往外测试,增加子查询正确率。


被折叠的 条评论
为什么被折叠?



