mysql学习笔记(六)92语法和99语法
2022/6/13 2:20:29
本文主要是介绍mysql学习笔记(六)92语法和99语法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
- 关联查询
sql分为1992语法和1999语法。首先来看92语法的连接: 规则:select table1.colm,table2.colm from table1,table2 where table1.colum = table2.colum; 在where子句中写入连接条件。当表中有重名的列时,必须在列的名字前加上表名作为前缀。 连接的类型: 1.等值连接--equal join 2.非等值连接--non-equal join 3.外连接--outer join 4.自连接--self join 在进行连接的时候可以使用等值连接,也可以使用非等值连接。 --查询雇员名称以及自己的薪水等级(非等值连接) 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; --笛卡尔积,当关联多张表,但是不指定连接条件的手,会进行笛卡尔积,关联后的总记录条数为m*n;m和n表示两张表的列数,一般不使用。 select * from emp e,dept d;
- 92语法有什么问题?
答:在92语法中,多张表的连接条件会放到where子句中,同时where需要对表进行条件过滤,因此相当于过滤条件和连接条件揉到一起,太乱了,所以出现了99语法。 - 99语法修正了整个缺点,把连接条件,过滤条件分开来,并引入了新的table join语法结构。
--cross join,交叉连接等同于92中的笛卡尔积。 select * from emp cross join dept; --natural join,自然连接相当于92中的等值连接。 不需要写连接条件,会从两张表中找到相同列做连接。 当两张表中不具有相同的列名时,会进行笛卡尔积操作。 select * from emp e natural join dept d;等值连接 select * from emp e natural join salgrade sg;笛卡尔积 --on子句,添加连接条件(可以等值连接,也可以非等值连接) 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;//非等值连接 --left (outer)join,左外连接,outer可省略 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(+); --right(outer)join,右外连接,outer可省略 --full outer join 全连接,相当于左外连接和右外连接的合集。 select * from emp full outer join dept d on e.deptno = d.deptno; --inner join 内连接,两张表的连接查询,只会查询出右匹配记录的数据。 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; --using 除了使用on表示连接条件外,也可以使用using作为连接条件,此时连接条件的列不再归属于任何表。(与On的区别就是这个) 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;
这篇关于mysql学习笔记(六)92语法和99语法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-25如何部署MySQL集群资料:新手入门教程
- 2024-12-24MySQL集群部署资料:新手入门教程
- 2024-12-24MySQL集群资料详解:新手入门教程
- 2024-12-24MySQL集群部署入门教程
- 2024-12-24部署MySQL集群学习:新手入门教程
- 2024-12-24部署MySQL集群入门:一步一步搭建指南
- 2024-12-07MySQL读写分离入门:轻松掌握数据库读写分离技术
- 2024-12-07MySQL读写分离入门教程
- 2024-12-07MySQL分库分表入门详解
- 2024-12-07MySQL分库分表入门指南