300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > DML语言(数据库操作语言)和DQL语言(数据库查询语言)

DML语言(数据库操作语言)和DQL语言(数据库查询语言)

时间:2024-07-12 16:47:48

相关推荐

DML语言(数据库操作语言)和DQL语言(数据库查询语言)

DML语言(数据库操作语言)和DQL语言(数据库查询语言)

1.DML语言(Data Manipulation Language)

1.1、添加语句(insert)

INSERT INTO `teacher`(`name`, `pwd`, `sex`) VALUES('张三', 'aaaaaa', '男'),('李四', '123456', '男')--格式:INSERT INTO `表名`(`字段1`, `字段2`, `字段3`) VALUES('张三', 'aaaaaa', '男'),('李四', '123456', '男')--可以插入多条数据,此处就是插入两条数据的操作--前后注意一一对应,另外字段是可以省略的,但是要注意一一对应的关系(如id设置为自增的情况下就被省略了)

1.2、修改语句(update)

--修改表teacher中id为1的行,将对应行的name修改为'张三'UPDATE `teacher` SET `name`='张三' WHERE id = 1--不指定条件会默认修改所有行(面向监狱)UPDATE `teacher` SET `name`='张三'--格式:UPDATE `表名` SET `column_name`='value1',[`column_name2`='value2'] where [条件]

colum_name是数据库的列,建议带上``value可以是具体的值,也可以是一个变量一定要加where进行条件筛选,不然修改或者删除所有的数据就麻烦咯
where后面的条件:下面是加了运算符(其他的类似):

UPDATE `teacher` SET `name`='李老师' WHERE `name`='李四' AND sex='女' --通过多个条件定位要修改的数据

1.3、删除语句(delete)

DELETE FROM `teacher` --不加筛选条件删除teacher表中所有数据DELETE FROM `teacher` WHERE id = 1 --删除指定数据正确写法TRUNCATE `teacher` --建议使用这条语句清空表

TRUNCATE清空表不会影响自增同时不影响事务

delete删除的问题,重启数据库出现的现象(了解):

如果使用的是innoDB引擎,自增列会从1开始(存在于内存中,断电即失)如果使用的是MyISAM 继续从上一个自增量开始(存在于文件中,不丢失)

2.DQL语言(Data Query Language)

2.1、DQL

所有查询操作都用它 Select简单查询和复杂查询都能做数据库中最核心的语言​使用频率最高

2.2、指定要查询的字段

--基本格式: SELECT 字段1,字段2... FROM 表名SELECT * FROM teacher -- *表示所有字段SELECT `name`,`pwd` FROM teacher SELECT `name` AS 姓名, `pwd` AS 密码 FROM teacher AS Tea -- 将查出来的name和pwd分别起一个别名,表名也可以起别名SELECT CONCAT('姓名:',`name`) AS 新名字 FROM teacher -- 将查出来的数据进行字符串拼接,并把此列起一个别名

2.3、去重(distinct)

select查询出来的数据中如有重复,让重复的数据只显示一条

--直接将distinct加在select后面SELECT DISTINCT `name` FROM teacher

2.4、其它用法

SELECT VERSION() --查询系统版本(函数)SELECT 100*3-1 AS 计算结果 --计算表达式(表达式)SELECT @@auto_increment_increment --查询自增的步长(变量)SELECT `score`+1 AS 提分后 FROM teacher --对于score一列全部加一然后查看

2.5、利用where查询

查询符号我们所设计的要求的数据

!= 或者 NOTSELECT name score FROM teacher WHERE NOT score=100 -- 查询出成绩不是100的||SELECT name score FROM teacher WHERE score>=95 || score<=25 --查询成绩大于等于95的或者小于等于25的and &&:SELECT name score FROM teacher WHERE score>=95 AND score<=1000--查询出成绩是95到100的区间:SELECT name score FROM teacher WHERE score BETWEEN 95 AND 100--查询出成绩是95到100的

2.6、模糊查询

运算符:

运用案例:

-----------------模糊查询------------------ like结合 %(代表0到任意个字符) _(代表一个字符)SELECT `name` FROM `teacher`WHERE NAME LIKE '李%' --查询姓李的人SELECT `name` FROM `teacher`WHERE NAME LIKE '王_' --查询姓王的人且王字后面只有一个字SELECT `name` FROM `teacher`WHERE NAME LIKE '%文%' --查询名字中带文的人SELECT `name` FROM `teacher`WHERE id IN (1, 2, 4) --查询id是1或者2或者4的人SELECT `name` FROM `teacher`WHERE address='' OR address IS NULL --查询地址为空的人(即空字符串或者null的)

2.7、联表查询(重点)

此处仅讲解inner join和left join 还有 right join,想要深入了解可以自行搜索七种join理论

假如目前有两个表:

result表:

​ --最后一条数据所对应的学号仅在result表存在

stu表:

–最后一条数据所对应的学号仅在stu表存在

需求:假如我们要想要同时拿到StudentNo(两个表都有)、StudentName(仅stu表有)、StudentResult(仅result表有)三列的数据:

分析:

确定数据从哪些表格取;stu和result表确定两个表格是否有交集,否则无法联立,此处都有StudentNo确定将哪个表作为主表

inner join的写法:

SELECT `StudentName`, s.`StudentNo`, `StudentResult` -- 确定需要的信息,此处由于StudentNo在两个表都有,注意要给他注明从哪个表取FROM `stu` AS s -- 选择要从哪个表,并给stu表起个别名INNER JOIN `result` AS r -- 选择要连接哪个表,此处选择result,并给它起个别名rON s.`StudentNo`=r.`StudentNo` -- 设置条件,联立两个表[Where ..AND...] --可以在后面加入其它条件缩小范围

inner join结果:

同样地:我们看看另外两种连接的方式:

left join的写法:

SELECT `StudentName`,s.`StudentNo`,`StudentResult`FROM `stu` AS sLEFT JOIN `result` AS r --仅在此处作改变,此时stu是主表ON s.`StudentNo`=r.`StudentNo`

left join结果:

right join的写法:

SELECT `StudentName`,s.`StudentNo`,`StudentResult`FROM `stu` AS sRight JOIN `result` AS r--仅在此处作改变,此时result是主表ON s.`StudentNo`=r.`StudentNo`

结果:

总结:

可以结合上面的图对比

inner join是交集,所以对于两个表格都特有的数据,结果中没有取出来left join是将左表作为主表,FROMstuAS s

LEFT JOINresultAS r ,这句就是说left左边的表格stu是主表,所以结果还会会展示stu所特有的数据right join是将右表作为主表,FROMstuAS s

LEFT JOINresultAS r ,这句就是说right右边的表格result是主表,所以结果还会会展示stu所特有的数据

2.8、自连接(了解)

将一个表拆成两个表查询可以称为自连接,具体使用可自行搜索,此处不再过多概述

2.9、分页和排序

假设目前score表是:

排序:记住两个关键字,desc为降序,asc为升序

SELECT * FROM scoreORDER BY score DESC --按照降序展示,将desc改为asc即为升序结果

降序结果:

分页:起始位置,每页的数据条数

细节的注意:如果要把分页和排序组合的话,要先写order by 在写limit,即后面加条件的话要按照一定的顺序,其他的也是如此,下面的图给出了条件加入的顺序:

SELECT * FROM scoreLIMIT 0,5 --表示从第一条数据开始,每页五条数据 (格式:起始位置,页面大小)

分页后:

2.10、子查询

子查询简单理解其实就是嵌套查询

有些情况下可以用子查询而不需要去使用联表查询就可以解决问题

但是子查询能解决的需求基本都能用联表查询去解决

假设现在有result表:

stu表:

--需求:假设我们现在要从result表中查询小明的成绩:SELECT `StudentNo`,`StudentResult`FROM `result`WHERE StudentNo=( --条件就是result表中的目标学号对应小明的学号,接着从stu表中找到小明的学号,括号的结果就是返回了小明的学号SELECT `StudentNo`FROM `stu`WHERE `StudentName`='小明')

查询结果:

​ ------能看到这里的想必都不简单!祝你天天向上!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。