内连接:
假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配的上的记录查询出来,这就是内连接。AB两张表没有主副之分,两张表是平等的。
外连接:
假设A和B表进行连接,使用外连接的话,AB两张表中有一张表是主表,一张表是副表,主要查询主表中的数据,捎带着查询副表,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。
外连接的分类?
左外连接(左连接):表示左边的这张表是主表。
右外连接(右连接):表示右边的这张表是主表。
左连接有右连接的写法,右连接也有对应的左连接的写法。
eg:找出每个员工的上级领导?
select e.empno,e.ename,e.mgr,m.ename from emp e left join emp m on e.mgr=m.empno;

找出哪个部门没有员工?
select e.*,d.* from emp e right join dept d on e.deptno=d.deptno where e.empno is null;

数据库设计三范式(重点内容,面试常问)
什么是设计范式?
设计表的依据。按照这个三范式设计的表不会出现数据冗余。
三范式都是哪些?
第一范式:任何一张表都应该有主键,并且每一个字段原子性不可再分。
第二范式:建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖。
多对多?三张表,关系表,两外键
t_student 学生表
sno(pk) sname
1 张三
2 李四
3 王五
t_teacher 讲师表
tno(pk) tname
1 王老师
2 李老师
3 杜老师
t_student_teacher_relation 学生讲师关系表
id(pk) sno(fk) tno(fk)
1 1 3
2 1 1
3 2 2
第三范式:建立再第二范式基础之上,所有非主键字段直接依赖主键,不能产生传递依赖。
一对多?两张表,多的表加外键
班级t_class
cno(pk) cname
1 班级1
2 班级2
学生t_student
sno(pk) sname classno(fk)
101 张1 1
102 张2 1
103 张3 2
104 张4 2
提醒:在实际的开发中,以满足客户的需求为主,有的时候会拿冗余换执行速度。
一对一怎么设计?
一对一设计有两种方案:主键共享

一对一设计有两种方案:外键唯一
