MySQL表的增删改查(基础)

  • 新增(create)
    • 单行数据 + 全列插入
    • 多行数据 + 指定列插入
  • 查询(Retrieve)
    • 全列查找
    • 指定列查询
    • 查询字段为表达式
      • 期望查询结果中语文成绩比真实多10分
      • 查询一下每个同学的总分(语文+数学+英语)
      • 查询字段指定别名,相当于给查询的临时表指定新的列名
      • 针对查询结果去重(distinct)
      • 针对查询结果排序
      • select 中的条件查询
        • 查询英语不及格的同学及英语成绩 ( < 60 )
        • 查询语文成绩好于英语成绩的同学
        • 查询总分在200分以下的同学
        • 查询语文成绩大于80分,且英语成绩大于80分的同学
        • 查询语文成绩大于80分,或者英语成绩大于80分的同学
        • 查询语文成绩在[80,90]分的同学及语文成绩
        • 查询数学成绩是58 或者 59 或者 98 或者 99 分的同学及数学成绩
        • like:模糊查询
        • NULL的查询 is[not] null
      • 分页查询
  • 修改(Update)
    • 将孙悟空同学的数学成绩变更为80分
    • 将曹孟德同学的数学成绩变更为60分,语文变更为70分
    • 将总成绩倒数前三的 3 位同学的数学成绩加上 10 分
    • 将所有同学语文成绩更新为原来的一半
  • 删除(Delete)
    • 删除孙悟空同学的考试成绩
  • 总结

增删改查就是我们常说的CRUD:(Create,Retrieve,Update,Delete)
对应:新增数据,查询数据,修改数据,删除数据
注:常用的注释:在SQL中可以使用"-- 空格+描述"来表示注释说明…

新增(create)

insert into 表名 values(值,值...);
当然,插入的要和表结构一样
创建一张学生表:
MySQL表的增删改查(基础)_第1张图片
他可以一次插入一行,也可以一次插入多行,也可以指定列插入,当然,每个都要一一对应:

单行数据 + 全列插入

在这里插入图片描述

多行数据 + 指定列插入

在这里插入图片描述

查询(Retrieve)

查找语句是SQL中最复杂的操作…

全列查找

select * from 表名;
这个 * 就叫做"通配符",表示一个表的所有列
MySQL表的增删改查(基础)_第2张图片

刚才我们指定列插入的时候,没有对2和3插入email,他就是默认为空的
注意:像这种全列查找操作是一个危险的操作,如果直接在生产环境的服务器上,执行select * from 表名;很可能带来灾难,因为生产环境的保存的数据可能是非常大的,几个TB的存在,然后如果疯狂的读取硬盘的数据,瞬间就会把硬盘IO吃满,然后服务器又会立即返回响应数据,这么庞大的量,要是普通用户也要响应数据,此时服务器的硬盘和网络都被吃满了,那就只能干等着了.

指定列查询

select 列名,列名.. from 表名;
MySQL表的增删改查(基础)_第3张图片

查询字段为表达式

这里先创一个表:

DROP TABLE IF EXISTS exam_result; -- 这是如果存在这张表就先删除
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,'唐三藏', 67, 98, 56),
(2,'孙悟空', 87.5, 78, 77),
(3,'猪悟能', 88, 98.5, 90),
(4,'曹孟德', 82, 84, 67),
(5,'刘玄德', 55.5, 85, 45),
(6,'孙权', 70, 73, 78.5),
(7,'宋公明', 75, 65, 30);

MySQL表的增删改查(基础)_第4张图片

期望查询结果中语文成绩比真实多10分

MySQL表的增删改查(基础)_第5张图片

注意:select操作的结果是"临时表",虽然查询的结果跟原来的改变了,但他不会影响原来的数据

查询一下每个同学的总分(语文+数学+英语)

MySQL表的增删改查(基础)_第6张图片

查询字段指定别名,相当于给查询的临时表指定新的列名

MySQL表的增删改查(基础)_第7张图片

针对查询结果去重(distinct)

可以看下对比:
MySQL表的增删改查(基础)_第8张图片

针对查询结果排序

select 列名... from 表名 order by asc/desc;
注意:asc如果省略不写,默认也是升序,desc降序
MySQL表的增删改查(基础)_第9张图片

注: 有些数据记录中可能带有NULL的,默认就是最小值…

排序也可依据表达式或者别名来进行排序:
MySQL表的增删改查(基础)_第10张图片

排序的时候还可以通过order by来指定多个列进行排序,先根据第一个列进行排序,如果第一个列相同,相同结果之间在通过第二个列排序…
MySQL表的增删改查(基础)_第11张图片

select 中的条件查询

select 列名 from 表名 where 条件;
比较运算符:

运算符 说明
` >, >=, <, <= 大于,大于等于,小于,小于等于
`= 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=> 等于, NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <> 不等于
BETWEEN a0 AND a1 范围匹配, [a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
IN (option, …) 如果是 option 中的任意一个,返回 TRUE(1)
IS NULL 是 NULL
IS NOT NULL 不是 NULL
LIKE 模糊匹配。 % 表示任意多个( 包括 0 个)任意字符; _ 表示任意一个字符

逻辑运算符:

算符 说明
AND 逻辑与 多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR 逻辑或 任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT 逻辑取反 条件为 TRUE(1),结果为 FALSE(0)

注意:1. WHERE条件可以使用表达式,但不能使用别名。
2. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分

查询英语不及格的同学及英语成绩 ( < 60 )

MySQL表的增删改查(基础)_第12张图片

查询语文成绩好于英语成绩的同学

MySQL表的增删改查(基础)_第13张图片

这里指的是针对同一行的,语文和英语之间的进行比较,不涉及行和行之间的比较…

查询总分在200分以下的同学

MySQL表的增删改查(基础)_第14张图片

注意:
MySQL表的增删改查(基础)_第15张图片

查询语文成绩大于80分,且英语成绩大于80分的同学

MySQL表的增删改查(基础)_第16张图片

查询语文成绩大于80分,或者英语成绩大于80分的同学

MySQL表的增删改查(基础)_第17张图片

注意:and优先级大于or,要想打破优先级,得加括号

查询语文成绩在[80,90]分的同学及语文成绩

MySQL表的增删改查(基础)_第18张图片

查询数学成绩是58 或者 59 或者 98 或者 99 分的同学及数学成绩

MySQL表的增删改查(基础)_第19张图片

like:模糊查询

%代表任意个字符(也包含0个),_代表一个字符:
查找姓孙的同学成绩:
MySQL表的增删改查(基础)_第20张图片MySQL表的增删改查(基础)_第21张图片MySQL表的增删改查(基础)_第22张图片

NULL的查询 is[not] null

MySQL表的增删改查(基础)_第23张图片

分页查询

假设一页里面就显示 3 条记录:
MySQL表的增删改查(基础)_第24张图片MySQL表的增删改查(基础)_第25张图片

修改(Update)

uptate 表名 set 列名 = 值,列名 = 值...where 条件;
这里的修改就会修改数据库服务器上的原始数据了…

将孙悟空同学的数学成绩变更为80分

MySQL表的增删改查(基础)_第26张图片

将曹孟德同学的数学成绩变更为60分,语文变更为70分

MySQL表的增删改查(基础)_第27张图片

将总成绩倒数前三的 3 位同学的数学成绩加上 10 分

MySQL表的增删改查(基础)_第28张图片

将所有同学语文成绩更新为原来的一半

MySQL表的增删改查(基础)_第29张图片

删除(Delete)

delete from 表名 where 条件;
一旦这里条件写错了,可能影响范围就会很大,如果不写条件,就会把整个表的数据都给删除掉(这个和drop table 还是不一样的,delete只是清数据,盒子还在,drop直接把盒子就删了)

删除孙悟空同学的考试成绩

MySQL表的增删改查(基础)_第30张图片

总结

新增

-- 单行插入
insert into(字段1,...,字段N) values (value 1,....,value N);

-- 多行插入
insert into(字段1, ...,字段N) values
(value1,...),
(value2,...),
(value2,...);

查询

-- 全列查询
select * from-- 指定列查询
select 字段1,字段2... from-- 别名
select 字段1 别名1,字段2 别名2 from-- 去重distinct
select distinct 字段 from-- 排序order by
select * fromorder by 排序字段

-- 条件查询where:
-- (1)比较运算符 (2)between ... and ... (3)in (4)is null (5)like (6)and (7)or (8)not
select * fromwhere 条件

修改

updateset 字段1 = value1,字段2 = value2... where 条件

删除

delete fromwhere 条件

你可能感兴趣的:(MySQL,mysql)