使用的用戶:
用戶名: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:
小於某集合中的所有值,就是小於最小值。
大於某集合中的所有值,就是大於最大值。