表和表之间,一般就是三种关系:一对一,一对多,多对多
1、一对一:数据库表中的数据结构,我们用人与车一 一对应的方式来描述一对一的数据表结构,type是区分这条数据是人还是车,master对应是的主人(车的主人是哪个id,car对应的是那辆车的id)
SQL代码中,我们先创建这一张表: 注--if not exists的意思是 如果不存在***就如何如何,在这里就表示,如果这个数据库中没有这个表,就创建本表
CREATE TABLE IF NOT EXISTS person (
id int primary key autoincrement,
name varchar(50),
type int,
master int,
car int
);
插入数据:
insert into person values(1,"小马",1,0,1);
insert into person values(2,"小虎",1,0,2);
insert into person values(3,"小龙",1,0,3);
insert into person values(4,"小牛",1,0,4);
insert into person values(5,"宝马5系",1,1,0);
insert into person values(6,"奔驰E系",1,2,0);
insert into person values(7,"汉兰达",1,3,0);
insert into person values(8,"路虎揽胜",1,4,0);
对照表我们可以发现:小马 -- 宝马5系
小虎 -- 奔驰E系
小龙 -- 汉兰达
小牛 -- 路虎揽胜
通常呢为了查询方便,会建俩张表,但是实际项目中为了节省空间,一般都是一张表,重点来了 !!! 这时我们可以建视图,想当年我学数据库课程的时候,死都理解不了视图和存储是干什么,现在用这个例子可以很清晰的说明什么是视图,首先在逻辑上我们可以把上述表重中的数据分为俩组,一组是以人为主的,一组是以车为主的,创建这么两类视图(虚表)
有个小概念我们需要普及一下,视图是一种逻辑概念,它并不独立占用物理内存,是依附在数据表上的,对视图进行修改时,相应的表数据也会被改动
创建视图:create view masterView as(select * from person where type = '1' ); 这是人的视图
create view carView as(select * from person where type = '0' ); 这是车的视图
要求:查出哪些人拥有的车是什么?
执行查询:
1、原始方法:select masterView.name AS car,carView.name AS master FROM masterView,carView where masterView.id =carView.master ANDcarView.id =masterView.car
2、连接方法:select mansterView.name AS car,carView.name AS master FROM masterView INTER JOIN carView ON masterView.id =carView.master ANDcarView.id =masterView.car