当前位置:网站首页>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 = 6 | false |
< > 或 ! = | 不等于 | 5 != 6 | true |
> | 大于 | 5 > 6 | false |
< | 小于 | 5 < 6 | true |
>= | 大于等于 | 5 >= 6 | false |
<= | 小于等于 | 5 <= 6 | true |
BETWEEN | 在某个范围之间 | BETWEEN 5 AND 10 | - |
AND | 并且 | 5 > 1 AND 1 > 2 | false |
OR | 或 | 5 > 1 OR 1 > 2 | true |
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;
边栏推荐
- Currently, mysql5.6 is used. Which version would you like to upgrade to?
- Logstack introduction and deployment -- elasticstack (elk) work notes 019
- Video scrolling subtitle addition, easy to make with this technique
- Fundamentals of digital circuit (IV) data distributor, data selector and numerical comparator
- 软件测试面试要问的性能测试术语你知道吗?
- Nest and merge new videos, and preset new video titles
- How to use Moment. JS to check whether the current time is between 2 times
- 全网最详细的postman接口测试教程,一篇文章满足你
- ByteDance ten years of experience, old bird, took more than half a year to sort out the software test interview questions
- Detailed introduction to dynamic programming (with examples)
猜你喜欢
CSAPP家庭作業答案7 8 9章
Transplant hummingbird e203 core to Da Vinci pro35t [Jichuang xinlai risc-v Cup] (I)
Build your own application based on Google's open source tensorflow object detection API video object recognition system (I)
About the garbled code problem of superstar script
UCORE lab2 physical memory management experiment report
C language do while loop classic Level 2 questions
What is an index in MySQL? What kinds of indexes are commonly used? Under what circumstances will the index fail?
ucore lab6 调度器 实验报告
Investment operation steps
如何成为一个好的软件测试员?绝大多数人都不知道的秘密
随机推荐
CSAPP家庭作業答案7 8 9章
ucore lab2 物理内存管理 实验报告
1. Payment system
UCORE lab2 physical memory management experiment report
Function: string storage in reverse order
Get started with Matplotlib drawing
Pointer -- output all characters in the string in reverse order
If the position is absolute, touchablehighlight cannot be clicked - touchablehighlight not clickable if position absolute
5 minutes to master machine learning iris logical regression classification
Stc-b learning board buzzer plays music 2.0
ucore lab6 调度器 实验报告
My first blog
Maximum nesting depth of parentheses in leetcode simple questions
Pointer -- eliminate all numbers in the string
王爽汇编语言学习详细笔记一:基础知识
{1,2,3,2,5} duplicate checking problem
软件测试需求分析之什么是“试纸测试”
C language do while loop classic Level 2 questions
[pointer] use the insertion sorting method to arrange n numbers from small to large
Keil5 MDK's formatting code tool and adding shortcuts