单表查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单表查询相关的知识,希望对你有一定的参考价值。
简单查询
1简单查询
select * from employee;
2去重字段 :distinct+字段
select distinct post from employee;
3通过四则运算查询
select name, salary*12 from employee; select name, salary*12 as Annual_salary from employee; select name, salary*12 Annual_salary from employee;
4定义显示的格式 :concat
第一种 CONCAT() 函数用于连接字符串 SELECT CONCAT ( ‘姓名: ‘ ,name, ‘ 年薪: ‘ , salary*12) AS Annual_salary FROM employee; 第二种 简化重复的字符,第一个参数传入需要重复的字符 SELECT CONCAT_WS(‘:‘,name,salary*12) AS Annual_salary FROM employee; 例如: Bob: 82000 Coco: 92000
WHERE约束
1.比较运算 = > < !=
select * from 表 where id > 1 and name != ‘alex‘ and num = 12; -- 筛选id>1且name不为alex且num为12的数据
2.关键字between...and...
select * from 表 where id between 5 and 16; -- 筛选id值在5到16范围内的数据
3.关键字in
select * from 表 where id in (11,22,33) -- 筛选id值b为11或22或33的数据 select * from 表 where id not in (11,22,33) -- 筛选id值不为11或22或33的数据 select * from 表 where id in (select nid from 表)
4.通配符
select * from 表 where name like ‘%le%‘ -- 选取name包含有le的所有数据 select * from 表 where name like ‘ale_‘ -- ale开头的所有(一个字符) select * from 表 where name regexp "^[awv]"; -- 选取name以‘a‘、‘w‘或‘v‘开始的所有数据 select * from tb where name regexp "^[a-c]"; -- 选取name以a到c开头范围内的所有的数据 select * from tb where name regexp "^[^a-c]";-- 选取name非以a到c开头的所有数据
GROUP BY分组
1关键字count
统计个数
select count(id) from employee 统计总个数 select count post.count(id) from employee group by post; 统计分组之后的个数
2关键字group_concat
获取字段中的内容
select post.group_concat(name) from employee group by post;
3聚合函数
只要涉及到分组,select就不能直接拿到组内内容,要通过聚合函数才能取得(聚合函数聚合的是组的内容,若是没有分组,则默认一组)
SUM(字段) -- 求和 COUNT(字段) -- 次数统计 AVG(字段) -- 平均值 MAX(字段) -- 最大 MIN(字段) -- 最小
注意:分组之后只能查看分组的这个字段,如果查询字段中的内容(信息),只显示字段的第一个值
这种查询不符合逻辑,所以设置全局变量后输入查询名字字段就会报错
全局变量 设置的2种方法: 1)select @@global.sql_mode 2)set global sql_mode=‘ONLY_FULL_GROUP_BY‘ 退出重新登录 在我们设置全局变量之后,当我们再次查询名字内容时,直接报错
HAVING过滤
where与having区别:
1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。
2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数
注意:having后面跟的条件判断的字段必须是聚合函数返回的结果,否则sql会报错
select * from employee_tbl group by name having id>4 错误写法 select * from employee_tbl group by name having count(id)>4 正确写法
order by排序
1单列排序:
select * from tb order by name asc; -- 按照name升序排列 select * from tb order by name desc; -- 按照name降序排列
2多列排序
SELECT * from employee ORDER BY age, salary DESC;
先按照age排序,如果年纪相同,则按照薪资排序
LIMIT限制
select * from tb limit 2; -- 前2行 select * from tb limit 2,2; -- 从第2行开始的后2行 select * from tb limit 2 offset 2; -- 从第2行开始的后2行
注意:Limit 数据比较大的情况下查找速度会变慢,索引能够缓解查找速度问题
以上是关于单表查询的主要内容,如果未能解决你的问题,请参考以下文章