標籤:
1.字串
是匹分大小寫,在使用時要加引號。
在指定別名時,引號可以加,也可以不加。
當含有空格、特殊字元時,一定要加引號。
不加引號時,顯示都為大寫,加上引號後,就是按所寫的顯示了。
在使用字串時,要使用單引號。
在寫別名時,要使用雙引號。
2.濾空函數:nvl(運算式, 當運算式為空白時使用的值)
select empno, ename, sal, sal * 12 as 年薪, nvl(comm, 0), (sal * 12 + nvl(comm,0) ) 總收入
from emp
3.去掉重複的行
– 作用於一列
SQL> select distinct job from emp;
– 作用於多個列,所有列的值加一起重複才算重複的記錄
SQL> select distinct job, deptno from emp;
4.如果只查詢一個運算式,沒有用到任何錶的資料,這時也必須得寫from…
可以寫成 from dual
dual是一個虛表,本身就存在的,可以直接使用。
如:
select 3+2
select ‘Hello’ || ‘World’ from dual;
5.字串串連符
SQL> select ename || ‘的薪水是’ || sal from emp;
ENAME||’的薪水是’||SAL
———————————————————-
SMITH的薪水是800
ALLEN的薪水是1600
WARD的薪水是1250
JONES的薪水是2975
MARTIN的薪水是1250
BLAKE的薪水是2850
CLARK的薪水是2450
SCOTT的薪水是3000
KING的薪水是5000
TURNER的薪水是1500
ADAMS的薪水是1100
JAMES的薪水是950
FORD的薪水是3000
MILLER的薪水是1300
也可以使用函數 concat():
SQL> select concat(‘Hello’, ‘World’) from dual;
6.like
在使用like時,可以使用 % 與 _,分別表示任意數量的任一字元或任意一個字元。
要想表達%或_本身,需要使用轉義符,例:
SQL> select * from emp where ename like ‘KI\%%’ escape ‘\’;
7.BETWEEN
包含兩個邊界。
一定是小值寫到前面,大值寫到後面,否則沒有結果。
8.IN
where .. in (.., .., .., …) 如果含有null,沒有影響。
例:查詢所有是經理的員工
SQL> select * from emp where empno in (select mgr from emp);
where .. not in (.., .., …) 如果含有null,則不返回任何結果。
例:查詢所有不是經理的員工
SQL> select * from emp where empno not in (select mgr from emp where mgr is not null);
9.MySQL中日期類型:date, time, datetime
Oracle中只有Date
對日期的處理
1,查詢指定日期後入職的員工資訊
SQL> select * from emp where hiredate>’31-12月-81’;
2,修改日期的格式
SQL> select * from v$nls_parameters;
SQL> alter session set nls_date_format=’yyyy-mm-dd’; // 只對當前session有效
3,使用日期函數的方式:
SQL> select * from emp where hiredate>to_date(‘1981-12-31’, ‘yyyy-MM-dd’);
或
SQL> select * from emp where to_char(hiredate, ‘yyyy-MM-dd’) > ‘1981-12-31’;
文法:TO_CHAR(date, ‘format_model‘)文法:TO_DATE(str, ‘format_model‘)格式字串不區分大小寫:擷取目前時間:SQL> select to_char(sysdate,‘YYYY-MM-DD‘) from dual;TO_CHAR(SY----------2012-03-07SQL> select to_char(sysdate,‘yyyy-mm-dd‘) from dual;TO_CHAR(SY----------2012-03-07SQL> select to_char(sysdate,‘yyyy-mm-dd hh:mi:ss‘) from dual;TO_CHAR(SYSDATE,‘YY-------------------2012-03-07 02:33:41
10.排序:
order by 列名, …
可以作用在:數字、日期、字串。
可以使用列名,運算式,別名,序號(表示select中的第幾個列)
當order by所在的列中有null,會:升序時,null的在下面。降序時,null的在上面。我們希望,不管升序還是降序,null值的始終在下面方式一:SQL> select * from emp order by comm desc nulls last;方式二: select empno, ename, job, hiredate, sal, nvl(comm, 0) from emp order by 6 desc
11.組函數
select
max(sal) 最高工資,
min(sal) 最低工資,
avg(sal) 平均工資,
sum(sal) 所有員工的工資和,
count(sal) 領工資的員工數量
from emp;
12.組函數對null的處理
例,查詢所有員工的平均獎金(有人的獎金為null)
select sum(comm)/count(*) 平均獎金 from emp
組函數會自動過濾掉null值。
在使用avg()時要注意處理null值:
select avg( nvl(comm, 0) ) from emp;
函數可以嵌套使用
13.分組
Group by,寫在FROM後,如果有WHERE,就在WHERE後面。
查詢的列一定要是:
在group by中出現的列(在Select中不一定全寫上)
或是使用組函數
按一個列分組
按多個列分組
參與分組的多個列有一個不相同就是不同的組。
14.分組結果過濾
Having,是分完組後再進行過濾,只顯示合格結果。
在Group by與Having中都不可以使用別名。
與Where的區別
Having是是分完組後再進行過濾。
Where是先過濾,再進行分組操作。
如果可以,盡量寫Where條件,不寫Having。
Select
…
From
…
Where
…
Group by
…
Having
…
Order by
…
================================================
15.子查詢:
當一步不能求解時,可以使用子查詢。
分為:
單行子查詢
多行子查詢
可以在主查詢的select, from, where, having 都可以放子查詢 不可以在主查詢的group by 放子查詢單行操作符對應單行子查詢,多行操作符對應多行子查詢在select中放子查詢時,要求只能是單行子查詢。
IN:
ANY:
小於某集合中的任意一個值,就是小於集合中的最大值。
大於某集合中的任意一個值,就是大於最小值。
ALL:
小於某集合中的所有值,就是小於最小值。
大於某集合中的所有值,就是大於最大值。
16.rownum是一個偽列,表示記錄在結果集中的行號。
1,rownum一旦產生,就不會變化(會先按沒有排序時的預設順序產生rownum,然後再執行排序)。
2,對於rownum,只能使用<與<=,不能使用>與>=與=。
oracle基礎一