MySQL Select-join、inner join

本文介绍了MySQL中的连接查询,包括内连接(Inner Join)的基本概念和语法。内连接根据连接条件将多个表的数据组合,只保留符合条件的记录。此外,还提到了无条件连接即笛卡尔积,以及外连接和自然连接的概念,帮助理解不同类型的表间连接操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Select-Join-inner join

连接(连结)查询

一般而言,一个实体对应一个表。

而业务逻辑中,常常需要使用多个实体的数据。

如此以来,就需要有多个表一起使用,将多个表的记录

连接起来的技术,也就是本次学习的join

 

总体思路:

将所有的数据,按照某种条件,连接起来,再进行筛选处理。

 

连接的分类:

根据连接的条件不同,分类如下所示:

1.内连接:

数据内部的连接,要求连接的多个数据都必须存在才能进行连接。

所谓存在(几个相连接的表,主体记录在其他的表中都有相互之间的配对信息)

语法:

tbl_left inner join tbl_right on 连接条件

 

On 也可以被 where using代替

On 连接的时候,过滤掉不符合条件的记录。

Where 先形成表(笛卡尔积),再进行数据过滤。 Where 不用与外连接

Using 要求法则连接的两个实体之间的字段名称一致

 

内连接处理:内连接在连接时,是可以省略连接条件的,即所有都为真,所有左表记录与

右表记录连接都保留,有叫做交叉连接,也叫笛卡尔积N*M

此时可以使用 cross join(笛卡尔积:没有条件的)代替 inner join

 

也可以用 无条件 多表 查询。

 

2.外连接:

如果负责连接的一个或者多个数据不真实存在,则称之为外连接

3.自然连接(有内有外):

 

On 的具体连接操作

 

 

Union join 区别:

Union 是记录连接,纵向(因此要求字段相同);

Join 是字段连接(表),横向;

 

create table j_teacher
(
	id int primary key auto_increment,
	t_name varchar(10),
	gender enum('male','female','secret')
)engine innodb character set utf8;

insert into j_teacher values
(1,'寒心','male'),
(2,'李白','female'),
(3,'韩非子','secret'),
(4,'孙武','male');

create table j_class
(
	id int primary key auto_increment,
	c_name varchar(10),
	room char(3)
)engine innodb character set utf8;

insert into j_class values 
(1,'php0115','207'),	
(2,'php0228','104'),
(3,'php0331','102'),
(4,'php0505','202');

create table j_teacher_class
(
	id int primary key auto_increment,
	t_id int,
	c_id int,
	days tinyint,
	begin_date date,
	end_date date
)engine innodb character set utf8;

insert into j_teacher_class values
(1,1,1,15,'2013-01-15','2013-02-20'),
(2,1,2,18,'2013-02-28','2013-03-30'),
(3,1,3,22,'2013-03-21','2013-05-05'),
(4,2,1,20,'2013-02-22','2013-03-25'),
(5,2,2,20,'2013-03-31','2013-04-29'),
(6,3,1,15,'2013-03-27','2013-4-18'),
(7,1,1,15,'2013-04-19','2013-05-01'),
(8,3,3,15,'2013-05-28','2013-06-15'),
(9,2,1,5,'2013-05-04','2013-05-15');


select * from  j_teacher inner join j_teacher_class on 
j_teacher.id=j_teacher_class.t_id;

select j_teacher.t_name, j_teacher_class.begin_date,
j_teacher_class.days from  j_teacher inner join j_teacher_class on 
j_teacher.id=j_teacher_class.t_id;


select j_teacher.t_name, j_teacher_class.begin_date,
j_teacher_class.days from  j_teacher left outer join j_teacher_class on 
j_teacher.id=j_teacher_class.t_id;

select j_teacher.t_name, j_teacher_class.begin_date,
j_teacher_class.days from  j_teacher inner join j_teacher_class;

/*笛卡尔积查询*/
select j_teacher.t_name, j_teacher_class.begin_date,
j_teacher_class.days from  j_teacher inner join j_teacher_class;

/*多表查询*/
select j_teacher.t_name, j_teacher_class.begin_date,
j_teacher_class.days from  j_teacher ,j_teacher_class;


select id, days, t_name from 




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值