【MySQL】数据查询——DQL基本数据库查询

目录

  • 查询
  • 语法
    • 1. 查询表中所有的数据行和列,采用“*”符号
    • 2. 查询表中指定列的数据。
    • 3. 在查询中使用别名,使用“AS”关键字。
    • 4. 在查询中使用常量列:如果需要将一些常量的默认信息添加到输出结果中,以方便统计或计算。可以使用常量列
    • 5. DISTINCT关键字的使用:去掉SELECT查询返回的记录结果中重复的记录(所有返回列的值都相同),只返回一条
  • WHERE条件
  • NULL空值条件查询
    • 语法
  • BETWEEN AND范围查询
    • 语法
  • LIKE模糊查询
  • 使用IN进行范围查询
    • 语法
  • 排序
  • 分页
  • 分组查询
  • 子查询
    • 语法
    • 案例
    • IN子查询
      • 语法
      • SQL示例
    • 综合案例
    • EXISTS 子查询
      • 语法
      • SQL示例

查询

在这里插入图片描述

  1. 查询产生一个虚拟表。
  2. 看到的是表形式显示的结果,但结果并不真正存储。
  3. 每次执行查询只是从数据表中提取数据,并按照表格的形式显示出来。

语法

SELECT   [ALL | DISTINCT] 
{  * |  table.* | [ table.field1 [ as  alias1] [, table.field2 [as  alias2]][, …]] }
FROM  table_name  [ as  table_ alias  ][ left|out|inner  join  table_name2 ]    #多表连接查询[ WHERE  … ]   	#指定结果需满足的条件[ GROUP BY …]	#指定结果按照哪几个字段来分组[ HAVING …]	#过滤分组的记录必须满足的次要条件[ ORDER BY… ]	#指定查询记录按一个或者多个条件排序[ LIMIT  {   [ offset,] row_count    |   row_count OFFSET offset   }] ;  #分页查询
  1. 括号代表可选的;
  2. { } 括号代表必须的;
  3. #MySQL语句中的注释符,也可以用 /**/

1. 查询表中所有的数据行和列,采用“*”符号

SELECT * FROM 表名;

SELECT   *   FROM student;

2. 查询表中指定列的数据。

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

SELECT  studentno, studentname, phone FROM student;

3. 在查询中使用别名,使用“AS”关键字。

  • 可给数据列取一个新别名
  • 可给表取一个新别名
  • 可把经计算或总结的结果用另外一个新名称来代替

SELECT field1 [ AS alias1] [,field2 [AS alias2]] […,fieldn [AS aliasn]]
FROM table_name [ AS table_ alias ];

SELECT   studentno   AS “学号”   FROM  student;
SELECT   s.studentno   FROM   student AS  s;
SELECT CONCAT("S",studentno) FROM student;

4. 在查询中使用常量列:如果需要将一些常量的默认信息添加到输出结果中,以方便统计或计算。可以使用常量列

SELECT  studentno AS “学号”, studentname AS “姓名”,phone AS “手机号”,address AS “家庭住址”,‘郑州’ AS “市区”FROM student;

5. DISTINCT关键字的使用:去掉SELECT查询返回的记录结果中重复的记录(所有返回列的值都相同),只返回一条

SELECT DISTINCT field1 [ AS alias1] [,field2 [AS alias2]] […,fieldn [AS aliasn]] FROM table_name [ AS table_ alias ];

#查询学生表中所包含的年级IDSELECT   DISTINCT  gradeid  FROM  student;

WHERE条件

  • WHERE条件:用于检索数据表中符合条件的记录
  • 搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假
  • 搜索条件的组成
    • 逻辑操作符
      在这里插入图片描述

    • 比较操作符
      在这里插入图片描述数值数据类型的记录之间才能进行算术运算
      相同数据类型的数据之间才能进行比较

NULL空值条件查询

  • NULL代表“无值”
  • 区别于零值0和空符串“”
  • 只能出现在定义允许为NULL的字段
  • 须使用 IS NULL 或 IS NOT NULL 比较操作符去比较

语法

SELECT 字段1,字段2 ,…FROM 表名 WHERE 字段x IS NULL

BETWEEN AND范围查询

  • BETWEEN AND范围查询:根据一个范围值来检索
  • 等同于 >= 和 <= 联合使用

语法

SELECT 字段1,字段2 ,…FROM 表名 WHERE 字段x BETWEEN 值1 AND 值2

#查询课程表中课时在110和120之间的所有记录SELECT * FROM subject WHERE classhour BETWEEN  110 AND 120;
#等同于:SELECT * FROM subject WHERE classhour >= 110 AND classhour <=120;

LIKE模糊查询

  • 在WHERE子句中,使用LIKE关键字进行模糊查询
  • 与“%”一起使用,表示匹配0或任意多个字符
  • 与“_”一起使用,表示匹配单个字符
#查询包含“数学”的所有课程
SELECT   *  FROM subject WHERE SubjectName  LIKE  "%数学%";
#查询所有姓名为“李**”三个字的学生信息
SELECT  StudentNo,StudentName FROM student  
WHERE StudentName LIKE "李__";

使用IN进行范围查询

  • 在WHERE子句中使用IN进行范围查询
  • 查询的字段x的值,至少与括号中的一个值相同
  • 多个值之间用英文逗号隔开

语法

SELECT 字段1,字段2 ,…FROM 表名 WHERE 字段x IN ( 值1,值2,值3…值n)

SELECT  *  FROM  subject  where    ClassHour = 100  OR ClassHour =110 OR ClassHour  = 120;  #普通处理方式
SELECT  *  FROM  subject  where ClassHour  IN ( 100, 110,120 );
#使用IN进行查询方式,更为简洁,效率更高

排序

  • ORDER BY子句:实现按一定顺序显示查询结果。
  • 排序可以是升序(ASC)或者降序(DESC),如果不指定ASC或DESC,结果集默认按ASC升序排序
#把成绩都降低10%后加5分,再查询及格成绩,并按照成绩从高到低排序。
SELECT studentno AS 学生编号,(studentresult*0.9+5 ) AS 综合成绩
FROM `result`
WHERE (`studentresult`*0.9+5) >=60
ORDER BY studentresult DESC;#把成绩都降低10%后加5分,再查询及格成绩,并按照成绩从高到低排序,如果成绩
#相同,再按照课程编号进行排序。
SELECT studentno AS 学生编号,(studentresult*0.9+5 ) AS 综合成绩
FROM `result`
WHERE (`studentresult`*0.9+5) >=60
ORDER BY studentresult DESC,subjectno;

分页

LIMIT 子句:MySQL查询语句中使用LIMIT子句限制结果集

  • 应用1:限制显示的结果集的行数(小说排行榜 新闻只显示最新的5条)
#查询课程编号为1的,考试日期为2019年的考试的前5名同学的学号和成绩
SELECT studentno,studentresult 
FROM result
WHERE subjectno=1 AND YEAR(examdate)=2019
ORDER BY studentresult DESC
LIMIT 5
  • 应用2:分页查询(分页显示数据)
    limit后跟连个数字时,第一个表示偏移量(索引),第二个显示条数
    #查询学生表的学号、姓名、电话 ,每页显示2条记录
    #第一条记录的偏移量为0
    #第一页
    #偏移量 0 1
SELECT studentno,studentname,phone FROM student
LIMIT 0,2

分组查询

  • [ GROUP BY …] #指定结果按照哪几个字段来分组
  • [ HAVING …] #过滤分组的记录必须满足的次要条件
  • 对所有的数据进行分组统计
  • 分组的依据字段可以有多个,并依次分组
  • 与HAVING结合使用,进行分组后的数据筛选
  • GROUP BY子句经常和聚合函数结合使用完成分组统计功能
#查询每门课程及格总人数和及格学生的平均分
SELECT SUBJECTNO,COUNT(1),AVG(STUDENTRESULT) FROM RESULT 
WHERE STUDENTRESULT >= 60
GROUP BY SUBJECTNO;#查询每门课程及格总人数和及格平均分在80分以上的记录
SELECT SUBJECTNO,COUNT(1),AVG(STUDENTRESULT) FROM RESULT 
WHERE STUDENTRESULT >= 60
GROUP BY SUBJECTNO
HAVING AVG(STUDENTRESULT) > 80;#查询每门课程的平均分,并按照降序排列
SELECT SUBJECTNO,AVG(STUDENTRESULT) AVG FROM RESULT
GROUP BY SUBJECTNO
ORDER BY AVG DESC;#查询每个学生参加的所有考试的总分,并按照降序排列
SELECT STUDENTNO,SUM(STUDENTRESULT) SUM FROM RESULT
GROUP BY STUDENTNO
ORDER BY SUM DESC;#查询每个年级学生的平均年龄
SELECT GRADEID,AVG(YEAR(NOW())-YEAR(BORNDATE)) FROM STUDENT 
GROUP BY GRADEID;#查询考试不及格的学生学号和不及格的次数
SELECT STUDENTNO,COUNT(STUDENTRESULT) FROM RESULT
WHERE STUDENTRESULT < 60
GROUP BY STUDENTNO;

子查询

子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询。

语法

SELECT … FROM 表名 WHERE 字段X 比较运算符(子查询)

  • 习惯上,外层查询称为父查询,圆括号中嵌入的查询称为子查询。
  • 执行SQL语句时,先执行子查询,返回所有来自子查询的结果,再执行外围的父查询,返回查询的最终结果(即求解方式为由里及外)。
  • 将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个(否则会出现提示信息:错误代号1242 Subquery returns more than 1 row)。

案例

编写SQL语句,查看年龄比“李斯文”小的学生,要求显示这些学生的信息(学号、姓名、出生日期)

SELECT studentno, studentname,borndate FROM student WHERE borndate > 
(SELECT borndate FROM student WHERE studentname= '李斯文’);

IN子查询

查询课程名称为”JavaOOP”且考试分数大于60分的学生信息(学号、姓名和联系电话)。

  • IN后面的子查询可以返回多条记录。
  • 常用IN替换等于(=)的子查询。

语法

SELECT … FROM 表名 WHERE 字段X IN(子查询)

SQL示例

#查询课程名称为”JavaOOP”且考试分数大于60分的学生信息(学号、姓名和联系电话)。
SELECT studentno,studentname,phone FROM student  WHERE studentno IN
(SELECT studentno FROM result WHERE studentresult>60 AND 
subjectno=(SELECT subjectno FROM `subject`WHERE subjectname='JAVAOOP'))

综合案例

#查询年级名称为"大一"开设的课程信息(课程编号、课程名称、课时数)
SELECT SUBJECTNO,SUBJECTNAME,CLASSHOUR FROM `SUBJECT`
WHERE GRADEID = (SELECT GRADEID FROM GRADE WHERE GRADENAME='大一');#查询课程名称为”高等数学-1”最近一次考试的学生信息(学号、姓名和联系电话)。
SELECT STUDENTNO,STUDENTNAME,PHONE FROM STUDENT
WHERE STUDENTNO IN (SELECT STUDENTNO FROM RESULT WHERE SUBJECTNO = (SELECT SUBJECTNO FROM `SUBJECT` WHERE SUBJECTNAME = '高等数学-1') AND EXAMDATE = (SELECT MAX(EXAMDATE) FROM RESULTWHERE SUBJECTNO = (SELECT SUBJECTNO FROM `SUBJECT` WHERE SUBJECTNAME = '高等数学-1'))
);#查询没有参加课程名称为”高等数学-1”最近一次考试的学生信息(学号、姓名和联系电话)。
SELECT STUDENTNO,STUDENTNAME,PHONE FROM STUDENT
WHERE STUDENTNO NOT IN (SELECT STUDENTNO FROM RESULT WHERE SUBJECTNO = (SELECT SUBJECTNO FROM `SUBJECT` WHERE SUBJECTNAME = '高等数学-1') AND EXAMDATE = (SELECT MAX(EXAMDATE) FROM RESULTWHERE SUBJECTNO = (SELECT SUBJECTNO FROM `SUBJECT` WHERE SUBJECTNAME = '高等数学-1'))
);

EXISTS 子查询

EXISTS 子查询:带有EXISTS的子查询不返回任何记录的数据,只返回逻辑值“True”或“False”。

  • 子查询有返回结果: EXISTS子查询结果为TRUE,执行外层查询;
  • 子查询无返回结果: EXISTS子查询结果为FALSE, 外层查询不执行;

语法

SELECT …… FROM 表名 WHERE EXISTS(子查询);

SQL示例

# 检查“Logic Java”课程最近一次考试成绩,如果有 80分以上的成绩,显示分数排在前5名的学员学号和分数
SELECT sujectNo FROM `subjectl` WHERE subjectName='Logic Java'
SELECT MAX(examDate) FROM result WHERE subjectNo=(SELECT subjectNo FROM`subject` WHERE subjectName='Logic Java')
SELECT studentNO,studentResult
FROM result
WHERE EXISTS(SELECT * FROM resultWHERE studentResult>80AND subjectNo=(SELECT subjectNO FROM `subject` WHERE subjectName='Logic Java')AND  examDate=(SELECT MAX(examDate) FROM result WHERE subjectNo=(SELECT subjectNO FROM `subject`WHERE subjectName='Logic Java'))
)
AND subjectNo=(SELECT subjectNO FROM `subject`WHERE subjectName='Logic Java')
AND  examDate=(SELECT MAX(examDate) FROM result WHERE subjectNo=(SELECT subjectNO FROM `subject`WHERE subjectName='Logic Java'))
ORDER BY studentResult DESC
LIMIT 5# 检查“Logic Java”课程最近一次考试成绩,如果全部未通过考试(60分及格),认为本次考试偏难,计算的该次考试平均分加5分
SELECT  AVG(studentResult)+5
FROM result
WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='Logic Java')
AND examDate=(SELECT MAX(examDate) FROM result WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='Logic Java'))
AND NOT EXISTS(SELECT * FROM resultWHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='Logic Java')AND examDate=(SELECT MAX(examDate) FROM result WHERE subjectNo=(SELECT subjectNo FROM `subject` WHERE subjectName='Logic Java'))AND studentResult>100
)

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

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

相关文章

Unity 预制体与变体

预制体作用&#xff1a; 更改预制体&#xff0c;则更改全部的以预制体复制出的模型。 生成预制体&#xff1a; 当你建立好了一个模型&#xff0c;从层级拖动到项目中即可生成预制体。 预制体复制模型&#xff1a; 将项目中的预制体拖动到层级中即可复制。或者选择物体复制粘贴。…

Jenkins自动化部署之流水线模式部署

文章目录 任务类型Pipeline流水线项目声明式的Pipeline脚本式Pipeline 示例脚本生成Tools配置示例 高级Pipeline Script from SCM 任务类型 在Jenkins中&#xff0c;有不同类型的任务&#xff08;项目&#xff09;适用于不同的构建需求。以下是一些常见的Jenkins任务类型&…

MYSQL03高级_新增用户、授予权限、授权底层表结构、角色理解

文章目录 ①. 登录服务器操作②. 用户的增删改③. 修改用户密码④. MySQL8密码管理⑤. 权限列表及原则⑥. 授予查看回收权限⑦. 底层权限表操作⑧. 角色的理解 ①. 登录服务器操作 ①. 启动MySQL服务后,可以通过mysql命令来登录MySQL服务器,命令如下: mysql –h hostname|hos…

32单片机基础:TIM输出比较

这个输出比较功能是非常重要的&#xff0c;它主要是用来输出PWM波形,PWM波形又是驱动电机的必要条件&#xff0c;所以你如果想用STM32做一些有电机的项目&#xff0c;比如智能车&#xff0c;机器人等。 IC: Input Capture 输入捕获 CC:Capture/Compare一般表示输入捕获和输出…

【学习心得】浏览器开发者工具中出现的VM开头的JS文件是什么?

一、现象描述 在Chrome的开发者工具中&#xff0c;你可能会看到一些以“VM”开头的JavaScript文件&#xff08;如“VM111.js”&#xff09;。 二、VM文件到底是什么&#xff1f; “VM”表示的是Virtual Machine&#xff08;虚拟机&#xff09;&#xff0c;这些文件通常表示由浏…

网站文章被百度快速收录的工具

百度是中国最主要的搜索引擎之一&#xff0c;对于网站管理员来说&#xff0c;网站文章被百度快速收录是至关重要的&#xff0c;因为这直接影响着文章的曝光和网站的流量。然而&#xff0c;许多网站管理员都会问一个常见的问题&#xff1a;文章百度收录需要几天&#xff1f;在这…

C语言基础17 判断

断结构要求程序员指定一个或多个要评估或测试的条件&#xff0c;以及条件为真时要执行的语句&#xff08;必需的&#xff09;和条件为假时要执行的语句&#xff08;可选的&#xff09;。 C 语言把任何非零和非空的值假定为 true&#xff0c;把零或 null 假定为 false。 下面是…

MYSQL01高级_Linux版安装、各级别字符集、字符集与比较规则、SQL大小写规范

文章目录 ①. MySQL - linux版安装②. 字符集的相关操作③. 各级别的字符集④. 字符集与比较规则(了解)⑤. SQL大小写规范⑥. sql_mode的合理设置 ①. MySQL - linux版安装 ①. 进入mysql官网,找到安装文件 ②. 将抽取出来的文件放在linux下的opt下 MySQL Community Serv…

WebSocket介绍与应用

介绍 WebSocket 是基于TCP的一种的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c;并进行双向数据传输。 HTTP协议和WebSocket协议对比&#xff1a; HTTP是短连接WebSocket是长连接…

Vue3 + MybatisPlus实现批量删除功能

目录 一、后端 1.1 编写后端接口 1.2 编写service和其实现类 二、前端 2.1 组件加多选样式 2.2 实现多选调用的方法 2.3 编写批量删除的按钮 2.4 执行批量删除请求代码 一、后端 1.1 编写后端接口 PostMapping("/batchDelete") public CommonResult<Boo…

Python中简单正则获取百度新闻页面所有超链接示例

一、示例代码&#xff1a; import re import requestsheaders {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/""85.0.4183.83 Safari/537.36"} resp requests.get(http://news.…

自动化构建平台(三)Linux搭建私有的docker镜像库之Harbor的安装和使用详解

文章目录 前言一、Harbor的安装第一步&#xff1a;安装docker第二步&#xff1a;安装docker-compose第三步&#xff1a;安装Harbor 二、Harbor登录三、Harbor项目管理第一步&#xff1a;创建项目第二步&#xff1a;推送镜像 四、Harbor权限控制五、Harbor自动清理多余的镜像手动…

FPGA高端项目:FPGA基于GS2971的SDI视频接收+图像缩放,提供3套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收转HDMI输出应用本方案的SDI纯verilog图像缩放视频拼接应用本方案的SDI HLS图像缩放视频拼接应用本方案的SDI视频编码动态字符叠加输出应用本方案的SDI视频编码多路视频融合视频叠加应用FPGA的SDI…

Python实现向量自回归移动平均模型(VARMA算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 向量自回归移动平均模型&#xff08;Vector Autoregressive Moving Average, VARMA&#xff09;是一种…

《商用密码应用安全性评估管理办法》解读

根据《中华人民共和国密码法》&#xff08;以下简称《密码法》&#xff09;、《商用密码管理条例》&#xff08;以下简称《条例》&#xff09;等法律法规&#xff0c;国家密码管理局研究制定了《商用密码应用安全性评估管理办法》&#xff08;国家密码管理局令第3号&#xff09…

基于springboot实现旅游路线规划系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现旅游路线规划系统演示 摘要 随着互联网的飞速发展以及旅游产业的逐渐升温&#xff0c;越来越多人通过互联网获取更多的旅游信息&#xff0c;包括参考旅游文纪等内容。通过参考旅游博主推荐的旅游景点和规划线路&#xff0c;参考计划着自己的旅行&#xff0c…

Ubuntu整系统迁移到另一个硬盘中

以ubuntu20.04为例&#xff0c;之前使用的是1T的移动硬盘&#xff0c;每次进入后性能不太稳定&#xff0c;所以最近买了块1T的固态硬盘给我的笔记本装上了&#xff0c;但是如果重新进行各种软件安装及环境配置就太麻烦了&#xff0c;所以采用了系统迁移 1.首先制作一个Ubuntu系…

08、关于语法:resp?.data?.data 的含义与实际操作中可能遇到的问题

1、数据情况&#xff1a; 其一、从后端拿到的数据为&#xff1a; let resp.data {"data": [],"lag_mode": 3,"totol": 0 }或&#xff1a; let resp.data {"data": [],"totol": 0 }其二、目标数据为&#xff1a; // 想要…

Git保姆级使用教程

一、版本控制 1.1 团队开发问题 企业项目一般以团队形式实施开发&#xff0c;那团队开发中会出现哪些问题呢&#xff1f; 小明负责的模块就要完成了&#xff0c;就在即将Release之前的一瞬间&#xff0c;电脑突然蓝屏&#xff0c;硬盘光荣牺牲&#xff01;几个月来的努力付之…

数据库常见理论常见面试题(总结)

一、前言 这里呢&#xff0c;博主会介绍一些平时关于数据库的理论的问题&#xff0c;比如数据库的三级模式两级映射、触发器、范式、存储过程、视图等等概念知识&#xff0c;但是像索引、事务、锁等内容&#xff0c;之前的文章就讲解过了&#xff0c;这里就不作过多的介绍了&am…