6000字总结MySQL最基础的增删查改命令
文章目录
- 一、新增(Create)
- 1.单行数据 + 全列插入
- 2.多行数据 + 全列插入
- 3.多行数据+指定列插入
- 二、查询(Retrieve)
- 1.全列查询
- 2.指定列查询
- 3.查询字段为表达式
- 4.起别名(as)
- 5.去重(distinct)
- 6.排序(order by)
- 7.条件查询(where)
- 范围查询
- in
- 模糊查询:LIKE
- null的查询
- 8.分页查询(limit)
- 9.插入查询结果
- 三、修改(Update)
- 四、删除(Delete)
- 总结
CRUD也就是我们常说的增删查改也是数据库最基础的操作
C:create增加
R:retrieve 查找
U:update 修改
D:delete 删除
注释: 在SQL中 – 表示注释,需要独占一行,或者使用 comment注释。
一、新增(Create)
我们先创建一张学生表
-- 创建一张学生表
create table student (id int,-- 学号sn int,-- 姓名name varchar(16),-- qq邮箱qq_mail varchar(17)
);
使用 insert into 表名 values 对表进行插入数据
注意:数量必须和定义表的列的数量及顺序一致
1.单行数据 + 全列插入
insert into student values (1,20210001,'刘备','12345@qq.com');
insert into student values (2,20210002,'张飞','1234566@qq.com');
2.多行数据 + 全列插入
insert into student values (3,20210003,'关羽','1234567@qq.com'),
(4,20210003,'诸葛亮','10001@qq.com');
3.多行数据+指定列插入
我们还可以指定单独几个列进行插入,需要注意:插入的顺序要对应
-- 指定插入学号和姓名
insert into student (sn,name) values (5,'曹操'), (6,'周瑜');
注意:更建议一条语句插入多条数据,插入数据的时候会涉及到网络传输,如果多条数据分多次插入就会涉及到多次网络传输,开销也就会更大。
二、查询(Retrieve)
我们先创建一个考试成绩表
-- 创建考试成绩表
create table exam_result (-- 学号id int,-- 姓名name varchar(20),-- 语文chinese decimal(3,1),-- 数学math decimal(3,1),-- 英语english decimal(3,1)
);
-- 插入数据
insert into exam_result (id,name,chinese,math,english) values(1,'刘备',77.5,98,56),(2,'张飞',80,66,77),(3,'关羽',67,87,56),(4,'曹操',77.5,78,66),(5,'诸葛亮',87,98.5,88),(6,'宋江',80,76,65),(7,'李逵',50,30.5,45);
我们通过 select 关键字来进行查找操作
1.全列查询
通过 select * from对所有列查询
通常情况下不建议使用 * 进行全列查询
- 查询的列越多,意味着需要传输的数据量越大;
- 可能会影响到索引的使用.
select * from exam_result;
查询结果
2.指定列查询
这种方式比全列插叙更推荐使用
通过 select 多个列名 from 表名进行查询数据
-- 插叙学生名字和其对应的数学成绩select name,math from exam_result;
运行结果:
3.查询字段为表达式
我们可以指定的查询结果上加上一些简单的表达式,此操作查询出来的表只是一个临时表并不影响原来表的数据。
1.包含一个字段
-- 对查询的语文成绩加10分
select id,name,chinese+10 from exam_result;
运行结果:
2.包含多个字段
-- 对插叙的数学加10分,英语加5分
select id,name,chinese,math+10,english+5 from exam_result;
运行结果:
3.多个字段求和
我们可以对查询结果进行求和来求总成绩
select name,chinese+math+english from exam_result;
运行结果:
4.起别名(as)
为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称
select id,name,chinese+math+english 总分 from exam_result;
运行结果
为了更好区分我们还可以在别名前面加上 as 效果是一样的
select id,name,chinese+math+english as 总分 from exam_result;
给每个字段都起别名查询
select id as 学号,name as 姓名,chinese as 语文, math as 数学,english as 英语, chinese+math+english as 总分 from exam_result;
5.去重(distinct)
通过 查询关键字 select 配合 distinct 关键字来去重
select distinct 去重列名 from 表名
-- 不去重的查询
select chinese from exam_result;
去重后
-- 去重代码
select distinct chinese from exam_result;
还可以指定多列去重,指定多列的时候需要每一列都相同才会去重。
-- 去重前
select chinese,math,english from exam_result;
去重后
select distinct chinese,math,english from exam_result;
注意:每次去重操作其实都涉及到比较运算,比较整数没啥问题,如果比较 double 或者是 float 就可能存在误差。
decimal是可以精准比较的
比较字符串的时候,在创建数据库的时候会通过关键字 COLLATE 指定比较规则
6.排序(order by)
通过 order by 关键字来对查询数据进行排序。
- ASC 为升序(从小到大)
- DESC 为降序(从大到小)
- 默认为 ASC
注意:
1.没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
2.NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面
-- 按照数学成绩select name,math from exam_result order by math;
运行结果:
使用表达式排序
按总成绩从高到低排序
select id,name,chinese+math+english from exam_result order by chinese+english+math desc;
运行结果:
使用表达式排序起别名排序
select id,name,chinese+math+english as 总分 from exam_result order by chinese+math+english desc
运行结果:
多个字段进行排序,排序优先级随书写顺序
select name,chinese,math,english from exam_result order by chinese ,math,chinese;
先按照语文升序排序,如果语文成绩相同,用数学成绩进行降序排序,同理如果语文数学成绩相同就用英语降序排序
可对数据去重后排序
排序前
去重排序后
-- 对语文成绩去重排序
select distinct chinese from exam_result order by chinese;
7.条件查询(where)
比较运算符:
逻辑运算符:
注意:
- WHERE条件可以使用表达式,但不能使用别名。
- AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分
基本查询:
-- 查询英语不及格的同学select name,english from exam_result where english < 60;
-- 查询语文成绩好于数学成绩的同学
select name, chinese, math from exam_result where chinese > math;
-- 查询总分小于250分的同学
select name,chinese+math+english as 总分 from exam_result where chinese+math+english < 250;-- 查询总分小于250的同学并以升序排序
select name,chinese+math+english as 总分 from exam_result where chinese+math+english < 250 order by chinese+math+english;
AND与OR:
-- 查询语文成绩大于80分,且数学成绩大于80分的同学
select name,chinese,math from exam_result where chinese > 80 and math > 80;
-- 查询数学成绩大于80分,或者英语成绩大于80分的同学
select name,math,english from exam_result where math > 80 or english > 80;
范围查询
BETWEEN … AND .
注意:between and ,左右都是闭区间
-- 查询语文成绩在[80,90]分的同学
select name,chinese from exam_result where chinese between 80 and 90;
这个查询用 and 也是可以实现的
-- 使用 and 也是同样可以实现
mysql> select name,chinese from exam_result where chinese >= 80 and chinese <= 90;
in
-- 查找数学成绩分数等于 98或者66或者80或99分的同学
select name,math from exam_result where math in (98,66,80,99);
-- 使用or也可以实现同样的效果
select name,math from exam_result where math = 98 or math = 66 or math = 80 or math = 90;
模糊查询:LIKE
用 % 和 _ 可以使用模糊查询
“%”:可以代替 n 个字符
“_”:每一个可以代替一个字符
当前表中的所有同学
-- 查询所有姓孙的同学
select name from exam_result where name like '孙%';
运行结果
-- 查询所有名字两个字且性孙的同学
select name from exam_result where name like '孙_';
运行结果
null的查询
查询 NULL 的时候不能直接使用 = ,可以用
- <=>
- is null
-- 两种方法都可以判断是不是 null
select name chinese from exam_result where chinese <=> null;
select name chinese from exam_result where chinese is null;
示例:
查询不是 null 的同学
-- 查询英语成绩不为 null 的同学
select name chinese from exam_result where english is not null;
8.分页查询(limit)
如果查询的数据有成千上万条,就不适合在一个页面显示了。
语法:
-- 起始下标为 0
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
-- 查询从0开始的前三条数据
select id,name,chinese,math,english from exam_result limit 3;
-- 查询表中从3开始的后8条数据
select id,name,chinese,math,english from exam_result limit 3,8;
-- 查询表中从3开始的后8条数据,比上面那种方式更明确,也更建议使用
select id,name,chinese,math,english from exam_result limit 8 offset 3;
-- 查询从3开始往后8条数据并以数学成绩排序
select id,name,chinese,math,english from exam_result order by math limit 8 offset 3;
注意:如果操作线上数据库,每个SQL语句都要带上 limit
9.插入查询结果
语法:
INSERT INTO table_name [(column [, column ...])] SELECT ...
我们可以把一个表的查询结果插入到另外一个表中,需要注意以下几点:
- 查询表中的结果中的字段要和插入表中的字段类型对应
- 不一定需要两个表中的字段全部对应,只需要查询到的结果中的字段在被插入的表中要存在,且类型一样
代码示例:
创建一个学生表和用户表,插入两条数据
-- 用户表
create table user (id int primary key auto_increment,name varchar(20),age int,sex char
);
-- 学生表
create table student (name varchar(10),sex char
);
insert into student values ('李逵','男');
insert into student values ('宋江','男');
通过 select 语句 把查询到的学生表记录插入到用户表中
insert into user (name,sex) select name,sex from student;
三、修改(Update)
通过 update…set关键字来修改数据
注意:修改数据时一定要加上 where ,一旦忘记加上 where 就可能修改掉所有数据
语法:
UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]
修改前
-- 把孙权的数学成绩改成80
update exam_result set math = 80 where name = '孙权';
-- 把刘备的数学成绩改为60,语文改为成绩70
update exam_result set math = 60,chinese = 70 where name = '刘备';
修改前
-- 把总成绩前三的同学的数学分数减10分
update exam_result set math = math-10 order by chinese+math+english desc limit 3;
-- 将所有同学的语文成绩更新为原来的 2 倍
update exam_result set chinese = chinese*2;
四、删除(Delete)
语法:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
-- 删除孙膑的成绩
delete from exam_result where name = '孙膑';
删除整张表的数据
和drop 的区别就是表还在数据没了
delete from 表名;
总结
- 插入数据
-- 单行插入
insert into 表(字段1, ..., 字段N) values (value1, ..., value N);
-- 多行插入
insert into 表(字段1, ..., 字段N) values
(value1, ...),
(value2, ...),
(value3, ...)
- 查询:select
-- 全列查询
select * from 表
-- 指定列查询
select 字段1,字段2... from 表
-- 查询表达式字段
select 字段1+100,字段2+字段3 from 表
-- 别名
select 字段1 别名1, 字段2 别名2 from 表
-- 去重DISTINCT
select distinct 字段 from 表
-- 排序ORDER BY
select * from 表 order by 排序字段
-- 条件查询WHERE:
-- (1)比较运算符 (2)BETWEEN ... AND ... (3)IN (4)IS NULL (5)LIKE (6)AND (7)OR
(8)NOT
select * from 表 where 条件
update 表 set 字段1=value1, 字段2=value2... where 条件
delete from 表 where 条件
比特科
- 修改:update
update 表 set 字段1=value1, 字段2=value2... where 条件
- 删除:delete
delete from 表 where 条件
注意:
- where 条件可以使用表达式,但不能使用别名
- 判断是否为 null 要使用 <=> 或者 is null ,非 null 则用 not null
- 修改数据时一定要加上 where ,一旦忘记加上 where 就可能修改掉所有数据
- 如果操作线上数据库,每个SQL语句都要带上 limit
6000字总结MySQL最基础的增删查改命令相关推荐
- mysql 查询和修改组合_## 超详细MySQL常用语句,增删查改
## MySQL常用语句,增删查改,安装配置mysql服务 ***#新手博客,应届生,谢谢支持哟 记得点赞关注哟*** ***-----sql常见命令:--------*** 安装服务:mysqld ...
- MySQL表sql语句增删查改_学会这些操作你就不会栓Q(狗头)
目录 本章目标 CRUD 新增(Create) 单行数据,全列插入 多行插入,指定列插入 查询(Retrieve) 修改(Update) 删除(Delete) 本章目标 学会MySQL表中的sql语句 ...
- Java培优班 - 第二十天、第二十一天 - JavaWeb - Part 1: 课程 - MySQL(理论常识 + 增删查改 + 数据类型 + 备份/恢复 ) -(较全)
文章目录 1.1数据库概述 1.1.1什么是数据库? 1.1.2什么是关系型数据库\color{#ff0011}{关系型数据库}关系型数据库? 1.1.3数据库相关概念\color{#ff0011}{ ...
- mysql scrapy 重复数据_scrapy关于将数据保存进mysql数据库及问题解决(增删查改)
importpymysqlfrom scrapy.utils.project import get_project_settings#引入settings配置 classDBHelper():def ...
- Node连接MySQL并封装其增删查改
Node连接Mysql 说到node,可能大家会想到MOngoDB作为数据库,这里将会介绍node与mysql的连接,并分享了封装好的实例代码,在项目开发中可直接使用.下一篇博客将会讲node连接Mo ...
- c#连接mysql数据库,增删查改命令执行
全栈工程师开发手册 (作者:栾鹏) c#教程全解 c#连接mysql数据库,实现有返回值的和没有返回值的命令执行.其中ExecCommand为执行数据库命令,没有返回值.Query_Database为 ...
- mysql菜鸟指南(增删查改、数据类型、常用命令)
1.连接数据库 [root@host]# mysql -u root -p Enter password:****** 2.查看数据库 SHOW DATABASES; 3.创建数据库 mysql> ...
- django与mysql实现增删_django与mysql实现简单的增删查改
模型定义 from django.db import models class Grades(models.Model): g_name = models.CharField(max_length=2 ...
- MySQL - 对数据表进行“增删查改”的基础操作 - 细节狂魔
文章目录 前文知识点回顾 正文 :对数据表进行"增删查改"操作 新增操作 - insert 关键字 查找语句(基础操作) - select关键字 - 重点!!!!!!!! 1.最基 ...
最新文章
- 爬虫自动登陆GitHub
- Proxy 补充学习笔记
- 嵌入式 linux usb转串口,Linux下,USB转串口问题
- BookStack在线文档管理系统 v2.9
- 怎么增加服务器容量,新睿云服务器硬盘容量怎么增加?
- php计算对角线,python计算对角线有理函数插值的方法
- jinja2模板注入_Flask(Jinja2) 服务端模板注入漏洞
- AI已火,宗教当生,硅谷出了个“洪秀全”
- 8 种 NoSQL 数据库系统对比
- 跨境电商SaaS会成为一门大生意吗?
- 解三对角矩阵以及循环三对角矩阵方程的数值计算方法
- python读取csmar_Python:爬取上市公司公告-Wind-CSMAR
- SecureCRT 经典配色方案
- WP应用程序磁贴设置
- [云原生专题-34]:K8S - 核心概念 - 网络 - Web服务器与反向代理服务器nginx入门介绍
- 卡贴机变无锁教程_卡贴机怎么解锁变无锁
- 纽约州立石溪分校计算机科学排名,纽约州立大学石溪分校计算机科学专业排名第40(2020年USNEWS美国排名)...
- 鸿蒙强者排行榜,琉璃美人煞十大强者排名,腾蛇垫底,司凤第七,罗喉计都屈居第二...
- SQL日期、转换、通用函数
- Kali Linux渗透测试之端口扫描(一)——UDP、TCP、隐蔽端口扫描、全连接端口扫描
热门文章
- 【分布式系统】唯一ID生成策略总结
- Data Mining Machine Learning学习笔记 机器学习入门笔记 之jieba分词(中文分词)(二)
- 学习 《模型思维》-斯科特·佩奇 笔记 9.29
- ArrayList源码分析
- Codeforces 877 E Danil and a Part-time Job(线段树+dfs序)
- js中用正则表达式判断字符串中是否包含中文和英文
- 基于UA-DETRAC车辆数据集在windows10系统下yolov3模型训练
- mybtisset where tirm 等标签的作用
- Android开发实战《手机安全卫士》——11.“进程管理”模块拓展 窗体小部件 生成快捷方式
- Linux系统编程 74 孤儿进程和僵尸进程