sql join查询语句

连接查询 join (重要)
	概念: 将多个表连接成为一个新的数据源, 这就是连接, 可以对新数据源进行查询.
	连接前提: 根据关联字段才能进行连接(例如 学生表的class_id和班级表的class_id)

	a. 要求查询出学生的名字,年龄,班级名称,教室号
		select student.name,student.age,class.class_name,class.class_room
		from student,class
		where student.class_id=class.class_id;

		给表取别名

		select s.name,s.age,c.class_name,c.class_room
		from student as s,class as c
		where s.class_id=c.class_id;

		非标准的连接查询

		标准的连接查询使用, 表1 join 表2 on 连接条件
		select s.name,s.age,c.class_name,c.class_room
		from student as s join class as c
		on s.class_id=c.class_id;

	b. 所以标准的连接查询的语法
		表1 join 表2 on 连接条件 ----- 构成一个新的数据源, 之后的语法和之前的查询语法一致

		select s.name,s.age,c.class_name,c.class_room
		from student as s 
		join class as c
		on s.class_id=c.class_id where s.age>100;


	c. 内连接
		表1 join 表2 on 连接条件:  内连接指连接条件必须满足,才能查询出来

		inner join / join : 内连接

		select s.name,s.age,c.class_name,c.class_room
		from student as s 
		inner join class as c
		on s.class_id=c.class_id;

		select s.name,s.age,c.class_name,c.class_room
		from student as s 
		join class as c
		on s.class_id=c.class_id;



	d. 外连接

		on 连接条件: 如果条件满足当然能查询出来, 当连接条件不满足的情况下也能查询出来. 这就是外连接.

		外连接 无论连接条件是否连接成功,都能查询出来.....分不同情况


		外连接分为两种情况: 左连接(left join,多) , 右连接(right join)


		备注: 左右指的是 join 的左右


		左连接(left join,多): 如果连接没有成功, 依然查询出join左边的数据

			查出学生的名字,年龄,班级名称,教室号, 要求显示所有的学生信息
			select s.name,s.age,c.class_name,c.class_room
			from student as s 
			left join class as c
			on s.class_id=c.class_id;



		右连接(right join): 如果连接没有成功, 依然查询出join右边的数据

			insert into class values(null,'H5精英班','B001');

			查出学生的名字,年龄,班级名称,教室号, 要求显示所有的班级信息
			select s.name,s.age,c.class_name,c.class_room
			from student as s 
			right join class as c
			on s.class_id=c.class_id;


	e. 连接条件 on,using() 了解

		如果连接条件的两个字段名一模一样,就可以使用using(字段)作为连接条件.


		select s.name,s.age,c.class_name,c.class_room
		from student as s 
		join class as c
		on s.class_id=c.class_id;

		修改为:
		select s.name,s.age,c.class_name,c.class_room
		from student as s 
		join class as c
		using(class_id);

	f. 案例
		1. 可以同时连接多个表

		2. 一个表可以同时被多次连接

			球队表
				create table team(
						id int unsigned primary key auto_increment  comment '主键id',
						name varchar(20) not null comment '球队名'
					);
				insert into team(id,name) values(2,'拜仁'),(5,'慕尼黑');

			比分表(比赛结果)
				create table score(
						hid int unsigned not null comment '主队id',
						points varchar(10) not null default '0:0' comment '比分',
						gid int unsigned not null comment '客队id'
					);
				insert into score(hid,points,gid) values(2,'3:0',5);

			显示比赛结果, 要求显示队名
				select ht.name,score.points,gt.name
				from score
				join team as ht on score.hid=ht.id
				join team as gt on score.gid=gt.id;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值