一、关键字的执行优先级

  1,from:找到表

  2,where:拿着where指定的约束条件,去文件/表中取出一条条数据

  3,group by:将取出的一条条数据进行分组,如果没有group by,则整体作为一组

  4,having:将分组的结果进行having过滤

  5,select:执行select

  6,distinct:去重

  7,order by:将结果按条件排序

  8,limit:限制结果的显示条数

二、去重,四则运算,自定义显示

#避免重复DISTINCT
SELECT 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,having
where发生在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结尾的数据

MySQL之单表查询的更多相关文章

  1. MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询

    MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...

  2. Mariadb/MySQL数据库单表查询基本操作及DML语句

    Mariadb/MySQL数据库单表查询基本操作及DML语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一数据库及表相关概述 1>.数据库操作 创建数据库: CREATE ...

  3. day 38 MySQL之单表查询

    MySQL之单表查询   阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER ...

  4. Mysql数据库单表查询

    1.单表查询语法 #查询数据的本质:mysql会到你本地的硬盘上找到对应的文件,然后打开文件,按照你的查询条件来找出你需要的数据.下面是完整的一个单表查询的语法 select * from,这个sel ...

  5. MySQL之单表查询、多表查询

    一.单表查询: 单个表的查询方法及语法顺序需要通过实际例子来熟悉 先将表数据创建下: mysql> create database singe_t1; # 建个数据库singe_t1 Query ...

  6. MySQL 的单表查询

    单表查询 语法: 一.单表查询的语法 SELECT 字段1,字段2 ,...FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY filed LIMIT ...

  7. 四 mysql之单表查询

    目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 1. 什么是分组?为什么要分组? 2. ONLY_FULL_GROUP_BY ...

  8. mysql(单表查询,多表查询,MySQl创建用户和授权,可视化工具Navicat的使用)

    单表查询 语法: 一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT ...

  9. MySQL的单表查询

    单表查询 单表查询语法: select distinct 字段1,字段2... from 表名 where 条件 group by field having筛选 order by 关键字执行的优先级: ...

  10. day037 mysql之单表查询

    一.单表查询语法 select distinct 字段1,字段2,... from 库名.表名 where 条件 group by 字段 having 筛选条件 order by 字段 limit 限 ...

随机推荐

  1. SQL学习(一.索引)

    数据库索引 作用: 提高查询速度 确保数据的唯一性 可以加速表和表之间的连接,实现表和表之间的参照完整性 使用分组和排序子句进行数据检索时,可以减少分组和排序的时间 全文检索字段进行搜素优化 分类: ...

  2. [c#.net]未能加载文件或程序集“”或它的某一个依赖项。系统找不到指定的文件

    问题是这样嘀: 项目采用了三层架构和工厂模式,并借鉴了PetShop的架构,因为这个项目也是采用分布式的数据库,目前只有三个数据库,主要出于提高访问性能考虑. 原来是按照网上对PetShop的介绍来给 ...

  3. day30

    作业 #__author : 'liuyang' #date : 2019/4/11 0011 下午 12:36 # 这两天 1.软件开发规范 不写 没法做新作业 #2. 认证+上传 +下载 + 校验 ...

  4. 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B

    牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...

  5. ABP框架系列之十一:(AspNet-Core-ASPNET核心)

    Introduction This document describes ASP.NET Core integration for ASP.NET Boilerplate framework. ASP ...

  6. 1.8 新特性之 Lambda Expressions

    Lambda expressions are allowed only at source level 1.8 or above The target type of this expression ...

  7. 前端基于easyui的mvc扩展

    背景 由于MVC的前端是基于jquery.validate和jquery.validate.unobtrusive来实现的,但是当我们要使用其他的ui组件且组件本身就带有完整的验证功能的话,那么要让它 ...

  8. ESP-IDF版本2.1.1

    版本2.1.1是一个错误修复版本.它包括对KRACK和BlueBorne漏洞的修复. 版本2.1.1的文档可在http://esp-idf.readthedocs.io/en/v2.1.1/上找到. ...

  9. Apache Phoenix Flume集成 -- JsonEventSerializer改进

    背景 数据从kafka ingest到Phoenix.数据格式采取Json.数据链路: api -> kafka -> Flume -> Phoenix 官方JsonEventSer ...

  10. Js表单验证控件-02 Ajax验证

    在<Js表单验证控件(使用方便,无需编码)-01使用说明>中,写了Verify.js验证控件的基本用法,基本可以满足大多数验证需求,如果涉及服务端的验证,则可以通过Ajax. Ajax验证 ...