4、数据库CRUD语句

四、数据库C[create]R[read]U[update]D[delete]语句

1、Insert语句

主要有两种添加方式

#练习insert 语句
-- 创建一张商品表goods (id  int , goods_name varchar(10), price double );
-- 添加3条记录
CREATE TABLE `goods` (
	id INT ,
	goods_name VARCHAR(10), -- 长度10
	price DOUBLE NOT NULL DEFAULT 100 );
-- 添加数据
-- 第一种默认添加全部信息
INSERT INTO `goods` VALUES(1, 'OPPO手机', 1000);

-- 第二种对应值添加,有些信息有默认值,或者系统自己会赋值的信息,可以不用给它赋值,就用这种方法
INSERT INTO `goods` (id, goods_name, price) 
	VALUES(2, '华为手机', 2000);
	
INSERT INTO `goods` (goods_name, id) 
	VALUES('苹果手机',3);
	
SELECT * FROM goods;

-- 注意点:
/*
-- 1.插入的数据应与字段的数据类型相同。
--       比如 把 'abc' 添加到 int 类型会错误

-- 2. 数据的长度应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。

-- 3. 在values中列出的数据位置必须与被加入的列的排列位置相对应。

-- 4. 字符和日期型数据应包含在单引号中。

-- 5. 列可以插入空值[前提是该字段允许为空],比如INSERT INTO `goods`VALUES(null, 'vovo手机', 1000);

-- 6. insert into `goods`  values (),(),()  形式添加多条记录,例如:INSERT INTO `goods` VALUES(50, '三星手机', 2300),(60, '海尔手机', 1800);
-- 7. 如果是给表中的所有字段添加数据,可以不写前面的字段名称,即第一种添加方法

-- 8. 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错
      -- 如果某个列 没有指定 not null ,那么当添加数据时,没有给定值,则会默认给null
      -- 如果我们希望指定某个列的默认值,可以在创建表时指定
*/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j7485LBb-1655010124594)(C:\Users\柠檬-幼稚\AppData\Roaming\Typora\typora-user-images\image-20220417194115805.png)]

2、update语句

-- 演示update语句
-- 要求: 修改表中的记录
-- 准备信息
CREATE table updata_test(
`name` CHAR(3),
job VARCHAR(20),
salary INT
);
INSERT INTO updata_test VALUES('小妖怪', '看门', 1000),('老妖怪', '捶背', 2000),('妖怪王', '娱乐', 5000);
SELECT * FROM updata_test;

-- WHERE 是筛选语句,筛选符合要求的信息

-- 1. 将所有员工薪水修改为5000元。[如果没有带where 条件,会修改所有的记录,因此要小心]
UPDATE updata_test SET salary = 5000 ;

-- 2. 将姓名为 小妖怪 的员工薪水修改为3000元。
UPDATE updata_test
	SET salary = 3000 
	WHERE `name` = '小妖怪' ;
	
-- 3. 将 老妖怪 的薪水在原有基础上增加1000元
UPDATE updata_test
	SET salary = salary + 1000 
	WHERE `name` = '老妖怪' ;

-- 可以修改多个列的值
UPDATE updata_test
	SET salary = salary + 1000 , job = '出主意的'
	WHERE `name` = '老妖怪' ;
	
SELECT * FROM updata_test;

-- 不加where的话,就是修改全部行的对应信息;一定要小心

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zh3JQ6VC-1655010124595)(C:\Users\柠檬-幼稚\AppData\Roaming\Typora\typora-user-images\image-20220417200304933.png)]

3、delete语句

-- delete 语句演示
-- 准备信息
CREATE table delete_test(
`name` CHAR(3),
job VARCHAR(20),
salary INT
);
INSERT INTO delete_test VALUES('小妖怪', '看门', 1000),('老妖怪', '捶背', 2000),('妖怪王', '娱乐', 5000);
SELECT * FROM delete_test;

--  删除表中名称为’老妖怪’的记录。
DELETE FROM delete_test
	WHERE `name` = '老妖怪';

-- Delete语句不能删除某一列的值(可使用update 设为 null 或者 '')
UPDATE delete_test SET job = '' WHERE `name` = '小妖怪';

--  删除表中所有记录,一定要小心
DELETE FROM delete_test;

-- 要删除这个表
DROP TABLE delete_test;

SELECT * FROM delete_test;

truncate table -- 删除的记录是不可恢复的,速度会比较快,drop table ,然后再create table。不能用在有主外键关系的主表中。删除的主键自增会从1开始重新赋值
delete from ...  -- 删除表中的记录,记录是可以恢复的。 不会清除主键的自增量 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dnJLOeRs-1655010124596)(C:\Users\柠檬-幼稚\AppData\Roaming\Typora\typora-user-images\image-20220417201328245.png)]

4、select语句(重点)

-- select 语句【重点 难点】
-- 准备信息
CREATE TABLE student(
	id INT NOT NULL DEFAULT 1,
	NAME VARCHAR(20) NOT NULL DEFAULT '',
	chinese FLOAT NOT NULL DEFAULT 0.0,
	english FLOAT NOT NULL DEFAULT 0.0,
	math FLOAT NOT NULL DEFAULT 0.0
);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(1,'刘备',89,78,90);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(2,'张飞',67,98,56);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(3,'宋江',87,78,77);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(4,'关羽',88,98,90);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(5,'赵云',82,84,67);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(6,'欧阳锋',55,85,45);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,'黄蓉',75,65,30);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(8,'韩信',45,65,99);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(8,'韩信',45,65,99);

-- 查询表中所有学生的信息。
SELECT * FROM student;
# 1、查询某些列信息,对信息进行去重显示
-- 查询表中所有学生的姓名和对应的英语成绩。
SELECT `name`,english FROM student; -- 显示name,english两列信息,如下图1

-- 过滤表中english重复数据 distinct 。并且显示english一列信息
SELECT DISTINCT english FROM student; -- 只显示english一列信息,并且没有重复,如下图2

-- 要查询的记录,每个字段都相同,才会去重
SELECT DISTINCT `name`, english FROM student; -- 显示name,english两列信息,并且没有重复,如下图3


# 2、对原表中信息进行整理后显示
-- 统计每个学生的总分
SELECT `name`, (chinese+english+math) FROM student; -- 显示name和(chinese+english+math)两列信息,如下图4

-- 在所有学生总分加10分的情况
SELECT `name`, (chinese + english + math + 10) FROM student; -- 如下图5

-- 使用别名表示学生分数。
SELECT `name` AS '名字', (chinese + english + math) AS '总分'
	FROM student; -- ,如下图6


# 信息筛选后显示 理解and、or、in、like、BETWEEN ... AND 
-- 查询姓名为赵云的学生成绩
SELECT * FROM student  -- 查询名字叫韩信的那一行信息,所有满足条件的信息
	WHERE `name` = '韩信'
	
-- 查询英语成绩大于90分的同学
SELECT * FROM student 
	WHERE english > 90;
	
-- 查询总分大于200分的所有同学
SELECT * FROM student 
	WHERE (chinese + english + math) > 200;
	
-- 查询math大于60 并且(and) id大于4的学生成绩
SELECT * FROM student
	WHERE math >60 AND id > 4;
	
-- 查询英语成绩大于语文成绩的同学
SELECT * FROM student
	WHERE english > chinese
	
-- 查询总分大于200分 并且 数学成绩小于语文成绩,的姓赵的学生.
-- 赵% 表示 名字以赵开头的就可以
SELECT * FROM student
	WHERE (chinese + english + math) > 200 AND 
		math < chinese AND `name` LIKE '赵%'
		
-- 查询英语分数在 80-90之间的同学。
SELECT * FROM student
	WHERE english >= 80 AND english <= 90;
SELECT * FROM student
	WHERE english BETWEEN 80 AND 90; -- between .. and .. 是 闭区间
-- not between..and 是取反的意思

-- 查询数学分数为89,90,91的同学。in一个集合里
SELECT * FROM student 
	WHERE math = 89 OR math = 90 OR math = 91;
SELECT * FROM student 
	WHERE math IN (89, 90, 91);
	
-- 查询所有姓韩的学生信息。
SELECT * FROM student 
	WHERE `name` LIKE '韩%'

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fwPfIK7y-1655010124597)(C:\Users\柠檬-幼稚\AppData\Roaming\Typora\typora-user-images\image-20220417205510700.png)]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值