Oracle基本語法查詢語句
阿新 • • 發佈:2018-12-29
Oracle基本查詢語法
本文含含: 基礎/基本查詢/排序/函式(單/多)
資料不一定會儲存下來,臨時表的資料是會被刪除的
//回滾使用rollback; ,需要事務,
Oracle開啟事務是自動預設開啟的,我們的操作本身就在事務中,
Oracle資料庫事務預設是不自動提交.
oracle中事務提交後,也可以撤銷,通過閃回方式(flashback) ,
mysql開啟事務是手動開啟, start transaction ,commit提交
MYSQL資料庫事務預設是自動提交的.
修改: alter session/system set NLS_CALENDAR='yyyy-mm-dd'; //設定日期格式
Oracle顯示會自動分頁, 設定分頁大小: set pagesize 20;
連線oracle:sqlplus scott/[email protected]/orcl
所有表:
select * from tab;//列出當前使用者下的表和檢視
一.前言知識
1.oracle如何操作硬碟上的檔案,最終都是以程序方式操作硬碟上的檔案,最基本程序:讀 寫 ,還有其他客戶端訪問記憶體中的資料庫例項,例項在記憶體中有很多塊,小方塊取決於客戶端的個數,大方塊叫做SGA:system global area 系統全域性區域,一個記憶體例項只有一個, 小方塊叫PGA:process global area 程序全域性區域,(見圖) 在寫資料時,客戶端操作的PGA先寫到SGA,SGA再統一寫到硬碟(分兩階段提交),可以減少訪問資料庫的次數,提高寫入速度 2.oracle的事務提交之後,二.語句基礎知識
1.學前基礎知識: 1.字串大小寫,日期格式,都有嚴格格式要求. 2.檢視設定: select * from v$nls_parameters; //檢視當前設定:字符集,日期格式 ........spool d:\基本查詢.txt //錄屏語句,會把命令窗體的內容給記錄下來 show user; //查詢當前使用者 desc emp //查看錶的結構 / //表示執行上一條語句 host cls //Windows清屏 host clear //linux清屏2.字串 : 字串可以是select 列表中的一個字元,數字,日期; 日期和字元只能在單引號中出現, 雙引號用於列的別名; 3.區分sql語句 還是sqlplus語句 sqlplus是oracle提供的命令列工具.在此工具中可以執行sql語句, sql語句的關鍵詞不能使用縮寫,如select.insert,Update,delete都是sql語句, sqlplus語句的關鍵詞可以縮寫,如 ed, c , for col ,desc, isqlplus是sqlplus的網頁版 4.修改錯誤語句:c代表change命令lsnrctl statusstart /stop; //oracle的監聽器狀態 檢視,啟動或關閉 netca視覺化監聽配置 show linesize; //檢視當前顯示的行寬 set linesize 150; //設定行寬 clo(colum縮寫) ename for(format) a8 // 設定列寬, 此處設定名字(字元)這個列寬度為8, for表示格式 col sal for 9999; //設定數字的寬度 ,一個9代表一個數字, set time on //可以讓sql語句前顯示時間,如下: 11:23:21 SQL> set time off set timing on //可以開啟時間記錄,記錄程式執行時間
select * froo emp ; //from輸入錯誤, 修改錯誤字元如下: 第2行出錯了, 輸入:2 //回車;定位到第二行 輸入: c/froo/from 回車, c /修改誰/改成誰 輸入 / 執行上一條語句即可5..亂碼處理: 1.檢視伺服器端編碼 select userenv('language') from dual; 我實際查到的結果為:AMERICAN_AMERICA.ZHS16GBK 2.執行語句 select * from V$NLS_PARAMETERS 檢視第一行中PARAMETER項中為NLS_LANGUAGE 對應的VALUE項中是否和第一步得到的值一樣。 如果不是,需要設定環境變數.否則PLSQL客戶端使用的編碼和伺服器端編碼不一 致,插入中文時就會出現亂碼. 3.設定環境變數 計算機->屬性->高階系統設定->環境變數->新建 設定變數名:NLS_LANG,變數值:第1步查到的值, 我的是 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 6.修改oracle密碼 1.管理員登入 : sqlplus system/system as sysdba; 2.解鎖: alter user scott account unlock/lock ; 3.改密碼: alter user scott identified by 新密碼; 7.使用者查詢
select * from dba_users; 檢視資料庫裡面所有使用者,前提你是有dba許可權帳號,如sys,system select * from all_users; 檢視你能管理的所有使用者! select * from user_users; 檢視當前使用者資訊 !
三.查詢語句
1.,基本查詢select * from emp; //查詢所有, * 表示所有 select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp; //通過列名查詢指定列 select ename,job,sal from emp; //算數計算 select empno, ename, sal,sal*12 from emp;//查詢工號,姓名,月薪,年薪2..空值問題 :空值是無效的,未指定的,未知的或不可預知的值,不是空格或者0; 1.null永遠 != null 2.包含null的表示式都為null; 因此判斷一個值是否為空,不能用 = 或 != ; enameis null; 或 ename is not null; 3.如果集合中有空值,不能使用not in(set), 但可以使用 in(set) 4. oracle中,空值最大,因此降序排序空值在最前,升序則在最後, 降序使用 nulls last,會讓null值排後面, 升序使用 nulls first ,會讓空值排前面. 5.組函式(多行函式)自動濾空;可用濾空函式來遮蔽他的濾空功能 3..慮空函式: nvl(a,b) //即當a的值為空時,返回b, a不為空返回a本身,
nvl2 //錯誤查詢 獎金為空的人沒有年收入: 查詢員工,姓名,月薪,年薪,獎金,年收入 //select empno,ename,sal,sal*12,comm, sal*12+comm from emp; //因為含null的表示式都為null select empno,ename,sal,sal*12,comm, sal*12+nvl(comm,0) from emp; //正確查詢,使用慮空函式4..起別名:
select empno as "員工號", ename "姓名" ,sal 月薪 ,sal*12,comm,sal*12+nvl(comm,0) from emp; //as 用於起別名,可以省略! //普通別名可以不加雙引號, 若別名中有 空格/關鍵字/特殊字元/數字, 需要加"",5.去重複記錄:select distinct deptno from emp; select distinctdeptno ,job from emp; //distinct 作用於後面所有列,這些列組合起來是不一樣的,那就算是不重複的, 6.連線符: || concat函式 //連線字串 select concat('Hello',' world'); //這是錯的 // 由於oracle遵循sql99標準,沒有from 不行,但from後面是表,如果操作的資料跟表沒有關係,就使用 from dual; 做佔位符. dual表,僅僅是為了滿足oracle的語法要求,是偽表,佔位用的, 同樣有偽列; 如: select concat('Hello',' world') from dual;//這是對的. select 3+2 from dual; 查詢員工薪水: select ename||'的薪水是'||sal 資訊 from emp; //連線字串,日期和數字只能用單引號, 7.where 語句若有多條件時,解析的順序是從右往左. 因此,對於and條件,應該把為假的條件放右邊,這樣就不判斷左邊的了,,短路,提高效率 對於 or 儘可能把為真的條件放右邊,