Mysql查询数据

1 基本查询语句

MySQL从数据表中查询数据的基本语句为SELECT语句。SELECT语句的基本格式是:

 

 2 单表查询

2.1 查询所有字段

  SELECT * FROM 表名;

 2.2 在SELECT语句中指定所有字段

  SELECT f_id, s_id ,f_name, f_price FROM fruits;

 2.3 查询单个字段

  SELECT 列名FROM 表名;

 2.4 查询多个字段

  SELECT 字段名1,字段名2,…,字段名n FROM 表名;

 2.5 查询指定记录

  SELECT 字段名1,字段名2,…,字段名nFROM 表名WHERE 查询条件

 

2.6 带IN关键字的查询

IN操作符用来查询满足指定范围内的条件的记录,使用IN操作符,将所有检索条件用括号括起来,检索条件之间用逗号分隔开,只要满足条件范围内的一个值即为匹配项。

  SELECT s_id,f_name, f_price FROM fruits   WHERE s_id IN (101,102);SELECT s_id,f_name, f_price FROM fruits   WHERE s_id NOT IN (101,102);

2.7 带BETWEEN AND的范围查询

  SELECT f_name, f_price FROM fruits WHERE f_price BETWEEN 2.00 AND 10.20;

2.8 带LIKE的字符匹配查询

百分号通配符‘%’,匹配任意长度的字符,甚至包括零字符;下划线通配符‘_’,一次只能匹配任意一个字符。

2.9 查询空值

在SELECT语句中使用IS NULL子句,可以查询某字段内容为空记录。

2.10 带AND的多条件查询

  SELECT f_id, f_price, f_name FROM fruits WHERE s_id = '101' AND f_price >=5;

2.11 带OR的多条件查询

  SELECT s_id,f_name, f_price FROM fruits WHERE s_id = 101 OR s_id = 102;

 2.12 查询结果不重复

  SELECT DISTINCT 字段名 FROM 表名;

2.13 对查询结果排序-单列排序

select 字段名 From 表名  order by 字段名;

2.13 对查询结果排序-多列排序

在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。如果第一列数据中所有值都是唯一的,将不再对第二列进行排序。

select 字段名 From 表名  order by 字段名,字段名;

 2.13 对查询结果排序-指定排序方向

默认情况下,查询数据按字母升序进行排序(A~Z),但数据的排序并不仅限于此,还可以使用ORDER BY对查询结果进行降序排序(Z~A)。

  SELECT f_name, f_price FROM fruits ORDER BY f_price DESC;//降序SELECT f_name, f_price FROM fruits ORDER BY f_price ASC;//升序SELECT f_name, f_price FROM fruits ORDER BY f_price DESC,f_price1;//降序//DESC排序方式只应用到直接位于其前面的字段上

 2.14 分组查询

MySQL中使用GROUP BY关键字对数据进行分组,基本语法形式为:

  [GROUP BY 字段] [HAVING <条件表达式>]

字段值为进行分组时所依据的列名称;“HAVING <条件表达式>”指定满足表达式限定条件的结果将被显示。

2.15 创建分组

GROUP BY关键字通常和集合函数一起使用,比如MAX()、MIN()、COUNT()、SUM()、AVG()。

在MySQL中,可以在GROUP BY子句中使用GROUP_CONCAT()函数,将每个分组中各个字段的值显示出来。

SELECT s_id, GROUP_CONCAT(f_name) AS Names FROM fruits GROUP BY s_id;

 

2.16  使用HAVING过滤分组

GROUP BY可以和HAVING一起限定显示记录所需满足的条件,只有满足条件的分组才会被显示。

  SELECT s_id, GROUP_CONCAT(f_name) AS NamesFROM fruitsGROUP BY s_id HAVING COUNT(f_name) > 1;

 

HAVING关键字与WHERE关键字都是用来过滤数据的,两者有什么区别呢?其中重要的一点是,HAVING在数据分组之后进行过滤来选择分组,而WHERE在分组之前来选择记录。另外,WHERE排除的记录不再包括在分组中。

2.17  在GROUP BY子句中使用WITH ROLLUP

使用WITH ROLLUP关键字之后,在所有查询出的分组记录之后增加一条记录,该记录计算查询出的所有记录的总和,即统计记录数量。

 2.18 多字段分组

使用GROUP BY可以对多个字段进行分组,GROUP BY关键字后面跟需要分组的字段,MySQL根据多字段的值来进行层次分组,分组层次从左到右,即先按第1个字段分组,然后在第1个字段值相同的记录中再根据第2个字段的值进行分组,以此类推。

  mysql> SELECT * FROM fruits group by s_id,f_name;

   两个字段是一个组合,是一个分组结果,第一个字段分组完成后,再分组第二个字段,查询出的顺序会发生变化。

2.19 GROUP BY和ORDER BY一起使用

2.20 使用LIMIT限制查询结果的数量

SELECT返回所有匹配的行,有可能是表中所有的行,若仅仅需要返回第一行或者前几行,可使用LIMIT关键字,基本语法格式如下:

  LIMIT [位置偏移量,] 行数

第一个“位置偏移量”参数指示MySQL从哪一行开始显示,是一个可选参数,如果不指定“位置偏移量”,将会从表中的第一条记录开始(第一条记录的位置偏移量是0,第二条记录的位置偏移量是1,以此类推);第二个参数“行数”指示返回的记录条数。

MySQL 8.0中可以使用“LIMIT 4 OFFSET 3”,意思是获取从第5条记录开始后面的3条记录,和“LIMIT 4,3;”返回的结果相同。

3.使用集合函数查询

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

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

● SUM()函数在计算时,忽略列值为NULL的行。

● MAX()函数除了用来找出最大的列值或日期值之外,还可以返回任意列中的最大值,包括返回字符类型的最大值。MIN()函数与MAX()函数类似,不仅适用于查找数值类型,也可应用于字符类型。

3.连接查询

连接是关系数据库模型的主要特点。连接查询是关系数据库中最主要的查询,主要包括内连接、外连接等。通过连接运算符可以实现多个表查询。

3.1 内连接查询

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

3.2 外连接查询

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

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

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

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

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

3.3 复合条件连接查询

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

4 子查询

子查询指一个查询语句嵌套在另一个查询语句内部的查询,子查询中常用的操作符有ANY(SOME)、ALL、IN、EXISTS。子查询可以添加到SELECT、UPDATE和DELETE语句中,而且可以进行多层嵌套。子查询中也可以使用比较运算符,如“<”“<=”“>”“>=”和“!=”等。

4.1 ANY(SOME)

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

4.2 带ALL关键字的子查询

ALL关键字与ANY和SOME不同,使用ALL时需要同时满足所有内层查询的条件。例如,修改前面的例子,用ALL关键字替换ANY

 4.3 带EXISTS关键字的子查询

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

EXISTS关键字可以和条件表达式一起使用。

 

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

4.4 带IN关键字的子查询

IN关键字进行子查询时,内层查询语句仅仅返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较操作。SELECT语句中可以使用NOT IN关键字,其作用与IN正好相反。

 

 

4.5 带比较运算符的子查询 

 子查询时还可以使用其他的比较运算符,如“<”“<=”“=”“>=”和“!=”等。

5  合并查询结果

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

  SELECT column,... FROM table1UNION [ALL]SELECT column,... FROM table2

  先显示完第一个查询再显示第二个查询

 6 为表和字段取别名

6.1 为表取别名

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

  表名 [AS] 表别名

 在为表取别名时,要保证不能与数据库中其他表的名称冲突。

 

 6.2 为字段取别名

在有些情况下,显示的列的名称会很长或者名称不够直观,MySQL可以指定列别名,替换字段或表达式。为字段取别名的基本语法格式为:

  列名 [AS] 列别名

 

 

 7 使用正则表达式查询

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

 字符‘^’匹配以特定字符或者字符串开头的文本。

 

8  MySQL 8.0的新特性1 GROUP BY不再隐式排序

MySQL对GROUP BY字段不再隐式排序。如果确实需要排序,必须加上ORDER BY子句。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ-如何保证消息不丢失

RabbitMQ常用于 异步发送&#xff0c;mysql&#xff0c;redis&#xff0c;es之间的数据同步 &#xff0c;分布式事务&#xff0c;削峰填谷等..... 在微服务中&#xff0c;rabbitmq是我们经常用到的消息中间件。它能够异步的在各个业务之中进行消息的接受和发送&#xff0c;那么…

Python根据Excel表进行文件重命名

一、问题背景 在日常办公过程中&#xff0c;批量重命名是经常使用的操作。之前我们已经进行了初步探索&#xff0c;主要是通过批处理文件、renamer软件或者Python中的pathlib等模块对当前目录下的文件进行批量重命名。 而今天我们要使用的是PythonExcel的方法对指定目录下的文…

Thymeleaf基础教程

系列文章目录 文章目录 系列文章目录一、Thymeleaf 语法规则二、Thymeleaf 语法分为以下 2 类标准表达式语法th 属性2.1 基础语法2.1.1 变量表达式 ${}2.1.2 选择变量表达式 *{}2.1.3 链接表达式 {} 2.1.4 消息表达式 三、常用的 th 标签四、迭代循环 一、Thymeleaf 语法规则 …

C++类和对象引入以及类的介绍使用

文章目录 一、面向过程和面向对象的初步认识二、类的引入2.2 类的引入 三、类的访问限定符及封装3.3 访问限定符3.4 【面试题】C中struct和class的区别3.5 类的两种定义方式 四、封装【面试题】面向对象的三大特性 五、类的作用域六、类的实例化七、类对象模型7.1 类对象的存储…

网络通信实现

【 一 】网络通信实现 【 1 】实现网络通信的四要素 本机的ip地址 子网掩码 网关的IP地址 DNS的IP地址( 域名系统) DNS服务器是指提供域名解析服务的服务器。它负责将域名转换为相应的IP地址&#xff0c;以便计算机可以通过IP地址与其他设备进行通信。 通过使用DNS服务器…

ESP8266采用AT指令连接华为云服务器方法(MQTT固件)

一、前言 本篇文章主要介绍3个内容&#xff1a; &#xff08;1&#xff09;ESP8266-WIFI模块常用的AI指令功能介绍 &#xff08;2&#xff09;ESP8266烧写MQTT固件连接华为云IOT服务器。 &#xff08;3&#xff09;介绍华为云IOT服务器的配置过程。 ESP8266是一款功能强大…

LVGL部件

一.标签部件 1.如何创建标签部件以及设置文本 ![2024-01-28T09:54:08.png][3] void my_lvgl(void) {lv_obj_t *lablelv_label_create(lv_scr_act()); //创建一个标签lv_label_set_text(lable,"hello"); //普通更改文字lv_label_set_text_fmt(lab…

统计学-认识数据

数据 如&#xff1a; 定性数据&#xff1a; 性别&#xff1a;男、女 颜色&#xff1a;红、绿、青、蓝、紫 教育程度&#xff1a;高中、本科、硕士、博士 评价&#xff1a;好评、中评、差评 定量数据&#xff1a; 年份&#xff1a;2019、2018、2017、2016 温度&#xff1a;10、…

专业133总分400+上海交通大学819考研经验分享上交819电子信息与通信工程

今年专业819信号系统与信号处理133&#xff0c;总分400&#xff0c;如愿考上梦中上海交通大学&#xff0c;通过自己将近一年的复习&#xff0c;实现了人生中目前为止最大的逆袭&#xff08;自己本科学校很普通&#xff09;&#xff0c;总结自己的复习经历&#xff0c;希望可以给…

C++ 数论相关题目 扩展欧几里得算法(裴蜀定理)

给定 n 对正整数 ai,bi &#xff0c;对于每对数&#xff0c;求出一组 xi,yi &#xff0c;使其满足 aixibiyigcd(ai,bi) 。 输入格式 第一行包含整数 n 。 接下来 n 行&#xff0c;每行包含两个整数 ai,bi 。 输出格式 输出共 n 行&#xff0c;对于每组 ai,bi &#xff0c;求…

多只动物3D姿态估计与行为识别系统

动物社会行为的量化是动物科学研究的重要步骤。虽然现有的深度学习方法已经实现了对常见动物的精确姿态估计、识别和行为分类&#xff0c;但由于缺乏注释良好的数据集&#xff0c;其应用依然受到挑战。因此该研究展示了一个计算框架&#xff0c;即社会行为图谱&#xff08;SBeA…

MkDocs 部署指南

简介 MkDocs 可以同时编译多个 markdown 文件&#xff0c;形成书籍一样的文件。有多种主题供你选择&#xff0c;很适合项目使用。 MkDocs 是快速&#xff0c;简单和华丽的静态网站生成器&#xff0c;可以构建项目文档。文档源文件在 Markdown 编写&#xff0c;使用单个 YAML …