MySQL数据库从入门到精通学习第8天(数据表的查询)

news2024/11/16 18:11:04

数据表的查询

  • 基本查询语句
  • 单表查询
  • 聚合函数查询
  • 多表连接查询
  • 子查询
  • 合并查询结果
  • 定义表和字段的别名
  • 使用正则表达式查询

基本查询语句

SELECT 语句非常的强大,是最常用的查询语句。他具有一个固定的格式,如下:

SELECT 查询的内容 FROM 数据表名 WHERE >>>(满足的条件) GROUP BY >>>(对结果进行分组) ORDER BY >>> (对结果进行排序)HAVING >>>(满足的第二个条件) LIMIT >>>(限定输出的行数)

  • 这里的查询内容为多列时,使用逗号进行分隔,如下:
    SELECT ID,NAME FROM STUDENT_TEXT;
  • 从多个数据表中查找多个信息时,需要指定每个表中的列,并且数据表也使用逗号进行分隔,如下:
    SELECT STUDENT_TEXT1.ID,STUDENT_TEXT1.NAME,STUDENT_TEXT2_TEXT.ID FROM STUDENT_TEXT1,STUDENT_TEXT2;

提示:当同时含有WHERE、GROUP BY、HAVING和聚集函数时,首先执行WHERE子句查找符合条件的数据,然后对符合条件的数据进行分组,分组之后形成的组使用聚集函数计算每一组的值,最后使用HAVING子句去掉不符合条件的组。

需要注意的是:

  • HAVING 子句中的每一个元素也必须出现在查询的内容中 ;HAVING 和 WHERE 子句都可用来限制条件,但是HAVING的使用必须建立在使用GROUP BY的基础之上 ,因为HAVING子句限制的是组,而不是行;WHERE 子句不能使用聚集函数,但是在HAVING子句中可以使用。

单表查询

单表查询指从一个表中查询需要的数据。

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

  • 查询指定字段
    SELECT 字段名 FROM 表名;

  • 查询指定数据
    SELECT * FROM 表名 WHERE 查询条件; >>> WHERE子句使用时,需要一些比较运算符来确定查询条件。>>> 例如:SELECT * FROM STUDENT_TEXT WHERE NAME="LISI";

  • 带关键字IN的查询
    SELECT * FROM 表名 WHERE 条件 [NOT] IN (元素1,元素2...); >>> 表示判断元素是否在集合内。>>> 例如:SELECT * FROM WHERE ID IN(1,2,3);

  • 带关键字BETWEEN AND的范围查询
    SELECT * FROM 表名 WHERE 条件 [NOT] BETWEEN 取值1 AND 取值2;>>> 查询满足在范围内的条件。>>> 例如:SELECT * FROM WHERE ID BETWEEN 1 AND 5;

  • 带LIKE的字符匹配查询
    SELECT * FROM 表名 WHERE NAME LIKE "%明_"; >>> "%"可以匹配一个或多个字符,"-" 匹配一个字符。>>> 例如: "%明_" 可以匹配***...明*

  • 用IS NULL关键字查询空值
    SELECT * FROM 表名 WHERE 字段名 IS NOT NULL; >>> 查询得字段不为空值>>>例如: SELECT * FROM STUDENT_TEXT WHERE NAME IS NOT NULL;

  • 带AND的多条件查询
    SELECT * FROM 数据名 WHERE 条件1 AND 条件2 [...AND条件表达式n]; >>>条件全满足才能被查出来。

  • 带OR的多条件查询
    SELECT * FROM 数据名 WHERE 条件1 OR 条件2 [...AND条件表达式n]; >>> 只要条件有一个满足就能查出来。

  • 用DISTINCT关键字去除结果中的重复行
    SELECT DISTINCT 字段名 FROM 表名;>>>例如: SELECT DISTINCT NAME FROM STUDENT;表示对NAME字段名重复的行进行合并。

  • 用ORDER BY关键字对查询结果排序
    SELECT * FROM 表名 ORDER BY [ASC | DESC]; >>>DESC(descending order) 表示降序排列,ASC(ascending order)表示升序排列。>>>注意:对排序的列中含有NULL值,如果为升序,NULL放在最前面,如果为降序,NULL放在最后面。

  • 用GROUP BY关键字分组查询
    SELECT * FROM 表名 GROUP BY 字段名1,字段名2...; >>> 按照哪一列来分类,对多个列用逗号进行分隔。

  • 用LIMIT限制查询结果的数量
    SELECT * FROM 数据表名 LIMIT 数量;>>> 例如:SELECT * FORM STUDENT LIMIT 3;表示查询数据的前三条。

聚合函数查询

COUNT()函数:COUNT()函数用于对除“*”以外的任何参数,返回所选择的集合中非NULL值得行的数目;如果参数为“*”则返回集合的所用行,包含NULL值的行。没有WHERE子句的COUNT(*)是经过内部优化的,能够快速地返回表中所有的记录总数。

代码如下:

SELECT COUNT(*) FROM 表名 >>>查询表中所有数据行数和。

结果如下:

在这里插入图片描述

SUM()函数:求表中某个数据类型字段取值的总和。

代码如下:

SELECT SUM(ID) FROM TEXT;

结果如下:

在这里插入图片描述

AVG()函数:求出表中某个数值类型字段取值的平均值。

代码如下:

SELECT AVG(ID) FROM TEXT;

结果如下:

在这里插入图片描述

MAX()函数:求出表中某个数值类型字段取值的最大值。

代码如下:

SELECT MAX(ID) FROM TEXT;

结果如下:

在这里插入图片描述

MIN()函数:求某个数值类型字段取值的最小值。

代码如下:

SELECT MIN(ID) FROM TEXT;

结果如下:

在这里插入图片描述

多表连接查询

多表连接查询指把不同表的记录连接到一起。

  • 内连接查询
    内连接是最普通的连接类型,而且是最匀称的,因为他们要求构成连接的每个表的共有列匹配,不匹配将被排除。内连接包括相等连接和自然连接,最常见的是相等连接,也就是使用等号运算符,根据每个表共有列的值匹配两个表中的行,最后的结果只包含参与连接的表中与指定字段相符的行。

此时数据库中有TEXT 和 TEXT_1 两个数据表:

在这里插入图片描述

代码如下:

SELECT NA,SEX,COURSE,CREATETIME FROM TEXT,TEXT_1 WHERE TEXT.NA = TEXT_1.NA1;

在这里插入图片描述

注意:如果要查询表中相同属性的列名下的内容,两个表中的字段名称不能一样,如果一样(都为NA)会报错(字段列表中的列“NA”不明确

  • 外连接查询
    与内连接不同的是,外连接使用OUTER JOIN关键字将两个表连接起来,外连接生成的结果集不仅包括符合连接条件的行数据,而且包括左表(左外连接时的表)、右表(右外连接时的表)或两边连接表(全连接时的表)中所有的数据行。语法格式如下:SELECT 字段名 FROM 表名1 LEFT|RIGHT JOIN 表名2 ON 表名1.字段名 = 表名2.字段名 2;

左外连接(LEFT JOIN): 指的是将左表中的所有数据分别与右表中的每条数据进行连接组合,返回的结果除内连接的数据外,还包括左表中不符合条件的数据,并在右表的相应列中添加NULL值。代码如下:SELECT NA1,SEX,COURSE FROM TEXT_1 LEFT JOIN TEXT ON TEXT_1.NA1 = TEXT.NA;

插入结果:

在这里插入图片描述

右外连接(RIGHT JOIN):指的是将右表中的所有数据分别与左表中的每条数据进行连接组合,返回的结果除内连接的数据外,还包括右表中不符合条件的数据,并在左表的相应列中添加NULL值。代码如下:SELECT NA,SEX,COURSE FROM TEXT_1 RIGHT JOIN TEXT ON TEXT_1.NA1 = TEXT.NA;

结果如下:

在这里插入图片描述

复合条件连接查询:在连接查询时(通常用于内连接),也可以增加其他的限制条件,通过多个条件的复合查询(使用WHERE条件语句等),可以使查询结果更加准确。

子查询

子查询就是多个SELECT查询的嵌套,在外面一层的查询中使用里面一层查询产生的结果集。子查询和常规的SELECT查询的执行方式一样,必须包含一个字段列表、一个或多个表名字的FROM子句以及可选的WHERE、HAVING、GROUP BY子句,而且也可以使用关键字进行查询,但是他必须由父查询包围。他的执行方式为从最内层查询开始,然后逐步向外扩展,每个查询产生的结果集都被赋给包围它的父查询,接着这个父查询被执行,其结果也被指定给它的父查询。

  • 带IN关键字的子查询
    SELECT * FROM 表名 WHERE 条件 [NOT] IN (SELCET语句);>>> 检测结果集中是否存在某个特定的值,如果检测成功则执行外部的查询。

  • 带比较运算符的子查询
    SELECT * FROM 表名 WHERE 字段名 比较运算符 (SELECT语句);

  • 带EXISTS关键字的子查询
    SELECT * FROM 表名 WHERE EXISTS(SELECT语句);>>>使用EXISTS关键字时,内层查询语句不返回查询的记录,而是返回一个布尔值。如果内层查询语句查询到满足条件的,就返回一个True,此时外层查询执行操作。反之,则为False,此时外层不执行操作或没有查询结果。

  • 带ANY关键字的子查询
    SELCECT * FROM 表名 WHERE 字段名 比较运算符 ANY (SELECT语句);>>>ANY表示满足其中任意一个条件,通常与比较运算符一起使用,只要满足内层查询语句返回的结果中的任意一个,就可以执行外层查询。

  • 带ALL关键字的子查询
    SELCECT * FROM 表名 WHERE 字段名 比较运算符 ALL (SELECT语句);>>>ALL表示满足所有内层查询的返回结果,则执行外层查询。

合并查询结果

合并查询结果时将多个SELECT语句的查询结果合并到一起。使用UNION 和 UNION ALL关键字。

  • UNION关键字
    SELECT语句 UNION SELECT语句;>>>UNION关键字表示将所有的查询结果合并到一起,然后去除相同的记录。
  • UNION ALL关键字
    SELECT语句 UNION ALL SELECT语句;>>>UNION ALL 关键字只是简单的将结果合并到一起。

定义表和字段的别名

  • 表的别名

查询时,可以为表和字段取一个别名,这个别名可以代替其指定的表和字段。为表进行取别名,可以使查询更加的方便,而且可以时查询结果以更加合理的方式显示。通常在表的连接时使用。

SELECT 字段名 FROM 表名1 AS 别名1 LEFT | RIGHT JOIN 表名2 AS 别名2 ON 别名1.字段名 = 别名2.字段名;>>> AS可以使用空格进行代替。

  • 字段的别名

查询时字段名会显示默认情况下定义的列名,同样可以为这个列取别名,方便结果的显示与查询。在使用聚合函数的时候,也可以为其取别名

SELECT 字段名 AS 别名1,聚合函数 AS 别名2 FROM 表名;>>>AS可以使用空格进行代替。

使用正则表达式查询

正则表达式时用某种匹配模式去匹配一类字符串的一个方式。正则表达式的查询能力比通配字符(LIKE的匹配模式)的查询能力更加强大,而且更加灵活。

SELECT * FROM 表名 WHERE 字段名 REGEXP "匹配方式";>>>匹配方式如下:

模式字符含义
^匹配以特定字符或字符串开头的记录
$匹配以特定字符或字符串结尾的记录
.匹配字符串的任意一个字符,包括回车和换行符
[字符集合]匹配“字符集合”中的任意一个字符
[^字符集合]匹配除“字符集合”以外的任意一个字符
S1|S2|S3匹配S1、S2、S3中的任意一个字符串
*匹配多个该符号之前的字符,包括0个或1个
+匹配多个该符号前的字符,包括1个
匹配0个或一个该字符
字符串{N}匹配字符串出现N次
字符串{M,N}匹配字符串出现至少M次,最多N次

提示:正则中*、+匹配默认为贪婪模式,如果使用非贪婪需要在后面加"?"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/605187.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

markdown标注

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

MySQL进阶 -- 存储过程 和 触发器

目录 存储过程介绍存储过程的基本语法变量系统变量用户自定义变量局部变量 if判断 存储过程 介绍 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,可以直接调用这些集合(存储过程),调用存储过程可以简化应用开发人…

系列一、MongoDB简介特点应用场景

一、概述 1.1、官方 翻译:MongoDB是一个文档型数据库,旨在方便应用开发和扩展。 1.2、百度百科 1.3、总结 MongoDB 是一个非关系型文档数据库。 二、特点 面向集合存储,易存储对象类型的数据;支持查询以及动态查询&#xff1b…

在 Python 中实现最小堆

树是一种非线性数据结构,其中元素排列在多个级别。 堆是一种基于树的数据结构。 它是一棵完全二叉树,即每个父节点都有两个子节点。 堆实现不同的算法,对其他结构进行排序,对队列进行优先排序等。 堆有两种类型 - 最大和最小。 …

【计算机组成原理·笔记】总线控制

总线控制 总线上连接多个部件,为了解决: 什么时候由哪个部件发送信息如何给信息传送定时如何防止信息丢失如何避免多个部件同时发送如何规定接受信息的部件 等一些列问题,需要总线控制线进行统一管理,这就是总线控制&#xff0…

必须有公网IP吗?内网穿透如何实现外网访问

很多中小型公司或个人都有将自己内网的服务、应用,如远程桌面、网站、数据库、公司的管理系统、FTP、管家婆、监控系统等等,发布到外网,实现异地访问的需求。但往往面临一个普遍的问题,就是没有公网IP,即没有IP v4的公…

KEYSIGHT是德DSOX4034A 示波器 350 MHz

KEYSIGHT是德DSOX4034A 示波器 350 MHz,是德4000 X 系列拥有一系列引以为傲的配置,包括采用了电容触摸屏技术的 12.1 英寸显示屏、InfiniiScan 区域触摸触发、100 万波形/秒捕获率、MegaZoom IV 智能存储器技术和标配分段存储器。 是德DSO-X4034A 主要特…

scrcpy: 在电脑上使用Android手机

文章目录 1. 目的2. 配置2.0 配置思路2.1 安装 scrcpy 2.02.2 添加 udev 规则2.3 手机设置权限2.4 开启 scrcpy 1. 目的 打算在电脑上使用手机上的 App,如京东读书,或QQ。不用电脑版对应软件的原因是,电脑上需要重新登录,有些软件…

JSP SSM 学生综合测评管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSP SSM 学生综合测评管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主…

零基础快速搭建私人影音媒体平台

目录 1. 前言 2. Jellyfin服务网站搭建 2.1. Jellyfin下载和安装 2.2. Jellyfin网页测试 3.本地网页发布 3.1 cpolar的安装和注册 3.2 Cpolar云端设置 3.3 Cpolar本地设置 4.公网访问测试 5. 结语 转载自cpolar极点云的文章:零基础搭建私人影音媒体平台【…

RabbitMQ集群架构模式

搭建Mirror镜像集群: 4369是erlang的发现端口 5672是rabbitmq的通信端口 15672是rabbitmq的可视化控制台的端口号 25672是erlang底层发送消息和分配消息的底层端口 firewall-cmd --zonepublic --add-port4369/tcp --permanent firewall-cmd --zonepublic --add-port…

Springboot+vue.js高校校园社交个人博客相册网站系统

基于java语言设计并实现了高校社交系统。该系统基于B/S即所谓浏览器/服务器模式,应用Springboot框架,选择MySQL作为后台数据库。系统主要包括用户、个人动态、个人相册、动态类型、留言板、交流论坛等功能模块。近几年来,由于计算机技术的快速…

chatgpt赋能python:Python列表中如何找出前三名成绩

Python列表中如何找出前三名成绩 在数据分析和编程中,Python语言被广泛使用。其中,列表是Python中最常用的数据类型之一。列表可以存储多个值,并且这些值可以是不同的数据类型。Python列表很强大,因为它提供了许多内置函数和方法…

划水2年半,薪资还没新人多,不要太真实...

上个月公司来了许多新面孔,其中一个是个00后,这位兄弟毕业后,在某软件公司干了一年,现在跳槽到我们公司薪资20K,已经超过公司很多老油条了。因为我和他年纪相差不大,所以和他聊得来,才知道&…

Educational Codeforces Round 149 (Rated for Div. 2)(A—D、F)

文章目录 A. Grasshopper on a Line1、问题2、分析3、代码 B. Comparison String1、问题2、分析3、代码 C. Best Binary String1、问题2、分析3、代码 D. Bracket Coloring1、问题2、分析3、代码 E. Playoff Fixing1、问题2、分析3、代码 F. Editorial for Two1、问题2、分析3、…

数据库期末复习(6)基于哈希和B+树的索引查询

免责声明 练习题没有答案 图片都是自己做的 仅供参考 可扩展哈希表和练习 笔记 数据库--- 索引结构 (2)--可扩展哈希表及增删查_旅僧的博客-CSDN博客 练习 首先默认 局部深度都是1 然后进行插入 之后分裂 按照课件上的操作进行。 线性哈希表

插入排序,选择算法与快速排序(c语言,Java语言)

插入排序 原理:从数组的第二个元素开始,将数组中的每一个元素按照(升序或者降序)规则插入到已排好序的数组中以达到排序的目的。 插入排序并不是将元素取出来,插入到合适位置,之后的元素的位置依次加一,而…

在职阿里8年,一个31岁女软件测试工程师的心声

简单的先说一下,坐标杭州,13届本科毕业,算上年前在阿里巴巴的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少) 其中成功的有4家&am…

【STL】stack、queue基本使用和模拟实现

目录 前言 stack 接口介绍 模拟实现 queue 接口介绍 模拟实现 没有迭代器 deque介绍 前言 stack 和 queue 本质上是一种容器配接器,就像我们平时充电时使用的电源适配器,能够将电压转换成设备能够接受的程度。 其通过封装特定容器作为其底层…

我的测试之路:从入坑测试到月薪15k...

“干过保险卖过房,做过销售做过网管”这是我毕业后前两年的真实写照,因为所学网络安全专业不好找工作,毕业之后为了生活只能将就的干着这种门槛低的工作。后来一次同学聚会被同学带下坑后,正式转行软件测试。 刚入坑的两年&#…