数据库的CRUD语句


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

在这里插入图片描述

在这里插入图片描述

19 Insert 语句

19.1 使用 INSERT 语句向表中插入数据。

在这里插入图片描述
快速入门案例:

  1. 创建一张商品表goods(id int,goods_name varchar(10),price double )
  2. 添加2条记录
#练习insert 语句
-- 创建一张商品表goods (id  int , goods_name varchar(10), price double );
-- 添加2条记录
CREATE TABLE `goods` (
	id INT ,
	goods_name VARCHAR(10), -- 长度10
	price DOUBLE NOT NULL DEFAULT 100 );
-- 添加数据
INSERT INTO `goods` (id, goods_name, price) 
	VALUES(10, '华为手机', 2000);
INSERT INTO `goods` (id, goods_name, price) 
	VALUES(20, '苹果手机', 3000);
SELECT * FROM goods;

CREATE TABLE `goods2` (
	id INT ,
	goods_name VARCHAR(10), -- 长度10
	price DOUBLE NOT NULL DEFAULT 100 );
	

19.2 细节说明

  1. 插入的数据应与字段的数据类型相同。比如把 ‘abc’ 添加到 int 类型会报错。
  2. 数据的长度应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
  3. 在values中列出的数据位置必须与被加入的列的排列位置相对应。
  4. 字符和日期类型数据应包含在单引号中。
  5. 列可以插入空值【前提是该字段允许为空】,insert into table value(null)
  6. insert into tab_name(列名…) values (),(),() 形式添加多条记录
  7. 如果是给表中所有字段添加数据,可以不写前面的字段名称。
  8. 默认值的使用,当不给某个字段值时,如果有默认值就会添加,否则报错。
#说明insert 语句的细节
-- 1.插入的数据应与字段的数据类型相同。
--       比如 把 'abc' 添加到 int 类型会错误
INSERT INTO `goods` (id, goods_name, price) 
	VALUES('ABC', '小米手机', 2000);

-- 如果是下面这样的语句就不会报错,因为底层会把'30'转为int类型,如果转换不了才会报错。
INSERT INTO `goods` (id, goods_name, price) 
	VALUES('30', '小米手机', 2000);
-- 2. 数据的长度应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
INSERT INTO `goods` (id, goods_name, price) 
	VALUES(40, 'vovo手机vovo手机vovo手机vovo手机vovo手机', 3000);
-- 3. 在values中列出的数据位置必须与被加入的列的排列位置相对应。
INSERT INTO `goods` (id, goods_name, price)  -- 不对
	VALUES('vovo手机',40, 2000);
-- 4. 字符和日期型数据应包含在单引号中。
INSERT INTO `goods` (id, goods_name, price) 
	VALUES(40, vovo手机, 3000); -- 错误的 vovo手机 应该 'vovo手机'
-- 5. 列可以插入空值[前提是该字段允许为空],insert into table value(null)
INSERT INTO `goods` (id, goods_name, price) 
	VALUES(40, 'vovo手机', NULL);
-- 6. insert into tab_name (列名..)  values (),(),()  形式添加多条记录
INSERT INTO `goods` (id, goods_name, price) 
	VALUES(50, '三星手机', 2300),(60, '海尔手机', 1800);
-- 7. 如果是给表中的所有字段添加数据,可以不写前面的字段名称
INSERT INTO `goods`   
	VALUES(70, 'IBM手机', 5000);
-- 8. 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错
      -- 如果某个列 没有指定 not null ,那么当添加数据时,没有给定值,则会默认给null
      -- 如果我们希望指定某个列的默认值,可以在创建表时指定
INSERT INTO `goods` (id, goods_name)   
	VALUES(80, '格力手机');

SELECT * FROM goods;

INSERT INTO `goods2` (id, goods_name)   
	VALUES(10, '诺基亚手机');
SELECT * FROM goods2;



20 update 语句

20.1 使用 update 语句修改表中数据

在这里插入图片描述

20.2 基本使用

要求: 在上面创建的employee表中修改表中的纪录

  1. 将所有员工薪水修改为5000元。[如果没有带where 条件,会修改所有的记录,因此要小心]
  2. 将姓名为 小妖怪 的员工薪水修改为3000元。
  3. 将 老妖怪 的薪水在原有基础上增加1000元
-- 演示update语句
-- 要求: 在上面创建的employee表中修改表中的纪录
-- 1. 将所有员工薪水修改为5000元。[如果没有带where 条件,会修改所有的记录,因此要小心]
UPDATE employee SET salary = 5000 
-- 2. 将姓名为 小妖怪 的员工薪水修改为3000元。
UPDATE employee 
	SET salary = 3000 
	WHERE user_name = '小妖怪' 
-- 3. 将 老妖怪 的薪水在原有基础上增加1000元
INSERT INTO employee 
	VALUES(200, '老妖怪', '1990-11-11', '2000-11-11 10:10:10', '捶背的', 5000, '给大王捶背', 'd:\\a.jpg');

UPDATE employee 
	SET salary = salary + 1000 
	WHERE user_name = '老妖怪' 

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

20.3 使用细节

  1. update语法可以用新值更新原有表行中的各列。
  2. set子句指示要修改哪些列和要给予哪些值。
  3. where子句指定应更新哪些行。如没有where子句,则更新所有的行(记录),因此要小心使用!!!
  4. 如果需要修改多个字段,可以通过 set 字段1 = 值1,字段2 = 值2…

21 delete 语句

21.1 使用 delete 语句删除表中数据

在这里插入图片描述

21.2 案例演示

  1. 删除表中名称为’老妖怪’的记录。
  2. 删除表中所有记录。
-- delete 语句演示

--  删除表中名称为’老妖怪’的记录。
DELETE FROM employee 
	WHERE user_name = '老妖怪';
--  删除表中所有记录, 提醒,一定要小心,慎用
DELETE FROM employee;

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

SELECT * FROM employee

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

21.3 使用细节

  1. 如果不使用where子句,将删除表中所有数据。
  2. delete语句不能删除某一列的值(可使用update设为 null 或者 ‘’)
  3. delete语句仅删除记录,不删除表本身。如要删除表,使用drop table 语句。drop table 表名;

22 select 语句

22.1 基本语法

在这里插入图片描述

22.2 注意事项

  1. select :指定查询那些列的数据。
  2. column:指定列名。
  3. *:号代表查询所有列。
  4. from:指定查询那张表。
  5. distinct:可选,指显示结果时,是否去掉重复数据。

22.3 练习

学生表信息:

****创建新的表(student)********
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);

在这里插入图片描述

要求:

  1. 查询表中所有学生的信息。
  2. 查询表中所有学生的姓名和对应的英语成绩。
  3. 过滤表中重复数据 distinct
  4. 要查询的记录,每个字段都相同,才会去重。
-- select 语句【重点 难点】


-- 查询表中所有学生的信息。
SELECT * FROM student;
-- 查询表中所有学生的姓名和对应的英语成绩。
SELECT `name`,english FROM student;
-- 过滤表中重复数据 distinct 。
SELECT DISTINCT english FROM student;
-- 要查询的记录,每个字段都相同,才会去重
SELECT DISTINCT `name`, english FROM student;




22.4 使用表达式对查询的列进行运算

在这里插入图片描述

22.5 在 select 语句中可使用 as 语句

在这里插入图片描述

22.6 练习

  1. 统计每个学生的总分
  2. 在所有学生总分加10分的情况
  3. 使用别名表示学生分数。
-- select 语句的使用

-- 统计每个学生的总分
SELECT `name`, (chinese+english+math) FROM student;
-- 在所有学生总分加10分的情况
SELECT `name`, (chinese + english + math + 10) FROM student;
-- 使用别名表示学生分数。
SELECT `name` AS '名字', (chinese + english + math + 10) AS total_score 
	FROM student;

22.7 在 where 子句中经常使用的运算符

在这里插入图片描述

22.8 使用 where 子句,进行过滤查询

  1. 查询姓名为赵云的学生成绩
  2. 查询英语成绩大于90分的同学
  3. 查询总分大于200分的所有同学
  4. 查询math大于60 并且(and) id大于4的学生成绩
  5. 查询英语成绩大于语文成绩的同学
  6. 查询总分大于200分 并且 数学成绩小于语文成绩,的姓赵的学生
-- select 语句
-- 查询姓名为赵云的学生成绩
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 .. 是 闭区间
-- 查询数学分数为89,90,91的同学。
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 '韩%'
-- 查询数学分>80,语文分>80的同学



22.9 使用 order by 子句排序查询结果

在这里插入图片描述

  1. order by 指定排序的列,排序的列既可以是表中的列名,也可以是select语句后指定的列名。
  2. asc 升序【默认】,desc 降序
  3. order by 子句应位于 select 语句的结尾。

练习:

  1. 对数学成绩排序后输出【升序】
  2. 对总分按从高到低的顺序输出
  3. 对姓韩的学生成绩排序输出【升序】
-- 演示order by使用
-- 对数学成绩排序后输出【升序】。
SELECT * FROM student 
	ORDER BY math;
-- 对总分按从高到低的顺序输出 [降序] -- 使用别名排序
SELECT `name` , (chinese + english + math) AS total_score FROM student 
	ORDER BY total_score DESC;
-- 对姓韩的学生成绩[总分]排序输出(升序) where + order by
SELECT `name`, (chinese + english + math) AS total_score FROM student
	WHERE `name` LIKE '韩%'
	ORDER BY total_score;


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

要学就学灰太狼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值