查詢和單行函式
修改oracle默認的日期格式
默認:DD-MON-RR
修改:
? alter session set NLS_DATA_FORMAT = 'yyyy-mm-dd';
? alter session set NLS_DATE_FORMAT = 'DD-MON-RR';
范圍查詢:
between 小 and 大
- select table_name from user_tables;
- < > =
模糊查詢:
- like
- 使用通配符進行查詢: __ :一個字符; %:任意個字符
- ename :like;
- 數字、日期 :like……
- 查詢姓名中包含下劃線的:select * from emp where ename like '% \ _%' escape ' \ ';
- not in 不能出現 null 如果有 則結果為空
```
```sql
排序:order by 欄位名|運算式|序號|
- asc 升序(默認), desc 降序
- select * from emp order by sal desc;
- select * from emp order by 1 asc;
- select empno,ename.sal from emp order by 3 asc;
- 排序的時候 null 默認時最大值
- 把bull放在最后面 + nulls last;
- 追加排序:
- select empno,ename,sal from emp;
- a order by sal desc;
- /
- 多列排序:
- select * from emp order by sal desc,hiredate asc;
```
函式:
單行函式(一次操作一行):字符函式 數值函式 日期函式 轉換函式 通用函式
- - - ```sql
字符函式
- lower : 轉小寫
- upper : 轉大寫
- initcap:單詞開頭大寫
- dual:單行單列-->單行
- substr(str,begin,len):從1開始數
- length:字符
- lengthb:位元組
- 英文/數字 字符/位元組相等
- 中文/符號:UTF-8一個漢字/符號占三個位元組
- 查看當前系統的編碼格式
- select * from nls_database_parameters;
- insrt(str,substr):在str中找‘substr’的位置
- 填充:
- 左填充:lpad('hello',10,'*')
- 右填充:rpad('hello',10,'*')
- 10 表示總位數,* 表示需要填充的標志
- trim:默認去除空格
- select trim ('X' from 'XXXXXXHello WorldXXXXXXX');
- X 表示需要去除的符號;
- replace : 替換
- select replace ('hello','l','*') from dual;
```
```sql
數值函式
- round(數字,n位數):四舍五入
- select round(67.183,2)一, round(67.183,1)二, round(67.183,0)三,round(67.183,-1)四,round(67.183,-2)五 from dual;
- 保留n位小數
- trunc(數字,n位數)
- 舍尾
- mod():求余數
```
```sql
日期函式:
- sysdate:當前時間
- select sysdate from dual;
- 格式化:
- 日期 --> 字串
- select to_char(sysdate,'yyyy-mm-dd') from dual;
- 日期可以和數字 + - (默認是天)
- select sysdate+1 from dual;
- 日期可以和日期 -
- 查詢員工的入職天數
- select ename,(sysdate-hiredate) from emp;
- 顯示小數
- 日期減有意義,而日期相加沒有意義
- 計算員工工齡:入職 日期 天 星期 月 年
- select ename,hiredate ,(sysdate-hiredate) ,(sysdate-hiredate)/7,(sysdate-hiredate)/30,(sysdate-hiredate)/365 from emp;
- months_between(日期1,日期2):日期1-日期2
- select ename , months_between(sysdate,hiredate) from emp;
- 日期比較精確
- add_months(日期,月數):加月數
- select add_months(sysdate,12) from dual;
- 當月最大是第幾天 last_day
- select last_day(sysdate) from dual;
- 下一個星期n是那一天 next_day(日期,星期n)
- select next_day(sysdate,'星期五') from dual;
- '星期n' 不能寫成 '周n'
- round
- select round(sysdate,'month'),round(sysdate,'year')from dual;
-
- trunc
- select trunc(sysdate,'month'),trunc(sysdate,'year')from dual;
```
- - - ```sql
通用函式
- nvl(運算式1,運算式2)
- 如果運算式1為空值,NVL回傳值為運算式2的值,否則回傳運算式1的值
- 該函式的目的是把一個空值(null)轉換成一個實際的值
- NVL2(運算式1,運算式2,運算式3)
- 如果運算式1為空,回傳值為運算式3的值,如果運算式1不為空,回傳值為運算式2的值,
- nullif(a,b) : a=b,null,否則回傳a
- select nullif('abc','abc')from dual;,
- select nullif('abc','aaa')from dual;
- coalesce : 從左往右,找到第一個不為null的函式
- select comm,sal , coalesce(comm,sal) from emp;
```
```sql
- 條件判斷函式
- decode(欄位,條件1,回傳值1,條件2,回傳值2……最后運算式)
- select ename,job ,sal 工資漲前,decode(job,'PRESIDENT',sal+1000,'MANAGER',sal+500,sal+300) 工資漲后 from emp;
- case
- case when……then else end
- select ename , job,sal 漲前,case job when 'PRESIDENT' then sal+1000 when 'MANAGER' then sal+ 500 else sal+300 end 漲后 from emp;
```
- - - ```sql
轉換函式
- 隱式轉換(自動轉換)
- nvarchar/char等字符 <==>number/date
- 字符轉數字 select * from emp where empno = '7788';
- 日期轉字符 select sysdate, instr(sysdate,'5月') from dual;
```
顯示轉換
- | | to number(字符,格式) | | to date(字符,格式) | |
| :--: | :-------------------: | :--: | :-------------------: | :--: |
| 數字 | <---> | 字符 | <---> | 日期 |
| | to char(數字,格式) | | to char(字符,格式) | |
- - ```sql
多行函式:進來多行,出來一行(組函式、聚合函式)
- count(*)
- 統計不重復部門編號 : select count(distinct deptno) from emp;
- 最大值 max ; 最小是 min ; 平均 avg
- 分組:**分組查詢時,不在組函式(多行函式)中的列,必須在group by 中**
- **對組篩選用having,對行篩選用where**
```
查詢陳述句的注意事項
```sql
寫錯之后修改:c /修改前/修改后 之后按 / 確認
? 或者 ed
關系型資料表:二維表
控制列: select
控制列: where
字符/字串、日期:單引號引起來
大小寫問題:
- 關鍵字、命令:不敏感
- 資料 : 敏感
運算子:
- 操作運算子: + -
- 關系運算子 : > >= <=
- = (等號多種意思)
- != 和 <> 不等于
- 邏輯運算子: and or not
- select * from emp where mgr = 7788 and job = 'CLERK';
- select * from emp where not (mgr = 7788 and job = 'CLERK')
- where 執行順序 : 右--->左
去重:distinct
連接符:
- select concat('hello','Oracle') from dual;
- select 'hello'||'Oracle' from dual
修改Oracle的默認日期格式
- select * from v$nls_parameters; 查看資料字典
- alter session set NLS_DATE_FORMAT = 'yyyy-mm-dd';
- 改回來 : alter session set NLS_DATE_FORMAT ='DD-MON-RR';
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/128485.html
標籤:AI
