数据库中表的连接方式

连接的前提:两个表间存在相同的字段

连接方式

#emp (empno, ename,job,mgr,hiredate,scal,comm,deptno)  注释
#dept (deptno,dname,loc)
/* salgrade(grade int ,  -- 注释
					losal int,
                    hisal int); */
-- 左连接-- 实际生活中的正常连接方式
	select * from  emp right join dept on emp.deptno = dept.deptno;

-- 右连接
	select * from emp left join dept on emp.deptno = dept.deptno;

-- 内连接
	select * from emp inner join dept on emp.deptno = dept.deptno ;

-- 特殊的连接情况 自连接   inner join 有时也可以只写join 作用:一表多用        as 起别名
	#方式一  一表中的某个字段连接 
		# 将相同的数据表进行重命名,选取经理的姓名 与职员相同的 e1.mgr=e2.empno
		select  e1.ename 经理 ,e1.ename  职员 from emp e1, emp e2  where e1.mgr = e2.empno ;
	
	#方式二  自己与自己连接 自连接
		select e1.ename 经理 ,e2.ename 职员 from emp e1  inner join emp e2 where e1.mgr =e2.empno;
		
-- 交叉连接 cross join
# 来统计部门表与员工表连接后的所有行数
	select count(*) from dept cross join emp;



例题:-- 3、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息
select s.* ,s1.c_id ,s2.c_id from student s   
join score s1 on s1.s_id=s.s_id  and s1.c_id ='01'  #学生信息表内连接成绩表,选取课程编号为01的学生信息
join score s2 on s2.s_id=s.s_id and s2.c_id ='02' ;  # 再内连接成绩表,选取课程号为02的学生信息
#达到了学过课程编号为01且学过课程编号为02的学生信息

a连接b,b连接c,c连接d的形式
desc student; #s_id
desc score ;  #s_id  c_id
desc course;  #c_id t_id
desc teacher; #t_id t_name

-- 查询学过"张三"老师授课的同学的信息
select s.* from student  s 
left join score  sc on s.s_id=sc.s_id
left join course c on  sc.c_id=c.c_id 
left join teacher t on c.t_id=t.t_id
where t_name='张三';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值