MySQL:表的增删查改——CRUD(二)

本篇博客接上篇MySQL:表的增删查改——CRUD(一)-CSDN博客


目录

1、查询(Retrieve)

1.1 条件查询:WHERE

1.1.1 比较运算符

1.1.2 逻辑运算符

1.1.3 查询语句的执行顺序

1.1.3 SQL代码示例

1.2 分页查询:LIMIT

2、修改(Update)

2.1 SQL代码示例


1、查询(Retrieve

1.1 条件查询:WHERE

语法:select 列名/表达式 from 表名 where 列名/表达式 运算符 条件

1.1.1 比较运算符

  • = 号,既可用来比较是否相等,可以用来赋值;但是,NULL比较特殊,不可使用 = 号来比较是否为NULL。
  • 若要比较值是否为NULL,需要 <=> 号,或者 IS NULL (是NULL返回1表示true,否则返回0表示false)与 IS NOT NULL(不是NULL返回true(1),否则返回false(0))。
  • != 和 <> 均用来判断两者是否不相等。
  • BETWEEN a0 AND a1,表示范围为[a0,a1],左闭右闭。
  • IN (a1,a2,...) 若存在小括号中的值则返回true(1),否则返回false(0)。
  • LIKE 表示模糊匹配。%表示0个或任意多个字符,_ 表示任意一个字符,_ _ 表示任意两个字符,.......

1.1.2 逻辑运算符

这里的逻辑运算符与Java、Cpp中的运算符含义相同。

  • AND 相当于 &&
  • OR 相当于 ||
  • NOT 相当于 !

 逻辑运算符之间具有优先级关系,其中NOT(逻辑非)> AND(逻辑与)> OR(逻辑或),但不建议特意记,建议编码时使用小括号手动指定优先级,提高可读性。

1.1.3 查询语句的执行顺序

查询时可配合去重、排序、条件一起使用,但是在where子句中,我们对于列名/表达式不能使用别名给出条件这跟SQL语句的执行顺序有关。

当我们将别名换成表达式后就能够正常执行:

但是我们看到,order子句可以使用别名,其实这跟SQL语句的执行顺序有关:

  1. 通过from找到要查的表
  2. 通过where子句筛选出符合条件的数据行(此时还没有完成select子句中别名的定义,不能使用别名)
  3. 通过select子句抽选出指定的列或生成相应的表达式(此时才完成别名的定义)
  4. 通过order子句排序(此时已完成select子句中别名的定义,可以使用别名)

1.1.3 SQL代码示例

-- 基本查询
-- 查询英语不及格的同学及英语成绩
SELECT name,english FROM exam WHERE english < 60;
-- 查询语文成绩好于英语成绩的同学
SELECT name,chinese,english FROM exam WHERE chinese > english;
-- 查询总分在 200 分以下的同学
SELECT name,chinese+math+english 总分 FROM exam WHERE chinese+math+english < 200;

-- AND与OR
-- 查询语文成绩大于80分,且英语成绩大于80分的同学
SELECT name,chinese,english FROM exam WHERE chinese > 80 AND english > 80;
-- 查询语文成绩大于80分,或英语成绩大于80分的同学
SELECT name,chinese,english FROM exam WHERE chinese > 80 OR english > 80;

-- 范围查询
-- 查询语文成绩在 [80, 90] 分的同学及语文成绩
SELECT name,chinese FROM exam WHERE chinese BETWEEN 80 AND 90;
SELECT name,chinese FROM exam WHERE 80 <= chinese AND chinese <= 90;
-- 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
SELECT name,math FROM exam WHERE math IN (58,59,98,99);
SELECT name,math FROM exam WHERE math = 58 OR math = 59 OR math = 98 OR math = 99;

-- 模糊查询:LIKE
-- % 匹配任意多个(包括0个)字符
SELECT * FROM exam WHERE name LIKE '孙%';
-- _ 匹配严格的一个任意字符
SELECT * FROM exam WHERE name LIKE '孙_';

-- NULL 的查询
-- IS [NOT] NULL
SELECT * FROM exam WHERE id IS NULL;
SELECT * FROM exam WHERE id <=> NULL;
SELECT * FROM exam WHERE id IS NOT NULL;

1.2 分页查询:LIMIT

我们之前所学的查询都是不限制记录条数的查询,其实这样的查询是非常危险的,因为在生产环境中,表中存储着大量的数据,不限制条数的查询会造成占用大量资源,非常的不安全。

分页查询就是能够限制查询的条数,能够有效的减少数据库服务器的压力,分页查询的使用也是非常的多,我们也常常见到分页查询:

分页查询语法:

分页查询的同样可以配合顺序、条件查询一起使用,其前面的语法与我们之前所学查询语法相同,知识在结尾处加上LIMIT关键字,表示限制查询的条数。

表中记录的起始下标为0。

分页查询共有3种语法规则:

  • SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n; 这里LIMIT 后的n指:(默认)从第0行开始查询,共查询n条记录。
  • SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n; 这里LIMIT 后的s,n指:从第s行开始查询,共查询n条记录。
  • SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;这里LIMIT 后的n指:共查询n条记录。这里OFFSET 后的s指:从第s行开始查询。

示例:

  • 示例1:
  • 示例2:

如果每页都有相同的查询条数,则当前页数查询的起始行数s = (当前页数-1)*每页查询的记录数。

或者记忆为:s += 每页查询的记录数。

-- 每页查询两条数据
-- 查询第1页
select * from exam order by id asc limit 0,2;
-- 查询第2页
select * from exam order by id asc limit 2,2;
-- 查询第3页
select * from exam order by id asc limit 4,2;
-- 查询第4页
select * from exam order by id asc limit 6,2;

2、修改(Update)

update 表名 set 列名 = 新值  [, 列名 = 新值 ... ] [where ... ] [order ... ] [limit ... ];

  • 一条update语句可以修改多个属性,多个属性间使用逗号隔开
  • where为修改条件,满足条件的记录才可以被修改
  • order子句的作用是排序,limit子句的作用是限制修改条数即修改多少条。
  • order和limit的配合使用能够达到修改排名前多少个记录的作用。

注意:使用update修改数据时,一定要加where子句来控制修改条件,否则修改的将是整张表中所有的记录,这是非常危险的操作!!!

2.1 SQL代码示例

注意:

如果要让数学成绩减少30分,则只能这样书写:math = math - 30;而不能这样书写:math -= 30;

-- 将孙悟空同学的数学成绩变更为80分
UPDATE exam SET math = 80 WHERE NAME = '孙悟空' ;
-- 将曹孟德同学的数学成绩变更为60分,语文成绩变更为70分
UPDATE exam SET math = 60,chinese = 70 WHERE name = '曹孟德';
-- 将数学成绩前三名的同学的数学分数减30分
UPDATE exam SET math = math - 30 ORDER BY math DESC LIMIT 3;
-- 将语文成绩低于50分的同学的语文分数变为原来的2倍
UPDATE exam SET chinese = chinese*2 WHERE chinese < 50;

END

  • 18
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值