sql99学习

  • 笛卡尔积:一件事情的完成需要很多步骤,而不同的步骤有很多种方式,完成这件事情的所有方式称之为笛卡尔积

  • 交叉连接(了解)-cross join

    • select * from emp cross join dept
    • 查看两表或者多表的笛卡尔积
  • 自然连接-natural join(inner join… on…

    • 自然链接会自动使用多表中所有相同字段(不但值相同,名字也要相同)进行筛选
      • 前提:多表一定要有同名同值的字段
      • 注意:自然连接会自动使用所有的相同字段进行结果筛选
    • 使用using关键字可以指定字段进行链接查询,但是必须是同名字段 inner join
    • 使用on关键字可以直接在其后书写链接条件,没有限制 inner join
    • 问题:查询员工及员工所在的部门信息
      • 问题1:假如在链接查询的时候不想使用所有相同字段进行筛选怎么办?
        • 使用using关键字 select * from dept join emp using(deptno)
      • 问题2:假如在链接查询中没有同名字段,但是有同值字段怎么筛选?
        • 使用on关键字 select * from dept inner join emp on dept.deptno=emp.deptno
  • 左外连接-left outer join

    • 查询没有部门的员工信息及员工和部门信息
    • select * from emp e left join dept using(deptno);
    • select * from emp e left join dept d on e.deptno = d.deptno;
  • 右外连接-right outer join

    • 查询没有员工的部门信息及员工和部门信息
    • select * from emp eright outer join dept d on e.deptno=d.deptno
  • 全外连接-full outer join

    • 查询没有部门的员工信息和没有员工的部门信息及员工和部门信息
    • select *from emp efull outer join dept d on e.deptno=d.deptno
  • 自连接

    • 查询员工姓名,职位,薪资,上级领导姓名
    • select e.ename,e.job,e.sal,m.enamefrom emp e inner join emp m on e.mgr=m.empno
  • 三表联合查询

    • 查询员工姓名,工作,薪资,部门名称,城市名称
    • select e.ename,e.job,e.sal,d.dname,c.cname from emp e inner join dept d on e.deptno=d.deptno inner join city c on d.loc=c.cid
    • 查询工资高于2000的员工姓名,工作,薪资,部门名称,城市名称
    • select e.ename,e.job,e.sal,d.dname,c.cname from emp e inner join dept d on e.deptno=d.deptno inner join city c on d.loc=c.cid where e.sal>2000
    • 查询内容 查询表 链接表 链接条件 链接表 链接条件 筛选条件