一、更新数据

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.50WHERE 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 aSET teacher_name = ( SELECT b.teacher_nameFROM 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 studentWHERE teacher_id in ( SELECT teacher_idFROM 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 视图名ASSELECT子句;比如,查询学生信息时,同时查询出老师姓名:CREATE VIEW v_studentASSELECT a.*,b.teacher_nameFROM student aLEFT JOIN teacher bON 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_student1ASSELECT a.student_id,a.student_name,a.scoreFROM student a;###
场景二:对特定的用户仅开放特定的数据,达到保护敏感数据的目的,提升了数据安全性;比如:只想将学生编号、学生姓名、分数三个字段的信息暴露给用户u_read:GRANT SELECT ON v_student1 TO u_read@localhost;###
场景三:仅筛选需要的数据比如:只查询成绩及格的学生信息:CREATE VIEW v_student3ASSELECT *FROM student aWHERE a.score >= 60;###
场景四:简化复杂的操作比如:在应用的多个地方,都需要查询学生信息时,同时查询出老师姓名:CREATE VIEW v_student4ASSELECT a.*,b.teacher_nameFROM student aLEFT JOIN teacher bON a.teacher_id = b.teacher_id;SELECT * FROM v_student4;###
场景五:重新格式化出新的字段比如:查询学生出生日期,年月日单独一个字段展示:CREATE VIEW v_student5ASSELECT a.student_id,a.student_name,year(a.birth_day) birth_year,month(a.birth_day) birth_month,day(a.birth_day) birth_dayFROM student a;###场景六:使用计算表达式生成新的字段必须要对新产生的字段给出字段名,否则可能会报错。比如:考试总分100分,查询所有学生做错的题目的分数:CREATE VIEW v_student6ASSELECT a.student_id,a.student_name,a.score,100 - a.score as 'wrong_score'FROM student a;###
场景七:屏蔽底层实现逻辑及频繁的变更比如:考试总分100分,查询所有学生做错的题目的分数:CREATE VIEW v_student7ASSELECT a.student_id,a.student_name,a.score,100 - a.score as 'wrong_score'FROM student a;###
场景八:合并多个分离的子表比如:假如有3个学校,每个学校的学生数据在各自的表中,如何一次性查询所有学生的信息:CREATE VIEW v_student8ASSELECT * FROM student1UNION ALLSELECT * FROM student2UNION ALLSELECT * FROM student3;

转载于:https://www.cnblogs.com/weiyiming007/p/11445370.html

SQL基础-更新删除视图相关推荐

  1. SQL基础操作_4_表的插入、更新、删除、合并操作

    目录 表的插入.更新.删除.合并操作 7.4.1 插入新的记录 7.4.2 插入含自增列的记录 7.4.3 插入新的多条记录 7.4.4 同时往多个表插入记录 7.4.5 通过其它表插入 7.4.6 ...

  2. [SQL基础教程] 1-5 表的删除和更新

    [SQL基础教程] 1-5 表的删除和更新 表的删除 语法 DROP TABLE <表名>; 法则 1-12 删除的表无法恢复 表定义的更新 语法 ALTER TABLE<表名> ...

  3. 零基础学SQL(十一、视图)

    目录 前置建表 一.什么是视图 二.为什么使用视图 三.视图的规则和限制 四.视图的增删改查 五.视图数据的更新 前置建表 CREATE TABLE student (id int NOT NULL ...

  4. 第14章_视图(创建视图、查看视图、更新视图的数据、修改、删除视图)

    第14章_视图 第14章_视图 1. 常见的数据库对象 2. 视图概述 2.1 为什么使用视图? 2.2 视图的理解 3. 创建视图 3.1 创建单表视图 3.2 创建多表联合视图 3.3 基于视图创 ...

  5. 阿里云AI训练营-SQL基础3:复杂查询方法-视图、子查询、函数等

    3.1 视图 3.1.1 什么是视图 3.1.2 视图与表有什么区别 3.1.3 为什么会存在视图 3.1.4 如何创建视图 3.1.5 如何修改视图结构 3.1.6 如何更新视图内容 3.1.7 如 ...

  6. 数据库 SQL Server 视图 创建视图 查询视图 修改视图 删除视图

    文章目录 1 视图概述 2 创建视图 3 查询视图 4 修改视图 5 删除视图 总结 1 视图概述 视图就是将一个或多个表中的目标字段抽取出来形成的一个虚拟表.这个虚拟表和真实的表具有相同的功能. 视 ...

  7. SQL Server修改表结构后批量更新所有视图

    --获取指定SQLServer数据库所有表及视图的字段列表及类型.长度 Select o.Name As ObjectsName , c.name As ColumnsName , t.name As ...

  8. SQL数据库语言基础之SqlServer视图的创建、修改与视图数据的增删改查

    文章目录 一.认识视图 二.创建.查询视图 三.修改.删除视图 四.修改视图数据(与操作表一样,只是把table换成view) 一.认识视图 1.视图的理解 从用户角度来看,一个视图是从一个特定的角度 ...

  9. SQL 已更新或删除的行值要么不能使该行成为唯一行

    sqlserver中多行所有数据重复,无法更新或删除问题,通常是在没有主键的情况下的表. 解决办法是为表添加主键,或者用含检索条件的sql语句来删除. sql server设置两列为主键的方法是:按住 ...

最新文章

  1. 使用Nginx-rtmp-module搭建hls直播
  2. Python计算机视觉:第一章 图像处理基础
  3. hibernate mysql写入中文乱码
  4. Mybatis 逆向工程 自动生成代码
  5. testid oracle vue,Vue 组件单元测试究竟测试什么?
  6. Angular应用ng build的一些边界情况boundary condition
  7. 计算机网络拓跋结构,实战 | 服务端开发与计算机网络结合的完美案例
  8. [spark程序]统计人口平均年龄(本地文件)(详细过程)
  9. php的正则匹配方法preg_match_all问题
  10. alex的ATM学习笔记
  11. element ui 表格中的渲染有多个状态判断的情况
  12. 【舆情聚焦】 乐视危机舆情监测专项报告
  13. 浏览器被7654和2345网页劫持解决办法
  14. 响应html广告区分手机pc,typecho博客判断电脑PC和手机WAP端进行广告展示
  15. Linux ssh 端口修改
  16. 蒙特卡洛树搜索(MTCS)
  17. java山地自行车怎么看型号_自行车大小型号如何区分的
  18. Loadrunner之关联——用小故事理解
  19. 这5种计算机视觉技术,刷新你的世界观
  20. python设定数值范围_Python 生成周期性波动的数据 可指定数值范围

热门文章

  1. 了解一下,Android 10 Build系统
  2. 【日常记录】解决‘GLIBC_2.34‘ not found,并且gcc制定glibc版本编译
  3. 将自动化测试推向极限
  4. 收藏:国产服务器和处理器架构
  5. HTML调用PHP的方法
  6. Kafka原理+操作+实战
  7. 北航操作系统课程-第一次作业-操作系统引论1
  8. 使用python快速搭建接口自动化测试脚本实战总结
  9. 通信码元速率和带宽理解
  10. [体感游戏]关于体感游戏的一些思考(一)--- 开篇和“随身”物件