MySQL数据库-视图基本语法

爱丽思 25天前 ⋅ 108 阅读

基础表数据

学生表表结构

CREATE TABLE `table_grade` (
  `STU_ID` bigint DEFAULT NULL COMMENT '学生唯一ID',
  `CN_GRADE` decimal(10,0) DEFAULT NULL COMMENT '语文成绩',
  `MATH_GRADE` decimal(10,0) DEFAULT NULL COMMENT '数学成绩',
  `EN_GRADE` decimal(10,0) DEFAULT NULL COMMENT '英语成绩'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

学生表数据

INSERT INTO DEV_TEST.stu_grade_view (姓名,学号,语文,数学,英语) VALUES
	 ('崽崽','1080544',123,124,134),
	 ('妹崽','1080555',134,150,116),
	 ('阿莎','1080556',115,111,125),
	 ('阿B','1080557',123,116,122);

成绩表结构

CREATE TABLE `table_grade` (
  `STU_ID` bigint DEFAULT NULL COMMENT '学生唯一ID',
  `CN_GRADE` decimal(10,0) DEFAULT NULL COMMENT '语文成绩',
  `MATH_GRADE` decimal(10,0) DEFAULT NULL COMMENT '数学成绩',
  `EN_GRADE` decimal(10,0) DEFAULT NULL COMMENT '英语成绩'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

成绩表数据

INSERT INTO DEV_TEST.table_grade (STU_ID,CN_GRADE,MATH_GRADE,EN_GRADE) VALUES
	 (1,123,124,134),
	 (2,134,150,116),
	 (3,115,111,125),
	 (4,123,116,122);

创建

CREATE [OR REPLACE] VIEW 视图名称[(列表名称)] AS SELECT 语句

例子:创建一个学生成绩视图 STU_GRADE_VIEW

CREATE OR REPLACE VIEW STU_GRADE_VIEW AS 
SELECT S.STU_NAME 姓名,S.STU_NO 学号,G.CN_GRADE 语文,MATH_GRADE 数学,EN_GRADE 英语
FROM TABLE_STU S
LEFT JOIN TABLE_GRADE G on G.STU_ID = S.ID

查询

查看创建视图的SQL语句:

SHOW CREATE VIEW 视图名称

SHOW CREATE VIEW STU_GRADE_VIEW

查询结果,查询结果合实际创建的视图语句会有一定的出入是因为有些默认条件在创建是未设置使用了系统默认设置。

CREATE ALGORITHM=UNDEFINED 
DEFINER=`root`@`localhost` 
SQL SECURITY DEFINER VIEW `stu_grade_view` 
AS select `s`.`STU_NAME` AS `姓名`,`s`.`STU_NO` AS `学号`,`g`.`CN_GRADE` AS `语文`
,`g`.`MATH_GRADE` AS `数学`,`g`.`EN_GRADE` AS `英语` 
from (`table_stu` `s` left join `table_grade` `g` on((`g`.`STU_ID` = `s`.`ID`)))

查看视图数据

select * from 视图名称

如果有查询条件,可以直接和表一样拼接查询条件即可

select * from STU_GRADE_VIEW where 姓名 = '崽崽'

修改

方式一:覆盖修改,和创建语法一样,如果有存在同名的视图直接覆盖

CREATE [OR REPLACE] VIEW 视图名称[(列表名称)] AS SELECT 语句

例子创建去掉数学成绩的视图

CREATE OR REPLACE VIEW STU_GRADE_VIEW AS 
SELECT S.STU_NAME 姓名,S.STU_NO 学号,G.CN_GRADE 语文,G.EN_GRADE 英语
FROM TABLE_STU S
LEFT JOIN TABLE_GRADE G on G.STU_ID = S.ID

方式二:直接修改

ALTER VIEW 视图名称[(列名列表)] AS SELECT 语句

例子,去掉英语科目成绩的成绩视图

ALTER VIEW STU_GRADE_VIEW AS 
SELECT S.STU_NAME 姓名,S.STU_NO 学号,G.CN_GRADE 语文,G.MATH_GRADE 数学
FROM TABLE_STU S
LEFT JOIN TABLE_GRADE G on G.STU_ID = S.ID

删除

DROP VIEW [IF EXISTS] 视图名称

例子 删除学生成绩视图

DROP VIEW IF EXISTS STU_GRADE_VIEW