SQL基础-更新&删除&视图
一、更新数据
1、更新数据
###
更新全部数据:
使用UPDATE关键字。语法如下:
UPDATE 表名 SET 字段名=新的值; 比如:
更新学生表中的所有学生性别为男: UPDATE student SET gender = '男'; ###
更新部分数据:
使用UPDATE关键字。语法如下:
UPDATE 表名 SET 字段名=新的值 WHERE 限定条件; 比如:
更新学生方东美的性别为女:
UPDATE student SET gender = '女' WHERE student_name = '方东美'; ###
更新部分数据的多个字段:
使用UPDATE关键字。语法如下: UPDATE 表名
SET 字段名1=新的值1,字段名2=新的值2,…
WHERE 限定条件; 比如:
更新学生方东美的性别为女,分数为85.50: UPDATE student
SET gender = '女',score = 85.50
WHERE student_name = '方东美'; 建议在更新、删除数据时,加上where,避免更新或删除全表数据; mysql中:
mysql -U 可以限制update和delete必须加上where限制条件,如果更新和删除数据不添加where限制条件,就会报错; 可以设置别名,命令:alias mysql='mysql -U' 也可以开启安全模式:
set sql_safe_updates=1; //安全模式打开状态
set sql_safe_updates=0; //安全模式关闭状态
2、根据其他表更新数据
根据其他表更新数据:
使用UPDATE关键字。语法如下:
UPDATE 表名
SET 字段名=(子查询)
[ WHERE 限定条件 ]; 比如:
在学生表中添加老师姓名字段,并使用老师表中的数据进行更新: alter table student add column teacher_name varchar(30); UPDATE student a
SET teacher_name = ( SELECT b.teacher_name
FROM teacher b
WHERE a.teacher_id = b.teacher_id);
二、删除数据
1、删除全部表数据
删除全部数据:
使用DELETE关键字。 语法如下:
DELETE FROM 表名; 比如,删除学生表中的数据,使用如下语句:
DELETE FROM student;
2、删除部分数据
删除部分数据:
使用DELETE关键字。 语法如下:
DELETE FROM 表名 WHERE 筛选条件; 比如,删除学生表方东美的数据,使用如下语句:
DELETE FROM student WHERE student_name = '方东美';
3、根据其他表删除数据
根据其他表删除数据:
使用DELETE关键字。 语法如下:
DELETE FROM 表名 WHERE 子查询; 比如,删除学生表中老师姓名为NULL的数据,使用如下语句:
DELETE FROM student
WHERE teacher_id in ( SELECT teacher_id
FROM teacher
WHERE teacher_name IS NULL );
三、视图
1、建表
###
teacher表;
CREATE TABLE `teacher` (
`teacher_id` varchar(255) DEFAULT NULL COMMENT '老师编号',
`teacher_name` varchar(255) DEFAULT NULL COMMENT '老师姓名',
`gender` varchar(255) DEFAULT NULL COMMENT '性别'
) ENGINE=MyISAM DEFAULT CHARSET=gbk COMMENT='老师'; INSERT INTO `teacher` VALUES ('T0001','高齐妍','男'),('T0002','李红','女'),
('T0003','李一萱',NULL),('T0004','刘金霞','男'),('T0005','刘思哲','男'),
('T0006','刘兆祥','男'),('T0007','刘哲宇','男'),('T0008','梅艺涵','女'),
('T0009','梅姿君','女'),('T0010','牛雨','女'),('T0011','牛光滢','女'),
('T0012','黄雅','女'),('T0013','任筱','女'),('T0014','吴静婷','男'),
('T0015','习芸颍','女'),('T0016','叶惠燕','女'),('T0017','周纯','男'),
('T0018','周圣杰','男'),('T0019','方焓','女'),('T0020','方杰萍','女'); ###
student表:
CREATE TABLE `student` (
`student_id` varchar(50) NOT NULL COMMENT '学生编号',
`student_name` varchar(100) NOT NULL DEFAULT '' COMMENT '学生姓名',
`gender` varchar(10) NOT NULL DEFAULT '' COMMENT '性别',
`birth_day` date NOT NULL COMMENT '生日',
`age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄',
`class_id` varchar(50) NOT NULL DEFAULT '' COMMENT '班级编号',
`score` decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '数学成绩',
`teacher_id` varchar(20) DEFAULT NULL COMMENT '老师编号'
) ENGINE=MyISAM DEFAULT CHARSET=gbk COMMENT='学生'; INSERT INTO `student` VALUES
('S20180001','方东美','女','2006-02-04',12,'G0101',80.65,'T0003'),
('S20180002','方香','女','2008-09-28',10,'G0101',75.48,NULL),
('S20180003','高紫菡','男','2006-07-22',12,'G0101',74.46,'T0003'),
('S20180004','胡未迟','男','2007-07-25',11,'G0101',51.27,'T0003'),
('S20180005','李咏颐','男','2007-03-16',11,'G0101',88.84,'T0003'),
('S20180006','吴灏潇','男','2008-04-19',10,'G0101',69.93,NULL),
('S20180007','吴明鸿','男','2007-11-18',11,'G0101',63.65,'T0003'),
('S20180008','吴鹏宇','男','2007-08-24',11,'G0101',84.69,'T0003'),
('S20180009','吴少雄','男','2007-08-04',11,'G0101',76.36,'T0003'),
('S20180010','习芬飘','女','2005-01-27',13,'G0101',83.42,'T0003'),
('S20180011','俞倚琳','女','2007-07-07',11,'G0101',97.38,'T0003'),
('S20180012','张琼雪','女','2006-06-12',12,'G0101',81.01,'T0003'),
('S20180013','陈顺军','女','2006-09-12',12,'G0102',91.13,'T0004'),
('S20180014','方浩杰','男','2008-03-29',10,'G0102',79.46,NULL),
('S20180015','方静雅','女','2007-01-27',11,'G0102',54.99,'T0004'),
('S20180016','胡博涵','男','2008-08-11',10,'G0102',50.32,NULL); student表数据很多,这里只写出一部分;
2、视图简介
比如:查询学生信息时,同时查询出老师姓名:
SELECT
a.*,b.teacher_name
FROM student a
LEFT JOIN teacher b
ON a.teacher_id = b.teacher_id; 思考:如果有很多地方都需要按上面的逻辑查询,那LEFT JOIN的脚本就需要写
很多遍,有没有一种简写的方式? ---视图
3、创建视图
创建视图:
使用CREATE VIEW关键字。 语法如下:
CREATE VIEW 视图名
AS
SELECT子句; 比如,查询学生信息时,同时查询出老师姓名:
CREATE VIEW v_student
AS
SELECT
a.*,b.teacher_name
FROM student a
LEFT JOIN teacher b
ON a.teacher_id = b.teacher_id; 查询视图:
与查询表一样,使用SELECT子句。 比如,查询学生信息时,同时查询出老师姓名:
SELECT * FROM v_student; SELECT student_id,student_name,teacher_id,teacher_name from v_student; SELECT * FROM v_student WHERE teacher_id = 'T0003';
4、视图的嵌套
比如:
查询所有考试及格的学生信息 CREATE VIEW v_student_nesting
AS
SELECT * FROM v_student
WHERE score >= 60; select * from v_student_score;
5、视图与表的区别
1.视图是已经编译好了的sql,表不是 2.视图没有实际的物理存储记录,表有 3.视图是逻辑概念,表可以进行修改 5.表是内模式,视图是外模式 6.视图是我们查看表的方法,视图不让用户接触数据表,用户也就不知道表结构 7.表属于全局模式中的表,是实表,视图属于局部模式的表,是虚表。 8.视图建立、删除只影响视图本身,不影响表 9、视图适合查询,不适合增、删、改,表可以增、删、改、查;
6、视图常见的使用场景
###
场景一:仅提供需要的数据; 比如:只想查询学生编号、学生姓名、分数三个字段的信息:
CREATE VIEW v_student1
AS
SELECT
a.student_id,a.student_name,a.score
FROM student a; ###
场景二:对特定的用户仅开放特定的数据,达到保护敏感数据的目的,提升了数据安全性; 比如:只想将学生编号、学生姓名、分数三个字段的信息暴露给用户u_read:
GRANT SELECT ON v_student1 TO u_read@localhost; ###
场景三:仅筛选需要的数据 比如:只查询成绩及格的学生信息:
CREATE VIEW v_student3
AS
SELECT
*
FROM student a
WHERE a.score >= 60; ###
场景四:简化复杂的操作 比如:在应用的多个地方,都需要查询学生信息时,同时查询出老师姓名:
CREATE VIEW v_student4
AS
SELECT
a.*,b.teacher_name
FROM student a
LEFT JOIN teacher b
ON a.teacher_id = b.teacher_id;
SELECT * FROM v_student4; ###
场景五:重新格式化出新的字段 比如:查询学生出生日期,年月日单独一个字段展示:
CREATE VIEW v_student5
AS
SELECT
a.student_id,a.student_name,
year(a.birth_day) birth_year,
month(a.birth_day) birth_month,
day(a.birth_day) birth_day
FROM student a; ### 场景六:使用计算表达式生成新的字段 必须要对新产生的字段给出字段名,否则可能会报错。 比如:考试总分100分,查询所有学生做错的题目的分数:
CREATE VIEW v_student6
AS
SELECT
a.student_id,a.student_name,
a.score,100 - a.score as 'wrong_score'
FROM student a; ###
场景七:屏蔽底层实现逻辑及频繁的变更 比如:考试总分100分,查询所有学生做错的题目的分数:
CREATE VIEW v_student7
AS
SELECT
a.student_id,a.student_name,
a.score,100 - a.score as 'wrong_score'
FROM student a; ###
场景八:合并多个分离的子表 比如:假如有3个学校,每个学校的学生数据在各自的表中,如何一次性查询所有学生的信息:
CREATE VIEW v_student8
AS
SELECT * FROM student1
UNION ALL
SELECT * FROM student2
UNION ALL
SELECT * FROM student3;
SQL基础-更新&删除&视图的更多相关文章
- [SQL基础教程] 5-1视图
[SQL基础教程] 5-1视图 视图和表 从SQL角度看视图就是一张表 视图与表的差别 表保存了实际的数据,视图保存的是SELECT语句: 视图的优点 节省存储空间: 将常用的Select 语句保存成 ...
- SQL基础学习_04_视图
视图 1. 视图的创建 视图就是保存好的SELECT语句,这些SELECT语句执行之后会产生新的表,所以在SQL中,视图和表是不做差别对待的,也就是SQL也可以对视图做一些操作: 由于 ...
- 15、SQL基础整理(视图)
视图 即虚拟表 系统-右键-新建视图 编辑前200行 select *from studentscore 代码创建法: create view studentscore as select stude ...
- ASP.NET WEBAPI 简单CURD综合测试(asp.net MVC,json.net,sql基础存储过程和视图,sqlhelper,json解析)
草图 真正的后端是不管前端是什么平台,用什么语言的,JSON格式的数据应该可以应对.用ASP.NET WEBAPI尝试做一个后端,实现最基本的CURD,业务逻辑和数据库操作都放在后端,前端只需要正 ...
- [SQL基础教程] 1-5 表的删除和更新
[SQL基础教程] 1-5 表的删除和更新 表的删除 语法 DROP TABLE <表名>; 法则 1-12 删除的表无法恢复 表定义的更新 语法 ALTER TABLE<表名> ...
- SQL入门(1): 创建/查询/更新/连接/视图/SSMS简介
本文介绍SQL的基本查询语句 (1) select... from * 表示全部, 选择的东西还可以进行简单的运算, 可以列别名 select * from student; -sage from ...
- SQL Server基础之《视图的概述和基本操作》
数据库中的视图是一个虚拟表.同真实的表一样,视图包含一系列带有名称的列和行数据,行和列数据用来自由定义视图和查询所引用的表,并且在引用视图时动态产生.本篇将通过一些实例来介绍视图的概念,视图的作用, ...
- SQL基础--视图
视图其实就是一条查询SQL语句,用于显示一个或多个表或其它视图中相关数据. 创建视图: CREATE [OR REPLACE] [FORCE |NOFORCE ]VIEW view_name [al ...
- (2.9)Mysql之SQL基础——索引的查看与删除
(2.9)Mysql之SQL基础——索引的查看与删除 关键词:mysql索引查看,mysql索引删除 1.索引查询(以下包括主键,唯一,普通,复合,全文,但不包括外键) (1)按库查询 select ...
随机推荐
- 为 WPF 程序添加 Windows 跳转列表的支持
原文:为 WPF 程序添加 Windows 跳转列表的支持 Windows 跳转列表是自 Windows 7 时代就带来的功能,这一功能是跟随 Windows 7 的任务栏而发布的.当时应用程序要想用 ...
- SpringCloud中服务发现-Eureka
1.Eureka服务端集群开发 1.先创建一个父工程 若是不是普通demo,还有别的配置时,需要注意若是服务开不起来可能就是父类依赖中可能会需要<dependencyManagement> ...
- 【夯实基础】- Integer.valueof()和Integer.parseInt()的区别
今天在看公司代码的时候,看到有人在将 String 转为 int 时,用到了Integer.parseInt(String s)方法,我一直用的是Integer.valueOf(String s)方法 ...
- 《区块链DAPP开发入门、代码实现、场景应用》笔记5——区块链福利彩票的设计
笔者一直强调,一定要利用区块链的特点来解决行业存在的问题,并且该问题最好用区块链解决或者说只能用区块链解决.彩票行业就是个例子. 在讲解代码之前,首先讲解一下业务设计,如图6.15所示. 图6.15 ...
- Vue学习之webpack中使用vue(十七)
一.包的查找规则: 1.在项目根目录中找有没有 node_modules 的文件夹: 2.在 node_modules 中根据包名,找对应的vue 文件夹: 3.在vue 文件夹中,找 一个叫做 pa ...
- Web网站实现facebook登录
一.登录facebook开发者中心:https://developers.facebook.com 二.创建应用编号,如下图: 三.添加产品选择Facebook登录,如下图: 四.facebbok登录 ...
- TOEFL词汇笔记英语托福英语
conjectural-based on guessing 推测的-给予猜测的 consciously-on purpose 有意识地-有目的地 conserve-retain保存-保存 conspi ...
- SocksCap代理
所有Windows应用都可以使用Socks代理上网,即使不支持Socks代理的应用也可以用Socks代理上网 配置代理 点击"添加",代理类型可以修改, 支持代理测试 运行程序 点 ...
- 查找单链表中倒数第k个结点
本文转自:程序员面试题6--查找链表中倒数第k个结点 题目:输入一个单向链表,输出该链表中倒数第k个结点.链表的倒数第0个结点为链表的尾指针.链表结点定义如下: struct ListNode { i ...
- Word2Vec算法简介
一.简介 word2vec是Google在2003年开源的一款将词表征为实数值向量的高效算法,采用的模型有CBOW[Continuous Bag-Of-Words 连续的词袋模型]和Skip-Gram ...