连接查询

SQL表连接查询(inner join、full join、left join、right join)

有两个表,一个是班级表,一个是学生表。

class 表的数据


student 表的数据

一、内连接-inner jion :

查询学生的名字和所在班级的名字

select stu_name,class_name from student as s,class as c where c.class_no = s.class_no;

上面就是我们最常见的inner join,即内连接,把符合class.class_no = student.class_no条件的元组才选出来,也可以写成:

select stu_name,class_name from student as s inner join class as c on c.class_no=s.class_no; 

查询结果


二、左连接-left join:

左连接是把左边的表的元组全部选出来:

select * from student s left join class c on s.class_no =c.class_no;

上面语句就是把左边的表,即student表中的元组全部选出,尽管有些学生在表中是没有班级的,也选了出来,选出的结果为:


三、右连接-right join:

右连接就是把右边表的数据全部取出,不管左边的表是否有匹配的数据:

select * from student s right join class c  on s.class_no=c.class_no


四、全连接-full join:

把左右两个表的数据都取出来,不管是否匹配:

select * from student  s full join class c on s.class_no = c.class_no;   

好像不支持全连接



#建表及数据准备

drop table if exists class;

create table class(

class_no int(2) unsigned zerofill primary key auto_increment comment '班级编号',

class_name varchar(30) not null comment '班级名称'

);

insert into class values(1, '培优班');

insert into class values(2, '普通班');

insert into class values(3, '提升班');

insert into class values(4, '高级班');

drop table if exists student;

create table student(

stu_no int(2) unsigned zerofill primary key auto_increment comment '学员编号',

stu_name varchar(30) not null comment '学员姓名',

stu_sex varchar(3) not null comment '学员性别',

stu_age tinyint(2) unsigned zerofill comment '学员年代',

grade double(5,2) zerofill comment '成绩',

class_no int(2) unsigned zerofill comment '所在班级编号',

foreign key(class_no) references class(class_no)

);

insert into student values(01, '李白', '男', 18, 60, 01);

insert into student values(02, '杜甫', '男', 20, 76, 01);

insert into student values(03, '张飞', '男', 32, 80, 02);

insert into student values(04, '韩信', '男', 26, 98, 02);

insert into student values(05, '了龙', '男', 27, 56, 02);

insert into student values(06, '大乔', '女', 17, 88, 01);

insert into student values(07, '小乔', '女', 16, 96, 01);

insert into student values(08, '小乔', '女', 16, 90, 01);

insert into student values(09, '关哥', '男', 32, 80, 02);

insert into student values(10, '刘备', '男', 36, 98, null);

























连接查询的分类

1: 内连接

2: 外连接

3: 自然连接

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一. Java基础部分.................................................
    wy_sure阅读 3,841评论 0 11
  • 连接查询:将多张表(可以大于2张)进行记录的连接(按照某个制定的条件进行数据拼接);最终结果是:记录了数有可能变化...
    coder_hong阅读 275评论 1 0
  • 一、mysql查询的五种子句 where(条件查询)、having(筛选)、group by(分组)、order ...
    化城阅读 1,659评论 0 9
  • 前生我未曾出现 今生相遇恨晚 然而 你若不弃 余生我愿一直陪伴 如有来生 记得 我还在原地 不见不散…… 于201...
    何时再出发阅读 209评论 3 0
  • 我们成为不了别人,最终只能做自己。 年少时大家都夸一个小女孩,长得好看、多才多艺、落落大方。听到太多次大家...
    錢谷阅读 209评论 0 0