03-MySQL查询数据

news2025/1/16 10:08:47

目录

DQL语言

单表查询

 AS子句

DISTINCT关键字的使用

WHERE条件语句

逻辑操作符

 比较操作符

BETWEEN范围查询

 LIKE模糊查询

 使用IN进行范围查询

 NULL空值条件查询

连接查询(多表查询)

 INNER JOIN内连接

等值和非等值的连接查询

外连接

JOIN对比


DQL语言

 DQL(Data Query Language,数据查询语言)

  1. 用于查询数据库数据
  2. 简单的单表查询或多表的复杂查询和嵌套查询
  3. 是数据库语言中最核心、最重要的语句
  4. 使用频率最高的语句

单表查询

指定查询字段

查询表中的所有的数据列结果,采用  "*" 符号 

select * from student;

指定查询结果的数据列

如只查询student表中的学号,姓名和性别;各数据列用逗号 "," 隔开

select id , name , sex from student;

查询时如有两个表有同名的字段,可以使用 "表名.数据列" 来区分 

select id , student.`name` , sex from student;

 AS子句

AS子句作用

  • 可以给数据列取一个新别名
  • 可以给表取一个新别名
  • 可以把经过计算或总结的结果用另外一个新名称来代替
  • 可以省略AS关键字直接在数据列后取新别名                ·        

AS子句的用法

 1、给数据列取一个新别名

查询student表中的学号,姓名、性别和年纪并给数据列取别名

select id as '学号' , name as '姓名' , sex as '性别' , grade as '年级' from student; 

2、给表取一个新别名

使用student表新别名,查询student表中的学号,姓名和手机号

select stu.`id` , stu.`name` , stu.`phoneNumber` from student as stu;

 3、把经过计算或总结的结果用另外一个新名称来代替

把grade加1后的结果用新别名“年纪代替”

select grade+1 as '年纪' from student;

 4、省略AS关键字直接在数据列后取新别名

查询student表中的学号、姓名、手机号和身份证号并用别名表示

select id '学号' , name '姓名' , phoneNumber '手机号' , identityCard '身份证号' from student;

DISTINCT关键字的使用

作用:

        去掉SELECT查询返回的记录结果中重复的记录,所有列的值都相同)只返回一条。

语法:

        SELECT DISTINCT 字段名1,字段名2,…… from 表名;

查询student表中的所包含的年级grade

SELECT DISTINCT grade '年级' FROM student;

WHERE条件语句

  • 用于检索数据表中符合条件的记录
  • 搜索条件可有一个或多个逻辑表达式组成,结果一般为真或假
  • 搜索条件的组成
    • 逻辑操作符
    • 比较操作符

逻辑操作符

操作符名称

语法

描述

AND或&& 

a AND b 或 a && b

逻辑与,同时为真,结果才为真

OR或||

a OR b 或 a||b

逻辑或,只要一个为真,则结果为真

NOT或!

NOT a 或 !a

逻辑非,若操作数为假,结果则为真

创建数据表subject并添加数据

#创建课程表subject
create table if not exists `subject`(
`subjectNo` int not null,
`subjectName` varchar(15) not null,
`classHour` int(6) not null,
`gradeID` int(4) not null
);

#添加数据
insert into `subject` values (1,'高等数学-1',120,1);
INSERT INTO `subject` VALUES (2,'高等数学-2',110,2) , (3,'高等数学-3',100,3);
insert into `subject` values (4,'高等数学-4',130,4);

查询在课时为“100”并且年级编号为“3”的所有课程名称

#使用AND操作符,条件1 AND 条件2 ,两个条件同时满足才为真,否则为假

SELECT subjectName '课程名称' FROM `subject` WHERE classHour = 100 and gradeId = 3;
#使用&&操作符,条件1 &&条件2 ,两个条件同时满足才为真,否则为假

SELECT subjectName '课程名称' FROM `subject` WHERE classHour = 100 && gradeId = 3;

查询课时为"110"或者年级编号为"4"的课程名称

#使用OR操作符,条件1 OR条件2 ,OR左右两边的表达式有一个为真则表示为真,否则为假
SELECT subjectName '课程名称' FROM `subject` WHERE classHour = 100 OR gradeId = 1;

#使用 “||” 操作符,条件1 || 条件2 ,”||“ 左右两边的表达式有一个为真则表示为真,否则为假
SELECT subjectName '课程名称' FROM `subject` WHERE classHour = 100 || gradeId = 1;

查询年级编号不为 "1" 的所有结果

逻辑非 ”not“

SELECT subjectNO '课程编号' , subjectName '课程名称' , classHour '课时' FROM SUBJECT WHERE NOT gradeID = 1;

逻辑非 ”!“

SELECT subjectNO '课程编号' , subjectName '课程名称' , classHour '课时' FROM subject WHERE gradeID != 1;

 

 比较操作符

操作符名称

语法

描述

IS NULL

a IS NULL

若操作符为NULL,则结果为真

IS NOT NULL

a IS NOT NULL

若操作符不为NULL,则结果为真

BETWEEN

a BETWEEN b AND c

若a范围在b与c之间则结果为真

LIKE

a LIKE b

SQL模式匹配,若a匹配b,则结果为真

IN

a IN (a1,a2,a3,….)

若a等于a1,a2…中的某一个,则结果为真

注意:

  1. 数值数据类型的记录之间才能进行算数运算。
  2. 相同数据类型的数据之间进行比较

BETWEEN范围查询

BETWEEN等同于>=和<=联合使用

语法:

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

查询subject表中课时在110和130之间的所有记录

SELECT * FROM SUBJECT WHERE classHour BETWEEN 110 AND 130;

等同于

SELECT * FROM SUBJECT WHEREclassHour >= 110 AND classHour <= 130;

 LIKE模糊查询

在WHERE句子中,使用LINK关键字进行模糊查询,LIKE关键字与“%",“-"一起使用

  • LIKE与 “%” 一起使用,表示匹配0个或任意多个字符
  • LIKE与“-”一起使用,表示匹配单个字符

查询包含“数学”的所有课程

SELECT * FROM subject WHERE subjectName LIKE "%数学%";
或者

SELECT * FROM subject WHERE subjectName LIKE "%数学__";

 使用IN进行范围查询

在WHERE子句中使用IN进行范围查询

  • 查询的字段的值,至少与括号中的一个值相同
  • 多个值之间用英文逗号隔开

查询课时为100,110,120的所有课程

select * from subject where classHour in(100 , 110 , 120);

 NULL空值条件查询

NULL

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

连接查询(多表查询)

连接查询

  • 如需要多张数据表的数据进行查询,则可以通过连接运算符实现多个查询
  • 分类包括:
    • 内连接(inner join)
      • 等值和非等值的连接查询
      • 自身连接查询
    • 外连接(our join)
      • 左连接(left join)
      • 右连接(right join)

创建数据表

创建年纪表 “grade”

#创建年级表grade
create table if not exists `grade`(
`gradeID` int not null,
`gradeName` varchar(20) not null
);

#添加数据
insert into grade values (1,'大一') , (2,'大二') , (3,'大三') , (4,'大四');

 INNER JOIN内连接

在表中至少一个匹配时,则返回记录

语法

SECLET 字段1 , 字段2 ,…… FROM 表1 INNER JOIN 表2 ON 表1.字段x = 表2.字段x;

#INNER JOIN 与 JOIN 是相同的;

#如表1中的行在表2中没有匹配,则不返回

从“subject” 和 “grade” 数据表查询课程名称和所属年级名称

SELECT subject.`subjectName` , grade.`gradeName` FROM subject INNER JOIN grade ON subject.`gradeID` = grade.`gradeID`;

#INNER JOIN 与 JOIN 是相同的,可以省略INNER;

SELECT subject.`subjectName` , grade.`gradeName` FROM subject JOIN grade ON subject.`gradeID` = grade.`gradeID`;

 

 

等值和非等值的连接查询

  • 与表单查询类似,都是SELECT语句
  • 把多个表放在FROM后,各个数据表用逗号隔开
  • 可以使用AS关键字取别名,便于引用
  • 如无重名查询字段则可省略数据表的指定

从 “subject” 和 “grade” 数据表查询课程名称,课时和所属年纪名称

select subject.`subjectName` , .`classHour`, grade.`gradeName` from subject , grade where subject.`gradeID` = grade.`gradeID`;
 

#AS关键字取别名

select su.`subjectName` , su.`classHour`, gr.`gradeName` from subject as `su` , grade as `gr` where su.`gradeID` = gr.`gradeID`;
 

 

外连接

左连接(LEFT JOIN)       

        从左表(表1)中返回所有的记录,即便在右(表1)中没有匹配的行

语法:

SELECT 字段1 ,字段2,…… FROM 表1 LEFT JOIN 表2 ON 表1.字段x = 表2.字段x;

右连接(RIGHT JOIN)

        从右表(表2)中返回所有的记录,即便在左(表1)中没有匹配的行

语法:

SELECT 字段1 ,字段2,…… FROM 表1 RIGHT JOIN 表2 ON 表1.字段x = 表2.字段x;

查询“subject”表中的所有信息和“grade”表中的年级信息

#左连接

SELECT subject.* , grade.`gradeName` from subject left join grade on subject.`gradeID` = grade.`gradeID`;


#左连接,使用AS别名

SELECT su.* , gr.`gradeName` from subject AS `su` left join grade AS `gr` on su.`gradeID` = gr.`gradeID`;

#右连接

SELECT subject.* , grade.`gradeName` from subject right join grade on subject.`gradeID` = grade.`gradeID`;
 

#右连接 ,使用AS别名

SELECT su.* , gr.`gradeName` from subject AS `su` right join grade AS `gr` on su.`gradeID` = gr.`gradeID`;
 

 

JOIN对比

  • INNER JOIN:如果表中有至少一个匹配,则返回行
  • LEFT JOIN:不论右表是否有匹配,都会返回左表的所有行
  • RIGHT JOIN:不论左表是否有匹配,都会返回右表的所有行

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

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

相关文章

49.Python的while循环

49.Python的while循环 文章目录49.Python的while循环1. 什么是循环2. 什么是while循环3.课题导入4.while循环语法5.while循环执行流程6. if和while的区别7.课堂练习1. 什么是循环 【循环的百度释义】 特指运行一周而回到原处&#xff0c;再转。 反复地连续地做某事。 【循环…

新征程-猿如意试用一波!

猿如意传送门&#xff08;必带&#xff09; 猿如意下载地址&#xff1a;猿如意-程序员的如意兵器,工具代码,一搜就有 猿如意使用了几次了&#xff0c;今天来想分享一下我对于猿如意的使用感受吧&#xff01;&#xff01; 先说结论&#xff1a;值得每个程序员都在电脑里安装一…

MySQL的基础架构简述

文章目录一、一条SQL查询语句是如何执行的1、连接器2、查询缓存3、分析器4、优化器5、执行器一、一条SQL查询语句是如何执行的 开篇先上基本架构示意图&#x1f917;&#xff1a; 大体来说&#xff0c;MySQL可以分为 Server 层和存储引擎两部分。 Server 层包括连接…

大一作业HTML网页作业 HTML校园篮球网页作业(12个页面)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

前沿系列--简述Diffusion Model 扩散模型(无代码版本)

文章目录前言why扩散简述how如何扩散逆向过程小结流程训练过程预测过程总结前言 OK&#xff0c;今天的话&#xff0c;我们来搞一下这个扩散模型&#xff0c;来对这个玩意进行一个简单的了解&#xff0c;因为这个也是目前还算比较前沿的东西&#xff0c;也挺有用的&#xff0c;…

CSAPP-Lab2 BombLab解析

文章目录ReferencePhase1Phase2Phase3Phase4Phase5Phase6Part1Part2Part3Part4Part5Part6SecretBombSummaryReference GDB Command Reference - disassemble command&#xff1a;怎么使用GDB进行反汇编调试GDB X CommandGDB and Debugging&#xff1a;GDB上手教程和如何进行de…

大一作业HTML网页作业 HTML CSS制作二十四节气网页

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

背包问题:蛇优化算法(Snake Optimizer,SO)求解背包问题(Knapsack Problem,KP)提供Matlab代码

一、背包问题 1.1背包问题描述 背包问题(Knapsack Problem&#xff0c;KP)是一种重要的组合优化问题&#xff0c;在生活的许多领域都有着十分广泛的应用。背包问题可以描述为&#xff1a;给定一个背包和n种物品&#xff0c;其中&#xff0c;背包的容量为VVV &#xff0c;第i …

Linux tar报错 无法 stat: 没有那个文件或目录 tar: 由于前次错误,将以上次的错误状态退出

解决方法 解决方式&#xff1a;-czf 的f必须在最后&#xff0c;因为f标识指定压缩后的文件名&#xff0c;f后面紧跟着的字符串就是你所指定的压缩后的文件名&#xff0c;所以f必须在后面 我记忆的方法&#xff1a;czf 吃早饭 举例&#xff1a;压缩多个文件、目录,压缩后得到的文…

Go语言GOPATH是什么

一、GOPATH的概念 GOPATH 是 Go 语言中使用的一个环境变量&#xff0c;它使用绝对路径提供项目的工作目录&#xff08;也称为工作区&#xff09;, 是存放 Golang 项目代码的文件路径, GOPATH 适合处理大量 Go语言源码、多个包组合而成的复杂工程。 工作目录是一个工程开发的相对…

【机器学习】特征独立性检验-特征太多删特征-删who呢

总结 MvTest独立性分析方法——检验数值型特征与label是否有关系&#xff0c;删除与label无关&#xff08;独立&#xff09;的特征&#xff1b;corr协方差函数 相关性分析——找到数值型特征与数值型特征之间相关性高的数值型特征&#xff0c;然后删除&#xff08;相关性高的数…

Xcode 导入共享代码文件却提示找不到其中方法或类型的原因与解决

文章目录 问题现象问题分析1. 原景重现2. 为什么找不到共享代码文件中的方法?3. 解决之道总结结束语问题现象 正所谓“一个好汉三个帮,一块篱笆三个桩”,开发一款优秀的 App 也绝对少不了第三方高质量代码的加持。 但有时候,我们明明已在 Xcode 中导入了第三方共享代码文…

微服务框架 SpringCloud微服务架构 多级缓存 46 JVM 进程缓存 46.3 初识Caffeine

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 多级缓存 文章目录微服务框架多级缓存46 JVM 进程缓存46.3 初识Caffeine46.3.1 本地进程缓存46.3.2 Caffeine 示例46 JVM 进程缓存 46.3 初…

openGemini v0.2.0版本正式发布:5大特性全面增强

摘要&#xff1a;openGemini是华为云面向物联网和运维监控场景开源的一款云原生分布式时序数据库&#xff0c;兼容InfluxDB API&#xff0c;具有高性能、高并发、高扩展等特点。openGemini是华为云面向物联网和运维监控场景开源的一款云原生分布式时序数据库&#xff0c;兼容In…

Docker redis Connection refused 问题排查

问题描述&#xff1a; 用 docker分别运行2个容器&#xff0c;一个spring boot应用&#xff0c;一个是redis 然后发现Spring boot项目无法访问redis。在本地启动Spring boot项目可以访问Redis,然后打成JAR直接启动也能访问。但是做成容器访问Redis却总是报错。 2022-12-16 06:…

RK3588 调试 phy

参考&#xff1a;Rockchip_Developer_Guide_Linux_GMAC_CN Rockchip_Developer_Guide_Linux_GMAC_Mode_Configuration_CN GMAC 接口电路 RK3588 芯片拥有 2 个 GMAC 控制器&#xff0c;提供 RMII 或 RGMII 接口连接外置的 Ethernet PHY GMAC 控制器支持以下功能&#xff1a; …

LSTM前向传播代码实现——LSTM从零实现系列(3)

一、前言 这个LSTM系列是在学习时间序列预测过程中的一些学习笔记&#xff0c;包含理论分析和源码实现两部分。本质属于进阶内容&#xff0c;因此神经网络的基础内容不做过多讲解&#xff0c;想学习基础&#xff0c;可看之前的神经网络入门系列文章&#xff1a; https://blog.…

全自动化数据洞察!数据分布对比可视化!

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; 数据分析实战系列&#xff1a;https://www.showmeai.tech/tutorials/40 &#x1f4d8; 本文地址&#xff1a;https://www.showmeai.tech/article-detail/411 &#x1f4e2; 声明&#xff1a;版权所有&#xff0c;转…

几种数据库jar包获取方式

摘要&#xff1a;以下提供的都是各个数据库较为官方的jar包获取方式。本文分享自华为云社区《JDBC连接相关jar包获取及上传管理中心白名单处理》&#xff0c;作者&#xff1a;HuaWei XYe。 jar包获取 以下提供的都是各个数据库较为官方的jar包获取方式 1、Mysql https://de…

C#启程—游戏开发笔记

文章目录ideRider下载和安装创建C#基础工程&#xff08;包含form&#xff09;Rider去除语法警告C#笔记namespace找不到某个class&#xff08;命名空间&#xff09;c#相对路径&#xff08;比较特别&#xff09;双缓存技术窗体事件绑定窗体初始属性方法生成调式绑定事件成功窗体中…