Oracle資料庫中sql基礎

來源:互聯網
上載者:User
一、關聯式資料庫的一些概念
  
  1、主鍵的值一般不可以改變
  
  2、外鍵:指向另一個表或本表的主鍵或唯一鍵的欄位。外鍵的值一定要和某一主鍵相同,或者為空白。
  
  3、資料庫對像:表,視圖,序列,索引,同義字,程式(進程,函數,sql和pl/sql資料)4、sql command 類別
  
  data retrieval資料檢索:select
  data manipulationlanguage (DML)資料操作語言:insert,update,delete
  data definition language (DDL)資料定義語言 (Data Definition Language):create,alter,drop,rename,truncate
  transaction control事務控制:commit,rollback,savepoint
  data control language(DCL)資料控制語言:grant,revoke
  DCL 和DDL命令的執行會導致一次隱式提交,之前未提交的操作(包括DML 命令)都會提交寫入記錄檔,並在適當地時候寫入資料檔案。
  
   二、SQL的文法
  
  1) 串連號:||
  
  2) 把兩個字元串連起來
  eg:select game_card_type_id||name from game_card_type;
  
  3) select distinct dept_id,title from emp: 對多個欄位的唯一
  
  4) order by desc(降序)
  order by asc(升序)
  
  5) where column is (not) null
  
  6) like ‘_a%’  _表示一個字元。%表示多少字元
  like ‘%x\_y%’ escape ‘\’:顯示包括x_y的字元
  
  7) where table1.column(+)=table2.column
  place the operator on the side of the join where there is no value to join to.
  
  8) 聯結類型:
  equijoin:等式查詢
  non_equijoin:不等式查詢
  self:自己和自己建立關聯
  out join:where a.column=b.column(+)
  可以用的操作符是:’=’,’and’,不可以用’or’,’in’
  
  9) COUNT 函數所用的列包含空值時,空值行被忽略。
  
  10) where 後的in any all 的區別
  in :等於子查詢的任何一個數
  any :與子查詢的每一個值相比
  只要比其中一個大(小)就可以了
  all:與子查詢的所有值相比要比所有的的都大(小)
  !=ALL作用跟NOT IN 一樣
  
   三、SQL*PLUS的環境(可以在glogin.sql中定義初始參數)
  
  1) START 命令用以執行一個已儲存的檔案,等同於@
  
  2) SAVE命令用以建立一個檔案
  
  3) EDIT命令用以調用編輯器編輯已存檔案的內容
  
  4) CHANGE 是SQL*Plus的編輯命令,用於在當前一行把舊文段轉換為新文段
  
  5) DEL 命令用以刪除文本中一行或多行文字
  
  6) SPOOL命令用以把查詢結果儲存在一個已有檔案中,注意與SAVE區別
  
  7) GET命令用以一個檔案的內容寫進一個SQL塊中
  
  8) SPOOL OUT命令用以把檔案的結果發送到系統印表機。
  
  9) set pause off/on:設定頁面的滾動。按enter看下一頁。
  
  10) PAGESIZE:指定每頁顯示的行的數值,
  
  11) LONG:設定LONG類型資料顯示的最大寬度
  
  12) FEEDBACK:設定查詢返回記錄的最大值
  
  13) DESCRIBE :用於顯示表和視圖的結構,同義字,或指定函數和過程的詳述。
  
  14) Timing:可以看到語句執行的時間
  
  15) Autotrace:可以看到sql的執行計畫,sysdba執行/home/oracle/product/9.2.0/sqlplus/admin/plustrce.sql指令碼,而且必須把plustrace角色賦給執行使用者。執行使用者必須運行/home/oracle/product/9.2.0/rdbms/admin/utlxplan.sql
  
  16) 在各種資料類型中,只有NUMBER資料類型的預設顯示是靠右對齊的,而CHAR, DATE和VARCHAR2是靠左對齊的
  
  17) QUIT 是SQL*PLUS命令,用以結束一個SQL*PLUS的對話。
  
  18) ttitle:
  ttitle ‘selina’ 設select 的結果的抬頭為selina
  tti :顯示ttitle的狀態
  tti off/on
  btitle ‘end’ 設結果的尾部
  
  19) Column:
  
  a) column name heading ‘名字’format a15
  
  b) column id justify left format 999999
  
  c) column start_date format a9 null ‘not hired’//當欄位為空白的時候則顯示成not hired
  
  d) column :顯示所有的column設定
  
  e) column columnname:顯示某一個欄位的設定
  
  f) clear column :清除所有column設定
  
  g) column columnname clear:清除某一欄位的設定
  
  h) 以上的column可用col代替.clear可以用cle代替
  
  13)定義變數
  
  用&:由使用者輸入變數值,此變數可以存在於where後,做為整個查詢語句的變數。也可以在order by 後。做為欄位的變數。也可以放在select 後,做為欄位或運算式的變數。
  
  用&&:如果多個地方引用此變數。。只用輸入一次
  
  SQL> SELECT empno, ename, job, &&column_name
  FROM emp
  ORDER BY &column_name;
  
  accept:由使用者輸入變數值
  accept 變數名 datatype prompt ‘告訴使用者需要輸入的資訊:’ hide
  引用的時候:&變名
  define(undefined):一開始就定義變數值
  
   四、函數:
  
  1、字元函數
  
  lower:把字元轉成小寫
  upper:把字元轉成大寫
  initcap:把單詞的第一個字母變成大寫
  concat:串連字元 concat(‘good’,’morning’)=goodmoring
  SUBSTR (column\expression, m[,n]) 用於對字串進行截取操作,從第m個位置開始,把其後的連續n個字元的部分截取下來,如果m位負值,則從末尾開始計算。
  eg:substr(‘string’,1,3) =str
  substr(‘string’-3,3)=ing
  INSTR('String', 'r')=3
  LPAD(sal,10,'*') =*******sal
  length: 用於返回運算式中的字元數,注意返回的是NUMBER。
  NVL(expression1, expression2)
  NVL 函數用以把一個空值轉換為一個實值,如:
  NVL(100/quantity, 0) ,要是quantity為空白值,該函數返回一個0。
  如果兩個欄位類型不同必須進行轉換。
  Min():返回最小值。。如果是字元。。A<a
  
  2、數學函數
  
  round:四捨五入
  round(2.566,2)=2.27
  round(45,-1)=50
  trunc: 截斷
  trunc(2.566,2)=2.56
  trunc(45,-1)=40
  mod:
  mod(m,n):m-n*flood(m/n)   file://flood是取整數
  
  3、日期函數:
  
  a) months_between(date1,date2):算date1和date2之間的月的數量,可以是小數可以是負數
  months_between(’01-sep-95’,’11-jan-94’)=1.9774194
  
  b) add_months(date,n):為date加上N個月,N只可以是整數
  
  c) next_date(date,’char’):尋找date的下一個星期N
  next_date(’01-sep-95’,’FRIDAY’)=08-SEP-95
  
  d) last_day(date):尋找date月的最後一天。
  
  e) rount(date):把日期四捨五入
  
  f) rount(25-MAY-95’,’MONTH’)=01-JUN-95
  
  g) rount(25-MAY-95’,’YEAR’)=01-JAN-95
  
  h) trunc(date):把日期截斷
  
  i) trunc (25-MAY-95’,’MONTH’)=01-MAY-95
  
  j) trunc (25-MAY-95’,’YEAR’)=01-JAN-95
  
  k) 日期中RR與YY的區別,RR格式對日期作類似於舍入的操作,YY格式對日期作類似於截取的操作
  RR  YY
  1995 27-oct-95 1995 1995
  1995 27-oct-17 2017 1917
  2001 27-oct-17 2017 2017
  2001 27-oct-95 1995 2095
  用法:select to_char(sysdate, 'YY') from dual;
  select to_char(to_date('95-11-27', 'RR-MM-DD'), 'YYYY-MM-DD') from dual;
  select to_char(to_date('95-11-27', 'YY-MM-DD'), 'YYYY-MM-DD') from dual;
  
  4、轉換函式
  TO_CHAR:
  TO_CHAR(date,’fmt’):fm首碼用來去除首尾的Null 字元或0
  TO_CHAR(total,’fm$999999’)
  
  如果想轉成$0.25,那就要寫成fm$9999990.99
  
  可以把日期轉換成字元
  TO_CHAR(log_time,’MM/YY’)
  TO_CHAR(lot_time,’fmdd’’of;’’mm yyyy’)
  
  具體格式如下
  HH24:MI:SS AM-----------15:24:32 pm
  DD’’of’’MONTH-----------12 of MAY
  Ddspth------------------------fourteenth
  Ddsp--------------------------fourteen
  ddth---------------------------4th
  YYYY-----------------------1978
  MM-----------------------------12
  MONTH-------------------------MAY
  
  5、group 函數avg,count,max,min,stddev,sum,variance
  
   五、資料字典
  
  使用者表:由使用者建立,包含使用者的內容
  
  資料字典:由系統建立,包含資料庫的資訊
  
  首碼:
  USER_ :由使用者建立,顯示使用者擁有的所有對象。
  
  ALL_ :由受權的使用者訪問, 使用者可以訪問的對象名。
  
  DBA_ :由受了DBA許可權的人訪問,顯示資料庫的所有對象。
  
  V$ :由受了DBA許可權的人訪問,顯示資料字典資料庫伺服器效能資訊。通常是DBA用於顯示系統的統計表和動態效能表。
  
  資料字典
  
  DICTIONARY資料字典提供使用者可以訪問的資料字典表和視圖的描述。
  USER_OBJECTS顯示使用者擁有的對象。
  USER_VIEWS顯示使用者擁有的視圖。
  USER_TABLES顯示使用者擁有的表。
  ALL_TABLES顯示使用者可以訪問的表。
  ALL_VIEWS顯示使用者可以訪問的視圖。
  USER_CATALOG顯示使用者擁有的所有表,視圖,同義字和序列。
  USER_CONS_COLUMNS顯示帶約束的列。
  DBA_CONS_COLUMNS顯示資料庫裡的所有表,視圖和同義字。
  USER_TAB_PRIVS_MADE:本使用者賦給別的使用者賦予許可權的表
  USER_TAB_PRIVS_RECD:其他使用者給本使用者賦予許可權的表
  USER_COL_PRIVS_MADE:本使用者賦給別的使用者賦予許可權的欄位
  USER_COL_PRIVS_RECD:其他使用者給本使用者賦予許可權的欄位
  ROLE_SYS_PRIVS:有什麼系統許可權賦給role
  ROLE_TAB_PRIVS:有什麼關於表的許可權賦給role
  USER_ROLE_PRIVS:role和使用者的對應表
  
  常用的表
  
  user_objects:使用者物件表(儲存使用者的所有對象)儲存以下的類型的資料
  Selina Sql>select distinct object_type from user_objects;
  INDEX
  LOB
  PACKAGE
  PACKAGE BODY
  PROCEDURE
  SEQUENCE
  SYNONYM
  TABLE
  TRIGGER
  VIEW
  User_catalog:使用者類表,儲存以下的類型的資料
  Selina Sql>select distinct table_type from user_catalog;
  SEQUENCE
  SYNONYM
  TABLE
  VIEW
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.