当前位置:网站首页>MySQL数据库(二)DML数据操作语句和基本的DQL语句

MySQL数据库(二)DML数据操作语句和基本的DQL语句

2022-07-06 09:25:00 手可摘鑫晨

1,DML 语句

(1)数据增加:INSERT,主要功能是给数据库表增加记录。

(2)数据删除:DELETE,主要功能是删除数据库表中已有的记录。可以依照条件去做修改。

(3)数据修改:UPDATE,主要功能是修改数据库表中已有的记录。可以根据条件去做修改。

2,数据添加:INSERT 

        语法:INSERT INTO 表名 [(字段1,字段2,字段3...字段n)] VALUE/VALUES (值1,值2,值3...值n)[(值1,值2,值3...值n)];

# DML
-- INSERT INTO 表名 (字段名,字段名,字段名)values (值,值,值)
-- 添加一个学生

-- 日期要用字符串来表示
INSERT INTO student(sid,sname,birthday,ssex,classid) VALUE(9,'张三','1988-1-1','男',2);

-- 选择字段进行插入(有默认值的不可以进行插入数据)
INSERT INTO student(sname) VALUE('李四');

-- 全字段插入可以不在表名后面写字段名
INSERT INTO student VALUE(11,'王五','1999-1-1','女',1);

-- DEFAULT,NULL 给主键进行自增的默认值
-- NULL 只能给主键
INSERT INTO student(sid) VALUES(NULL);

3,数据添加:INSERT INTO SELECT

        语法:INSERT INTO table2(字段1,字段2...) SELECT 字段1,字段2... FEOM table1;

-- 一次性插入多条数据
-- 方式一:
-- VALUES 插入多条 VALUE 插入一条

INSERT INTO student(sname) VALUES('李云'),('周梅'),('吴兰'),('郑竹'),('王菊');

INSERT INTO student VALUES(NULL,'李云','1990-08-06','男',2),(NULL,'周梅','1991-12-01','女',1),(NULL,'吴兰','1992-03-01','女',2),(NULL,'郑竹','1989-07-01','女',1),(NULL,'王菊','1990-01-20','女',2);

-- 方式二:
-- INSERT INTO SELECT
-- 表都有存在

CREATE TABLE newstu(
	xingming VARCHAR(10),
	xingbie VARCHAR(10)
);

INSERT INTO newstu(xingming,xingbie) SELECT sname,ssex FROM student;

-- 方式三:
-- CREATE TABLE 新表 SELECT;

CREATE TABLE stu SELECT sid,sname,birthday FROM student;
SHOW CREATE TABLE stu;

4,数据修改:UPDATE

        语法:UPDATE 表名 SET 字段1 = 值1 [SET 字段2 = 值...] [WHERE 条件]

# 修改
-- WHERE 必须要写
-- UPDATE 表名 SET 字段名=值,字段名=值...字段名=值 [WHERE 子句]
UPDATE newstu SET xingbie='男' WHERE xingming='钱电';
UPDATE stu SET birthday='2022-06-07' WHERE sid <> 3;
UPDATE stu SET birthday='2000-01-01' WHERE sid >= 4 AND sid <=8;
UPDATE stu SET birthday='1888-01-01' WHERE sid BETWEEN 4 AND 8;

5,WHERE子句 

运算符含义举例结果
等于5 = 6false
< > 或 ! =不等于5 != 6true
>大于5 > 6false
<小于5 < 6true
>=大于等于5 >= 6false
<=小于等于5 <= 6true
BETWEEN在某个范围之间BETWEEN 5 AND 10-
AND并且5 > 1 AND 1 > 2false
OR5 > 1 OR 1 > 2true
NOT

        =:set后面表示赋值,where表示判断 

6,数据删除:DELETE

        语法:DELETE FROM 表名 [WHERE 条件];

# 删除
-- DELETE FROM 表名 [WHERE 子句]
-- 表中的所有数据都删掉
DELETE FROM newstu;
DELETE FROM stu WHERE sname='赵雷';
DELETE FROM stu WHERE sid >=2 AND sid <= 6;
-- BETWEEN 后面跟小数据 AND 后面跟大数据
DELETE FROM stu WHERE sid BETWEEN 7 AND 10;

7,数据清空:TRUNCATE

        TRUNCATE [TABLE] 表名;

-- 清空表
-- TRUNCATE 表名
TRUNCATE stu;
DELETE FROM student;
TRUNCATE student;
-- DELETE TRUNCATE  区别		
-- DELETE 不删除索引值

8,MySQL数据库恢复方法

控制台恢复:mmysql –h localhost -P 3306 –u root –p day001 < /path/db_name.sql;

day001 :要恢复的数据库的名字。

/path/db_name.sql :要恢复数据库的绝对路径。

控制台备份:mysqldump -h localhost –P 3306 –u root –p day001 > /path/db_name.sql;

day001 :要备份的数据库的名字。

/path/db_name.sql :要备份数据库的绝对路径。

9,数据库备份和恢复的作用与价值

高可用性:使数据库的失效次数减到最少,从而使数据库保持最大的可用性。

安全性:计算机病毒型、特洛伊木马型、“黑客”入侵型、逻辑炸弹型等会造成信息丢失,丢失的数据需要及时恢复。

完整性:当数据库失效后,确保尽量少的数据丢失或根本不丢失,从而使数据具有最大的完整性。

10,单表查询

select [distinct] 

{ * 或 表1.* 或 [表1.字段1 [ as 字段别名1] [, 表1.字段2 [as 字段别名2]] [......]  ]  }

from 表1 [as 表别名]

[left 或 rigth 或 inner join 表2 on  表之间的关系 ]

[where]

[group by]

[limit {[位置偏移量,] 行数}];

关键字作用
distinct去除表中重复记录
as给字段名或者表名起别名
group by按组分类显示查询出的数据
having在分组后起条件限制作用
order by将查询的数据进行排序
limit限制显示结果的条数
# 查询
-- 最简单的查询
SELECT 'abc';

-- 从数据表中查询

-- 全字段查询
-- SELECT 字段名...,字段名 FROM 表名;

-- 推荐
SELECT sid,sname,birthday,ssex,classid FROM student;
-- 不推荐,不符合sql优化原则
SELECT * FROM student;
-- 部分字段查询
SELECT sname,ssex,'猿究院' FROM student;
-- 给字段起别名
SELECT sname AS '姓名',ssex '性别','猿究院' 学校 FROM student;

11,去除重复数据:distinct

语法:select distinct 字段名1,字段名2... from 表名

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

-- DISTINCT 去除重复(查询所有字段一样,重复的去掉)

SELECT DISTINCT sname,birthday FROM student;

12,where 

语法:select * from 表名 [where 条件];

-- 带条件查询
SELECT * FROM student WHERE ssex = '男';
SELECT * FROM student WHERE ssex = '男' AND classid = 2;
SELECT * FROM student WHERE ssex = '女' AND classid != 2;

-- sid(4-7)
SELECT * FROM student WHERE sid BETWEEN 4 AND 7;
SELECT * FROM student WHERE sid >= 4 AND Sid <= 7;

-- sid !(4-7)
SELECT * FROM student WHERE sid <= 4 OR sid >= 7;

-- 找到生日大于1990的学生(日期的)
SELECT * FROM student WHERE birthday < '1990-1-1';
INSERT INTO student (sname) VALUES ('王老师'),('隔壁王老师'),('帅气的王老师'),('老王'),('王岩仪');

13,like 模糊查询

语法:select * from 表名 where 字段 like 条件;

-- LIKE 模糊查询
-- 模糊符号 
-- % 任意多的任意字符
-- _ 一个任意字符
SELECT * FROM student WHERE Sname LIKE '王%';
SELECT * FROM student WHERE Sname LIKE '%王%';
SELECT * FROM student WHERE sname LIKE '王_';

14,in 范围查询

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

-- IN 在这个范围内的
-- 2,4,5,7,9,200
SELECT * FROM student WHERE Sid IN (2,4,5,7,9,200);

15,null 

语法:select * from 表名 where 字段 is null 或 is not null;

-- 对null的条件
SELECT * FROM student WHERE birthday is NULL;
SELECT * FROM student WHERE birthday is NOT NULL;

16,聚合函数

函数名返回值
avg(col)返回指定列的平均值
count(col)返回指定列中非null值的个数
min(col)返回指定列的最小值
max(col)返回指定列的最大值
sum(col)返回指定列的所有之和
-- 聚合函数
-- COUNT(字段名) 统计个数
-- COUNT 不统计null
-- 推荐使用主键来进行个数的统计
-- * 推荐
-- 常量 推荐

-- 统计出学生表中一共有多少个男同学
SELECT COUNT(Ssex) FROM student WHERE Ssex= '男';

-- 都是统计数值的
-- AVG(字段名) 求平均值
SELECT AVG(score) FROM sc;

-- MAX(字段名) 最大值
SELECT MAX(score) FROM sc;

-- MIN(字段名) 最小值
SELECT MIN(score) FROM sc;

-- SUM(字段名) 总和
SELECT SUM(score) FROM sc;

-- 统计出成绩表中一共出现的考试次数,最高分,最低分,平均分,总分
SELECT COUNT(*) 次数,MAX(score) 最高分,MIN(score) 最低分,AVG(score) 平均分,SUM(score) 总分 FROM sc;

17,group by 和 having 分组

group by:

        1、对所有的数据进行分组统计。

        2、分组的依据字段可以有多个,并依次分组。

having:

        与group by 结合使用,进行分组后的数据筛选

-- 分组 GROUP BY
-- 统计学生表中不同性别的个数
SELECT ssex,COUNT(1) FROM student GROUP BY Ssex;

-- 统计学生表中不同班级的人数
SELECT classid 班级, COUNT(*) FROM student GROUP BY classid;

-- 成绩表中每个学生的平均成绩
SELECT sid,AVG(score) FROM sc GROUP BY Sid;

-- 统计成绩 每个学生大于60分的总分数
SELECT sid,SUM(score) FROM sc WHERE score >=60 GROUP BY Sid;

-- 分组后筛选 HAVING
-- 总分数大于200分
-- WHERE 后面不能有聚合的数据
-- HAVING 后面的条件是聚合之后的筛选
-- 不能单独出现,必须和 GROUP BY 一起出现
-- WHERE 和 HAVING的区别

SELECT sid,SUM(score) FROM sc WHERE score >= 60 GROUP BY Sid HAVING SUM(score) > 200;

-- 找到每门课程的平均分,显示出平均分大于85分的课程和平均分

SELECT cid,AVG(score) FROM sc GROUP BY cid HAVING AVG(score) >85;

18,order by 排序

语法:select * from 表名 order by 字段名 [desc 或 asc];

-- 排序
-- DESC 降序
-- ASC 升序
-- 规则 :先写先排,后写后排

SELECT * FROM student ORDER BY Sid;
SELECT * FROM sc ORDER BY score DESC,Cid DESC;

19,limit 分页

语法:selsct * from 表名 limit [n,m];

-- LIMIT 分页
-- LIMIT num 前几条
-- LIMIT num(位置),num(步长) 

SELECT * FROM student LIMIT 0,3;

-- 公式 :(页码-1)*步长

-- 错误写法
SELECT * FROM student LIMIT (1-1)*3,3;

-- 查询出成绩表中考试平均分是第二名的学生
SELECT sid,AVG(score) FROM sc GROUP BY sid ORDER BY AVG(score) DESC LIMIT 1,1;
原网站

版权声明
本文为[手可摘鑫晨]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_61562689/article/details/125190265