MySQL之单表查询
一、关键字的执行优先级
1,from:找到表
2,where:拿着where指定的约束条件,去文件/表中取出一条条数据
3,group by:将取出的一条条数据进行分组,如果没有group by,则整体作为一组
4,having:将分组的结果进行having过滤
5,select:执行select
6,distinct:去重
7,order by:将结果按条件排序
8,limit:限制结果的显示条数
二、去重,四则运算,自定义显示
#避免重复DISTINCTSELECT post FROM employee;#直接这样查询我们会看到很多重复的内容,我只想看一下有哪些职位,那么多重复的内容是没用的,所以我们加一个去重的功能,叫做distinct SELECT DISTINCT post FROM employee; #对查询出来的记录进行去重,如果post职位有重复的,就会被剔除,剩下不重复的内容,注意,因为我们查询出来的记录里面只有一个字段post,才会根据post来进行去重SELECT DISTINCT post,salary FROM employee;#但是如果这样写,你会发现,貌似没有起到根据post来去重的效果,因为你的去重条件变成了post和salary两个字段的数据,只有他俩合起来是一个重复记录的时候才会去重 #通过四则运算查询SELECT name, salary*12 FROM employee; #查询每个人的年薪,月薪我们有记录,查年薪呢?简单的乘以12就可以了,from 库.表的时候,我们已经通过use 库名;来指定了库了,所以from的时候直接写from 表,就行了#你会发现,结果是出来了,但是我们的那个薪资的字段名变成了salary*12,是因为我们通过查询语句查询出来的也是一张表,但是这个表是不是内存当中的一个虚拟表,并不是我们硬盘中存的那个完整的表,对吧,虚拟表是不是也有标题和记录啊,既然是一个表,我们是可以指定这个虚拟表的标题的,通过as+新字段名来指定SELECT name, salary*12 AS Annual_salary FROM employee; #as + 新字段名,就是起一个别名的意思,上面的那个salary*12的字段名也是一个别名,只不过不直观,是mysql自动给你写上的#除了乘法以外,加减乘除都是可以的 #自定义显示格式,自己规定查询结果的显示格式 CONCAT() 函数用于连接字符串SELECT CONCAT('姓名: ',name,' 年薪: ', salary*12) AS Annual_salary #我想让name这个字段显示的字段名称是中文的姓名,让salary*12显示的是中文的年薪,FROM employee;#看结果:通过结果你可以看出,这个concat就是帮我们做字符串拼接的,并且拼接之后的结果,都在一个叫做Annual_salary的字段中了+---------------------------------------+| Annual_salary |+---------------------------------------+| 姓名: egon 年薪: 87603.96 || 姓名: alex 年薪: 12000003.72 || 姓名: wupeiqi 年薪: 99600.00 || 姓名: yuanhao 年薪: 42000.00 |.....+---------------------------------------+SELECT CONCAT('姓名: ',name,' 年薪: ', salary*12) AS Annual_salary,CONCAT('性别:',sex) from employee;#还可以这样分成两列 CONCAT_WS() 第一个参数为分隔符来进行字符串拼接SELECT CONCAT_WS(':',name,salary*12) AS Annual_salary from employee; #通过冒号来将name和salary连接起来#上面这个效果我们也可以通过concat来实现:SELECT CONCAT(name,':',salary*12) AS Annual_salary from employee;
三、where约束
1,比较运算符:> < >= <= <> !=
2,between 80 and 100
3,in(80,90,100)
4,like 'ee%' 模糊匹配,%表示任意多字符,_表示一个字符
5,逻辑运算符:在多个条件直接可以用逻辑运算符 and or not
#1:单条件查询 SELECT name FROM employee WHERE post='sale'; #注意优先级,我们说where的优先级是不是比select要高啊,所以我们的顺序是先找到这个employee表,然后按照post='sale'的条件,然后去表里面select数据 #2:多条件查询 SELECT name,salary FROM employee WHERE post='teacher' AND salary>10000; #3:关键字BETWEEN AND 写的是一个区间 SELECT name,salary FROM employee WHERE salary BETWEEN 10000 AND 20000; #就是salary>=10000 and salary<=20000的数据SELECT name,salary FROM employee WHERE salary NOT BETWEEN 10000 AND 20000; #加个not,就是不在这个区间内,薪资小于10000的或者薪资大于20000的,注意没有等于, #4:关键字IS NULL(判断某个字段是否为NULL不能用等号,需要用IS) 判断null只能用is SELECT name,post_comment FROM employee WHERE post_comment IS NULL;SELECT name,post_comment FROM employee WHERE post_comment IS NOT NULL#5:关键字IN集合查询 SELECT name,salary FROM employee WHERE salary=3000 OR salary=3500 OR salary=4000 OR salary=9000 ; #这样写是不是太麻烦了,写一大堆的or,下面我们用in这个简单的写法来搞SELECT name,salary FROM employee WHERE salary IN (3000,3500,4000,9000) ;SELECT name,salary FROM employee WHERE salary NOT IN (3000,3500,4000,9000) ; #6:关键字LIKE模糊查询,模糊匹配,可以结合通配符来使用通配符’%’ #匹配任意所有字符SELECT * FROM employee WHERE name LIKE 'eg%';通配符’_’ #匹配任意一个字符 SELECT * FROM employee WHERE name LIKE 'al__'; #注意我这里写的两个_,用1个的话,匹配不到alex,因为al后面还有两个字符ex。
四、分组查询group by
select * from 表名 group by 字段 对sql_mode进行设置为ONLY_FULL_GROUP_BY,此时就会报错,只能查看该字段的内容,但如果没有设定,也只会显示每组的第一组数据
单独使用GROUP BY关键字分组SELECT post FROM employee GROUP BY post;注意:我们按照post字段分组,那么select查询的字段只能是post,想要获取组内的其他相关信息,需要借助函数 GROUP BY关键字和GROUP_CONCAT()函数一起使用,比如说我想按部门分组,每个组有哪些员工,都显示出来,怎么搞SELECT post,GROUP_CONCAT(name) FROM employee GROUP BY post;#按照岗位分组,并查看组内所有成员名,通过逗号拼接在一起SELECT post,GROUP_CONCAT(name,':',salary) as emp_members FROM employee GROUP BY post; GROUP BY一般都会与聚合函数一起使用,聚合是什么意思:聚合就是将分组的数据聚集到一起,合并起来搞事情,拿到一个最后的结果select post,count(id) as count from employee group by post;#按照岗位分组,并查看每个组有多少人,每个人都有唯一的id号,我count是计算一下分组之后每组有多少的id记录,通过这个id记录我就知道每个组有多少人了 关于集合函数,mysql提供了以下几种聚合函数:count、max、min、avg、sum等,上面的group_concat也算是一个聚合函数了,做字符串拼接的操作
五、过滤having
执行优先级:where,group by,havingwhere发生在group之前,因而where可以用任意字段,但绝不能用聚合函数having发生在group by之后,因而可以用分组的字段,无法直接用到其他字段,having是可以用聚合函数的select post,avg(salary) from t1 where age > 30 group by post having avg(salary) >10000;这是得到各部门年龄大于30的员工的平均工资,最后保留平均工资大于10000的部门
六、查询排序order by
select * from t1 order by salary #默认升序排列select * from t1 order by salary asc; #升序排列select * from t1 order by salary desc; #降序排列select * from t1 order by age asc,salary desc; #先以年龄升序排列,若年龄相同的就以工资降序排列
七、限制查询的记录数limit
select * from t1 order by salary limit 3; #默认起始位为0,即从第一条数据开始,总共显示3条数据select * from t1 order by salary desc limit 0,5; #起始位为0,即从第一条开始,总共显示5条数据select * from t1 order by salary asc limit 2,6; #起始位为2,即从第三条开始,总共显示6条数据
八、使用正则表达式查询
之前用的like是模糊匹配,只有%和_,具有局限性,查询的时候其实可以用我们之前学正则select * from t1 where name regexp '^ale'; #匹配以ale开头的select * from t1 where name regexp 'ss$'; #匹配以ss结尾的select * from t1 where name regexp 'm{2}' #匹配含有2个m的 对字符串匹配的方式:where name = 'ee' #查找name是‘ee’的数据where name like 'yu%' #查找以yu开头的数据where name regexp 'euu$' #查找以euu结尾的数据
转载于:https://www.cnblogs.com/12345huangchun/p/10092664.html
MySQL之单表查询相关推荐
- MySQL:单表查询---简单查询+条件查询+高级查询+表和字段取别名
目录 一.通用模版展示 简单查询 条件查询 高级查询 表和字段取别名 二.举例说明 简单查询 条件查询 高级查询 表和字段取别名 三.注意事项 四.Mapper简单举例 简单查询 条件查询 高级查询 ...
- MySQL之单表查询、多表查询(一)
阅读目录 一.单表查询: ①.基本语法执行顺序 ②.where约束条件的使用 ③.group by 分组 ④.having (类似于where,但是必须在group by语句后使用) ⑤.distin ...
- python mysql查表_python进阶(十、mysql:单表查询)
3.mysql数据库 3.10 单表查询 3.10.1. 简单查询 查询在数据库中使用的频率是最高的:十次查询,一次增删改. 1)建表 2)插入数据 3.10.1.1. 选择字段:select sel ...
- 04 Mysql之单表查询
1.单表查询语法 #查询数据的本质:mysql会到你本地的硬盘上找到对应的文件,然后打开文件,按照你的查询条件来找出你需要的数据.下面是完整的一个单表查询的语法select * from,这个sele ...
- mysql:单表查询,多表查询.
文章目录 mysql mysql基本查询语句及方法 连表 子连接 单表查询 多表查询 一 单表查询 1.前期表与数据准备 插入记录 插入表数据 2.语法书写与执行顺序 在写SQL命令是注意两点: 执行 ...
- mysql练习-单表查询和多表查询
单表查询 CREATE TABLE `worker` (`部门号` int(11) NOT NULL,`职工号` int(11) NOT NULL,`工作时间` date NOT NULL,`工资` ...
- MySQL之单表查询、多表查询(二)
⑥.order by (排序) --------------------------------------------------------------------注:如果你对python感兴趣, ...
- Mysql ==》 单表查询
主要内容: 1.查询语法 2.关键字的执行优先级 3.简单查询 4.单条件查询 5.where 约束 6.分组查询: group by 7.使用聚合函数查询 8.having 过滤 9.查询排序:or ...
- MySQL 数据库单表查询——高级查询
当遇到一些复杂的需求时,例如对查询结果进行排序,分组和分页等,MySQL 数据库有着更高级的查询方法以处理更加复杂的需求. 一,排序查询 在查询完成后,结果集中的数据是按默认顺序排序的.为了方便用户自 ...
最新文章
- 一键修改分辨率bat_求使用批处理BAT设置分辨率的方法介绍?
- jquery学习(六)-jquery中的动画
- 【数据结构-图】2.多图详解最小生成树(多图详解+实现代码)
- 分布式实时计算—Storm—基础介绍
- (String)、toString、String.valueOf的区别
- 【转】OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service Client
- js 简单弹框toast
- php word com,php 展示word
- [跪了]Servlet 工作原理解析
- 根据不同条件查询_好用的大数据即席查询工具——秒级响应
- xy苹果助手安装_xy苹果助手
- matlab 傅里叶变换最美,MATLAB傅里叶变换
- DIY LDAC蓝牙接收器(二)硬件调试篇
- 今天发现一个好的修图软件
- Github 上 lux 下载神器的安装及使用教程
- 五、Hive数据仓库(完整版)
- 读写 400MB/s 固态U盘轻松应对 Windows To Go
- reflow(重排、回流)和repaint(重绘)
- hpe服务器装linux,HPE ProLiant 系列服务器Redhat Linux系统下安装SSA CLI及基本命令使用...
- 【XCP学习】XCP协议的通信的构造和功能-2
热门文章
- Spring MVC学习笔记——POJO和DispatcherServlet
- php-nginx超时时间过短导致的post失败
- Android4.3引入的UiAutomation新框架官方简介
- 32位系统和64位系统的辨别
- IIS负载均衡-Application Request Route详解第一篇: ARR介绍
- SOA在美国和中国的差异
- 2016年全球电信市场资本支出略增0.7%至3140亿美元
- 2.1JAVA基础复习——JAVA语言的基础组成注释和常量变量
- Maven---学习心得---maven的配置文件settings.xml
- 02_NoSQL数据库之Redis数据库:string类型和hash类型