Oracle 的 oracle 表查詢
通過scott用戶下的表來演示如何使用select語句,接下來對emp、dept、salgrade表結構進行解說。
emp 雇員表
字段名稱?? 數據類型?????? 是否為空?? 備注
--------?? -----------?? --------?? --------
EMPNO??? NUMBER(4)???????????????? 員工編號
ENAME??? VARCHAR2(10) Y???????? 員工名稱
JOB??????? VARCHAR2(9)?? Y???????? 職位
MGR?????? NUMBER(4)?????? Y???????? 上級的編號
HIREDATE DATE??????????? ?Y???????? 入職日期
SAL???????? NUMBER(7,2)?? Y???????? 月工資
COMM????? NUMBER(7,2)?? Y???????? 獎金
DEPTNO???NUMBER(2)???? ?Y???????? 所屬部門
-------------------------------------------
job字段:
clerk 普員工
salesman 銷售
manager 經理
analyst 分析師
president 總裁
dept 部門表
字段名稱??? 數據類型????????? 是否為空?? 備注
--------??? -----------????? --------?? --------
DEPTNO?? NUMBER(2)??????????????????? 部門編號
DNAME??? VARCHAR2(14)? ? Y????????? 部門名稱
LOC???????? VARCHAR2(13)?? Y????????? 部門所在地點
-------------------------------------------
DNAME字段:
accounting 財務部
research 研發部
operations 業務部
salgrade 工資級別表
字段名稱? 數據類型?? 是否為空? 備注
--------? ---------? --------? --------
GRADE?? NUMBER???? Y???????? 級別
LOSAL??? NUMBER???? Y???????? 最低工資
HISAL???? NUMBER???? Y???????? 最高工資
1、查看表結構 desc emp;
2、查詢所有列
select * from dept;
備注:切忌動不動就用select *,使用*效率比較低,特別在大表中要注意。
3、set timing on/off;
打開顯示操作時間的開關,在底部顯示操作時間。
eg、sql> insert into tb_stu values('0001', 'zhangsan', 24);
1 row inserted
executed in 0.015 seconds
4、insert into...select...表復制語句 語法:insert into table2(field1,field2,...) select value1,value2,... from table1
--創建tb_dept表
create table tb_dept
(
deptno number(4) not null,
dname? varchar2(14),
loc??? varchar2(13)
)
--添加主鍵約束
alter table tb_dept add constraint tb_dept primary key (deptno);
--insert into...select...用法 insert into tb_dept (deptno, dname, loc) select a.deptno, a.dname, a.loc from dept a;
5、統計 select count (*) from emp;
6、查詢指定列 select ename, sal, job, deptno from emp;
7、如何取消重復行distinct select distinct deptno, job from emp;
8、查詢smith所在部門,工作,薪水 select deptno, job, sal from emp where ename = 'smith'; 注意:oracle對內容的大小寫是敏感的,所以ename='smith'和ename='smith'是不同的
9、nvl函數
格式為:nvl(string1, replace_with)
功能:如果string1為null,則nvl函數返回replace_with的值,否則返回string1的值。
注意事項:string1和replace_with必須為同一數據類型,除非顯示的使用to_char函數。
eg、如何顯示每個雇員的年工資?
select sal*13+nvl(comm, 0)*13 "年薪" , ename, comm from emp;
10、使用列的別名 select ename "姓名", sal*12 as "年收入" from emp;
11、如何處理null值 使用nvl函數來處理
12、如何連接字符串(||) select ename || ' is a ' || job from emp;
13、使用where子句 問題:如何顯示工資高于3000的員工? select * from emp where sal > 3000; 問題:如何查找1982.1.1后入職的員工? select ename,hiredate from emp where hiredate >'1-1 月-1982'; 問題:如何顯示工資在2000到3000的員工? select ename,sal from emp where sal>=2000 and sal<=3000;
14、如何使用like操作符 %:表示0到多個字符 _:表示任意單個字符 問題:如何顯示首字符為s的員工姓名和工資? select ename,sal from emp where ename like 's%'; 如何顯示第三個字符為大寫o的所有員工的姓名和工資? select ename,sal from emp where ename like '__o%';
15、在where條件中使用in 問題:如何顯示empno為7844,7839,123,456的雇員情況? select * from emp where empno in (7844, 7839, 123, 456);
16、使用is null的操作符 問題:如何顯示沒有上級的雇員的情況? 錯誤寫法:select * from emp where mgr = ''; 正確寫法:select * from emp where mgr is null;