Oracle学习——sql1999连接、Oracle的set运算符、并集、交集、控制结果排序

SQL1999连接

连接查询新语法

SELECT table1.column_name,table2.column_name FROM table1
		[CROSS JOIN table2]  //交叉连接
[NATURAL JOIN table2] |	//自然连接
		[JOIN table2 USING (column_name)] |      //内连接
		[JOIN table2 ON (table1.column_name = table2.column_name)] |  //内连接
		[LEFT | RIGHT | FULL OUTER JOIN table2      //左外连接  右外连接 全(满)外连接
ON (table1.column_name = table2.column_name)];

交叉连接(了解即可)

用于生成两张表的笛卡尔集

	Select d.dname,e.ename,d.deptno,e.deptno 
		from dept d cross join emp e;

自然连接:特殊的等价连接,它将表中具有相同名称的列自动进行记录匹配
自然连接不必指定任何同等连接条件。(内连接中的一种)
语法:

	SELECT table1.column_name,table2.column_name
			FROM table1 NATURAL JOIN table2;

举例:查询员工名、工资以及所在部门名称。

	Select e.ename,e.sal,d.dname
			From emp e natural join dept d;


	9.5.3连接介绍	
		内连接(返回两张表完全满足连接条件的记录)

左连接:左表全部记录,右表满足条件记录。缺失的数据用null

右连接:与左连接相反 缺失的数据用null

完全外连接:两张表的全部内容相当于左连接和右连接并集去掉重复。

内连接

只返回两个表中相匹配的数据(满足条件的数据)
等值连接、非等值连接、自然连接都属于内连接。

用USING子句建立相等连接

Select e.ename,e.sal,d.dname from dept d join emp e using(deptno);

用on子句建立相等连接

Select e.ename,e.sal,d.dname from dept d join emp e on e.deptno=d.deptno;

左(外)连接:用于返回左表的全部记录,右表的满足条件的记录
LEFT[OUTER]JOIN

Select e.ename,e.sal,d.dname from dept d left join emp e on e.deptno = d.deptno;

右(外)连接:用于返回右表的全部记录,左表的满足条件的记录
RIGHT[OUTER]JOIN

Select e.ename,e.sal,d.dname from dept d right join emp e on e.deptno=d.deptno;

完全(外)连接:左表和右表的全部数据 FULL[OUTER] JOIN

Select e.ename,e.sal,d.dname from dept d full join emp e on e.deptno=d.deptno;

Oracle 的set运算符

集合操作符专门用于合并多条select语句的结果,包括4种:
第一种:UNION 并集:去掉重复数据,并按第一列的结果升序排序

举例:合并显示emp01表和emp02表所有雇员的部门编号、员工号、员工姓名
创建两张表:
第一张:部门号10-20的员工信息表

	 create table emp01
		As 
	 Select * from emp where deptno in (10,20);

第二张:部门号20-30的员工信息表

	create table emp02
		As 
	Select * from emp where deptno in (20,30);

那么求并集就是:

	Select deptno,emono,ename from emp01 
	Union 
	Select deptno,empno,ename from emp02;
	//注意 在这里因为是union所以部门号为20的不会显示两遍,重复的只显示一遍

UNION ALL 并集:不去掉重复数据,并不会对结果集排序

举例:合并显示emp01表和emp02表所有雇员的部门编号、员工号、员工姓名

	Select deptno,empno,ename from emp01 
	Union all
	Select deptno,empno,ename from emp02;
		//注意 在这里因为是union所以部门号为20的会显示两遍

INTERSECT交集:显示同时存在两个结果集中的数据,按第一列的结果集升序排序

举例:显示同时emp01表和emp02表的雇员的部门编号、员工号、员工姓名

	Select deptno,emono,ename from emp01 
	INTERSECT
	Select deptno,empno,ename from emp02;
		//注意 在这里显示的是部门号为20的员工的而信息。

MINUS 差集:显示第一个结果集中存在,而第二个结果集中不存在的数据。按第一列结果集进行升序排序
举例:显示emp01表中有emp02表中没有的雇员的部门编号、员工号、员工姓名

	Select deptno,emono,ename from emp01 
	MINUS
	Select deptno,empno,ename from emp02;
		//注意 在这里显示的是部门号为10的员工的而信息。

控制结果排序:当使用union、intersect和minus时,默认情况下会自动基于第一列进行升序排序,而当使用union all时不会进行排序,为了控制结果的排序顺序,可以使用order by子句

	Select deptno,emono,ename from emp01 
	Union all
	Select deptno,empno,ename from emp02;
	Order by 1;

注意
//order by 后面指定需要进行排序的列
//查询的两个表的列名相同时,可以用列名称
//查询两个表的列名不同时,要使用列位置(用数字表示)
//若是同SELECT *,order by 后面必须用数字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值