sql分为1992语法和1999语法。首先来看92语法的连接:
规则:select table1.colm,table2.colm from table1,table2 where table1.colum = table2.colum;
在where子句中写入连接条件。当表中有重名的列时,必须在列的名字前加上表名作为前缀。
连接的类型:
1.等值连接
2.非等值连接
3.外连接
4.自连接
在进行连接的时候可以使用等值连接,也可以使用非等值连接。
select e.sal,e.ename,sg.grade from emp e,salgrade sg where e.sal between sg.losal and sg.hisal;
select * from emp e,dept d where e.deptno = d.deptno;//等值连接
select * from emp e,dept d where e.deptno = d.deptno(+);//谓词,左外连接
select * from emp e,dept d where e.deptno(+) = d.deptno;//右外连接
如,将雇员和他经理的名称查出来。
select e,ename,m,ename from emp e,emp m where e.mgr = m.empno;
select * from emp e,dept d;
- 92语法有什么问题?
答:在92语法中,多张表的连接条件会放到where子句中,同时where需要对表进行条件过滤,因此相当于过滤条件和连接条件揉到一起,太乱了,所以出现了99语法。
- 99语法修正了整个缺点,把连接条件,过滤条件分开来,并引入了新的table join语法结构。
select * from emp cross join dept;
不需要写连接条件,会从两张表中找到相同列做连接。
当两张表中不具有相同的列名时,会进行笛卡尔积操作。
select * from emp e natural join dept d;等值连接
select * from emp e natural join salgrade sg;笛卡尔积
select * from emp e join dept d on e.deptno = d.deptno;//等值连接
select * from emp e join salgrade sg on e.sal between sg.losal and sg.hisal;//非等值连接
select * from emp e left outer join dept d on e.deptno = d.deptno;
select * from emp e ,dept d where e.deptno = d.deptno(+);
select * from emp full outer join dept d on e.deptno = d.deptno;
select * from emp e inner join dept d on e.deptno = d.deptno;
select * from emp e join dept d on e.deptno = d.deptno;
select d.deptno(错)应改为deptno from emp e join dept d using (deptno);
select d.deptno from emp e join dept d on e.deptno = d.deptno;
using子句引用的列在sql任何地方都不能使用表名或别名做前缀,natural子句同样适合。
select e.ename,d.loc,sg.grade from emp e join dept d on e.deptno = d.deptno join salgrade sg on e.sal between sg.losal and sg.hisal;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix