Oracle-SQL
這是對Oracle-SQL知識點詳細介紹的文章系列,其他文章如下:
結構化查詢語言
簡介
結構化查詢語言(Structured Query Language)
)簡稱SQL,是操作和檢索關系型數(shù)據(jù)庫的標準語言;分類
數(shù)據(jù)查詢語言(DQL:Data Query Language):語句主要包括 SELECT ,用于從表中檢索;
數(shù)據(jù)操作語言(DML:Data Manipulation Language):主要包括 insert,update,delete,用于添加、修改和刪除表中的行數(shù)據(jù);
事務處理語言:(TPL:Transaction Process Language):語句主要包括 commit, rollback,用于提交和回滾;
數(shù)據(jù)控制語言:(DCL:Data Control Language):主要包括 grant,revoke,用于進行授權和收回權限;
數(shù)據(jù)定義語言(DDL:Data Definition language):主要包括 create, drop, alter,用于定義、銷毀、修改數(shù)據(jù)庫對象;
簡單查詢
- 1、基本select 語句語法

-
SQL語句的書寫規(guī)則
- 不區(qū)分大小寫,也就是說SELECT,select,Select,執(zhí)行時效果是一樣的。
- 可以單行來書寫,也可以書寫多行,建議分多行書寫,增強代碼可讀性,通常以子句為單位進行分行。
- 關鍵字不可以縮寫、分開以及跨行書寫,如SELECT不可以寫成SEL或SELE CT等形式。
- 關鍵字最好使用大寫,其它語法元素(如列名、表名等)小寫。
- Tab和縮進的使用可以提高程序的可讀性
-
2、算數(shù)運算符
- 可以在SELECT語句中使用算術運算符,改變輸出結果
![Uploading 1477113225660_194572.png . . .]
- 可以在SELECT語句中使用算術運算符,改變輸出結果

-
3、算術運算符優(yōu)先級
- 乘除優(yōu)先于加減;
- 相同優(yōu)先權的表達式按照從左至右的順序依次計算;
- 括弧可以提高優(yōu)先權,并使表達式的描述更為清晰;
-
4、空值NULL
- 空值是一種無效的、未賦值的、未知的或不可用的值;
- 空值不同于零或空格;
- 任何包含空值的算術表達式運算后的結果都為空值;
-
列別名
- 用來重新命名列的顯示標題;
- 如果SELECT語句中包含計算列,通常使用列別名來重;
- 新定義列標題;
-
使用列別名的方法
- 方式1:列名 列別名
- 方式2:列名 AS 列別名
-
以下三種情況列別名兩側需要添加雙引號
- 列別名中包含有空格;
- 列別名中要求區(qū)分大小寫;
- 列別名中包含有特殊字符;
-
5、連接操作符
- 用于連接列與列、列和字符;
- 形式上是以兩個豎杠||;
- 用于創(chuàng)建字符表達式的結果列;
-
6、原義字符串
- 原義字符串是包含在SELECT列表中的一個字符、一個數(shù)字或一個日期。
- 日期和字符字面值必須用單引號引起來。
- 每個原義字符串都會在每個數(shù)據(jù)行輸出中出現(xiàn)
7、消除重復行
在SELECT字句中使用關鍵字DISTINCT可消除重復行;
限定數(shù)據(jù)和對數(shù)據(jù)排序
- 1、選擇限定數(shù)據(jù)行
使用WHERE子句可以返回限定的數(shù)據(jù)行,語法如下:

WHERE子句緊跟在FROM子句之后condition(s)表示條件表達式,通常格式為:列名 比較操作符 要比較的值
- 2、比較操作符

字符型數(shù)據(jù)作為被比較的值時,必須用單引號引起來
字符型數(shù)值區(qū)分大小寫
日期型數(shù)值作為被比較的值時,必須用單引號引起來。
日期型數(shù)值是區(qū)分日期表達形式的,默認的日期形式是DD-MON-RR
3、特殊比較運算符

- 4、邏輯運算符
當需要和多個條件表達式進行比較時,需要使用邏輯運算符把多個表達式連接起來;

- 5、運算符的優(yōu)先級
括號’()’優(yōu)先于其他操作符

- ORDER BY子句
使用ORDER BY子句能對查詢結果集進行排序,語法結構如下;

其中:
可以按照列名、表達式、列別名、結果集的列序號排序;
ASC: 升序,默認值 DESC: 降序;
ORDER BY 子句必須寫在SELECT語句的最后;
-
排序規(guī)則
- 數(shù)字升序排列小值在前,大值在后。即按照數(shù)字大小順序由小到大排列。
- 日期升序排列相對較早的日期在前,較晚的日期在后;
- 字符升序排列按照字母由小到大的順序排列。即由A-Z排列;中文升序按照字典順序排列。
- 空值在升序排列中排在最后,在降序排列中排在最開始;
單行函數(shù)
- 1、SQL函數(shù)概述

- 2、SQL函數(shù)分類

- 3、單行函數(shù)語法
語法:
函數(shù)名[(參數(shù)1,參數(shù)2,…)]
其中的參數(shù)可以是以下之一:
變量
列名
表達式
-
4、單行函數(shù)特征
- 單行函數(shù)對單行操作;
- 每行返回一個結果;
- 有可能返回值與原參數(shù)數(shù)據(jù)類型不一致;
- 單行函數(shù)可以寫在SELECT、WHERE、ORDER BY子句中;
- 有些函數(shù)沒有參數(shù),有些函數(shù)包括一個或多個參數(shù);
- 函數(shù)可以嵌套;
5、單行函數(shù)的分類

- 6、字符函數(shù)
主要指參數(shù)類型是字符型,不同函數(shù)返回值可能是字符型或數(shù)值型;

- 大小寫轉換函數(shù)
LOWER(列名|表達式):將大寫或大小寫混合的字符轉換成小寫
UPPER(列名|表達式) :將小寫或大小寫混合的字符轉換成大寫
INITCAP(列名|表達式) :將每個單詞的第一個字母轉換成大寫,其余的字母都轉換成小寫
- 字符處理函數(shù)
CONCAT(column1|expression1,column2|expression2) 連接兩個值 ,等同于||;
SUBSTR (column|expression,n1[,n2])
- 返回第一個參數(shù)中,從第n1位開始,長度為n2的子串。
- 如果n2省略,取第n1位開始的所有字符。
- 如果n1是負值,表示從第一個參數(shù)的后面第abs(n1)位開始向右取長度為n2的子串。
LENGTH(column | expression) 取字符長度;
INSTR(s1,s2,[,n1],[n2])
返回s1中,子串s2從n1開始,第n2次出現(xiàn)的位置。n1,n2默認值為1
LPAD(s1,n1,s2)
返回s1被s2從左面填充到n1長度后的字符串。
RPAD(s1,n1,s2)
返回s1被s2從右面填充到n1長度后的字符串。
TRIM:去除字符串頭部或尾部(頭尾)的字符格式:TRIM(leading | trailing | both trim_character From trim_source)
REPLACE(s1,s2,s3)
把s1中的s2用s3替換。
- 7、數(shù)值函數(shù)
ROUND : 將列或表達式所表示的數(shù)值四舍五入到小數(shù)點后的第n位。格式: ROUND(column| expression, n);
TRUNC : 將列或表達式所表示的數(shù)值截取到小數(shù)點后的第n位。格式:TRUNC(column| expression, n);
MOD : 取m除以n后得到的余數(shù)格式:MOD(m,n);
- 8、日期類型數(shù)學運算
SYSDATE :返回系統(tǒng)當前日期
add_months(sysdate,12) 加1年
add_months(sysdate,1) 加1月
sysdate+1 加一天sysdate+1/24 加1小時sysdate+1/(2460)* 加1分鐘
sysdate+1/(246060)** 加1秒鐘
EXTRACT :返回日期類型數(shù)據(jù)中的年份、月份或者日;
MONTHS_BETWEEN :返回兩個日期類型數(shù)據(jù)之間間隔的自然月數(shù)
NEXT_DAY:返回某一日期的下一個指定日期
LAST_DAY:返回指定日期當月最后一天的日期
- 9、轉換函數(shù)

-
隱式數(shù)據(jù)類型轉換規(guī)則
- 對于INSERT和UPDATE操作,oracle會把插入值或者更新值隱式轉換為字段的數(shù)據(jù)類型
- 對于SELECT語句,oracle會把字段的數(shù)據(jù)類型隱式轉換為變量的數(shù)據(jù)類型
- 當比較一個字符型和數(shù)值型的值時,oracle會把字符型的值隱式轉換為數(shù)值型
- 當比較字符型和日期型的數(shù)據(jù)時,oracle會把字符型轉換為日期型
- 用連接操作符(||)時,oracle會把非字符類型的數(shù)據(jù)轉換為字符類型
- 如果字符類型的數(shù)據(jù)和非字符類型的數(shù)據(jù)(如number、date、rowid等)作算術運算,則oracle會將字符類型的數(shù)據(jù)轉換為合適的數(shù)據(jù)類型,這些數(shù)據(jù)類型可能是number、date、rowid等;
顯式數(shù)據(jù)類型轉換
通常是在字符類型、日期類型、數(shù)值類型之間進行顯式轉換。主要有3個顯式轉換函數(shù):
- TO_CHAR
- TO_NUMBER
- TO_DATE

- 10、通用函數(shù)
與空值(NULL)相關的一些函數(shù),完成對空值(NULL)的一些操作。主要包括以下函數(shù):
NVL
語法:NVL (expr1,expr2)
如果expr1不是null,返回expr1,否則返回expr2NVL2
語法:NVL2(expr1,expr2,expr3)
如果expr1不是null,返回expr2,否則返回expr3
- NULLIF
語法: NULLIF(expr1,expr2)
比較兩個表達式,如果相等,返回null,否則,返回第一個表達式
- COALESCE
COALESCE (表達式1, 表達式2, ... 表達式n);
函數(shù)是對NVL函數(shù)的擴展。COALESCE函數(shù)的功能是返回第一個不為空的參數(shù),參數(shù)個數(shù)不受限制。
條件處理函數(shù):
- CASE表達式

- DECODE
DECODE(字段|表達式, 條件1,結果1[,條件2,結果2…,][,缺省值])
-
11、函數(shù)的嵌套
- 單行函數(shù)可以嵌套于任何層。
- 嵌套的函數(shù)是從最里層向最外層的順序計算的!
