查询的时候加入等值条件
有两个表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
关键字可以实现和上面同样的功能
join
表示链接两张表 on
表示 限制条件
在join
之前使用 left outer
或者rigth outer
或full outer
分别表示左外连接,右外连接,满外连接(可以吧左右两张表都不对应的数据全部显示出来)
要求:查询公司中员工的老板的信息,因为老板也在员工表,所以是自连接
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---------------...新闻热点
疑难解答