文章目录
-
目录
一.DML概述
注入数据( Insert)
替换数据(replace)
删除数据 (delete)
修改数据 (update)
查询数据 (select)
二. 多表连接查询
内连接
子查询:A查询的结果是B查询的条件
总结
一.DML概述
DML(Data Manipulation Language)是MySQL中用于操作数据库中数据的语言。DML语句用于插入、更新和删除数据库中的记录,以及查询和修改数据库中的数据。
常用的DML语句包括:
- SELECT:用于从数据库中查询数据,可以根据条件过滤数据。
- INSERT:用于向数据库中插入新记录。
- UPDATE:用于更新数据库中的记录。
- 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查询的条件
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 条件语句;
演示案例:
#查询数学成绩是90的学生总分成绩
select total_score from 期末成绩
where 期末成绩.math_score = (select math_score from 年级成绩 where 年级成绩.math_score = 92);注:子查询中的语句在查询表中不可重复,因为子查询仅返回B一个查询结果给A查询使用