多表查询—内连接查询

--多表连接查询 join
--查询员工的编号、姓名和部门编号
'''
select * from emp
select empno,ename,deptno from emp
'''
--查询员工的编号 姓名 部门编号 部门名称
--外键 部门编号 deptno
select * from dept
--交叉连接 cross join

select *
from emp
cross join dept --表有左右之分 from+在左 join+在右

--自然连接 natural join
select *
from emp
natural join dept

select empno,ename,deptno,dname
from emp
natural join dept

--优点:简单 特点:自动匹配所有的同名列
--缺点:没有直接指明字段的数据库表 效率低
select emp.empno,emp.ename,emp.deptno,dept.deptno,dept.dname
from emp
natural join dept

--缺点:表名长
--解决:别名

select e.empno,e.ename,e.deptno,d.deptno,d.dname
from emp e
natural join dept d
自然连接缺点:自动的匹配所有的同名列,如果希望只匹配一个同名列,那么使用using子句

--using 子句
select
from emp e
join dept d
using(deptno)

--using缺点:如果有关联的外键字段,但是不同名
select *from t_class --cno
select *from t_student--classno

--on 子句
select e.empno,e.ename,e.deptno,d.deptno,d.dname
from emp e
join dept d
on(d.deptno=e.deptno)
where sal>2000 --工资大于2000的筛选条件
--连接查询的类型:cross 、natural、using、on

--该选择哪一种,

  • on子句实用范围最广,可读性更强,建议多使用

--条件
--筛选条件 where having
--连接条件 on using natural

你可能感兴趣的:(多表查询—内连接查询)