结构:
create database testdb;
use testdb;
create table `stuinfo`(
`stuid` int not null auto_increment,
`stuname` varchar(50) not null,
`stuage` int not null ,
primary key(`stuid`)
);
create table classinfo(
classid int not null auto_increment,
claaname varchar(50) not null ,
classscore int not null,
primary key(`classid`)
);
create table stuchooseclassinfo(
id int not null auto_increment,
classis int not null,
stuid int not null,
primary key(id)
);
#生成数据库,生成指定表格。已经通过workbench添加外键
insert into stuinfo (stuid,stuname,stuage) values (1,"wwf",33);
delete from stuinfo where stuid=1;
insert into stuinfo (stuname,stuage) values ("2e",33);
#主键自增,自填补,所以不写主键也行,其他都标了not null,所以 不可以不写
select * from classinfo inner join stuchooseclassinfo on classinfo.classid=stuchooseclassinfo.classis;
select * from stuchooseclassinfo;
select * from classinfo;
#可见内连接,根据on 关键字,要是其一表中没有某个其二表中有的数据,那么结果集不显示那数据有关的数据、
select * from stuchooseclassinfo left join classinfo on stuchooseclassinfo.classis =classinfo.classid;
select * from stuchooseclassinfo;
select * from classinfo;
select * from stuchooseclassinfo right join classinfo on stuchooseclassinfo.classis=classinfo.classid;
/*对于左右连接(不是left out join 或者right out join ),个人理解,左连接的话,以 left join 左边的表
为 主要,反正就是左边 的表要全部显示,不管你右边的表有没有。alter
例子:
(第一条leftJoin语句。)
stuchooseclassinfo 表 的classId 只有 2 跟4 值,但是classinfo表有1234几个值。那我显示完 stuchooseclassinfo
就好了,所以可见结果集中的classId只有2跟4 两个值。alter
(第一条 right join 语句)
以 classinfo 为主要的,里面的 键classId有值1234.但是 stuchooseclassinfo 只有2 4 的值。总之要把 classinfo
表的值显示完。那么 stuchooseclassinfo 表里只有 classId为2,4 的值,其他没有。所在在结果集中,classId为
1 跟 3 的值(对应 stuchooseclassinfo 是空的。)
左连接右连接,两个表合起来,显示方式侧重不同 */
use testdb;
select * from classinfo left outer join stuchooseclassinfo on classinfo.classid=stuchooseclassinfo.classis;
select * from classinfo left join stuchooseclassinfo on classinfo.classid=stuchooseclassinfo.classis;
select * from classinfo right join stuchooseclassinfo on classinfo.classid=stuchooseclassinfo.classis;
select * from classinfo right outer join stuchooseclassinfo on classinfo.classid=stuchooseclassinfo.classis;
# 有outer 跟没outer 结果一样