数据库管理系统的一个最重要的功能就是数据查询,数据查询不应只是简单的查询数据库中存储的数据,还应该是根据需要对数据进行筛选,以及确定数据以什么样的格式显示。本篇笔记主要介绍单表查询,子查询,连接查询。

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笔记(二)——查询数据的更多相关文章

  1. Mysql 笔记二

    Mysql 笔记二 Mysql 笔记二 Table of Contents 1. 前言 2. Master Thread 工作方式 2.1. 主循环(loop) 2.2. 后台循(backgroup ...

  2. MySql笔记(二)

    目录 MySQL笔记(二) 一幅画,一次瞬间的回眸,就在那次画展上,那个眼神,温柔的流转,还是那干净的皮鞋,一尘不染,俊朗的眉宇性感的唇,悄悄走近,牵手一段浪漫 MySQL笔记(二) 13.条件查询 ...

  3. mysql笔记03 查询性能优化

    查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减 ...

  4. PostgreSQL自学笔记:8 查询数据

    8 查询数据 8.1 基本查询语句 select语句的基本格式是: select {* | 字段1[,字段2,...]} [ from 表1,表2... [where 表达式] [group by & ...

  5. MySql数据库,查询数据导出时会出现重复的记录(数据越多越明显)

    在查询数据时,数据量多的时候,我们会使用分页功能. 每页显示多少数据. 这种情况下,一半看不出什么问题. 而导出数据时,有时就是通过分页的方法,逐步讲数据追加到导出文件中. 当全部数据都导出之后,就有 ...

  6. oracle系列笔记(1)---查询数据

    查询数据 1. 查询(select .. form ..)    (1)普通查询 select * from employees --代表查询employees表中所有数据 select last_n ...

  7. EntityFramework Core笔记:查询数据(3)

    1. 基本查询 1.1 加载全部数据 using System.Linq; using (var context = new LibingContext()) { var roles = contex ...

  8. EFCore笔记之查询数据

    查询数据 基础查询,Linq100实例: https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b using (var context = ...

  9. MySQL 5.6学习笔记(查询数据、插入、更新、删除数据)

    1. 查询语法 SELECT {*|<字段列表>} [FROM table_references [WHERE where_condition] [GROUP BY {col_name | ...

随机推荐

  1. redis十-对快照模式分析

    复制自:http://www.cnblogs.com/huangxincheng/p/5010795.html 一:快照模式 或许在用Redis之初的时候,就听说过redis有两种持久化模式,第一种是 ...

  2. Linux命令笔记一

    #查看文件大小[root@elegant-codes-3 py]# ls -lh total 1.1M -rw-r--r-- 1 root root 5.0K Feb 21 08:18 Crawl_W ...

  3. DRF教程10-关系字段

    https://www.django-rest-framework.org/api-guide/relations/ 在编程中核心的就是数据结构. 关系字段用来表示model之间的关系,比如外键,m2 ...

  4. Windows 2000 栈溢出 利用异常

    当在一个函数(test)里面自定义了异常处理,如下: 那么在运行时,它会把自定义的异常处理函数MyExceptionhandler()的地址放入栈中(PUSH 004013CC) 然后把fs:[0]的 ...

  5. P 1017

    转跳点:

  6. UVA - 10886 Standard Deviation (标准差)(数论)

    题意:下面是一个随机数发生器.输入seed的初始值,你的任务是求出它得到的前n个随机数标准差,保留小数点后5位(1<=n<=10000000,0<=seed<264). 分析: ...

  7. eclipse的重要快捷键

    1.快速修正:ctrl + 1 2.单词补全:alt + / 3.查看轮廓:ctrl + o 4.打开eclipse中工作区的资源: ctrl + shift + r 它可以打开当前eclipse的工 ...

  8. comparable and comparator 比较

      转:http://www.yingjiesheng.com/job-002-393-132.html 一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Com ...

  9. C语言编程实现SYN-Flood(Dos)攻击

    ## 实验环境为了方便,直接在win10 VS2013Ultimate实现(攻击机),靶机为同一局域网的另外一台主机或外网服务器.   ## 实验依赖基于WinPcap实现,需要安装WinPcap4. ...

  10. 根据M3U8地址下载视频

     下面展示的是通过M3U8地址,把这个地址转为一个视频文件:只是一个基本案例,当然,有些下载的M3U8文件里面格式是不一样的,还有的是加过密的,道理都是一个道理. import java.io.Buf ...