Mysql---DML

文章目录


一.DML概述

        DML(Data Manipulation Language)是MySQL中用于操作数据库中数据的语言。DML语句用于插入、更新和删除数据库中的记录,以及查询和修改数据库中的数据。

常用的DML语句包括:

  1. SELECT:用于从数据库中查询数据,可以根据条件过滤数据。
  2. INSERT:用于向数据库中插入新记录。
  3. UPDATE:用于更新数据库中的记录。
  4. DELETE:用于删除数据库中的记录。

注入数据( Insert)

  • 语法:
INSERT INTO 表名 [字段列表] VALUES (值列表);
  • 演示案例 1:

#单次注入一行字段数据
insert into 期末成绩
values("初中","一年级",90,"张三","英语");

#单词注入多行字段数据
insert into 期末成绩 
values
("高中","一年级",90,"李四","英语"),
("大学","一年级",80,"周五","英语");

演示案例 2  :

  • 语法:
#给表中的指定的列注入数据
insert into 表名 (字段列) values (值列表);


#给表中的指定的列注入数据
insert into 期末成绩 
(种类,年级,成绩,学生,科目)
values
("高二","90","李四","数学");

 

 替换数据(replace)

语法格式1:replace into 表名 [(字段列表)] values (值列表)

replace语句的功能与insert语句的功能基本相同,不同之处在于:使用replace语句向表插入新记录时,如果新记录的**主键值或者唯一性约束**的字段值与已有记录相同,则已有记录先被删除(注意:已有记录删除时也不能违背外键约束条件),然后再插入新记录。

使用replace的最大好处就是可以将delete和insert合二为一(效果相当于更新),形成一个原子操作,这样就无需将delete操作与insert操作置于事务中了

删除数据  (delete)

DELETE FROM 表名 [WHERE 条件];
TRUNCATE FROM 表名 [WHERE 条件];

**DROP、TRUNCATE、DELETE的区别:**

delete:删除数据,保留表结构,可以回滚,如果数据量大,很慢

truncate: 删除所有数据,保留表结构,不可以回滚,一次全部删除所有数据,速度相对很快

drop: 删除数据和表结构,删除速度最快。
  •  演示案例 3

delete from `期末成绩` where 种类 = "大学";

修改数据 (update)

语法:

UPDATE 表名 SET
列名 = 新的值
[,列名 = 新的值,列名 = 新的值]
[WHERE 条件];

演示案例:

update 期末成绩 set 
成绩 = "60",科目 ="数学"
where  学生 = "李四";

 查询数据 (select)

语法:

SELECT 需要查询的列
FROM 表名 [,其余表]
[连接机制]
[WHERE 条件]
[GROUP BY 分组条件]
[ORDER BY 排序条件]
[LIMIT 区间条件];

演示案例:

  • where: 
#查询期末考试表中数学成绩在70到90之间的学生姓名;
select student_name from 期末考试 where math_score between 70 and 90;

#查询数学成绩为90的学生姓名以及年级
select student_name,grade from 期末考试 where math_score = 90;

#查询数学成绩为90的student_name并将列名重设为"学生","姓名"
select student_name as "学生" from 期末考试 where math_score = 90;

#查询期末考试表中所有的年级并去重
select distinct grade from 期末考试;

#查询名字中含"e"的学生信息
select  * from 期末考试 where student_name like "%e%";
like "xxx%"  以XXX开头
like "%xxx"  以XXX结尾
like "%xxx%" 包含XXX


#查询数学成绩是90或88的学生信息
select  * from 期末考试 where math_score = 88 or  math_score = 90;

#查询数学成绩不是88和90的学生信息
select  * from 期末考试 where math_score not in (88,90);
  • 分组: 
#以年级为10分组查询期末考试这张表中的数学平均分
select  avg(math_score) as "平均分" from 期末考试 group by grade = 10;
max  最大值  min 最小值  avg 平均值 sum 求和 

#使用having对分组筛选后的条件再次筛选
以年级为10分组查询期末考试这张表中的数学平均分并过滤90分以下的
select  avg(math_score) as "平均分" from 期末考试 group by grade having  avg(math_score) >= 90 ;
  •  排序
#根据学生成绩降序查看学生信息:降序(desc) 升序(asc)
select  * from 期末考试 ORDER BY math_score desc;
  • Limit 
limit 初始行数 查询几行

#根据学生成绩降序查看学生信息并显示前三行
select  * from 期末考试 ORDER BY math_score desc limit 0,3;

二. 多表连接查询

  • 演示案例:

等值连接:

#查询年级表和期末考试表中数学成绩重复的信息
SELECT * FROM 年级成绩,期末考试
where 期末考试.math_score = 年级成绩.math_score;

 内连接

语法:

SELECT 列名
FROM 表1
INNER JOIN 表2
ON 表1.列名 = 表2.列名;

SELECT 列名 指定要查询的列,可以是表1的列、表2的列或者其他计算字段但不能同时属于同一张表
FROM 表1 INNER JOIN 表2 指定要进行连接的两个表,并使用 INNER JOIN 关键字表示内连接。
ON 表1.列名 = 表2.列名 指定连接条件,即连接两个表的列。这里的列名应该是两个表中相同的列名。
#查询期末考试以及年级成绩这两张表中数学成绩相同的学生并显示该学生的总成绩
select total_score from 期末成绩 inner join 年级成绩 
on 期末成绩.math_score = 期末成绩.math_score;

 子查询:

A查询的结果是B查询的条件

 

 演示案例:

#查询数学年级平均分和王五熟数学成绩相同的年级
select 年级ID from 年级表
where 年级表.`年级数学平均分` = (select 数学成绩 from 学生表 where 姓名 = "王五");

注:子查询中的语句在查询表中不可重复,因为子查询仅返回B一个查询结果给A查询使用

 外连接:

left join:代表选择的是前面一个表的全部。
左连接是以左表为标准,只查询在左边表中存在的数据,当然需要两个表中的键值一致。语法如下:
SELECT 列名1 FROM 表1 LEFT OUTER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;

3. right join:代表选择的是后面一个表的全部
同理,右连接将会以右边作为基准,进行检索。语法如下:
SELECT 列名1 FROM 表1 RIGHT OUTER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;

三.SQL函数

聚合函数

聚合函数对一组值进行运算,并返回单个值。也叫组合函数。
COUNT(*|列名) 统计行数
AVG(数值类型列名) 平均值
SUM (数值类型列名) 求和
MAX(列名) 最大值
MIN(列名) 最小值
除了COUNT()以外,聚合函数都会忽略NULL值。

 

count(*) 和 count(1)和count(列名)区别  

执行效果上:  
count(*)包括了所有的列,相当于行数,在统计结果的时候,**不会忽略列值为NULL** 
count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,**不会忽略列值为NULL**  
count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计

数值类型函数 

字符串函数 

 


总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北 染 星 辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值