#使用视图的意义
#1.简化查询,用户不需要复杂的sql去查询多张复杂的关联表
#2. 安全,使用视图的用户只能访问被允许查询的结果,使用视图可以限制用户访问一些敏感信息
drop table if exists users;
create table `users`(
`u_id` int(4) not NULL auto_increment,
`username` varchar(20) DEFAULT NULL,
`age` int(4) default NULL,
`country` varchar(20) default NULL,
PRIMARY KEY (`u_id`)
)ENGINE = INNODB auto_increment=1 DEFAULT CHARSET=utf8;
drop table if exists course;
CREATE TABLE `course`(
`c_id` int(4) NOT NULL auto_increment,
`coursename` varchar(20) default NULL,
`description` varchar(255) default NULL,
PRIMARY key(`c_id`)
)ENGINE=INNODB auto_increment=1 DEFAULT CHARSET=utf8;
drop table if exists user_course;
CREATE TABLE `user_course`(
`u_c_id` int(4) NOT NULL auto_increment,
`userid` int(4) NOT NULL,
`courseid` int(4) NOT NULL,
PRIMARY KEY (`u_c_id`)
)ENGINE=INNODB,auto_increment=1,default CHARSET= utf8;
insert into users(username,age,country)
values
('Tom',23,'china'),
('JIM',24,'USA'),
('Jean',25,'canda'),
('rof',26,'russa');
insert into course(coursename,description)
values
('java','mysql'),
('web','web class'),
('c++','computer'),
('c','base class');
insert into user_course(userid,courseid)
values
(1,1),
(1,2),
(1,4),
(2,3),
(2,4),
(3,1),
(4,2);
select * from users;
select * from course;
select * from user_course;
子查询方式获取某用户的课程
select username,coursename from user_course left join course on user_course.courseid = course.c_id left join users on user_course.courseid = users.u_id where username='Tom';
#创建视图的方式获取某用户的课程
create view user_course_view as select * from user_course left join course on user_course.courseid = course.c_id left join users on user_course.courseid = users.u_id;
select username,coursename from user_course_view where username='Tom'
#如果有些信息是隐秘的话,可以通过视图的方式进行隐藏
#创建视图,隐藏课程的描述信息
create view user_course_view as
select user_course.*,users.*,course.c_id,course.coursename from
user_course
left join course on user_course.courseid = course.c_id
left join users on user_course.userid = users.u_id;