MySQL数据库语言二:DML、DQL

news2025/2/12 8:04:11

 😘作者简介:正在努力的99年打工人。
👊宣言:人生就是B(birth)和D(death)之间的C(choise),做好每一个选择。
🙏创作不易,动动小手给个点赞加关注吧,有什么意见评论区告诉我,一起学习。

目录

前言

DML语句

INSERT插入语句

 创建测试表

 完整插入

部分插入 

 UPDATE更新数据

 测试

 DELETE删除数据

测试

DQL语句

简单查询

准备表并插入数据

 查询所有信息

 查询部分信息

 条件查询

但条件查询where

 多条件查询AND/OR

 关键字BETWEEN AND 在什么之间

IN集合查询

 IS NULL查询空值信息

LIKE模糊查询

 查询排序

查询升序排序

 查询降序排序

多表查询

准备表

 准备数据

 交叉连接

 内连接

 外连接

左连接

右连接

带in的子查询

 带exists的子查询(会员VIP的应用场景)


前言

        本篇文章介绍MySQL语言中的DML和DQL语句,文章结尾有关于数据库实现鉴权展示内容的实操。

DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE

DQL语句 数据库查询语言: 查询数据SELECT。


DML语句

DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE

INSERT插入语句

语法:

完整插入:INSERT  INTO   表名   VALUES(数据1、数据2。。。);

部分插入:INSERT   INTO  表名(字段1、字段2)  VELUES(数据1、数据2);                

 创建测试表

 完整插入

完整插入:INSERT  INTO   表名   VALUES(数据1、数据2。。。);

完整插入的时候要按照表字段的顺序进行数据插入 ,默认将输入的第一个数据插入到表的第一个字段以此类推。

部分插入 

部分插入:INSERT   INTO  表名(字段1、字段2)  VELUES(数据1、数据2);   

指定需要插入的字段,插入数据,按照自己指定的字段来插入对应的数据。

 UPDATE更新数据

语法:UPDATE   表名   SET   列名=值   WHERE   CONDITION;

 测试

更新id为1的name为zhangsan。

 DELETE删除数据

语法:DELETE   FROM    表名   WHERE   CONDITION;

测试

删除姓名为jack的数据


DQL语句

DQL语句 数据库查询语言: 查询数据SELECT。

在MySQL管理软件中,可以通过SQL语句中的DQL语言来实现数据的

在玩游戏的时候,我们查看自己的装备,道具等操作都是通过SELECT语句实现的,还有银行的余额等查询功能都是SELECT操作完成的。

简单查询

查询所有列信息:SELECT  * FROM  表名;        //这也是之前一直用的查询语句。

查询部分列信息:SELECT   列1,列2列3    FROM  表名;

准备表并插入数据

create table employee(id int,name varchar(50),age int);

 查询所有信息

select * from employee;

查看表内的所有列信息。

 查询部分信息

select name,age from employee;

查询employee表的name和age列。

 条件查询

但条件查询where

将以完整查询为例实验。

select  * from   表名    where   condition

查询年龄为18的人员信息。 

select * from employee where age=18;

 多条件查询AND/OR

 语法:select  *  from  表名   where   condition  AND   condition

             select  *  from  表名   where   condition  OR   condition   

1)查询id为1并且年龄为18的人员信息

2)查询id大于3或者年龄为19的人员信息

1)

 2)

 关键字BETWEEN AND 在什么之间

语法:select  *  from  employee   where  列   between  值1  and  值1;

查找id在1-3之间的员工信息。

查找id不在1-3之间的员工信息。

IN集合查询

语法:select  *  from   表名   where   列  in(值1,值2,值3);

查询该列符合in内数值的信息,用or也能实现但是效率并没有in的高。

查询年龄为19,24,16的人员信息。

select  *  from  employee  where  age   in(16,19,24);

查询年龄不在19,24,16的人员信息。

select   *   from  employee  where  age  not  in(16,19,24);

 IS NULL查询空值信息

插入两行数据:一个是name为空的数据一个是name为空格的数据。

 查询name为空的人员信息。

select * from employee where name is null;

可以看到查到了6号人员信息7号人员信息并没有查到。 

查询name不为空的人员信息。

select * from employee where name is not null;

 发现7号人员的信息被查到了,因为7号人员的name是空格不是空。

LIKE模糊查询

当记不清楚需要查询人员的具体信息的时候可以使用like关键字进行查询。

语法:select *  from  表名  where  列   like  '部分信息%';

查询姓张的人员信息。

select * from employee where name like 'zhang%';

查询好像名字是以re结尾的人员信息。

select * from employee where name like '%re';

 只知道人员名字前两个字母为na,并且知道该人员名字是四个字母的人员信息。

select * from employee where name like 'na__';

注意这里na后面是两个下划线,几个下划线代表后面有几个字母。

 查询排序

查询升序排序:select  *  from   表名   ORDER  BY   列名  ASC;       //默认是以升序排序。

查询降序排序:select   *   from  表名  ORDER  BY  列名  DESC;

查询升序排序

select  *  from   表名   ORDER  BY  列名  ASC;

select  *  from   表名   ORDER  BY  列名;

查询结果按年龄升序排序。

 查询降序排序

select   *   from  表名  ORDER  BY  列名  DESC;

查询结果按年龄降序排序。

多表查询

多表查询分为:多表连接查询、子查询

准备表

这里需要对employee表进行增加列的操作需要使用ALTER关键字进行操作。

语法:ALTER  TABLE   表名   ADD   列名   列描述    FIRST/AFTER列名;

FIRST/AFTER列名:指定新加列的位置,可写可不写,不写的话默认加在表的最后一列

在employee表的末尾加上人员的部门编码以及人员等级列。

增加多列需要用“,”隔开。

alter table employee add num int,add level int;

并且创建两个表一个是部门信息表,一个是人员等级信息表。

 准备数据

更新人员信息的部门编码以及人员等级,并且插入数据到部门信息表以及等级信息表。

完善人员信息表。

 完善部门信息表

 完善人员等级信息表。

 交叉连接

生成笛卡尔积,它不使用任何匹配条件。

比如将A表的6行,B表的7行,最后结果6*7=42行。

select employee.id,employee.name,employee.age,employee.num,department.name from employee,department;

 内连接

 这里因为都能够匹配,所以现在在三个表中添加一行匹配不到的数据。

规定的两表的两列相同的数据才会显示出来。

语法:select  A表.列,B表.列   from  A表,B表   where   A表.列=B表.列;

select employee.id,employee.name,employee.num,department.dep_name from employee,department where employee.num=department.code;

这里8号人员以及102部门都没有显示出来,因为没有匹配到 

 外连接

外连接分为左连接、右连接。

左连接:以左表为基础匹配右表的数据,这里不管左右两表有没有完全匹配,左表的内容都会被显示出来。

右连接:以右表为基础匹配左表的数据,这里不管左右两表有没有完全匹配,右表的内容都会被显示出来。

左连接

要求:查询所有人员所属部门,包括部门信息未存在的人员。

select * from employee left join department on employee.num=department.code;

 可以看到人员信息表的信息都显示出来了,但是发现部门信息的102部门没有显示。

右连接

查看所有部门中年龄大于18的人员信息。

select * from employee right join department on employee.num=department.code and age>18;

这里使用了and,可能会有疑问为什么and后面的age不是用employee.age,因为and是在连接后处理的,连接后是一个新表,新表age就不用写employee.age了。

 发现部门信息都会显示出来,人员只有匹配的才会显示出来。

带in的子查询

将一个查询语句的结果当做另一个查询语句的条件进行查询。

语法:select  *  from  A表  where  列  in (select  distinct  和A表能够匹配的列  from B表   condition);

需求:查询级别月薪大于10000的人员信息。

select * from employee where level in (select distinct level from dep_level where salary>10000);

原理:括号内的子查询,将dep_level表查到的月薪大于10000的level的信息传递到父查询的level字段中作为范围来查询。

 查询员工年龄大于18的部门。

首先通过内连接的方法查看大于18岁人员的信息包括部门,再用子查询的方法查看结果是否一致。

 带exists的子查询(会员VIP的应用场景)

EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录,而是返回一个真假值。
Ture或False,当返回Ture时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询

需求:如果sure是董事长,则查询所有人员的月薪。

select * from employee,dep_level where employee.level=dep_level.level and exists (select *  from employee where level in (select distinct level from dep_level where name='董事长') and name='sure');

这里用了嵌套的方式来鉴别sure是不是董事长。

该查询往往用在身份鉴别、权限鉴别,根据身份权限来展示相应的内容,比如游戏充值VIP之后才可以看到的内容就会用到该查询,已经刚刚做的实操,董事长才有权限查看员工的工资。

 需求:如果zhangsan是董事长,则显示所有员工的月薪。

select * from employee,dep_level where employee.level=dep_level.level and exists (select *  from employee where level in (select distinct level from dep_level where name='董事长') and name='zhangsan');

 这里使用子查询没有查询到结果,因为zhangsan不是董事长。

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

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

相关文章

Linux---网络传输命令(ping、wget、curl)

1. ping命令 执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题, 就会回应该信息,因而得知该主机运作正常。 语法:ping [参数] IP名或主机名 参数包括: 注意&#…

Jmeter实现Dubbo接口测试

目录 前言: 一、准备 二、编写我们的测试工程 三、Jmeter来测试这个工程 前言: JMeter可以用来测试Dubbo接口的性能和负载。Dubbo是阿里巴巴的高性能RPC框架,常用于分布式服务的调用。为了测试Dubbo接口,需要使用JMeter提供的…

Android Chrome Custom Tabs

参考文档 API文档 链接 Chrome Custom Tabs 参考文档 https://developer.chrome.com/docs/android/custom-tabs/ Chrome Custom Tabs最佳实践_customtabs_Just_Sanpark的博客-CSDN博客 Chrome Custom Tabs最佳实践_chrome custom tabs集成_wxx614817的博客-CSDN博客 Chrome…

红黑树(RBTree)c++实现

目录 红黑树介绍 红黑树的性质: 红黑树的结点类 搜索(红黑)树的旋转 旋转分为4种(左旋,右旋,左右双旋,右左双旋): 左旋(RotateL) 右旋(RotateR) 左右双旋(RotateLR) 右左双旋(RotateRL) 红黑树的插入 插入结…

计算机中丢失MSVCP140.dll无法启动此程序怎么办,可以使用这个方法修复

计算机中丢失MSVCP140.dll会导致很多软件跟游戏无法启动运行,这个问题相信困扰着不少小伙伴,遇到这个问题其实不用慌,也无需重装系统。需要先了解清楚MSVCP140.dll文件是什么,已经在我们电脑系统中的作用,了解清楚以后…

【技术干货】数字电路电平标准

信号的逻辑电平经历了从单端信号到差分信号、从低速信号到高速信号的发展过程。最基本的单端信号逻辑电平为CMOS、TTL,在此基础上随着电压摆幅的降低,出现LVCMOS、LVTTL等逻辑电平,随着信号速率的提升又出现ECL、PECL、LVPECL、LVDS、CML等差…

2.7V至25V宽输入电压15A 峰值电流

HT7179是一款高功率异步升压转换器,集成 20mΩ功率开关管,为便携式系统提供高效的 小尺寸解决方案。 HT7179具有2.7V至25V宽输入电压范围,可为 采用单节或两节锂电池,或12V铅酸电池的应 用提供支持。该器件具备15A开关电流能力&a…

【Java基础学习打卡05】命令提示符

目录 引言一、命令提示符是什么二、命令提示符常用命令1.打开命令提示符2.命令演示3.常用命令 总结 引言 知道命令提示符是什么,熟练打开命令提示符,熟练使用常用命令,并自行尝试其他命令。本文只是对命令提示符进行简单介绍和使用。 一、命…

绝版功能回归,Win11开始向Win7进化了

如果将 Win11 上架到 Steam 提供评论打分,那么 Win11 会和很多有争议的游戏一样:褒贬不一。 许多功能是吸引人的,但微软总会在什么时候突然给你一击。 前有 VBS 影响性能、谜之卡顿,后有各种广告、自动安装微软电脑管家。 以及我…

运营活动类项目测试方案设计

1、背景 随着业务的不断发展成熟,商业业务逐渐向重运营、重策略的模式发展,提出的需求中运营活动类需求数量也不断增多。而通过项目的积累、与其他业务的讨论共创,我们也积累了一批对运营活动类项目的测试点和对应的测试方案。下面我将从设计…

List容器(Java)

文章目录 1.容器介绍1.1 容器接口结构1.2 简单解析 2. List容器创建3. 访问操作(get, iterator, for)4. 修改操作(add, remove, set)5. 容量操作(clear, contains, isEmpty, size)6. 其他操作(toArray, )7. 泛型操作 1.容器介绍 1.1 容器接口结构 a. Java存储结构划分   Java…

通过使用动态ip解决网络连接问题

互联网的使用已经成为我们生活中不可或缺的一种生活方式。但是,有时候我们会遇到网络连接问题,如IP地址冲突、网络瘫痪等等。这种情况往往会影响我们的工作,现在我们一般使用动态ip地址来解决这些问题。 一、什么是动态ip地址 动态IP地址是由…

小白也可以做智慧大屏?我来帮你踩踩坑!【华为云Astro低代码体验季】

前提 进入华为云官网进行操作:https://www.huaweicloud.com/ Astro的便捷 其内部丰富的组件,简洁的操作,可支持独立空间管理,让人可以在短时间内就完成非常炫酷以及功能完善的页面 进入编辑页面后,可通过选择左侧的…

GPIO(嵌入式学习)

GPIO知识学习 1. GPIO的基本概念2. GPIO的实际应用3. 功能描述3.1 IO结构框图3.2 知识铺垫模拟/数字信号VDD、VSS、VCC施密特触发器片上外设 3.3 功能详述浮空输入上拉输入下拉输入模拟输入开漏输出推挽输出 4. GPIO相关寄存器4.1 寄存器4.2 功能 1. GPIO的基本概念 GPIO是英文…

java面经1

String, StringBuffer, StringBuilder区别 第一点是可变性。String不可变,String Buffer和StringBuider可变。这是因为String被final修饰,每次操作都生成新的对象。StringBuffer和StringBuilder的父类AbstractStringBuilder没有被final修饰。 第二点是…

视频点播系统

服务端功能模块划分 数据管理模块:负责针对客户端上传的视频信息进行管理。 网络通信模块:搭建网络通信服务器,实现与客户端通信。 业务处理模块:针对客户端的各个请求进行对应业务处理并响应结果。 前端界面模块:…

openEuler 开源汇智赢未来|2023开放原子全球开源峰会OpenAtom openEuler 论坛成功召开

6 月 12 日,2023 开放原子全球开源峰会 OpenAtom openEuler 分论坛在北京成功召开。分论坛以“openEuler 汇众智,奔涌向前赢未来”为主题,展示了 openEuler 社区的最新成果,阐述了 openEuler 开源开放的发展模式,介绍了…

jmeter模拟多用户并发

目录 前言: 一、100个真实的用户 二、100个用户同时登录 前言: JMeter可以轻松地模拟多用户并发,从而测试Web应用程序的性能和稳定性。 一、100个真实的用户 1、一个账号模拟100虚拟用户同时登录和100账号同时登录 区别 (…

如何使用Github搭建个人博客

介绍 在本文中,我将介绍如何使用GitHub搭建个人博客(免费)。GitHub是一个功能强大的版本控制和协作平台,它也可以用来托管和发布静态网页。通过将你的个人博客托管在GitHub上,你可以享受到版本控制的好处,…

STL之stack和queue

目录 stack和queue模拟实现一.介绍1.stack的类模板2.queue的类模板3.容器适配器 二. deque类1. 简介2.常用成员函数 三. stack模拟实现1.成员函数2.代码 四.queue的模拟实现1.成员函数2.代码 五.小结1.容器适配器 stack和queue模拟实现 一.介绍 1.stack的类模板 LIFO&#xf…