请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2603|回复: 22

表的连接、子查询

[复制链接]

70

主题

70

帖子

246

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
246
发表于 2019-5-31 14:45:56 | 显示全部楼层 |阅读模式
在熟悉了表的增删改查,表中数据的增删改查,本文将着重阐述如何进行表连接以及子查询。 所谓表连接,就是多张表在一起做笛卡尔乘积,它有多种形式;所谓子查询就是把一个sql查询的结果作为另外一个sql执行之前的输入。
1 系统、环境和前提约束2 操作
  • 以系统管理员启动cmd命令行
    表连接分为以下几种方式:

  1. # 在windows命令行下连接scott
  2. sqlplus scott/tiger
  3. # 通常意义上的表连接
  4. select * from emp e, dept d; --emp表有14行记录、dept表有4行记录,做笛卡尔乘积,共有56行记录
  5. select * from emp e, dept d where e.deptno=d.deptno -- 查询出了emp中用户对应的部门信息
  6. # 内连接
  7. select * from emp e inner join dept d on e.deptno=d.deptno; -- 查询出了emp中用户对应的部门信息
  8. # 左外连接
  9. insert into dept(deptno) values(50);  --向dept表中加入一条只有deptno的空记录
  10. insert into emp(empno) values(16); --向dept表中加入一条只有empno的空记录
  11. select * from emp e left join dept d on e.deptno=d.deptno; --以join左边的表为主,不会查出右边表的空记录,但会查询左边表的空记录
  12. # 右外连接
  13. select * from emp e right join dept d on e.deptno=d.deptno; --以join右边的表为主,不会查出左边表的空记录,但会查询右边表的空记录
  14. # 全外连接
  15. select * from emp e fulljoin dept d on e.deptno=d.deptno; --以join两边的表为主,既会查出左边表的空记录,也会查询右边表的空记录
复制代码

再看了表连接之后,我们执行以下语句,继续熟悉子查询:
  1. # 查询编号为7788的员工所在部门名称和地址
  2. select dname, loc from dept where deptno=(select deptno from emp where empno=7788);
  3. # 查询工资最高的员工信息
  4. select * from emp where sal >= all (select nvl(sal,0) from emp );
  5. # 查询编号为7788的员工的领导信息
  6. select * from emp where empno=(select mgr from emp where empno=7788);
复制代码

以上就是我们常用的表连接和子查询语句。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

用户反馈
客户端