Oracle筆記收集整理(1)

使用的用戶:

用戶名:scott
密碼  :tiger

登錄:
sqlplus scott/tiger

退出:
exit
查看當前用戶有哪些表:

select * from tab;

====================

顯示當前用戶
SQL> show user
USER 爲 "SYS"
切換用戶
SQL> connect scott/tiger
已連接。

命令可以使用縮寫
conn[ect] user

執行上一條sql語句
/

設置行寬
set linesize 150默認爲80

設置頁面大小(一頁顯示的數據)
set pagesize 100默認爲14

顯示參數的值
show 參數名
如: 
show linesize
永久保存配置
修改 glogin.sql 文件。

註釋:
單行註釋:--
多行註釋: /*    */

查看錶結構
SQL> desc dept
====================================

清屏:
Windows中:host cls
Linux中  :host clear


設置某列的寬度:
column job format a15 col job for a15
column SAL format 9999 col salfor 9999
格式:
col[umn] 列名 for[mat] 格式
對於字符串:
a20,20是一個數據,表示20個字符的寬度。
對於數字
9表示一位,有幾個,就是多寬。

====================================

空值的處理
不是一個有效的值。不是0,也不是空字符串。
null != null
is null
is not null
含有null的表達式結爲null
修改上一條SQL語句
ed[it]
注意:後面不要寫分號
濾空函數
nvl(表達式, 當表達式爲空時使用的值)
select empno, ename, sal, sal * 12 as 年薪, nvl(comm, 0), (sal * 12 + nvl(comm,0) ) 總收入
from emp
====================================

字符串
是匹分大小寫的,在使用時要加引號。
在指定別名時,引號可以加,也可以不加。
當含有空格、特殊字符時,一定要加引號。
不加引號時,顯示都爲大寫,加上引號後,就是按所寫的顯示了。

在使用字符串時,要使用單引號。
在寫別名時,要使用雙引號。

去掉重複的行
-- 作用於一列
SQL> select distinct job from emp;
-- 作用於多個列,所有列的值加一起重複纔算重複的記錄
SQL> select distinct job, deptno from emp;


如果只查詢一個表達式,沒有用到任何表的數據,這時也必須得寫from...
可以寫成 from dual
dual是一個虛表,本身就存在的,可以直接使用。
如:
select 3+2
select 'Hello' || 'World' from dual;
字符串連接符
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;
====================================

LIKE
在使用like時,可以使用 % 與 _,分別表示任意數量的任意字符或任意一個字符。
要想表達%或_本身,需要使用轉義符,例:
SQL> select * from emp where ename like 'KI\%%' escape '\';
BETWEEN
包含兩個邊界。
一定是小值寫到前面,大值寫到後面,否則沒有結果。
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);
=========================================
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
----------
2013-07-30

SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;
TO_CHAR(SY
----------
2013-07-30

SQL> select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2013-07-30  10:23:31
=========================================

排序:
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
=====================================================

1,組函數
select 
max(sal) 最高工資, 
min(sal) 最低工資, 
avg(sal) 平均工資, 
sum(sal) 所有員工的工資和, 
count(sal) 領工資的員工數量
from emp;

2,組函數對null的處理
例,查詢所有員工的平均獎金(有人的獎金爲null)
select sum(comm)/count(*) 平均獎金 from emp
組函數會自動過濾掉null值。
在使用avg()時要注意處理null值:
select avg( nvl(comm, 0) ) from emp;
函數可以嵌套使用
3,分組
Group by,寫在FROM後,如果有WHERE,就在WHERE後面。
查詢的列一定要是:
在group by中出現的列(在Select中不一定全寫上)
或是使用組函數
按一個列分組
按多個列分組
參與分組的多個列有一個不相同就是不同的組。
4,分組結果過濾
Having,是分完組後再進行過濾,只顯示符合條件的結果。
在Group by與Having中都不可以使用別名。
與Where的區別
Having是是分完組後再進行過濾。
Where是先過濾,再進行分組操作。
如果可以,儘量寫Where條件,不寫Having。

Select
...
From
...
Where
...
Group by 
...
Having
...
Order by
...
================================================

子查詢:
當一步不能求解時,可以使用子查詢。
分爲:
單行子查詢
多行子查詢

可以在主查詢的select, from, where, having 都可以放子查詢
不可以在主查詢的group by 放子查詢
單行操作符對應單行子查詢,多行操作符對應多行子查詢
在select中放子查詢時,要求只能是單行子查詢。
IN:
ANY:
小於某集合中的任意一個值,就是小於集合中的最大值。
大於某集合中的任意一個值,就是大於最小值。
ALL:
小於某集合中的所有值,就是小於最小值。
大於某集合中的所有值,就是大於最大值。

發佈了186 篇原創文章 · 獲贊 38 · 訪問量 82萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章