在Oracle數據庫中,select語句是用來進行數據庫數據查詢
1.直接查詢
語句:select 列名(可以有多個) from 表名;
舉例:1)查詢emp表中員工名和職位的信息 :select ename ,job from emp;
2)查詢emp表中的所有信息 : select empno , ename , job , sal , comm, deptno... from emp; 或者 select * from emp;
注意 :* :表示所有列名的信息
2.查詢時as為列名重新起名
語句 : select 列名 as 別名 from 表名;
舉例 : 1)查詢emp表中員工名和職位信息,同時將ename名改為“姓名” , job名改為“職位” : select ename as "姓名", job as "職位" from emp;
2)舉例1中也可以這樣表示:(a) select ename as 姓名, job as 職位 from emp; (省略雙引號)
(b) select ename 姓名, job 職位 from emp; (省略as也可以)
注意: 1.省略雙引號是,語句中的別名稱之間不能有空格,否則會出錯
2.若別名為sql特有的詞語時,別名需要寫在雙引號之中 , select ename as "姓名", job as "from" from emp;
3.特殊語句where語句的使用,可以指定搜索特定的信息
語句 : select 列名(可以有多個) from 表名 where 列名 = '表格中指定信息';(注意是英文單引號)
舉例 : 1)查詢emp表中job為CLERK的員工名和編號 : select ename , empno from emp where job = 'CLERK' ;
2)查詢emp表中部門編號為20的員工名和職位:select ename , job from emp where deptno = 20;
注意:1.指定信息若是字符或者字符串,要寫到英文單引號之中,數值則不用
2.sql語句不區分大小寫,但是表格中的指定信息是嚴格區分大小寫的
4.where語法中運算符的使用
操作運算符: + - / * %
例子:1)查詢員工姓名和一年的工資(加上年終獎) : select ename, sal*12+comm from emp;
注意:查詢結果有很多是沒有數據的,原因是員工的年終獎是null值,任何數值與null結算都是得到null值
解決方法:需要對null進行處理:null-->0
1).方式一:nvl :相當於if ,格式:nvl(comm,0)
if(comm == null){
return 0;
}
2). 方式二:nvl2(comm,comm,0)
if(comm == null){
return 0;
}else{
return comm;
}
關系運算符:> >= < <= = !=或<>
例子:1.查詢工資高於3000的員工與職位 : select ename, job from emp where sal >=3000;
2.查詢部門編號不為7566的員工與職位 : select ename, job from emp where deptno !=7566;
注意:當查詢的語句有null值時,不能使用 = 和!=或<>,應該使用is 和 is not
如:select * from emp where comm is not null;
邏輯運算符:or and not
例子:1.查詢職位為CLERK並且工資高於1000的員工名,職位和工資信息:select ename, job , sal from emp where job = 'CLERK' and sal > 1000;
2.查詢職位為CLERK或者工資高於1000的員工名,職位和工資信息:select ename, job , sal from emp where job = 'CLERK' or sal > 1000;
3.查詢工資低於3000的員工和工資信息(用not) : select ename, job, sal from emp where not (sal >=3000);
5.范圍查詢:beween ... and ...
語法: select 列名 from 表名 where 列名 between 小 and 大;
舉例: 查詢工資在2000~5000的員工信息, select * from emp where sal between 2000 and 5000;
語法:select 列名 from 表名 where 列名 in (數據, 數據,......)
舉例:查詢工資3000和5000的員工信息, select * from emp where sal in(3000,5000);
查詢工資不是3000和5000的員工信息, select * from emp where sal not in(3000,5000);
注意:not in 里面不能出現null,否則查詢的數據為空,語法不允許
6.模糊查詢:like...
配合通配符使用: 1) _ :一個字符
2)%:任意個字符
例子:1.查詢名字帶字母S的員工信息 : select * from emp where ename like '%S%';
2.查詢名字第二個為字母C的員工信息 : select * from emp where ename like '_C%';
3.查詢名字長度大於4的員工信息: select * from emp where ename like '_____%'; (5個_)
特殊:若查詢的信息中包含下划線 ,如:zhang_san , 則select * from emp where ename like '%\_%';(錯誤)
對於上面的問題,解決方法:select * from emp where ename like '%\_%' escape '\';
7.排序( order by )
語法:select 列名.. from emp order by 列名 desc(降序);
select 列名.. from emp order by 列名 asc(升序); -----若不寫則升序降序的標識,語句默認是升序
例子:查詢emp表並按工資降序 : select * from emp order by sal desc;
注意:null默認是最大值
特殊:多列查詢
例子:查詢emp表並按工資升序,若部門編號相同則按部門降序:
select * from emp order by sal asc , deptno desc;
8.distinct:對查詢出的結果集去重
例子:select distinct deptno from emp;