文章目录

  • 一、新增(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对所有列查询
通常情况下不建议使用 * 进行全列查询

  1. 查询的列越多,意味着需要传输的数据量越大;
  2. 可能会影响到索引的使用.
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)

比较运算符:


逻辑运算符:

注意:

  1. WHERE条件可以使用表达式,但不能使用别名。
  2. 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 的时候不能直接使用 = ,可以用

  1. <=>
  2. 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 ...

我们可以把一个表的查询结果插入到另外一个表中,需要注意以下几点:

  1. 查询表中的结果中的字段要和插入表中的字段类型对应
  2. 不一定需要两个表中的字段全部对应,只需要查询到的结果中的字段在被插入的表中要存在,且类型一样

代码示例:
创建一个学生表和用户表,插入两条数据

-- 用户表
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 表名;

总结

  1. 插入数据
-- 单行插入
insert into 表(字段1, ..., 字段N) values (value1, ..., value N);
-- 多行插入
insert into 表(字段1, ..., 字段N) values
(value1, ...),
(value2, ...),
(value3, ...)
  1. 查询: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 条件
比特科
  1. 修改:update
update 表 set 字段1=value1, 字段2=value2... where 条件
  1. 删除:delete
delete from 表 where 条件

注意:

  1. where 条件可以使用表达式,但不能使用别名
  2. 判断是否为 null 要使用 <=> 或者 is null ,非 null 则用 not null
  3. 修改数据时一定要加上 where ,一旦忘记加上 where 就可能修改掉所有数据
  4. 如果操作线上数据库,每个SQL语句都要带上 limit

6000字总结MySQL最基础的增删查改命令相关推荐

  1. mysql 查询和修改组合_## 超详细MySQL常用语句,增删查改

    ## MySQL常用语句,增删查改,安装配置mysql服务 ***#新手博客,应届生,谢谢支持哟 记得点赞关注哟*** ***-----sql常见命令:--------*** 安装服务:mysqld ...

  2. MySQL表sql语句增删查改_学会这些操作你就不会栓Q(狗头)

    目录 本章目标 CRUD 新增(Create) 单行数据,全列插入 多行插入,指定列插入 查询(Retrieve) 修改(Update) 删除(Delete) 本章目标 学会MySQL表中的sql语句 ...

  3. Java培优班 - 第二十天、第二十一天 - JavaWeb - Part 1: 课程 - MySQL(理论常识 + 增删查改 + 数据类型 + 备份/恢复 ) -(较全)

    文章目录 1.1数据库概述 1.1.1什么是数据库? 1.1.2什么是关系型数据库\color{#ff0011}{关系型数据库}关系型数据库? 1.1.3数据库相关概念\color{#ff0011}{ ...

  4. mysql scrapy 重复数据_scrapy关于将数据保存进mysql数据库及问题解决(增删查改)

    importpymysqlfrom scrapy.utils.project import get_project_settings#引入settings配置 classDBHelper():def ...

  5. Node连接MySQL并封装其增删查改

    Node连接Mysql 说到node,可能大家会想到MOngoDB作为数据库,这里将会介绍node与mysql的连接,并分享了封装好的实例代码,在项目开发中可直接使用.下一篇博客将会讲node连接Mo ...

  6. c#连接mysql数据库,增删查改命令执行

    全栈工程师开发手册 (作者:栾鹏) c#教程全解 c#连接mysql数据库,实现有返回值的和没有返回值的命令执行.其中ExecCommand为执行数据库命令,没有返回值.Query_Database为 ...

  7. mysql菜鸟指南(增删查改、数据类型、常用命令)

    1.连接数据库 [root@host]# mysql -u root -p Enter password:****** 2.查看数据库 SHOW DATABASES; 3.创建数据库 mysql> ...

  8. django与mysql实现增删_django与mysql实现简单的增删查改

    模型定义 from django.db import models class Grades(models.Model): g_name = models.CharField(max_length=2 ...

  9. MySQL - 对数据表进行“增删查改”的基础操作 - 细节狂魔

    文章目录 前文知识点回顾 正文 :对数据表进行"增删查改"操作 新增操作 - insert 关键字 查找语句(基础操作) - select关键字 - 重点!!!!!!!! 1.最基 ...

最新文章

  1. 爬虫自动登陆GitHub
  2. Proxy 补充学习笔记
  3. 嵌入式 linux usb转串口,Linux下,USB转串口问题
  4. BookStack在线文档管理系统 v2.9
  5. 怎么增加服务器容量,新睿云服务器硬盘容量怎么增加?
  6. php计算对角线,python计算对角线有理函数插值的方法
  7. jinja2模板注入_Flask(Jinja2) 服务端模板注入漏洞
  8. AI已火,宗教当生,硅谷出了个“洪秀全”
  9. 8 种 NoSQL 数据库系统对比
  10. 跨境电商SaaS会成为一门大生意吗?
  11. 解三对角矩阵以及循环三对角矩阵方程的数值计算方法
  12. python读取csmar_Python:爬取上市公司公告-Wind-CSMAR
  13. SecureCRT 经典配色方案
  14. WP应用程序磁贴设置
  15. [云原生专题-34]:K8S - 核心概念 - 网络 - Web服务器与反向代理服务器nginx入门介绍
  16. 卡贴机变无锁教程_卡贴机怎么解锁变无锁
  17. 纽约州立石溪分校计算机科学排名,纽约州立大学石溪分校计算机科学专业排名第40(2020年USNEWS美国排名)...
  18. 鸿蒙强者排行榜,琉璃美人煞十大强者排名,腾蛇垫底,司凤第七,罗喉计都屈居第二...
  19. SQL日期、转换、通用函数
  20. Kali Linux渗透测试之端口扫描(一)——UDP、TCP、隐蔽端口扫描、全连接端口扫描

热门文章

  1. 【分布式系统】唯一ID生成策略总结
  2. Data Mining Machine Learning学习笔记 机器学习入门笔记 之jieba分词(中文分词)(二)
  3. 学习 《模型思维》-斯科特·佩奇 笔记 9.29
  4. ArrayList源码分析
  5. Codeforces 877 E Danil and a Part-time Job(线段树+dfs序)
  6. js中用正则表达式判断字符串中是否包含中文和英文
  7. 基于UA-DETRAC车辆数据集在windows10系统下yolov3模型训练
  8. mybtisset where tirm 等标签的作用
  9. Android开发实战《手机安全卫士》——11.“进程管理”模块拓展 窗体小部件 生成快捷方式
  10. Linux系统编程 74 孤儿进程和僵尸进程