Oracle 學習筆記(一)
阿新 • • 發佈:2020-12-26
Oracle 學習筆記
Day_1
工具安裝:
pysql 安裝:不能安裝再有中文,空格的路徑下
然後破解(百度破解)
select * from tab
/* 資料庫-資料庫例項-表空間-資料檔案
通常情況下,orcale 只有一個是例項。
新建專案時的區別:
MYsql: 建立一個數據庫,建立相應的表
ORACLE: 建立一個表空間,建立使用者,再由使用者建立相應的表
oracie是多使用者的,MYsQL是多資料庫的
1.遵循sQL標準
2.不同廠商,不同的資料庫產品,但是有自己的方言
3.使用自己的方言,也能夠完成相同的功能
4. oracle安全級別要高,MYSQL開源免費
*/
-
基本查詢
SQl:結構化查詢語言
SQL的分類以及常見的操作符:
四類:
DDL∶資料定義語言.create.4ler drop truncateDML :數捂操紉語言insert update delete
DCL :資料控制語言安全授權grant revoke
DQL :資料查詢語言select from子句where子句 -
查詢語句的結構
select [列名] [*] from tablename [where 條件] [group by 分組條件] [having 過濾] [order by 排序 ] select 1+1 --丟擲異常(但是在MySQL正常執行,同樣是sql 標準 ,執行的方言和標準不同) select 1+1 daul --在Oracle 中建立虛表偽表,補齊語法結構,系統提供。
--別名查詢,使用as 關鍵字 select ename 姓名 ,sal 工資 from emp; /* 別名不允許存在特殊字元(&,%《%#@)關鍵字,如果有加雙引號*/ --去除重複資料 distinct(每一列都一樣,才是重複) select distinct name from emp --單例去除重複 select distinct job,name from emp --多例去除重複 --查詢中的四則運算 select 1+1 from dual --查詢員工年薪 select SAl* 12 from emp --查詢員工年薪+獎金 select SAL*12+comm from emp --出現NULL select SAL*12+nal(comm,0) --nal(a,b) => com==True?comm,0 /* 注意:null值,代表不確定的不可預知的內容,不可以做四則運算 */
員工表
出現空:
--字串拼接 java : + ; oracle :||
--查詢員工姓名 姓名:scott
select * from emp;
select '姓名:' || ename from emp; --使用連線符 ||
select concat('姓名:',ename) from --函式查詢 concat()
- 條件查詢
/*
條件查詢: where[後面的寫法]
關係運算符:>>==<<= :=<>邏輯運算子: and or not
其它運算子:
like模糊查詢
in(set)在某個集臺內
between. .and. .在某個區/間內is null 判斷為空
is not nuli鄭斷不為空r
*/
--查詢每個月能的能得到獎金的員工資訊
select * from emp where comm is not null ;
select * from emp where sal >=1500 and sal <=3000;
--查詢繆個名字在某個範圍的員工資訊("json",'scott','ford') in
select * from emp where ename in ('Jones','ford','scott');
員工資訊表:
- 模糊查詢
/*
模糊查詢:like
% 匹配多個字元
- 匹配單個字元
*/
select * from emp where eanme like '__O%'; --查詢第三個字元是)
--查詢員工姓名中包含% 的員工資訊
select * from emp where eame like '%\%%' escape '\' --告訴Oracle '\' 是轉義字 符
- 排序
/*
排序: order by
排序:按
升序:asc
升序:asc
ascend
揚升
降序:desc
降序:DESC
descend
下降
*/
--查詢員工資訊,按照獎金由高到低排序
select * from emp order by comm desc --此時預設nulls first 也就是 null 型別預設排列在前面
select * from emp order by comm desc nulls last --null 型別排列在最後
select sum(sal) from emp;
select count(1) from emp;
select avg()
- 數值函式
--數值函式
select ceil(45.975) from dual;
select floor(23.4) from dual;
--四捨五入
select round (34.923,-2) from dual;
select round (34,999,-3) from dual;
--截斷
select trunc(234.432,-2) from dual; --234.43
--求餘
select mod(9,3) from dual; --0
select mod(9,4) from dual; --1
--字元函式 substr(str1,起始索引,長度)
select substr('lloveyou',0,3) from dual;
select substr('loveyou',1,3,) from dual;
select lengh('loveyou') from dual;
--去除字串的空格
select trim(' loveyou ') from dual;
--替換字串
select replace ('loveyou ','o','l') from dual; --替換o 為 l
- 日期函式
select add_month(sysdate,3) from dual ; --第三天
select sysdate-hiredate from dual;
select ceil(sysdate -hiredate)/7 from emp;
--查詢員工入職的天數
select months_between(sysdate,hiredate)/12 from emp;
- 轉換函式
--轉換函式數值轉字元字元轉數值日期
--字元轉數值to_number (str)雞肋
select 110+'12' from dual --122 自動轉換
--年
select to_char(sysdate ,'yyyy') from dual;
--日
select to——char(sysdate,'dd') from dual
--字元轉日期
select to_date ('2017-04-10','yyyy-mm-dd') from dual;
員工查詢:
- 通用函式
/*
通用函式:
nvi(參議i,引數2)如果引數1 = null就返回引數2
nvl2(引數1,引數2,引數3)如果引數1 = null,就返回引數3,否則返回引數2
nullif(引數1,參談2)如果引數1 = 引數二2 ,那麼就返回null,否則就返回引數1
coalesce :返回第一個不為空的數。
*/
- 條件表示式
/*條件表示式:
case 欄位:
when 值ithen值when值2then值eise
預設值end
*/
select
case ename
when 'smith' then '劉備小二'
when 'alien' then '諸葛村夫'
else
'路人甲'
end '中文名'
from emp;
--對應英文取一箇中文名
select decode (ename,'smith','諸葛菜雞','allth','劉備小二','black','張飛飛') from emp ;
- 分組查詢
/*
分組表示式group by
select 分組的條件,分組之後的操作 from 表名 group by 分組的條件 having 條件過濾
*/
--分組統計所有部門的平均工資,找出平均工資大於2000的部門。
select deptno ,avg(sal) from emp group by deptno ;
--過濾大於2000的
select deptno ,avg(sal) from emp group by deptno having avg(sal) >2000;
--where和having的區別:
-- where後面不能接聚合函式,可以接單行函式
-- having是在group by之後執行,可以接聚合函式
/*
sql的編寫順序:
select . . from ... where ..group by having .. order by
from .. where group by having ..select ..order by
*/
SQL 的執行順序: