所有員工所在部門的部門名稱
select last_name,name
from s_emp,s_dept; S1表(id,name)
| id | name |
| 1 | s |
| 2 | a |
| 3 | b |
| id | name |
| 1 | s |
| 2 | a |
| 3 | b |
| s1.id | s1.name | s2.id | s2.age |
| 1 | s | 1 | 20 |
| 1 | a | 2 | 21 |
| 1 | b | 3 | 22 |
| 2 | s | 1 | 20 |
| 2 | a | 2 | 21 |
| 2 | b | 3 | 22 |
| 3 | s | 1 | 20 |
| 3 | a | 2 | 21 |
| 3 | b | 3 | 22 |
from s1,s2 where s1.id=s2.id; 1.等連接:用等號連接的連接 1)所有員工所在部門的部門名稱 select e.id,e.last_name,d.name
from s_emp e,s_dept d
where e.dept_id=d.id;
2)查詢員工的姓名和部門所在地區的名稱(3張表)
select e.last_name,r.name
from s_emp e,s_dept d,s_region r
where e.dept_id=d.id
and d.region_id=r.id; 3)查詢部門名稱包含sa的員工姓名薪水
select d.name,e.last_name||e.first_name,e.salary
from s_emp e,s_dept d
where e.dept_id=d.id
and lower(d.name) like '%sa%';
注:先寫連接條件 再寫限定條件(消除無用資料)
4)查詢歐洲銷售部門的薪水在1000到2000的員工資訊
select r.name,d.name,e.salary
from s_emp e,s_dept d,s_region r
where e.dept_id=d.id and d.region_id=r.id
and r.name='Europe'
and e.salary between 1000 and 2000
and d.name='Sales'; 5)查詢部門名稱是5位,該部門員工的薪水不等于1500,并按員工的薪水降序排序
select d.name,e.salary
from s_emp e,s_dept d
where e.dept_id=d.id
and length(d.name)=5
and e.salary!=1500
order by e.salary DESC;
2.不等連接:連接條件使用的不是等號的連接
>,<,...between..and
drop table s_gender;
create table s_gender(
id number(5) primary key,
minSal number(7),
maxSal number(7),
name varchar2(20));
insert into s_gender
values(1,0,1000,'藍領');
insert into s_gender
values(2,1000,1500,'白領');
insert into s_gender
values(3,1500,2500,'金領');
commit;
查詢所有員工的工資等級?
select e.last_name,g.name
from s_emp e,s_gender g
where e.salary between g.minSal and g.maxSal; 3.在where中使用
1)外連接:把外鍵為空的資料一并查詢出來
使用:(+)(僅限于Oracle資料庫)
規則:(+)放在查詢資料少的一方(即表中有空值的一方)
(1)左外連接:(+)放在等號的右邊(標準的sql:..left join ...on...左外連接)
查詢員工所在部門的名稱,包括沒有部門號的員工(所有員工)
select e.last_name,d.name
from s_emp e,s_dept d
where e.dept_id=d.id(+);
注意:等連接不能查詢外鍵值為空的資料,
-------------------------------------------
標準:
select e.last_name,d.name
from s_emp e left join s_dept d
on e.dept_id=d.id; (2)右外連接:(+)放在等號的左邊(標準的sql:..right join...on....右外連接 查詢所有員工所在部門的名稱,但是需要把所有部門給查詢出來insert into s_dept values(1000,'teaching',2); commit;
select e.last_name,d.name
from s_emp e,s_dept d
where e.dept_id(+)=d.id;
----------------------------------------
標準:
select e.last_name,d.name
from s_emp e right join s_dept d
on e.dept_id=d.id;
2)全連接 (標準的sql陳述句:full join...on...)
查詢員工所在部門的名稱,沒有部門號的員工,所有的部門都查詢出來
select e.last_name,d.name
from s_emp e full join s_dept d
on e.dept_id=d.id;
3)自連接:連接的時候來自同一張表
查詢所有員工的經理的last_name,salary 包括沒有經理的員工?
select w.last_name,w.salary,m.last_name,m.salary
from s_emp w,s_emp m
where w.manager_id=m.id(+);
4)集合連接
union:并集,重復的列只顯示一行
union all:并集,不會消除重復的行
minus:差集
intersect:交集
rownum:偽列,可以分頁技術,邏輯位置
只能等于1
不能大于或者大于等于任何正整數
可以小于或者小于等于任何正整數
select *
from s_dept
where rownum<=2; //查詢表中前倆條資料
rowid:資料保存到檔案中的物理位置
select rowid
from s_dept; (1)部門表中前5條記錄?
select *
from s_dept
where rownum<=5; (2)部門表中第3條到第5條資料?
select *
from s_dept
where rownum<=5
minus
select *
from s_dept
where rownum<=2;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/1145.html
標籤:Oracle
上一篇:復雜一點的SQL陳述句:Oracle DDL和DML
下一篇:Oracle記憶體結構和后臺行程
