首页 > 数据库 > Oracle > 正文

Oracle多表查询

2024-08-29 13:54:54
字体:
来源:转载
供稿:网友

等值查询

查询的时候加入等值条件

有两个表employees和departments,现在要查询employees的Last_name和对应的departments的id

SQL> select last_name name,e.department_id eid,d.department_id did,d.department_name from employees e,departments d where e.department_id=d.department_id;

输出:

------------------------------------- ---------- NAME EID DID DEPARTMENT_NAME------------------------------------- ----------Higgins 110 110 Accounting....106 rows selected.

注意这里的输出是 106 条记录,是因为左边的表 有一条记录按照where的条件在右边的表没有找到,此情况需要用到外连接查询

不等值查询

查询employees的员工last_name,employee_id,salary grades_level(薪资等级)

SQL> select employee_id,last_name,salary,grade_level 2 from employees e,job_grades j 3 where e.salary between j.lowest_sal and j.highest_sal;

输出:

--------------------- ------------------- ---------EMPLOYEE_ID LAST_NAME SALARY GRADE_LEV-------------------------------------------- --------- 101 Kochhar 17000 E....

外链接查询

左外连接:左边的值在右边没有对应的值,仍然显示该值; 相反右外连接就是右表的值在左表没有对应的值,仍然显示该值;

SQL> select last_name name,e.department_id eid,d.department_id did,d.department_name from employees e,departments d where e.department_id=d.department_id(+);

输出:

------------------------------------- ---------- NAME EID DID DEPARTMENT_NAME------------------------------------- ----------Higgins 110 110 Accounting....107 rows selected.

此时,结果就有了107条记录了 此时,问题出现了,我们想让左表和右表都显示对方没有的数据,这个时候不能再使用(+)操作了,需要引入sql 1999语法

join关键字和on

使用joinon关键字可以实现和上面同样的功能

SQL> select employee_id,d.department_id,department_name from employees e join departments d on e.department_id = d.department_id;

join 表示链接两张表 on 表示 限制条件

外连接

join之前使用 left outer或者rigth outerfull outer 分别表示左外连接,右外连接,满外连接(可以吧左右两张表都不对应的数据全部显示出来)

SQL> select employee_id,d.department_id,department_name from employees e left outer join departments d on e.department_id = d.department_id;

自连接

要求:查询公司中员工的老板的信息,因为老板也在员工表,所以是自连接

select emp.last_name,manager.last_name,manager.salary from employees emp,employees manager where emp.manager_id = manager.employee_id and lower(emp.last_name) = 'chen';

输出:

--------------------------------------------------LAST_NAME LAST_NAME SALARY--------------------------------------------------Chen Greenberg 12000---------------...
上一篇:Oracle12cR1--新特性

下一篇:Oracle基本操作

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表