SQL语句02(连表查询)
---恢复内容开始---
sql1992
sql分类
1.笛卡尔积 (表乘表)
例:select * from emp,dept;
2.等值连接 表的连接条件使用“=”
例:select * from emp,dept where emp.deptno = dept.deptno;
3.非等值连接 表的连接条件使用“>、>=、 <、<=、!=、any等”
例:select e.ename,sg.grade from emp e,salgrade sg where e.sal between sg.losal and sg.hisal;
4.自连接 自己连接自己
例:select e1.ename || ' 的上司是 '|| e2.ename from emp e1,emp e2 where e1.mgr = e2.empno;
5.外连接:在等值基础上,确保一张表(主表)的记录都存在 从表满足则匹配,不满足补充null
1.左外连接,“(+)”在等号右边
例:select * from emp e,dept d where d.deptno = e.deptno(+);
2.右外连接,“(+)”在等号左边
例:select * from emp e,dept d where d.deptno(+) = e.deptno;
3.“(+)”在哪一边的列,该表就补充null
sql1999
sql分类
1.cross join 交叉连接 (笛卡尔积) ,不需要on关键字
例: select * from emp cross join dept
2.natural join 自然连接 (找两个表中相同的列,进行等值匹配),不需要on关键字
例: select * from emp natural join dept
3.inner join 内连接
1)必须有on关键字,on表示连接条件
2)inner关键字可以省略
--等值连接
select e.ename,d.dname from emp e INNER JOIN dept d on e.deptno = d.deptno where e.sal > 2000
--非等值连接
select e.ename,s.grade from emp e INNER JOIN salgrade s on e.sal between s.losal and s.hisal
--自连接
select e1.ename || '的上司是' || e2.ename from emp e1 INNER JOIN emp e2 on e1.mgr = e2.empno
4.outer join 外连接,outer关键字可以省略
1) left outer join
例:select * from emp e LEFT OUTER JOIN dept d on e.deptno = d.deptno
2) right outer join
例:select * from emp e RIGHT OUTER JOIN dept d on e.deptno = d.deptno
3) full outer join
例:select * from emp e FULL OUTER JOIN dept d on e.deptno = d.deptno
--如何进行多表连接
--查询员工的姓名、薪水、部门名称及工资等级
select e.ename, e.sal, d.dname, s.grade
from emp e, dept d, salgrade s
where e.deptno = d.deptno
and e.sal between s.losal and s.hisal
select e.ename, e.sal, d.dname, s.grade
from emp e
join dept d
on e.deptno = d.deptno
join salgrade s
on e.sal between s.losal and s.hisal
--子查询
--在where中使用的子查询
例:
--查询部门名称为RESEARCH、SALES
select *
from emp
where deptno in
(select deptno from dept where dname in ('RESEARCH', 'SALES'))
--查询有哪些人的薪水是在整个雇员的平均薪水之上的
select ename,empno, sal, sal+nvl(comm,0)
from emp
where sal+nvl(comm,0)>(select avg(sal+nvl(comm,0)) from emp);
--查在雇员中有哪些人是经理人
select empno, ename
from emp
where empno in (
select distinct mgr from emp
);
--找出部门编号为20的所有员工中收入最高的职员
select * from emp
where sal >= all(
select sal
from emp
where deptno = 20)
and
deptno = 20
--在from后面使用子查询
例:
--我们要求每个部门平均薪水的等级
select t1.deptno, t1.savg, s.grade
from (select deptno, avg(sal) savg from emp group by deptno) t1
join salgrade s
on t1.savg between s.losal and s.hisal
--求每个部门薪水的平均等级
select t1.deptno, avg(t1.grade)
from (select e.deptno, s.grade
from emp e, salgrade s
where e.sal between s.losal and s.hisal) t1
group by t1.deptno
---恢复内容结束---
SQL语句02(连表查询)的更多相关文章
- 2.1 Oracle之DML的SQL语句之单表查询以及函数
1.SQL简介 对于不同的数据库来说,SQL语句是相通的,关系型数据库都以SQL语句为操作的标准,只是相应的数据库对应的函数不相同. SQL(Structured Query Language,结构化 ...
- 2.2 Oracle之DML的SQL语句之多表查询以及组函数
一.SQL的多表查询: 1.左连接和右连接(不重要一方加(+)) SELECT e.empno,e.ename,d.deptno,d.dname,d.loc FROM emp e,dept d WHE ...
- SQL语句 自连表查询。inner join用法,partition by ,列转行查询
use mydb1 go -- 表T_Employee2 -- Id Name Position Dept -- 1 张三 员工 市场部 -- 2 李四 经理 销售部 -- 3 王五 经理 市场部 - ...
- 惊世骇俗的sql语句之连表查询
select `product_skus`.id as skuId, `wname` as sku名称, if(`sku_attributes`.`status`=1,'上架','下架') as 状态 ...
- hibernate中使用sql语句进行表链接查询,对结果集的遍历方法
今天做了一个在hibernate中使用sql语句进行表链接查询的功能,得到的属性是来自两个表中的字段.下面对结果集遍历的方法进行记录. sql语句不写了.部分代码如下: List<Course_ ...
- SQL语句之 多表管理
SQL语句之 多表管理 一个数据库内通常会有不止一张表,有时候我们要把多张表联系起来,这就需要用到多表管理的语句. 1.外键约束 一个表中的非主键字段,如果在另外一张表中是主键,那么这个字段我们叫它做 ...
- sql语句中----删除表数据drop、truncate和delete的用法
sql语句中----删除表数据drop.truncate和delete的用法 --drop drop table tb --tb表示数据表的名字,下同 删除内容和定义,释放空间.简单来说就是把整 ...
- 通过带参数的Sql语句来实现模糊查询(多条件查询)
#region 通过带参数的Sql语句来实现模糊查询(多条件查询) StringBuilder sb = new StringBuilder("select * from books&quo ...
- (转载)用SQL语句创建Access表
<来源网址:http://www.delphifans.com/infoview/Article_220.html>用SQL语句创建Access表 很久以前弄的,用了一天的时间,没有什么技 ...
- 使用sql语句获取数据库表的信息
下面的sql语句可以查看表的信息.其中modify_date和create_date可以根据表的修改时间来查看.如果不需要删除后,就能看到所有表的字段信息 ) PERCENT d.name AS 表名 ...
随机推荐
- 成为一名自由UX设计师--你“够格”吗?
和传统的朝九晚五,三点一线的生活状态相比,现在互联网时代下的年轻人更崇尚对自由的追求.“可任意支配时间”.“工作场所自由”和“收入高”是人们选择成为自由职业者的主要原因.特别是IT行业中的设计师群体, ...
- setPadding 与 setBackgroundDrawable
这两个不能同时用,如果同时用,setPadding 将不会起作用,用的是 drawable里面自带的padding
- 设置div中的div居中显示
设置div中的div居中显示 方法一. <div class='big'> <div class='small'>box1</div> </div> s ...
- 常见的http response
200 //OK 400 //bad request 401 //Una ...
- [operator]ubuntu + git
1.创建分支 git checkout -b develop 2.提交分支到远程 git push origin develop 3.设置默认的提交分支 git branch --set-upstre ...
- HDU 5974 A Simple Math Problem(数论+结论)
Problem Description Given two positive integers a and b,find suitable X and Y to meet the conditions ...
- D3 data()
与datum()的区别 假设要绑定的数组为[3,6,9],那么我们希望第一个p元素绑定3,第二个绑定6,第三个绑定9.这种情况就需要使用data()函数,如果使用datum(),则会将数组本身绑定到各 ...
- 如何查看非自己提交的请求的结果 - 深入浅出Oracle EBS之杂项技术荟萃
如何查看非自己提交的请求的结果定位要找的请求SQL举例:SELECT req.request_id, fcp.user_concurrent_program_name, usr ...
- Android工具类整合
Android-JSONUtil工具类 常用的Json工具类,包含Json转换成实体.实体转json字符串.list集合转换成json.数组转换成json public class JSONUtil ...
- [C#]如何解决修改注册表受限问题(转)
在项目中添加一个Application Manifest File,名字默认为app.manifest,内容中应该有一行: <requestedExecutionLevellevel=" ...