查询:
简单查询
####查询的字段必须在表中存在 #### 对查询出来的数据进行修改时,不会修改原来的数据,只是修改了可视化的,我们看到的数据。 # 查一个数据 select 字段名 from 表名; # 查多个数据 select 字段名,字段名,字段名...... from 表名; # 对查询出来的内容进行运算 select 字段名*12 from 表名 # 对查询出来的数据字段名去重 ####distinct select distinct 某个字段 from 表; # 查询出来的字段进行重命名 select 字段名 新名字 from 表; select 字段名 as 新名字 from 表; # 查询出来的内容进行拼接 # concat select concat('你想要用什么拼接字段名',字段名,'你想要拼接的其他的内容','字段名')from 表; # 自动拼接 (确定用什么拼接,然后拼接后面的所有字段,用法类似于str方法的join方法) select concat_ws('你想要用什么拼接',字段名,字段名,字段名...) from 表;
条件查询:
1 case 语句
### case语句 select (case when 条件(比如:name =='小明') then # 如果条件成立,查找下面的这个内容 要查询的字段名 when 条件 then concat(要查询的字段名,'_可以加上拼接的内容') # 如果这个条件成立,给这个内容,拼接(其实就是对这个内容的操作,) else concat(要查询的字段名,'拼接的内容') end) as 新名字 from 表名 # end 结束语句, as 起一个代名,从表中查找
2 where 条件:
###where条件查询 # where 支持 # 1 比较运算符 :> < >= <= <> != # 2 between 80 and 100 值在80到100之间的数 # 3 in(80,90,100) 值为80或者90或者100 # not in 值不是80,90,100 # 4 like 'e%' 通配符可以是%或者_ % 表示任意多个字符 _表示一个字符 select 字段 from 表 where 条件; select 字段 from 表 where like '金%' # 表示条件为 金...的内容,后面不限字数 #'金_' 表示 金*内容,固定了字数 #'金__' 表示金**内容,固定了字数 #tetween select 字段 from 表 where 字段 between 范围 #身份运算符 is /is not null # 用来判断你是不是为空 # regex 使用正则 select 字段 from 表 where 字段 regexp '正则表达式';
3 group by 分组
#### group by 分组 select 字段 from 表 group by 字段; # 这个式子查出来的是根据这个分类,将相同的分成一类,并且重复的数据只显示一个,可以根据这个方法去重。 # 显示所有数据使用group_concat select group_concat(字段) from 表 group by 字段; # 这个式子查出来的是根据这个分类,将相同的分成一类,并显示每一类的所有数据
4 聚合函数
#强调:聚合函数聚合的是组的内容,若是没有分组,则默认一组 示例: SELECT COUNT(*) FROM employee; # 查询中的数据数量 SELECT COUNT(*) FROM employee WHERE depart_id=1; # 查询表中depart_id= 1的数据数量 SELECT MAX(salary) FROM employee; # 查询salary字段最大的数据 SELECT MIN(salary) FROM employee;# 查询salary字段最小的数据 SELECT AVG(salary) FROM employee;# 查询salary字段数据的平均值 SELECT SUM(salary) FROM employee; SELECT SUM(salary) FROM employee WHERE depart_id=3;# 查询depart_id=3的数据总和
5 having 过滤
###having #对分组进行条件过滤,一般都和group by连用 select post,group_concat(emp_name) from emp group by post having salary > 10000;#错误,分组后无法直接取到salary字段,使用条件字段时,我们必须要先查找这个数据 mysql> select 字段,group_concat(字段) from 表 group by 字段 having avg(字段) > 10000; # 查找分组中的数据 # 如果我们想要使用having当做条件查询 # 那么他的条件就要先找出来才能使用 select emp_name,age from emloyee having age>18; #select * 的时候,我们默认这个将整个表当做一个分组 select * from emloyee having age>18;
小总结:
#!!!执行优先级从高到低:where > group by > having #1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。 #2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数
6 order 排序
按单列排序 SELECT * FROM employee ORDER BY salary; # 根据salary排序,升序 SELECT * FROM employee ORDER BY salary ASC; #ASC是升序 SELECT * FROM employee ORDER BY salary DESC;# desc是降序 按多列排序:先按照age排序,如果年纪相同,则按照薪资排序 SELECT * from employee ORDER BY age, salary DESC;
limit
显示前n条,limit n
limit 1 显示一条
SELECT * FROM employee ORDER BY salary DESC LIMIT 3; #默认初始位置为0 SELECT * FROM employee ORDER BY salary DESC LIMIT 0,5; #从第0开始,即先查询出第一条,然后包含这一条在内往后查5条 SELECT * FROM employee ORDER BY salary DESC LIMIT 5,5; #从第5开始,即先查询出第6条,然后包含这一条在内往后查5条