MySQL笔记(二)——查询数据
数据库管理系统的一个最重要的功能就是数据查询,数据查询不应只是简单的查询数据库中存储的数据,还应该是根据需要对数据进行筛选,以及确定数据以什么样的格式显示。本篇笔记主要介绍单表查询,子查询,连接查询。
MySQL的基本查询语句为SELECT语句,SELECT语句的基本格式为如下,具体的关键词在下文会一一介绍。
select {*|<字段列表>} [form <表一>,<表二>... [where <查询条件>
[GROUP BY <group by definition>]
[HAVING <expression> [{<operator> <expression>}...]
[ORDER BY <order definition>]
[LIMIT [<offset>,] <row count>]
]}
单表查询
单表查询是指在一张表数据中查询所需的数据。
- 查询所有字段:使用星号(*)通配符
select * from 表名;
- 指定字段查询
select 字段名,字段名... from 表名;
- 带条件查询:通过where子句可以对数据进行过滤
select 字段1,字段2... from 表名 where 查询条件;
- 带IN关键字的查询:IN操作符用来查询满足指定范围内的条件的记录,IN将所有检索条件用括号括起来,检索条件之间用逗号隔开,只要满足条件范围内的一个值即为匹配项。
select 字段1 from 表名 where 字段 [not]in (1,2,3);
- 带BETWEEN AND的范围查询:该操作符需要两个参数,即范围的起始值和结束值,如果字段值满足指定范围,则这些记录就被返回。
select 字段1 from 表名 from where 字段 between 1 and 10;
- 带LIKE的字符匹配查询:和like一起使用的通配符有'%'和'_',’%’可匹配任意长度的字符,包括零字符,‘_’一次只能匹配任意一个字符。
select name from 表名 where name like'王%';
- 查询空值:空值不同于0,也不同于空字符。空值一般表示数据未知、不适用或将在以后添加数据,在select中使用IS NULL子句。
select 字段1 from 表名 where 字段 is [not]null;
- 带AND的多条件查询:使用AND操作符限定只有满足所有查询条件的记录才会被返回,多个条件用AND分隔开。
select 字段1,字段2 from 表名 where 条件1 AND 条件2;
- 带OR的多条件查询:表示只需满足其中一个条件的记录就可以被返回。
select 字段1,字段2 from 表名 where 条件1 OR 条件2;
- 查询结果不重复:用关键字DISTINCT指示mysql消除重复的记录值。
select distinct 字段1 from 表名;
- 对查询结果排序:使用ORDER BY子句进行排序,可通过关键字指定排序的方向,默认是升序asc,降序是desc。
select 字段1,字段2 from 表名 order by 字段1 desc,字段2 asc;
- 限制查询结果的的数量:使用LIMIT关键字,位置偏移量是指从哪一条开始显示,如果不写,则默认从第一条记录开始,即位置偏移量为0。
select 字段1 from 表名 字段1 limit [位置偏移量] 行数;
- 使用聚合函数查询:聚合函数有五个,分别是返回某列的平均值AVG()、返回某列的行数的COUNT()、返回某列的最大值MAX()、返回某列的最小值MIN()、返回某列值的和SUM()。
select 聚合函数(字段1) from 表名;
- 分组查询:使用子句GROUP BY创建分组,通常和聚合函数一起使用。使用关键字HAVING过滤分组,在GROUP BY子句中使用WITH ROLLUP使得在记录的最后增添一行,用于统计记录的数量。
select 字段1,count(字段2) from 表名 group by 字段1 [with rollup] [hanving 条件];
子查询
子查询是指一个查询语句嵌套在另一个查询语句内部的查询,故子查询不同于单表查询,并不局限在一个表中查询。子查询中可以使用比较运算符,如“<”、“>”、“<=”、“>=”、“=”、“!=”等。
- 带ANY、SOME关键字的子查询:ANY和SOME是同义词,表示只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件。
select 字段1 from 表1 where 字段 > any(select 字段2 from 表2);
- 带ALL关键字的子查询:与ANY不同的是,他需要满足内层查询的所有条件。
select 字段1 from 表1 where 字段 > all(select 字段2 from 表2);
- 带EXISTS关键字的子查询:判断内层查询是否可以返回记录,如果可以,则EXISTS的值为True,外层语句进行查询,否则为False,外层语句将不进行查询。
select 字段1 from 表1 where [not] exists (select 字段2 from 表2 where 字段3 = xx);
- 带IN关键字的子查询:内层查询语句仅仅返回一个数据列,这个数据列的值将提供给外层查询语句进行比较操作。
select 字段1,字段2 from 表1 where 字段3 [not] in(select 字段4 from 表2 where 条件);
- 合并查询结果:用关键字UNION,在各个select中用UNION [ALL]分隔开,不加ALL的话执行的时候会删除重复的记录,所有返回的行都是唯一的,使用ALL的作用是不删除重复行也不对结果进行自动排序。
select 字段1 from 表1 where 条件 union all select 字段2 from 表2 where 条件;
连接查询
连接是关系数据库模型的主要特点。连接查询是关系数据库中最主要的查询,主要包括内连接和外连接。通过连接运算符可以实现多个表的查询。当两个或更多的表中存在相同意义的字段时,便可以通过这些字段对不同的表进行连接查询。
- 内连接查询:用INNER JOIN连接两个表,用ON替代原来的WHERE。
select 表1.字段1,字段2,表2.字段3 from 表1 inner join 表2 on 条件;
- 外连接查询分左连接(LEFT JOIN)和右连接(RIGHT JOIN),与内连接不同的是,它返回到结果不仅包含符合连接条件的行,而且包含左表(左连接)、右表(右连接)的所有数据行。
select 表1.字段1,字段2,表2.字段3 from 表1 left outer join 表2 on 条件;
select 表1.字段1,字段2,表2.字段3 from 表1 right outer join 表2 on 条件;
MySQL笔记(二)——查询数据的更多相关文章
- Mysql 笔记二
Mysql 笔记二 Mysql 笔记二 Table of Contents 1. 前言 2. Master Thread 工作方式 2.1. 主循环(loop) 2.2. 后台循(backgroup ...
- MySql笔记(二)
目录 MySQL笔记(二) 一幅画,一次瞬间的回眸,就在那次画展上,那个眼神,温柔的流转,还是那干净的皮鞋,一尘不染,俊朗的眉宇性感的唇,悄悄走近,牵手一段浪漫 MySQL笔记(二) 13.条件查询 ...
- mysql笔记03 查询性能优化
查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减 ...
- PostgreSQL自学笔记:8 查询数据
8 查询数据 8.1 基本查询语句 select语句的基本格式是: select {* | 字段1[,字段2,...]} [ from 表1,表2... [where 表达式] [group by & ...
- MySql数据库,查询数据导出时会出现重复的记录(数据越多越明显)
在查询数据时,数据量多的时候,我们会使用分页功能. 每页显示多少数据. 这种情况下,一半看不出什么问题. 而导出数据时,有时就是通过分页的方法,逐步讲数据追加到导出文件中. 当全部数据都导出之后,就有 ...
- oracle系列笔记(1)---查询数据
查询数据 1. 查询(select .. form ..) (1)普通查询 select * from employees --代表查询employees表中所有数据 select last_n ...
- EntityFramework Core笔记:查询数据(3)
1. 基本查询 1.1 加载全部数据 using System.Linq; using (var context = new LibingContext()) { var roles = contex ...
- EFCore笔记之查询数据
查询数据 基础查询,Linq100实例: https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b using (var context = ...
- MySQL 5.6学习笔记(查询数据、插入、更新、删除数据)
1. 查询语法 SELECT {*|<字段列表>} [FROM table_references [WHERE where_condition] [GROUP BY {col_name | ...
随机推荐
- 将已有微信小程序转换为多端应用
文档地址 https://nervjs.github.io/taro/
- POJ 2239:Selecting Courses 选课
Selecting Courses Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9380 Accepted: 4177 ...
- MVC MVP MVVM 简述
MVC 通过代理或者通知传递数据. MVP 通过P绑定model和view解耦. MVVM 通过V绑定VM(监听VM属性的变化.方法传递(改变自身被监听属性)) VM绑定model设置自身属性.
- 爬虫(十八):Scrapy框架(五) Scrapy通用爬虫
1. Scrapy通用爬虫 通过Scrapy,我们可以轻松地完成一个站点爬虫的编写.但如果抓取的站点量非常大,比如爬取各大媒体的新闻信息,多个Spider则可能包含很多重复代码. 如果我们将各个站点的 ...
- 使用Spring Data Mongodb的MongoRepository类进行增删改查
Spring Data Mongodb提供一套快捷操作 mongodb的方法,创建Dao,继承MongoRepository,并指定实体类型和主键类型. public interface CmsPag ...
- Linux 目录变化监听 - python代码实现
在python中 文件监控主要有两个库, 一个是pyinotify ( https://github.com/seb-m/pyinotify/wiki ),pyinotify依赖于Linux平台的in ...
- cmake 简易入门
目录结构 root -| |--**.cpp |--CmakeList.txt |--current path |--(执行cmake ../) |-- (执行make的目录) 步骤: 1 编写 Cm ...
- Linux学习打卡20200214
- eclipse上部署到tomcat不能自动部署maven管理的额jar包
- C# 串口编程,扫码枪使用
一.串口通信简介 串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件.一般完成这种功能的电路,我们称为 ...