1. 程式人生 > 實用技巧 >Oracle 學習筆記(一)

Oracle 學習筆記(一)

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 的執行順序: