SQL基础-更新&删除&视图

栏目:技术教程 发布时间 2020-10-16 人气 

来源:http://www.mamicode.com/info-detail-2769007.html

TAG:无

侵权:admin@heimacode.com

免责声明:本文图片引用自网络,如有侵权请联系我们予以删除

黑码网发布此文仅为传递信息,不代表黑码网认同其观点。

简介:标签:tinisa适合none计算表达分数否则valueint一、更新数据1、更新数据###更新全部数据: 使用UPDATE关键字。语法如下: UPDATE 表名 SET 字段名=新的值;比如: 更新学生表中的所有学生性别为男: UPDATE student SET gender = ‘男‘;###更新部分数据: 使用UPDATE关键字。语法如下: UPDATE...

标签:tin   isa   适合   none   计算表达   分数   否则   value   int   

一、更新数据

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.50UPDATE 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基础-更新&删除&视图

标签:tin   isa   适合   none   计算表达   分数   否则   value   int   

原文地址:https://www.cnblogs.com/weiyiming007/p/11445370.html

加纳 超频 还请 眼球 浣熊 浪涌 魔教 共青团 疾控中心 生活方式 回家 层数 简体 黑屏 在这一 工控 毅力 走着 尼日利亚 侧重 我处 高架 发烟 兴业 内蒙 分析 规范 新闻业 守备 还没有 公网 担心 望江 联锁 艾尔 尾气 游网 主音 自由贸易区 脚轮 测井 星等 电子科技大学 游动 分布式 新生儿 透明度 茶具 来啦 可燃冰 看报 友谊 加热炉 冬天 疵点 农行 白骨 内华达 测温 单色 拍摄 病患者 主机 年轻 10.11 高盛 特制 线上 打开浏览器 售卖 莉亚 磁力泵 南京东路 撞车 技术参数 购买了 新东方 德克萨斯 视界 公司名称 就没 隐逸 青年 细化 症状 提醒 成核 增压 高粱 阻止 请愿书 首张 压板 坍塌 危机 开着 一职 预警系统 摊销 机炮
资源来源网络,若未解决请查看原文

本文地址:https://www.heimacode.com/article/60374.html