在进行数据库查询的时候,很多情况下需要我们对数据进行筛选。这时我们就需要一些特定的语句。
查询所有列的数据 select * from 表名
查询去掉重复记录 select distinct 列表 from 表名
查询并重新命名列名 select 列名 AS '新列名' from 表名
Like语句进行模糊查询
select * from 表 where 列名 like ‘%列名%’ 包含某个列名
select * from 表 wherer 列名 like ‘%支出’ 以支出结尾
select * from 表 where 列名 like '支出%' 以支出开头
select * from 表 where 列名 like '_' 某个列名只有一个字符
select * from 表 where 列名 is not null 不为空
对排序结果进行升序
order by 列名 默认是升序
order by 列名 desc降序
聚合函数
count sum max min avg
count 用来对表中的数据的个数进行求和 select count(*或是某个列名) from 表名
sum 是用来对一系列数据进行求和的 select sum(列名) from 表 (如果统计项有控制,sum的求和时会自动将有空值的去掉,不对其进行计数)
max 对某一列 数据获取最大值 select Max(列名) from 表
avg 函数 计算某一个列中所有数据的平均值 select Avg(列名) from 表
分组查询
group by 被分组的列名
group by ------having---对分组后的数据再次进行筛选
那么问题来了,having是对条件进行筛选,where也是对条件进行筛选,那么where和having的区别是啥呢
在查询过程中 where 优先于 聚合语句(sum ,min,avg),聚合语句要优先于having子句 。
select sum(*) where id>6 先要查询id>6的,然后进行聚合
select sum(area) from 表 group by region having sum(area)>1000 如果是对聚合函数后的数据进行筛选就要选用 having了
SQL语句进行嵌套查询 这样可以简化代码:
SELECT * FROM stuinfo WHERE score>(SELECT AVG(score) FROM stuinfo ;
查找至少有3次销售的业务员名单和销售日期
select emp_name,order_date from employee a,sales b
where emp_no=sale_id and a.emp_no in
(select sale_id from sales group by sale_id having count(*)>=3) order by emp_name