mysql 查询字段连接_mysql的连接查询

1、准备工作

1、创建两张实验表

#创建学生表

create tableifnot exists student(

stu_idint primary key comment'学生编号主键',

stu_name varchar(20)comment'姓名',

stu_ageint comment'年龄')

#创建课程表

create table if not exists course(

course_id int primary key comment'课程编号主键',

course_name varchar(20)comment'课程名称',

course_stu int comment'上这门课程的学生id'

)

2、向表中插入如下数据

#给学生表添加几条数据

insert into student(stu_id,stu_name,stu_age)values(1,'张三',22);

insert into student(stu_id,stu_name,stu_age)values(2,'李四',12);

insert into student(stu_id,stu_name,stu_age)values(3,'王五',33);

insert into student(stu_id,stu_name,stu_age)values(4,'赵六',23);

#给课程表创建数据

insert into course(course_id,course_name,stu_id)values(1,'英语',1);

insert into course(course_id,course_name,stu_id)values(2,'数学',2);

insert into course(course_id,course_name,stu_id)values(3,'语文',3);

insert into course(course_id,course_name,stu_id)values(4,'物理',2);

insert into course(course_id,course_name,stu_id)values(5,'语文',2);

2、内连接(inner join)

查询两表关联列相等的数据

select * from student s INNER JOIN course c ON s.stu_id=c.course_stu;

31844966dc1ffc04d22e047897f658a2.png

如果后边不带ON 后边的条件查询的是笛卡尔积(图没截全)

ebcce01f213d30d22a3090f5f22d5be1.png

3、外连接

外连接分为左连接和右连接和全外连接。

左连接和右连接具有主表和从表之分,左连接左边的表为主表,右连接右边的表为主表,且主表的记录可以全部查到而从表没有的记录使用null值补全

1、左连接(left join)

#左连接student为主表且主表的据路全部展示从表没有的null值补全

select * from student s LEFT JOIN course c on s.stu_id=c.course_stu;

282ec22f15879b063942e967aea68e80.png

2、右连接(right join)

1、为了展示又连接以右表为主表我向course表中添加了一条与student表中的stu_id没有对应的记录

insert into course(course_id,course_name,stu_id)values(6,'政治',5);

2、右连接sql

select * from student s right join course c on s.stu_id=c.course_stu;

5a286bdb07801c95d958b0860bbf4f39.png

3、全外连接

mysql数据库始是没有全外连接查询的可以使用UNION关键字将左连接和右连接结合起来达到全外连接的效果

select * from student s right join course c on s.stu_id=c.course_stu

UNIONselect * from student s LEFT JOIN course c on s.stu_id=c.course_stu;

898b66e6ff80ad0ae015ceab306a42c0.png

4、交叉连接(cross join)

通常不会在实际中运用

交叉连接 cross in,从一张表中循环取出每一条记录都去与另一张表中进行匹配(结果全部保留),连接本身字段就会增加,最终形成笛卡儿积。

#如果交换两张表的前后位置则查询的结果显示也会调换位置select * from student cross join course;

543964f0842d93e6e64ab162b604e008.png

5、union和union all

union

union用于合并两个或者多个select语句的结果集,并消去表中任何的重复行。

特别注意:1、union中的里边查询语句中的查找字段个数必须相同

2、union中多个查询的字段类型可以不对应(对应的话看起来比较舒服)

3、union展示字段的列名称为第一个查询语句的字段名称

1、查询字段个数不一样

select * from student UNION select course_id,course_name from course

a01776fb458cb08a411f2a795bb15319.png

2、查询字段个数一样类型相匹配

select stu_name,stu_age from student UNION select course_name,course_stu from course

39bc4fbaa4190f797239aad099e694c5.png

3、查询字段个数一样类型不匹配

select stu_name,stu_age from student UNION select course_stu,course_name from course

362aaa4e5f517a9f366830ee6999a9d1.png

union all

union all的用法和union的用法是一样的但它不会去除重复的记录且当可以查询重复记录的时候使用union all比union好省去了去重的操作所以效率高

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值