MySQL8.0 初级学习笔记(六)查询数据

MySQL8.0 初级学习笔记(六)查询数据

查询有多种方法:单表查询,使用集合函数查询,连接查询,子查询,合并查询结果,为表和字段取别名,使用正则表达式查询

一、单表查询

查询所有字段:SELECT * FROM 表名;

查询指定字段:(单个字段):SELECT 列名 FROM 表名;

查询指定字段(多个字段):SELECT 字段名1,字段名2,...,字段名n FROM 表名;

查询指定记录:SELECT 字段名1,字段名2,...,字段名n FROM表名 WHERE 查询条件;

WHERE表达式中运算符的说明如下:

HAVING关键字和WHERE关键字都是用来过滤数据的,区别在于HAVING是在数据分组之后进行过滤分组,而WHERE在分组之前来选择记录,另外WHERE排除的记录不再包括在分组中。

3.在GROUP BY 子句中使用WITH ROLLUP:可以在所有查询出的分组记录之后增加一条记录,该记录计算查询出所有记录的总和,即统计记录数量。

SELECT 字段名,COUNT(*) AS 新字段名(如total) FROM 表名 GROUP BY 字段名 WITH ROLLUP;

4.多字段分组:SELECT * FROM 表名 GROUP BY 字段名1,字段名n;

5.GROUP BY 和ORDER BY 一起使用:ORDER BY用来对查询的记录排序,和GROUP BY一起使用,可以完成对分组的排序。

SELECT 字段名1,集合函数() as 新字段名1 FROM 表名 GROUP BY 字段名1 HAVING 集合函数()条件(例如>1) ORDER BY 新字段名1;

运作逻辑:Group by对数据进行分组,集合函数对数据进行各种条件的数据返回,HAVING子句对分组数据进行过滤,最后ORDER BY 子句排序输出。

6.使用LIMIT限制查询结果的数量:LIMIT[位置偏移量,] 行数

如显示表名查询结果的前6行:SELECT * FROM 表名 LIMIT 6;

注意:MYSQL8.0中 可以使用"LIMIT 5 OFFSET 4",意思是获取从第6调记录开始后面的4条记录,和"LIMIT 5,4" 返回结果相同,其他数据同理推论

二,使用集合函数查询

COUNT()函数:COUNT(*)计算表中总的行数,不管某列是否有数值或者为空值

COUNT(字段名)计算指定列下总的行数,计算时将忽略空值的行。

SELECT COUNT(*) AS 字段名 FROM 表名;

注意:count(*)与count(字段名)两种方式在计算总数的时候对待null 值得方式不同:指定列的值为空的行被count()函数忽略;如果不指定列,而在count()函数中使用星号“*”,则所有记录都不忽略。

SUM()是一个求总和的函数,也可以和GROUP by一起使用,来计算每个分组的总和。

sum()函数在计算时,忽略列值为null的行。

AVG()函数通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。

可以和GROUP BY 一起使用,来计算每个分组的平均值。

SELECT 字段名,AVG(字段名) AS 新字段名 FROM 表名 GROUP BY 字段名;

MAX()函数返回指定列中的最大值

可以和GROUP BY一起使用,求每个分组中的最大值。

SELECT 字段名,MAX(字段名) AS 新字段名 FROM 表名 GROUP BY 字段名;

MAX()函数不仅适用于查找数据类型,也可以应用于字符类型。

MAX()函数除了用来找到最大的列值或日期值之外,还可以返回任意列中的最大值,包括返回字符类型的最大值。在对字符类型数据进行比较时,按照字符的ASCII码值大小进行比较,从a~z,a的ASCII码最小,z的最大。在比较时,先比较第一个字母,如果相等,继续比较下一个字符,一直到两个字符不相等或者字符结束为止。例如'b'与't'比较时,‘t’为最大值;‘bcd’与'bca‘比较时,'bcd'为最大值。

MIN()函数返回查询列中的最小值

可以和GROUP BY一起使用,求每个分组中的最小值。

SELECT 字段名,MIN(字段名) AS 新字段名 FROM 表名 GROUP BY 字段名;

MAX()函数不仅适用于查找数据类型,也可以应用于字符类型。

三、连接查询

1.内连接查询

内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组合成新的记录,也就是说,在内连接查询中,只有满足条件的记录才能出现在结果关系中。

SELECT 表名1.相同字段名,字段名1,字段名n FROM 表名2,表名1 WHERE 表名2.相同字段名 =表名1.相同字段名

SELECT 表名1.相同字段名,字段名1,字段名n FROM 表名2 INNER JOIN 表名1 ON 表名2.相同字段名=表名1.相同字段名;

在这种查询语句中,两个表之间的关系是通过INNER JOIN指定。使用这种语法的时候,连接的条件使用ON子句而不是WHERE,ON 和 WHERE后面指定的条件相同。使用WHERE子句定义连接条件比较简单明了,而INNER JOIN语法是ANSI SQL的标准规范,使用INNER JOIN连接语法能够确保不会忘记连接条件,而且WHERE子句在某些时候会影响查询的性能。

2.外连接查询

外连接查询将查询多个表中的相关联的行,内连接时,返回查询结果集合中仅是符合查询条件的连接条件的行。有时候需要包含没有关联的行中数据,即返回查询结果集合中不仅包含符合连接条件的行,还包括左表(左外连接或左连接)、右表(右外连接或右连接)或两个边接表(全外连接)中的所有数据行。外连接分为左外连接或左连接和右外连接或右连接:

LEFT JOIN(左连接):返回包括左表中的所有记录和右表中连接字段相等的记录。

RIGHT JOIN (右连接):返回包括右表中的所有记录和左表中连接字段相等的记录。

1.左连接的结果包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关的结果行中,右表的所有选择列表列均为空值。

SELECT 表名1.字段名,表名2.字段名 FROM 表名1 LEFT OUTER JOIN 表名2 ON 表名1.相同字段名=表名2.相同字段名;

2.右连接是左连接的反向连接,将放回右表的所有行。如果右表的某行在左表中没有匹配行,左表将返回空值。

SELECT 表名1.字段名,表名2.字段名 FROM 表名1 RIGHT OUTER JOIN 表名2 ON 表名1.相同字段名=表名2.相同字段名;

3.复合条件连接查询

复合条件连接查询是在连接查询的过程中,通过添加过滤条件限制查询的结果,使查询的结果更加准确

四、子查询

带ANY,SOME 关键字的子查询:这两个关键字是同义词,表示满足其中任一条件,他们允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询的任何一个比较条件,就返回一个结果作为外层查询的条件。

SELECT 字段名1 FROM 表名1 WHERE 字段名 (比较符)ANY(SELECT 字段名 FROM 表名2);

带ALL关键字的子查询:和ANY与SOME不同,使用ALL时需要同时满足所有内层查询的条件,例如,修改前面的例子,用ALL关键字替换ANY。ALL关键字接在一个比较操作符的后面,表示与子查询返回的所有值比较为TRUE,则返回TRUE。

SELECT 字段名1 FROM 表名1 WHERE 字段名 (比较符)ALL(SELECT 字段名 FROM 表名2);

带EXISTS关键字的子查询:在EXISTS关键字后面的参数是一个任意的子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS的结果为true,此时外层查询语句将进行查询;如果子查询没有返回任何行,那么EXISTS返回的结果是false,此时外层语句将不进行查询。

SELECT * FROM 表名1 WHERE EXISTS (SELECT 字段名 FROM 表名2 WHERE 字段名 = X);

EXISTS和NOT EXISTS的结果只取决于是否会返回行,而不取决于这些行的内容,所以这个子查询输入列表通常是无关紧要的。

带IN关键字的子查询:IN关键字进行子查询时,内层查询语句仅仅返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较操作。例如:

SELECT 字段名1 FROM 表名1 WHERE 字段名2 IN (SELECT 字段名2 FROM 表名2 WHERE 字段名3条件);

带比较运算符的子查询:带ANY、ALL关键字的子查询时使用了“>"比较运算符,子查询时还可以使用其他的比较运算符,如”="和“!=”等。

五、合并查询结果

利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同。各个SELECT语句之间使用UNION或UNION ALL关键字分隔。UNION不使用关键字ALL,执行的时候删除重复的记录,所有返回的行都是唯一的;使用关键字ALL的作用是不删除重复行也不对结果进行自动排序

SELECT字段名1,字段名n FROM 表名1 UNION[ALL] SELECT 字段名1,字段名n FROM 表名2

六、为表和字段取别名

为表取别名:当表名字很长或者执行一些特殊查询时,为了方便操作或者需要多次使用相同的表时,可以为表指定别名,用这个别名代替原来的名称。为表取别名的基本语法为:

表名 [AS] 表别名

“表名”为数据库中储存的数据表的名称,“表别名”为查询时指定的表的新名称,AS关键字为可选参数。

为字段取别名:在使用SELECT语句显示查询结果时,MYSQL会显示每个SELECT后面指定的输出列,在有些情况下,显示的列的名称会很长或者名称不够直观,MYSQL可以指定列别名,替换字段或者表达式。语法如下:

列名[AS] 列别名

“列名”为表中字段定义的名称,“列别名”为字段新的名称,AS关键字为可选参数。

七、使用正则表达式查询

正则表达式通常被用来检索或替换那些符合某个模式的文本内容,根据指定的匹配模式匹配文本中符合要求的特殊字符串。比如:从一个文本文件中提取电话号码,查找一篇文章中重复的单词或者替换用户输入的某些敏感词语等,这些地方都可以使用正则表达式。正则表达式强大而且灵活,可以应用于非常复杂的查询。

MYSQL中使用REGEXP关键字指定正则表达式的字符匹配模式

注意:LIKE运算符也可以匹配指定的字符串,但是和REGEXP正则表达式不同,LIKE匹配的字符串如果在文本中间出现,则找不到它,相应的行也不会返回。REGEXP在文本内进行匹配,如果被匹配的字符串在文本中出现,REGEXP将会找到它,相应的行也会被返回。

6.匹配指定字符中的任意一个:放括号”[]“指定一个字符集合,只匹配其中任何一个字符,即为所查找的文本。方括号还可以指定数值集合。

SELECT * FROM 表名 WHERE 字段名 REGEXP ’[789]';(这里的数字代表的是该字段中包含了7,8,或9的记录,也可以用[7-9]来表示,意在指定集合区间。

7.匹配指定字符以外的字符:“[^字符集合]”匹配不在指定集合中的任何字符。

SELECT * FROM 表名 WHERE 字段名 REGEXP '[^a-e1-9]';(这里面的数据表示包含a~e和数字1~9以外的记录)

8.使用{n,}或者{n,m}来指定字符串连续出现的次数

”字符串{n,}"表示至少匹配n次前面的字符;“字符串{n,m}”表示匹配前面的字符串不少于n次,不多于m次。例如,a{8,}就表示字母a连续出现至少8次,也可以大于8次;a{3,7}表示字母a连续出现最少3次,最多不能超过7次。

SELECT * FROM 表名 WHERE 字段名 REGEXP' x{3,}'; (表示查询该字段值出现字母x至少3次的记录)

MySQL8.0 初级学习笔记(六)查询数据相关教程

mysql查询数据为0的所有字段6_MySQL8.0 初级学习笔记(六)查询数据相关推荐

  1. 大数据HiveSQL学习笔记三-查询基础语法以及常用函数

    大数据HiveSQL学习笔记三-查询基础语法以及常用函数 一.基础语法 1.SELECT -列名- FROM -表名- WHERE -筛选条件- 如:需要根据城市,性别找出匹配的10个用户 user_ ...

  2. CCC3.0学习笔记_证书数据

    CCC3.0学习笔记_证书数据 系列文章目录 文章目录 系列文章目录 前言 1. [A] - SE Root CA Certificate 2. [B] - SE Root Certificate 3 ...

  3. oracle查询一列汇总,【学习笔记】Oracle数据筛选 查找oracle所有表中的特定列中的某些数据...

    天萃荷净 开发DBA反映,根据需求需要查找Oracle数据库中所有表中特定的列中指定的关键词的数据,和数据内容和数量 找出数据库中所有表表中REMARK列中含有WN.wind.wlr中表名和数量 de ...

  4. vs2010 学习Silverlight学习笔记(11):数据与通信之WebClient

    概要: 基础知识终于学完了,我今天又从第一篇看到第十篇,发现明白了一些东西,还有忘记了部分东西.呵呵,咱不能猴子掰玉米,学了新的忘记旧的.要经常去复习,去用.这一篇是数据通信部分的第一篇,有些东西没接 ...

  5. HALCON 21.11:深度学习笔记---Data(数据)(3)

    HALCON 21.11:深度学习笔记---Data(数据)(3) HALCON 21.11.0.0中,实现了深度学习方法.其中,关于术语"数据"的介绍如下: 术语"数据 ...

  6. oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...

    天萃荷净 oracle之数据导入,汇总开发DBA在向表中导入大量数据的案例,如:单线程向数据库中插入数据,多线程向数据表中插入数据,使用sql loader数据表中导入数据案例 1.Oracle数据库 ...

  7. 【学习笔记】大数据技术之Scala(下)

    [学习笔记]大数据技术之Scala(上) 大数据技术之Scala 第 6 章 面向对象 6.1 Scala 包 6.1.1 包的命名 6.1.2 包说明(包语句) 6.1.3 包对象 6.1.4 导包 ...

  8. Task 06 数据增强;模型微调;目标检测基础 学习笔记

    Task 06 数据增强:模型微调:目标检测基础 学习笔记 数据增强 图像增广 在5.6节(深度卷积神经网络)里我们提到过,大规模数据集是成功应用深度神经网络的前提.图像增广(image augmen ...

  9. Vue学习笔记入门篇——数据及DOM

    本文为转载,原文:Vue学习笔记入门篇--数据及DOM 数据 data 类型 Object | Function 详细 Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter ...

最新文章

  1. delphi dbgrideh 遍历每一个单元格_利用财务函数制作贷款计算器,让你了解还款的每一个细节...
  2. 2020 云原生 7 大趋势预测
  3. vector中的圆括号和花括号
  4. 区别和联系_动机与主题的区别与联系
  5. 读书笔记--Head First PHPMySql 目录
  6. python面向对象三大特性6大原则_【Python学习笔记】面向对象三大特性
  7. c语言如何求一个数学表达式的值,浅谈C语言中表达式的求值
  8. Python学习(三十七)—— 模板语言之自定义filter和中间件
  9. 5、最长回文子串(python)
  10. APP被苹果App Store拒绝的79个原因【转】
  11. MNIST数据集下载与保存为图片格式
  12. 交通灯matlab程序,毕业论文设计(交通灯).doc
  13. 高通骁龙845的android手机有哪些,骁龙845手机买什么好 目前6款最值得买的骁龙845手机推荐...
  14. NFS 服务端配置流程
  15. 2021Java春招面试:看完这篇文终于搞明白了
  16. 同个网络计算机之间怎么共享,在局域网环境下的多台电脑之间如何实现文件共享需求呢?...
  17. 外部web端访问微信小程序云数据库的几种方法
  18. Java类型转换(自动类型转换+强制类型转换)
  19. win98系统只能进安全模式的解决方法
  20. netbeans运行问题解决

热门文章

  1. python语言的注释语句引导符_Python 为什么用 # 号作注释符?
  2. open函数返回-1_4.6 linux的系统调用执行探究(1)
  3. 【Python基础知识-pycharm版】第一节-基础
  4. Java集合Set,List和Map等
  5. Hive的数据加载与导出
  6. 文本分类实战技巧(tricks)汇总
  7. 最新天猫Java3轮面试题目:虚拟机+并发锁+Sql防注入+Zookeeper
  8. 刚参加完阿里Java P6面试归来,6点面试经验总结!(含必考题答案)
  9. 图谱实战 | 斯坦福黄柯鑫:图机器学习在生物图上的应用
  10. 【HTML/CSS】单位小结