oracle資料庫與其他資料庫區別

来源:https://www.cnblogs.com/zmystc/archive/2019/08/13/11346114.html
-Advertisement-
Play Games

本文用的是Oracle 10g資料庫,利用PL/SQL Developer的集成開發環境(安裝可以自行百度)Oracle資料庫 > 資料庫實例 > 表空間(邏輯單位)(用戶) > 數據文件(物理單位)可以理解為下麵地球 > 一個國家 > 省份(邏輯單位)(公民) > 山川河流(物理單位)通常情況下, ...


本文用的是Oracle 10g資料庫,利用PL/SQL Developer的集成開發環境(安裝可以自行百度)


Oracle資料庫  ---> 資料庫實例  --->  表空間(邏輯單位)(用戶)  ---> 數據文件(物理單位)
可以理解為下麵
地球    ---> 一個國家    --->  省份(邏輯單位)(公民)    ---> 山川河流(物理單位)


通常情況下,Oracle資料庫只會有一個實例ORCL,

新建一個項目:
     MYSQL : 創建一個資料庫,創建相應的表
     Oracle: 創建一個表空間,創建用戶,用戶去創建表
     
Oracle和MYSQL的差別

Oracle是多用戶的, MYSQL是多資料庫的

1. 遵循SQL標準
2. 不同廠商,不同的資料庫產品,但是有自己的方言
3. 使用自己的方言,也能夠完成相同的功能
4. Oracle安全級別要高,MYSQL開源免費

複製代碼
select * from tab;

/*
資料庫  ---> 資料庫實例  --->  表空間(邏輯單位)(用戶)  ---> 數據文件(物理單位)

地球    ---> 一個國家    --->  省份(邏輯單位)(公民)    ---> 山川河流(物理單位)



通常情況下,ORacle資料庫只會有一個實例ORCL,

新建一個項目:
     MYSQL : 創建一個資料庫,創建相應的表
     Oracle: 創建一個表空間,創建用戶,用戶去創建表
     
Oracle和MYSQL的差別

Oracle是多用戶的, MYSQL是多資料庫的

1. 遵循SQL標準
2. 不同廠商,不同的資料庫產品,但是有自己的方言
3. 使用自己的方言,也能夠完成相同的功能
4. Oracle安全級別要高,MYSQL開源免費

*/
/*
基本查詢:
   SQL : 結構化查詢語言
   
   請聽題: 請說一下SQL的分類以及每類常見的操作符都有哪些
   四類:
        DDL : 數據定義語言 create alter drop truncate
        DML : 數據操縱語言 insert update delete
        DCL : 數據控制語言 安全 授權 grant revoke
        DQL : 數據查詢語言 select from子句 where子句
        
   查詢語句的結構:
   
   select [列名] [*] from 表名 [where 條件] [group by 分組條件] [having 過濾] [order by 排序]
*/
select * from emp;

select 1+1;  --在Oracle等於報錯 ,在MYSQL中輸出結果是2

/*
     dual : oracle中的虛表 ,偽表, 主要是用來補齊語法結構
     
*/
select 1+1 from dual;

select * from dual;

select 1 from emp;
--直接寫一個常量比寫 * 要高效
select count(1) from emp;
select count(*) from emp;

/*
       別名查詢: 使用as 關鍵字, 可以省略
       別名中不能有特殊字元或者關鍵字, 如果有就加雙引號
       
*/
select ename 姓名, sal 工資 from emp;

select ename "姓       名", sal 工資 from emp;

/*
      去除重覆數據 distinct
      多列去除重覆: 每一列都一樣才能夠算作是重覆
*/
--單列去除重覆
select distinct job from emp;

--多列去除重覆的
select distinct job,deptno from emp;


--查詢中四則運算
select 1+1 from dual;

--查詢員工年薪  = 月薪* 12
select sal*12 from emp;


--查詢員工年薪+獎金
select sal*12 + comm from emp;
--nvl 函數 : 如果參數1為null  就返回參數2
select sal*12 + nvl(comm,0) from emp;

/*
    註意: null值 , 代表不確定的 不可預知的內容 , 不可以做四則運算
*/


/*
字元串拼接:
    java : + 號拼接
    Oracle 特有的連接符: || 拼接
    
    在Oracle 中 ,雙引號主要是別名的時候使用, 單引號是使用的值, 是字元
    
    concat(str1,str2) 函數, 在mysql和Oracle中都有
*/
--查詢員工姓名 :  姓名:SCOTT
select ename from emp;
--使用拼接符
select '姓名:' || ename from emp;

--使用函數拼接
select concat('姓名:',ename) from emp;


/*
    條件查詢 : [where後面的寫法]   
        關係運算符: > >= = < <= != <>
        邏輯運算符: and or not
        其它運算符:
               like 模糊查詢
               in(set) 在某個集合內
               between..and.. 在某個區間內
               is null  判斷為空
               is not null 判斷不為空
*/
--查詢每月能得到獎金的員工信息
select * from emp where comm is not null;


--查詢工資在1500--3000之間的員工信息
select * from emp where sal between 1500 and 3000;

select * from emp where sal >= 1500 and sal <= 3000;

--查詢名字在某個範圍的員工信息 ('JONES','SCOTT','FORD') in
select * from emp where ename in ('JONES','SCOTT','FORD');


        _   匹配單個字元
        
        如果有特殊字元, 需要使用escape轉義
*/
/*
    模糊查詢: like
        %   匹配多個字元
--查詢員工姓名第三個字元是O的員工信息
select * from emp where ename like '__O%';

--查詢員工姓名中,包含%的員工信息
select * from emp where ename like '%\%%' escape '\';

select * from emp where ename like '%#%%' escape '#';


/*
       排序 : order by 
          升序: asc    ascend
          降序: desc   descend
          
          排序註意null問題 : nulls first | last
          
          同時排列多列, 用逗號隔開
*/
--查詢員工信息,按照獎金由高到低排序
select * from emp order by comm desc nulls last;

--查詢部門編號和按照工資  按照部門升序排序, 工資降序排序
select deptno, sal from emp order by deptno asc, sal desc;


/*
     函數: 必須要有返回值
     
     單行函數: 對某一行中的某個值進行處理
         數值函數
         字元函數
         日期函數
         轉換函數
         通用函數
     
     多行函數: 對某一列的所有行進行處理
           max()  min count sum avg
           
           1.直接忽略空值 
*/
--統計員工工資總和
select sum(sal) from emp;

--統計員工獎金總和  2200
select sum(comm) from emp;

--統計員工人數 14
select count(1) from emp;

--統計員工的平均獎金  550  錯誤    2200/14 =
select avg(comm) from emp;


--統計員工的平均獎金 157.
select sum(comm)/count(1) from emp;
select ceil(sum(comm)/count(1)) from emp;

update emp set ename = 'TUR%NER' where ename = 'TURNER';

select * from emp;



--數值函數
select ceil(45.926) from dual;  --46
select floor(45.926) from dual; --45
--四捨五入
select round(45.926,2) from dual; --45.93
select round(45.926,1) from dual; -- 45.9
select round(45.926,0) from dual; --46
select round(45.926,-1) from dual; --50
select round(45.926,-2) from dual; --0
select round(65.926,-2) from dual; --100

--截斷
select trunc(45.926,2) from dual; --45.92
select trunc(45.926,1) from dual; -- 45.9
select trunc(45.926,0) from dual; --45
select trunc(45.926,-1) from dual; --40
select trunc(45.926,-2) from dual; --0
select trunc(65.926,-2) from dual; --0

--求餘
select mod(9,3) from dual; --0
select mod(9,4) from dual; --1


--字元函數
-- substr(str1,起始索引,長度) 
--註意: 起始索引不管寫 0 還是 1 都是從第一個字元開始截取
select substr('abcdefg',0,3) from dual; --abc
select substr('abcdefg',1,3) from dual; --abc

select substr('abcdefg',2,3) from dual; --bcd

--獲取字元串長度 24 28
select length('abcdefg') from dual;

--去除字元左右兩邊的空格
select trim('  hello  ') from dual;

--替換字元串
Select replace('hello','l','a') from dual;



--日期函數
--查詢今天的日期
select sysdate from dual;
--查詢3個月後的今天的日期
select add_months(sysdate,3) from dual;
--查詢3天後的日期
select sysdate + 3 from dual;


--查詢員工入職的天數
select sysdate - hiredate from  emp;

select ceil(sysdate - hiredate) from  emp;

--查詢員工入職的周數
select (sysdate - hiredate)/7 from emp;

--查詢員工入職的月數
select months_between(sysdate,hiredate) from emp;

--查詢員工入職的年份
select months_between(sysdate,hiredate)/12 from emp;

--轉換函數  數值轉字元 字元轉數值  日期
--字元轉數值 to_number(str) 雞肋
select 100+'10' from dual;  --110  預設已經幫我們轉換
select 100 + to_number('10') from dual; --110

--數值轉字元
select to_char(sal,'$9,999.99') from emp;

select to_char(sal,'L9,999.99') from emp;
/*
to_char(1210.73, '9999.9') 返回 '1210.7' 
to_char(1210.73, '9,999.99') 返回 '1,210.73' 
to_char(1210.73, '$9,999.00') 返回 '$1,210.73' 
to_char(21, '000099') 返回 '000021' 
to_char(852,'xxxx') 返回' 354'

*/

--日期轉字元 to_char()  
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
--只想要年
select to_char(sysdate,'yyyy') from dual;  --2017

--只想要日
select to_char(sysdate,'d') from dual; --2  代表一個星期中第幾天
select to_char(sysdate,'dd') from dual;  --10  代表一個月中的第幾天
select to_char(sysdate,'ddd') from dual; --100 代表一年中的第幾天


select to_char(sysdate,'day') from dual;  --monday
select to_char(sysdate,'dy') from dual;   --mon  星期的簡寫


--字元轉日期
select to_date('2017-04-10','yyyy-mm-dd') from dual;

--查詢1981年 -- 1985年入職的員工信息
select * from emp where hiredate between to_date('1981','yyyy') and to_date('1985','yyyy');


/* 
      通用函數:
       nvl(參數1,參數2) 如果參數1 = null 就返回參數2
       nvl2(參數1,參數2,參數3) 如果參數1 = null ,就返回參數3, 否則返回參數2
       
       nullif(參數1,參數2) 如果參數1 = 參數2 那麼就返回 null , 否則返回參數1
       
       coalesce: 返回第一個不為null的值
*/
select nvl2(null,5,6) from dual; --6;

select nvl2(1,5,6) from dual; --5;

select nullif(5,6) from dual; --5
select nullif(6,6) from dual; --null

select coalesce(null,null,3,5,6) from dual;  --3




select ceil(-12.5) from dual; --12
select floor(12.5) from dual; --12


select '  hello  ' from dual;
select * from emp;
複製代碼
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近,一臺虛擬機是從外網下載的,然後導入本地測試環境使用。 發現一個奇怪的問題:修改了 /etc/sysconfig/network-scripts/ifcfg-eth0 保存後, 重啟網路服務( systemctl restart network)是有效的。但是重啟系統之後就失效了。 ifcfg- ...
  • iotop的簡介: iotop是一款開源、免費的用來監控磁碟I/O使用狀況的類似top命令的工具,iotop可以監控進程的I/O信息。它是Python語言編寫的,與iostat工具比較,iostat是系統級別的IO監控,而iotop是進程級別IO監控。目前最新的版本為iotop 0.6。其官方網址h... ...
  • CPU執行的也不只是一條指令,一般一個程式包含很多條指令 因為有if…else、for這樣的條件和迴圈存在,這些指令也不會一路平直執行下去。 一個電腦程式是怎麼被分解成一條條指令來執行的呢 1 CPU如何執行指令 CPU里差不多幾百億個晶體管 實際上,一條條電腦指令執行起來非常複雜 好在CPU在 ...
  • 一、查看Oracle系統 1、Oracle資料庫服務 資料庫安裝完成後,在Windows操作系統環境下,Oracle資料庫伺服器以系統服務的方式運行。可以通過打開【控制面板】視窗,雙擊【管理工具】圖標,打開【管理工具】視窗,雙擊【服務】圖標,打開【服務】視窗,過程如下圖: 圖1 圖2 圖3 在圖3中 ...
  • 轉載、節選於 https://dev.mysql.com/doc/refman/8.0/en/innodb-in-memory-structures.html InnoDB Architecture The following diagram shows in-memory and on-disk ...
  • 接業務需求,有一個MongoDB的簡單查詢,太耗時了,執行了 70S 左右,嚴重影響用戶的體驗。。 查詢代碼主要如下: 此集合在欄位OPTime上有索引idx_OPTime;在"Tags"數組中的內嵌欄位"SN"有索引idx_TSN;兩者都是獨立的索引。此集合存放的是執行Log,相對Size較大。 ...
  • Spark Scala當中reduceByKey(_+_) reduceByKey((x,y) => x+y)的用法 ...
  • 公司系統升級的時候需要數據遷移,遇到一個問題:新表的數據結構和舊表異構,舊表是流水號,新表是聯合主鍵(業務號碼+業務號碼序號) 最後發現用視窗函數 row_number() + partition by 就可以完美的實現,這裡記錄下,本人膽子比較小以至於例子中的表名和欄位名都是瞎寫的,嘻嘻,以後再遇 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...