【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 ];

#查询学生表中所包含的年级ID
 SELECT   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 RESULT
		WHERE 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 RESULT
		WHERE 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 result
 WHERE studentResult>80
 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'))
)
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 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 studentResult>100
)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux服务器挂了后如何再次启动SVN

Linux服务器挂了后如何再次启动SVN 启动SVN步骤grep查询kill杀掉原有的select查找目录&#xff0c;并设置启动服务DONE设置自启动 启动SVN步骤 最近在折腾AI&#xff0c;比较少更博客了&#xff0c;大家有问题可随时询问 grep查询 [rootDujinyang Code]# ps -ef |grep svn …

【Qt学习】QTextEdit 与 QComboBox 的 属性与实例(槽函数的使用、读取本机内容到控件)

文章目录 1. QTextEdit2.1 介绍2.2 实例使用 - 槽函数的使用 2. QComboBox2.1 介绍2.2 实例使用案例1&#xff1a;设置下拉框项目组件的方式案例2&#xff1a;读取本机文件内容 到QComboBox 1. QTextEdit 2.1 介绍 我们可以查阅官方文档&#xff0c;对QTextEdit 有更深的了解&…

vue3基础教程(1)——nodejs环境搭建

博主个人小程序已经上线&#xff1a;【中二少年工具箱】 小程序二维如下&#xff1a; 正文开始 专栏简介1. 环境菜单2.为什么下载node3. nodejs简介4. nodejs安装5. 编辑器选择 专栏简介 本系列文章由浅入深&#xff0c;从基础知识到实战开发&#xff0c;非常适合入门同学。…

13.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-如果没有工具就创造工具

内容参考于&#xff1a; 易道云信息技术研究院VIP课 上一个内容 &#xff1a;12.游戏网络通信存在的问题 现在把游戏网络的架构看了一个小小的大概&#xff0c;可以用它的接口发数据接收数据了&#xff0c;如果真正想用它这一套东西&#xff0c;真正核心不在于它的接口而在于…

python实现AES加密解密

1. 前言 AES是一种对称加密&#xff0c;所谓对称加密就是加密与解密使用的秘钥是一个。 之前写过一片关于python AES加密解密的文章&#xff0c;但是这里面细节实在很多&#xff0c;这次我从 参数类型、加密模式、编码模式、补全模式、等等方面 系统的说明如何使用AES加密解密…

存储xss实现获取cookie(本地实战)

实战更能体验收获&#xff01;&#xff01;&#xff01; 环境准备&#xff1a; 1.phpstudy 2.dvwa靶场 实战 首先我们在phpstudy指定的localhost网站目录下编写一个xss.php文件&#xff0c;内容如下&#xff1a; <?php $cookie $_GET[cookie]; $ip getenv (REMOTE_…

零基础小白到底适不适合学鸿蒙,请看完这篇再决定吧~

随着华为鸿蒙系统的问世&#xff0c;不少技术小白在是否学习鸿蒙的问题上犹豫不决。鸿蒙作为华为自主研发的操作系统&#xff0c;拥有许多独特的技术优势和市场前景。但对于小白来说&#xff0c;是否值得投入时间和精力去学习鸿蒙开发呢&#xff1f; 1.鸿蒙系统开发&#xff1…

Java8 - LocalDateTime时间日期类使用详解

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…

云南经贸Day01

day01 一. VMware创建虚拟机二.VMware安装Linux三 虚拟机网络配置1. 查看网络信息2. 修改网络IP 四. 虚拟机操作管理1. 通过VMware为虚拟机拍摄快照2. VMware 为虚拟机执行克隆 五. Xshell的安装和使用 一. VMware创建虚拟机 二.VMware安装Linux 清华大学镜像源网址: https://m…

南方电网的能源棋局上,蔚来换电扮演什么角色?

2 月 26 日&#xff0c;南网储能科技与蔚来能源签署协议&#xff0c;将充换电站、储能站、可调负载等聚合资源连接到虚拟电厂平台&#xff0c;推动换电站作为分布式储能在虚拟电厂项目上的应用。 蔚来换电站是国内首个智慧微电网型分布式换电设施&#xff0c;可透过换电订单预…

【C++ map和set】

文章目录 map和set序列式容器和关联式容器键值对setset的主要操作 mapmap主要操作 multiset和multimap map和set 序列式容器和关联式容器 之前我们接触的vector,list,deque等&#xff0c;这些容器统称为序列式容器&#xff0c;其底层为线性序列的的数据结构&#xff0c;里面存…

面试数据库篇(mysql)- 08事务

原理 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 ACID是什么?可以详细说一下吗? 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全…

栈的概念结构和实现

文章目录 一、什么是栈二、栈的实现三、实现栈所需的函数四、完整栈的展现五、栈的思维导图 一、什么是栈 栈是一种特殊的线性表&#xff0c;只允许在固定的一端进行插入和删除操作。进行插入和删除的一段叫做栈顶&#xff0c;另一段叫做栈底 压栈&#xff1a;插入数据 出栈&a…

ShardingSphere 5.x 系列【18】自定义类分片算法

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 概述2. ClassBasedShardingAlgorithm3. 案例演示3.1 STANDARD3.2 COMPLEX…

【递归搜索回溯专栏】前言与本专栏介绍

本专栏内容为&#xff1a;递归&#xff0c;搜索与回溯算法专栏。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;递归搜索回溯专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代…

视频学习胜过读书吗

现在&#xff0c;网上的课程视频和讲座视频&#xff0c;越来越多。同样的内容&#xff0c;可以读书学习&#xff0c;也可以视频学习&#xff0c;大家喜欢哪一种&#xff1f; 我比较喜欢读书&#xff0c;实在没耐心视频学习。 书籍只要随手一翻&#xff0c;就知道大概的内容了&…

[Android View] 可绘制形状 (Shape Xml)

一切以官方文档为主 官方文档https://developer.android.com/guide/topics/resources/drawable-resource?hlzh-cn#Shape 什么是可绘制形状 可以理解为用xml文件来描述一个简单的Drawable图形&#xff0c;比如说以下这段xml就可以用来描述一个白色的圆形&#xff1a; <?…

存储过程基本了解

文章目录 介绍存储过程示例1. 目的2. 输入参数3. 输出参数4. 执行逻辑5. 返回值6. 示例用法7. 注意事项 存储过程的关键字有哪些简单实操 介绍 存储过程是一组预编译的SQL语句&#xff0c;以及流程控制语句&#xff0c;封装在数据库服务器中并可以被重复调用。它们可以接收参数…

浅析扩散模型与图像生成【应用篇】(四)——Palette

4. Palette: Image-to-Image Diffusion Models 该文提出一种基于扩散模型的通用图像转换&#xff08;Image-to-Image Translation&#xff09;模型——Palette&#xff0c;可用于图像着色&#xff0c;图像修复&#xff0c;图像补全和JPEG图像恢复等多种转换任务。Palette是一种…

Harbor高可用(haproxy和keepalived)

Harbor高可用&#xff08;haproxy和keepalived&#xff09; 文章目录 Harbor高可用&#xff08;haproxy和keepalived&#xff09;1.Harbor高可用集群部署架构1.1 主机初始化1.1.1 设置网卡名和ip地址1.1.2 设置主机名1.1.3 配置镜像源1.1.4 关闭防火墙1.1.5 禁用SELinux1.1.6 设…
最新文章