MySQL数据库05——数据的查询(SELECT)

news2025/1/18 2:01:17

SQL强大的在于它的查询,查询是最重要的操作之一。


查询最基础的语法

查看student表里面全部内容:

SELECT  *  FROM    student

 


整体语法格式

主要子句的语法格式归纳如下:

 SELECT     [DISTINCT | ALL] select_list

FROM       table_source

[WHERE     search_condition ]

 [GROUP BY  group_by_expression ]   

[HAVING     search_condition ]

[ORDER BY  order_expression [ ASC | DESC ] ]    

SELECT子句:必选子句。可选关键字DISTINCT用于去除查询结果集中的重复值所在的记录;关键字ALL用于返回查询结果集中的全部记录,它是默认的关键字,即当没有任何关键字时返回全部记录。select_list 为星号(*),或者用逗号分隔的字段名列表,或者引用字段名的表达式,或者其他表达式(常量或函数)。该子句决定了结果集中应该有什么字段。

FROM子句:必选子句。其中table_source可以是一个基本表名称,或者一个视图名称,或者为用逗号分隔的基本表名称列表,或者视图名列表,或者基本表名和视图名混合列表。该子句决定了要从哪个(哪些)数据源查询数据。

WHERE子句:可选子句。其中search_condition 为条件表达式。该子句用于指定查询条件,DBMS将满足条件的行显示出来(或者添加到结果集中)。

GROUP BY子句:可选子句。其中group_by_expression为一个字段名,或者用逗号分隔的字段名列表。该子句用于按group_by_expression分组(分类)查询到的数据。

ORDER BY子句:可选子句。该子句用于按order_expression排序查询结果。如果其后有ASC(默认值)则,按升序排序结果;如果其后有DESC,则按降序排序结果。如果没有该子句,查询结果将以添加记录时的顺序显示。

执行顺序

假设SELECT语句带有所有的子句,则其执行顺序为:

(1)FROM子句

(2)WHERE子句

(3)GROUP BY子句

(4)HAVING子句

(5)SELECT子句

(6)ORDER BY子句

来看一下它们的基本工作原理。SELECT语句的各子句中FROM子句是首先被执行的,通过FROM子句首先获得一个虚拟表,然后通过WHERE子句从刚才的虚拟表中获取满足条件的记录,生成新的虚拟表。将新虚拟表中的记录通过GROUP BY子句分组后得到更新的虚拟表,而后HAVING子句在最新的虚拟表中筛选出满足条件的记录组成另一个虚拟表。从上一步得到的虚拟表中,SELECT子句根据select_list,将指定的列提取出来组成更新的虚拟表,最后ORDER BY子句对其进行排序得出最终的虚拟表。通常,人们将最终的虚拟表称为查询结果集。


查询用法

查一列

查询一列,比如院线这一列:

SELECT  institute  FROM   student;

 查了后去重,可以看到有多少类,类似python里面的pandas库的df.uniques()

SELECT   DISTINCT institute  FROM   student;

 查多字段

SELECT  name,sex,origin  FROM   student;

 

查现有数据计算新数据

根据学生的id和他们的课程,计算他们每一节课的总共成绩(70%的考试和30%的平时)

SELECT  s_id,c_id,result1*0.7+result2*0.3  FROM   score;

查询后重新命名

SELECT  s_id,c_id,result1*0.7+result2*0.3 AS 总成绩 FROM   score;
SELECT  name AS 姓名,sex AS 性别,origin AS 来源地  FROM   student;

     

 

查询结果保存为新表

CREATE TABLE totalscore AS SELECT  s_id AS 学号,c_id AS 课号,result1*0.7+result2*0.3 AS 总成绩 FROM  score;
SELECT  *  FROM  totalscore ;

 连接字段

可以将字符串连接起来,然后在一列里面显示。

示例将姓名和地区连接,并且地区加上括号。

SELECT  CONCAT(name,'(',origin,')') AS 姓名和地区 FROM student

排序数据

使用ORDER BY 来安排

SELECT   ID AS 学号, name AS 姓名, origin AS 来源地, birthday AS 出生日期  
FROM   student  
ORDER BY  birthday; 

 还可以用origin排序,而且不用显示它:

SELECT  name AS 姓名, birthday AS 出生日期  FROM  student ORDER BY  origin 

 

设置排序方向

ASC是升序,DESC是降序。默认升序

从course表中,查询所有内容。要求将查询结果按照学分降序排序。

SELECT  * FROM  course ORDER BY  credit  DESC;

 

多字段排序

从Course表中,查询所有内容。要求将查询结果按照学分降序排序,当学分相同时按照课号升序排序。

SELECT  * FROM  course  ORDER BY   credit DESC, ID;

 

按字段位置排序

在实际应用中,有时也需要按字段位置排序。因为,SELECT关键字后并非都是字段名,也可能是表达式。如果希望按表达式的值排序,而又没有给表达式取别名,则可以按字段位置排序表达式。

TIMESTAMPDIFF(YEAR, birthday, CURDATE())的作用是返回“出生日期”字段值和当前系统时间的年份差值。CURDATE函数的返回值是当前系统时间。TIMESTAMPDIFF函数和CURDATE函数均为MySQL的函数。

SELECT  ID AS 学号, name AS 姓名, TIMESTAMPDIFF(YEAR, birthday, CURDATE())   
FROM     student
ORDER BY  3  DESC;

 上面的语句中,因为表达式TIMESTAMPDIFF(YEAR, birthday, CURDATE())在字段名列表中的位置是3,所以ORDER BY子句中的3 DESC,表示了使用表达式TIMESTAMPDIFF(YEAR, birthday, CURDATE())的值降序排序记录。

其实,本例除了使用位置排序以外,在ORDER BY子句后可以直接放变量表达式,重命名的也行。接放置表

SELECT   ID AS 学号, name AS 姓名, TIMESTAMPDIFF(YEAR, birthday, CURDATE())   AS 年龄
FROM       student
ORDER BY  年龄  DESC

运行结果同上。

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

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

相关文章

MyBatis案例 | 使用映射配置文件实现CRUD操作——添加数据

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址:🔥JavaWeb Java入门篇: 🔥Java基础学习篇 Java进阶学习篇&…

【GPLT 二阶题目集】L2-044 大众情人

人与人之间总有一点距离感。我们假定两个人之间的亲密程度跟他们之间的距离感成反比,并且距离感是单向的。例如小蓝对小红患了单相思,从小蓝的眼中看去,他和小红之间的距离为 1,只差一层窗户纸;但在小红的眼里&#xf…

肿瘤生信科研:绘制突变景观图(mutation landscape)

肿瘤生信科研经常会画突变的景观图,或者叫瀑布图,用 maftools 包可以实现简单的 Landscape 图,但是当图形比较复杂时,maftools 就不能胜任了,可以用 ComplexHeatmap 包来画。实际上,Landscape 图是热图的一…

ubuntu clion从0开始搭建一个风格转换ONNX推理网络 opencv cuda::dnn::net

系统搭建 系统搭建 OpenCV的安装 cmake sudo apt-get install cmake其他环境以来 sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev 不安装会报这个错误 OpenCV(4.6.0) /hom…

LeetCode刷题系列 -- 48. 旋转图像

给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例 1:输入:matrix [[1,2,3],[4,5,6],[7,8,9]]输出&#…

【MySQL Shell】8.8 InnoDB ClusterSet 的紧急故障切换

紧急故障切换会将选定的副本集群放入 InnoDB ClusterSet 部署的主 InnoDB 集群中。当当前主集群不工作或无法联系时,可以使用此过程。在紧急故障切换过程中,无法确保数据一致性,因此为了安全起见,在故障切换过程中将原始主集群标记…

openHarmony的UI开发

自适应布局 拉伸能力 ​ Blank在容器主轴方向上,空白填充组件具有自动填充容器空余部分的能力。仅当父组件为Row/Column时生效,即是线性布局。这样便可以在两个固定宽度或高度的组件中间添加一个Blank(),将剩余空间占满,从而实现…

通过python 调用OpenAI api_key提交问题解答

通过python 调用OpenAI api_key提交问题解答✨可以通过网页版的jupyter notebook调用,也可以通过spyder窗口等IDE窗口. 🌼通过python 调用OpenAI api_key接口,可以避免国内网页不能访问的问题。前提是需要自己已经注册了OpenAI帐号&#xff…

linux中crontab定时任务导致磁盘满和云监控未报警的的坑

一个后台开发者,兼职运维工作中,配置linux中crontab定时任务,导致磁盘满和云监控未报警的问题的坑。 1.磁盘满 使用命令 df -h2.问题排查 2.1排查日志 命令 cat /var/log/messages日志文件的默认路径是:/var/log 下面是几个…

外贸常用工具(建议顶置收藏)

领英精灵 推荐理由:可批量群发消息并单独显示,相当于20人的发送效率。 做外贸的人一定会在Linkedin平台开发客户,但Linkedin平台没有提供群发消息的功能,如果要快速发消息的话,只能一个一个发,这种发送效…

使用Lame库实现wav、pcm转mp3

文章目录 前言 一、Lame库是什么? 二、使用步骤 0.创建native项目 1.下载Lame库 2.pcm转MP3 3.wav转MP3 4、native方法如下 三、注意 总结 前言 因为使用android录音后生成的文件是wav或者pcm格式,项目要求最后的文件需要是mp3格式,于…

tomcat10部署报错WebStatFilter cannot be cast to jakarta.servlet.Filter

异常信息09-Feb-2023 23:08:49.946 严重 [main] org.apache.catalina.core.StandardContext.filterStart 启动过滤器异常[DruidWebStatFilter]java.lang.ClassCastException: com.alibaba.druid.support.http.WebStatFilter cannot be cast to jakarta.servlet.Filterat org.ap…

上科大最新工作!实时面捕天花板,微表情像素级一致,AI让你告别手Key|SIGGRAPH Asia 2022

驱动一个数字人往往被拆分为追踪 (Tracking) 与重定向 (Retargeting) 两个环节。 追踪由专业的面部捕捉设备及其辅助算法完成,负责记录演员的面部动作信息,重定向则是将捕捉到的动作信息迁移到新的角色。 在传统的流程中,这两个环节往往是分…

全价值链赋能,数字化助力营销价值全力释放 | 爱分析报告

报告编委 张扬 爱分析联合创始人&首席分析师 文鸿伟 爱分析高级分析师 王鹏 爱分析分析师 外部专家(按姓氏拼音排序) 黄洵 客易达 联合创始人 毛健 云徙科技 副总裁 & COO 特别鸣谢(按拼音排序) 报告摘要 在…

SpringSecurity前后端分离(一篇就够了)

SpringSecurity前后端分离 从上至下操作,直接上手SpringSecurity 文章目录SpringSecurity前后端分离1、项目环境maven依赖数据库表2、自定义UserService接口3、屏蔽Spring Security默认重定向登录页面以实现前后端分离功能1、实现登录成功/失败、登出处理逻辑1、表…

鉴源论坛 ·观擎丨民机机载软件的开发与验证

作者 | 蔡喁 上海控安可信软件创新研究院副院长 版块 | 鉴源论坛 观擎 01 机载软件过程保证的目的和背景 民机机载软件研制过程一直是行业内公认的要求最为严苛、开发验证难度最大的软件开发实例之一。由于其高安全以及严格的政府监管特性,使得传统其他领域的软件…

1. 用Qt开发的十大理由

用Qt的十大理由 原因最主要的是很多大公司都在用,有钱景。 先来看看各大公司的评价: 奔驰:们用 Qt 开发了绝大部分的UI体验和软件,包括屏幕动画,屏幕间的过渡和小组件。 FORMLABS:凭借Qt的快速迭代&…

记录一下slf4j2打印一直不成功

整理一个之前的老项目问题,发现日志一直打印不出来,本地启动发现了第一个问题日志如下:此处可发现,jar包冲突问题,去掉冲突的jar包即可,此处不做过多赘述。然后发现了重新启动项目,发现jar包冲突…

工业废水的种类及其处理工艺简析

随着工业的迅速发展,工业废水的种类和数量随之增加,对水体的污染也日趋严重,威胁人类的健康和正常生活。所以工业废水的处理对于环保至关重要。 保护生态环境、更好地做好工业废水的处理,了解工业废水及其种类与处理非常必要。 工…

国内chatgpt 在VRAR上的应用场景

人工智能不鸣则已,一鸣惊人! 近日OpenAI发布了聊天AI ChatGPT,短短几天,其用户量直冲百万级,甚至服务器一度被注册用户挤爆了。 这种被网友惊叹“超越谷歌搜索”的神器究竟是怎么做到的? ChatGPT 简而言之:ChatGPT是一…