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

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. Python 加载mnist、cifar数据

    import tensorflow.examples.tutorials.mnist.input_data mnist = input_data.read_data_sets("MNIST_ ...

  2. text字体样式(多行结尾省略,彩色渐变字体)

    text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; ...

  3. 目标检测评价标准(mAP, 精准度(Precision), 召回率(Recall), 准确率(Accuracy),交除并(IoU))

    1. TP , FP , TN , FN定义 TP(True Positive)是正样本预测为正样本的数量,即与Ground truth区域的IoU>=threshold的预测框 FP(Fals ...

  4. Discuz中常用的编辑器代码

    .[ b]文字:在文字的位置可以任意加入您需要的字符,显示为粗体效果. .[ i]文字:在文字的位置可以任意加入您需要的字符,显示为斜体效果. .[ u]文字:在文字的位置可以任意加入您需要的字符,显 ...

  5. ImportError: dynamic module does not define init function (initcaffe)

    https://github.com/BVLC/caffe/issues/2770 $ python2 -c "import caffe" Traceback (most rece ...

  6. 使用H5搭建webapp主页面

    使用H5搭建webapp主页面 前言: 在一个h5和微信小程序火热的时代,作为安卓程序员也得涉略一下h5了,不然就要落后了,据说在简历上可以加分哦,如果没有html和css和js基础的朋友,可以自行先 ...

  7. js去除热点的虚线框

    1.一个页面有多张图片,图片的链接为热点绘制,在ie中点击会出现虚线框. <script type="text/javascript"> window.onload = ...

  8. pycharm和python安装

    1.pycharm安装:https://www.cnblogs.com/dcpeng/p/9031405.html 2,python安装:https://www.liaoxuefeng.com/wik ...

  9. python数据拼接: pd.concat

    1.concat concat函数是在pandas底下的方法,可以将数据根据不同的轴作简单的融合 pd.concat(objs, axis=0, join='outer', join_axes=Non ...

  10. 连接数据库方法2-DBCP

    DBCP(连接池): 解决对数据库建立以及关闭连接时消耗大量资源的解决方案. 程序创建和关闭对数据库连接时会消耗大量的资源,连接池技术帮我们 在程序运行的开始时就预先创建大量的连接,这些连接组成一个池 ...