[Oracle]SQL*PLUS命令的使用大全

一、DataBase

  保存數據,以表的形式表現數據
 
二、SQL

  Structur query language 
  結構化查詢語言,是操作關係型數據庫中的對象。  
 
  DDL(Data definition language 數據定義語言),用於建表或刪表操作,以及對錶約束進行修改
     create table , alter table , drop table 對錶結構的增刪操作。
  DML(Data manipulation language 數據操作語言),向表中插入紀錄,修改紀錄
     insert , update , delete , merge
  transaction ,事務控制語言,由DML語句組成的,commit; ,rollback;
  select 查詢語句
  dcl 授權語句 grant
 
三、Oracle

  DBMS 數據庫管理系統
  有Oracle提供,還提供AS,應用服務器
  DBA 數據庫管理員

四、相關操作
1、sqlplus 訪問數據庫命令(本地訪問/遠程訪問),和數據庫建立連接的命令,是數據庫操作的環境
  sqlplus 用戶名/密碼
2、show user 顯示當前用戶的用戶名
  改變身份可以直接connect 用戶名/密碼   --- 這個是sqlplus命令
  在sqlplus中可以使用 ! 可以在shell和sqlplus間切換,!shell命令 可以在sqlplus中使用shell命令。
  實際上是sqlplus開了子進程來執行shell命令。
3、Oracle數據庫中的表分兩類:用戶表(用戶使用操作的表),系統表(數據庫系統維護的表,也叫數據字典)
  對用戶表的DDL操作出發了對系統表的DML操作!

五、基本語法

1、select查詢語句

select table_name from user_tables;(查詢系統表)
以上的查詢語句就是查詢本用戶下所擁有的所有表的表名。

投影操作,只查看選擇的字段的信息。
選擇操作,查看字段中的特定某些信息。
聯接操作,多表查詢,通過表間連接,查尋出多表中的信息

(1)select table_name from user_tables;(查詢系統表)
    以上的查詢語句就是查詢本用戶下所擁有的所有表的表名。
  
(2)sqlplus的buffer中會緩存最後一條sql語句,可以使用"/"來執行這最後一條sql語句,也可以使用
    edit命令來編輯最後一條sql語句。
    l命令(list)(sqlplus命令)可以顯示buffer中最後一條命令。 
  
    sqlplus命令可以縮寫
  
(3)desc [表名]
    這是一條sqlplus命令,注意他不是sql語句,這條命令用於查看錶的結構。descript的縮寫
    [字段名] [字段的類型],這是使用完desc命令後顯示的表結構。     
  
(4)select [表的字段名1],[表的字段名2], ... from 表名;
    select * from 表名; 查尋表中所有字段的信息   
  
(5)關鍵字不等拆分,sql語句,以及表名,字段名是大小寫不敏感的。
    sql語句要以";"結尾,來表示sql語句結束,如果不加";"系統不會執行此條sql語句,並提示。   
    在Oracle中字符顯示是左對齊,數值右對齊。
  
(6)在select 語句中可以使用數學表達式。
    select [表達式(必須包含本表字段名)],[...],.... from 表名;
    運算的優先級的先乘除後加減,同級自左向右運算,括號改變優先級。

(7)別名
    select [字段名或表達式] ["別名"],[...] ["..."],.... from 表名;
    可以通過在字段名或表達式後加空格"別名",可以給列,或者表達式結果其別名。   
    表達別名必須加雙引號。
  
(8)字符串拼接使用||符號
    select 目標字段名||" "||目標字段名 from 表名;

    注意:在Oracle中的字符串要用'..'包含
    別名中需要使用空格,或是大小寫敏感時需要用".."包含。   
  
練習:
自己寫一條SQL語句,執行的結果是select * from ...;
其中...是每張系統表的表名
即在每張系統表的表名前加 “select * from”  ,後加“;”
select 'select * from '||table_name||';' from user_tables;

2、處理錯誤

(1)!oerr ora [錯誤號] ,系統可以顯示錯誤的原因和如何修改。如果命令錯誤輸入可以使用edit或ed來修改輸入錯誤。
    實際上是在編輯緩存文件中的最後一條sql語句。
    也可以使用 (change) c /錯誤字段/正確字段,來進行替換操作進行修改。
    只有在Linux平臺使用
    ! 相當於 host ,沒有斷連接,只是切換了一下,執行shell命令
(2)edit命令來編輯最後一條sql語句。

3、sqlplus設置

set pause on 回車響應,分屏顯示,只在本會話中有效
set pause off 關閉分屏顯示。
set pause "..."  設置分屏顯示的提示信息。
set pause on 先輸出提示信息,回車響應,分屏顯示
set head off 提頭輸出關閉
set feed off 結尾輸出關閉
set echo off 回寫關閉
spool 文件名.sql 寫入指定文件
spool off 關閉寫入。  

4、sql腳本

  也就是在文件中寫有sql語句的文件,可以在sqlplus中運行。
  引入sql腳本
  sqlplus 用戶名/密碼 @sql腳本 (注意:在用戶名密碼輸入結束後一定要加空格然後再寫@sql腳本)
  在腳本中最後一行寫上“exit”,則運行完腳本以後,回到shell上

5、
Oracle中的空值 空值會當無窮大處理,其實空值根本就不會存儲,只是看作是無窮大。

Oracle中控制處理函數 NVL(字段名,值),這個字段中的空值替換爲指定值,如果不爲空,則會返回其原值。
例:select (salary*12)*(NVL(commission_pct,0)/100+1) salary,first_name from s_emp;

distinct關鍵字,去掉重複行(這個關鍵字會觸發排序操作)
例: select distinct dept_id,title from s_emp;
       dept_id與title的聯合不唯一
注意:distinct,關鍵字之後會對from之前的字段進行排重操作。

6、column命令 --- sqlplus命令

   column命令 列格式的定義

   column 目標列名 查看這個類是否定義了格式

   column 目標列名 format a.. 設置列寬。
   column last_name heading 'Employee|Name'  formAT A15
   設置題頭
   這其中的'|'是換行符

   column salary justify left format $99,990.00
   定義數字顯示格式
   注意:如果不滿足顯示的格式,就會把數據顯示爲"#"
 
   column salary justify left format $00,000.00
   會出現$00,928.00 ,用0補齊

   column 列名 clear (清除列格式定義)

   注意:只有sqlplus命令纔有簡寫,並且在使用sqlplus命令時結尾也不能加分號。


六、選擇操作

1、order by

  排序子句 ASC(默認,升序) DESC(降序)
  order by 目標列名(別名) 排序順序(不寫排序順序,會默認爲升序排序)

  例:select first_name from s_emp order by first_name;
      select first_name from s_emp order by first_name desc;

  注意:升序空值在結果的末尾,降序空值在結果的最前面。
 
2、where 子句

where子句使用在 select ... from ... 後面,用來選擇所需(符合條件的)的記錄

where後面跟的是表達式 也就是 XXX=XXX, XXX between X and X  ,XXX in(X,X,X)
like '...' 通配查詢

between ... and ... ,表示結果在這之間,between and是一個閉區間,
也就相當於... <= ... and ... >= ... 。
!=,<>,^=,這三個都標識不等於,& lt;=,>=,=,這些運算符都可以使用。
... in (va1,val2,...) 判斷結果是否在這個枚舉中存在
like '...' 字符串通配查詢,'%'表示多個字符,'_',表示一個字符。
注意:轉義的用法:like ‘S/_%’ escape ‘/’
... and ... 表示只有兩個條件同時滿足
... or ... 表示條件只要滿足其中只一就可以
all ... 是要求都滿足條件。
not .....,則是可以與以上的條件產生反效果。
空值會對not in造成影響,也就是不等於任何值,但是空值例外。
... is null 使用來判斷值是否爲空。
  
注意:Oracle中的字符串是嚴格區分大小寫的。

(1)注意數據類型,數字類型直接寫,字符用'......' ,缺省格式的Date可以用'......',只有別名
 才用" "包含。
(2)選擇合適的運算符

七、單行函數

1.字符函數

  字符是大小寫敏感的
  轉小寫 lower(字段名)      ---  其中的參數可以是一個字符串常量或是一個字段名
  轉大寫 upper(字段名)
  首字母大寫 initcap(字段名)
  字符串拼接 concat(字段1, 字段2)
  截取子串 substr(字段名, 起始位置,取字符個數)
  dual表,是專門用於函數測試和運算的,他只有一條記錄
  字符串拼接 concat(...,....)
  求指定子串 substr(...,起始位置,取字符個數)
  可以使用"-"表示從右向左取,取的時候可以從左往友取。
   例:select substr(first_name,-2,2) sub from s_emp;(取後兩個)
     select substr(first_name,2,2) sub from s_emp;(取前兩個)
   
2.數值函數

  四捨五入 round(數據,保留小數點後幾位)
  可以用負數表示小數點前,0,表示小數點後第一位,也就是保留個位,-1表示個位(保留到十位)。
  例:select round(15.36,1) from dual;
  截取數字函數 trunc(數據,保留的位數(小數點後位數)) 截取個位之後補0
  例:select trunc(123.456,1) from dual;
 
3.日期函數
  日期格式,
  全日期格式 世紀信息,年月日,時分秒。
  缺省日期格式,日-月-年 dd-mon-rr
  修改當前會話的日期格式,會按照指定的格式輸出日期
  alter session set nls_date_format='yyyy mm dd hh24:mi:ss';

  返回當前日期 sysdate
  例:select sysdate from dual;
      select sysdate+1 from dual;  獲得明天的日期,加1,單位是天
 
  日期是格式敏感的
  求兩個日期間相隔了多少個月 months_between(date1,date2)
  加減指定數量的月份 add_months(date,月數),月數可以爲負,負值就是減去相應的月數。
  從date日期開始的第一個星期五 next_day(date,FriDay)
  返回月末的日期 last_day(date)
  截取日期 trunc(date,'年或月或日或時分秒')
  例:select next_day(sysdate,2) from dual;
  例:select trunc(add_months(sysdate,1),'month') from dual; 
  ROUND('25-MAY-95','MONTH')01-JUN-95
  ROUND('25-MAY-95 ','YEAR')01-JAN-95
  TRUNC('25-MAY-95 ','MONTH')01-MAY-95
  TRUNC('25-MAY-95 ','YEAR')01-JAN-95
 
  練習:
  返回下個月的第一天的日期
  select round(last_day(sysdate),'MONTH') from dual;
  select add_months(trunc(sysdate,'MONTH'),1);
 
4. 不同數據類型間轉換函數

  將日期轉成字符 tochar(date,'日期格式')
  日期格式要用有效格式,格式大小寫敏感 'yyyy mm dd hh24:mi:ss',
  'year'(全拼的年),'mm'(數字表示的月) 'month'(全拼的月),'day'(星期的全拼),'ddspth' (日期的全拼) 'yy mm dd'
  例:select to_char(sysdate,'yyyy mm dd hh24:mi:ss')from dual;

  將字符轉換成數字 to_number('...')
 
  將數字轉字符to_char(number,'fmt') fmt是數字格式

  將字符串轉成日期 to_date('...','日期格式')
  例:select to_char(to_date('2006 11 03','yyyy mm dd'),'dd-month-yy') from dual;

發佈了10 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章