SQL 語句基礎

jshecn發表於2008-06-25
下面給出SQL語句的基本介紹。
1.1、SQL語句所用符號
[@more@]
下面給出SQL語句的基本介紹。
1.1、SQL語句所用符號
運算子
用途
例子
+ -
表示正數或負數,正數可省去 +
-1234.56
+
將兩個數或表示式進行相加
A=c+b
-
將兩個數或表示式進行相減
34-12
*
將兩個數或表示式進行相乘
12*34
/
除以一個數或表示式
18*11
NULL
空值判斷
Where name is null;
||
字串連線
‘101-’||tel_num
=
等於測試
Select * from emp where name=’趙元傑’;
!= 或<>或^=
不等於測試
Select * from emp where name !=’趙元傑’;

<

小於測試
Select * from emp where sal < 5000;

>

大於測試
Select * from emp where sal > 5000;
<=
小於等於測試
Select * from emp where sal <= 5000;
>=
大於等於測試
Select * from emp where sal >= 5000;
Not in
測試某值是否在一個指定的結果集中
Select name,addr from expert where local not in(‘北京’,’上海’);
ANY
將一個值與一組值進行比較,返回滿足條件的結果。必須跟!=,,<=,>=
select ename,sal from emp where sal<= any(select sal from emp where deptno=10)
SOME
同ANY,必須跟!=,,<=,>=

ALL
將一個值與一組值比較,返回滿足條件的所有列值。必須跟!=,,<=,>=
Select name,sal from emp w here sal<= all
( 500,800,1200);
Not between
A and B
判斷某個值是否界於兩者之間。
Select name,sal from emp Where
sal between 500 and 1200;
[not]exists
判斷某個列是否存在於一組值中。
select dname,deptno from dept where exists
(select * from emp where dept.deptno=emp.deptno)
A[not]like b

比較兩個模式是否相似,當使用like 語句時Oracle不去訪問索引。
Select * from emp
Where ename like ‘TH%’;
Is [not] null
測試值是否為空。
Select ename,deptno from emp
Where comm. Is null or comm.=0;
Not
對結果的否定。
Select * from emp Where sal not(sal<1000); 等價於select ename,sal from emp where sal>=1000;
AND
用於判斷兩個條件十分都滿足。
Select * from emp where
Ename=’SIMTH’ and sal>=1000;
OR
用於判斷兩個條件中是否有一個滿足。
Select * from emp where
Ename=’SIMTH’ or ename=’SCOTT’;
UNION
用於返回(組合)兩個查詢中所有唯一的行。
Select ename from emp union
Select ename from emp;
UNION ALL
用於返回(組合)兩個查詢中所有所有的行。

INTERSECT
用於返回兩個查詢中相同的行。
Select ename from emp1 intersect select ename from emp2;
MINUS
用於返回兩個查詢中的不同的行。

當我們可以用SQL*PLUS登入到SQL>下後,我們可以用DESC 顯示某表的結構,也可以用select 語句簡單查詢表中的一些列的內容。
例:要查詢EMP表中員工的姓名、工資及出生日期,則:
SQL>select ename, sal, hiredate from emp;
2、偽列及偽表

Oracle系統為了實現完整的關聯式資料庫功能,系統專門提供了一組稱為偽列(Pseudocolumn)的資料庫列,這些列不是在建立物件(如建表)時由我們完成的,而是在我們建立物件時由自動Oracle完成的。Oracle目前有以下的偽列:

CURRVAL and NEXTVAL 使用序列號的保留字

LEVEL 查詢資料所對應的級

ROWID 記錄的唯一標識

ROWNUM 限制查詢結果集的數量

Oracle 還提供了一個DUAL 的偽表,該目的表主要是保證在使用SELECT 語句中語句的完整性而提供的,如:我們要查詢當前的系統日期及時間,而系統的日期和時間並是放在一個指定的表裡。所以在 from 語句後就沒有表名給出。為了使用 from 後有個表名,我們就用DUAL代替。如:

例1:查詢Oracle系統日期及時間:

SQL> select to_char( sysdate,'yyyy.mm.dd hh24:mi:ss') from DUAL;

TO_CHAR(SYSDATE,'YY

-------------------

2001.06.02 07:28:09

例2:計算一下 5000+5000*0.1 的結果是多少,則:

SQL> select 5000+5000*0.1 from DUAL;

5000+5000*0.1

-------------------

5500

、SELECT語句
在關聯式資料庫中,使用頻率最高要算SELECT語句了。儘管SELECT 語句的使用非常簡單,但確很有學問。下面簡單介紹有關SELECT 語句的常用方法。
1.命令語法:
SELECT 的簡單語法:
SELECT [DISTINCT | ALL] {* | column1[, column2]...}
FROM {table_1 | (subquery)} [alias]
[, {table_2 | (subquery)} [alias]]...
[WHERE condition]
[CONNECT BY condition [START WITH condition]
[GROUP BY expn] [HAVING expn]
[{ UNION [ALL] | INTERSECT | MINUS } SELECT . . . ]
[ ORDER BY [expn ] [ ASC | DESC]
[ FOR UPDATE [OF [user.]table | view] column ]
[NOWAIT]
詳細語法結構需查閱最新ORACLE 原版《ORACLE8i SQL REFERENCE MANUAL》或《ORACLE9i SQL REFERENCE MANUAL》
、SQL中的單記錄函式
許多資料(包括Oracle 的資料)把Oracle的SQL語句中用到的函式分為單值函式和多值函式,單值函式又分為字元函式和數字函式。下面分別介紹它們。
字元函式
ASCII
返回對應字元的十進位制值
CHR
給出十進位制返回字元
CONCAT
拼接兩個字串,與 || 相同
INITCAT
將字串的第一個字母變為大寫
INSTR
找出某個字串的位置
INSTRB
找出某個字串的位置和位元組數
LENGTH
字元給出字串的長度
LENGTHB
位元組給出字串的長度
LOWER
將字串轉換成小寫
LPAD
使用指定的字元在字元的左邊填充
LTRIM
左邊裁剪掉指定的字元
RPAD
使用指定的字元在字元的邊填充
RTRIM
右邊裁剪掉指定的字元
REPLACE
執行字串搜尋和替換
SUBSTR
取字串的子串
SUBSTRB
取字串的子串(以位元組)
SOUNDEX
返回一個同音字串
TRANSLATE
執行字串搜尋和替換
TRIM
裁剪掉前面或後面的字串
UPPER
將字串變為大寫
NVL
以一個值來替換空值
1、ASCII()
是字串。返回與指定的字元對應的十進位制數。
SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual;
A a ZERO SPACE
---------- ---------- ---------- ----------
65 97 48 32
SQL> select ascii('趙') zhao,length('趙') leng from dual;
ZHAO LENG
---------- ----------
54740 1
2、CHR([NCHAR])
給出整數,返回對應字元。如:
SQL> select chr(54740) zhao,chr(65) chr65 from dual;
ZH C
-- -
趙 A
3、CONCAT(,)
返回字串c1與字串c2合併後的值。例如:
SQL> select concat('010-','8801 8159')||'轉23' 趙元傑電話 from dual;
趙元傑電話
-----------------
010-8801 8159轉23
4、INITCAP()
返回字串c1 並第一個字母變為大寫。例如:
SQL> select initcap('simth') upp from dual;
UPP
-----
Simth
5、INSTR(,[,[,] ] )
在一個字串中搜尋指定的字元,返回發現指定的字元的位置。
C1: 被搜尋的字串
C2: 希望搜尋的字串
I: 搜尋的開始位置,預設是1
J: 出現的位置,預設是1。
SQL> SELECT INSTR ('Oracle Training', 'ra', 1, 2) "Instring" FROM DUAL;
Instring
----------
9
6、INSTRB(,[,[,] ] )
除了返回的位元組外 ,與INSTR 相同,
7、LENGTH( )
返回字串 c 的長度。
SQL> l
1 select name,length(name),addr,length(addr),sal,length(to_char(sal))
2* from nchar_tst
SQL> /
NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL))
------ ------------ ---------------- ------------ ---------- ----------------
趙元傑 3 北京市海淀區 6 99999.99 8
8、LENGTHB( )
以位元組返回字串的位元組數。
SQL> select name,lengthb(name),length(name) from nchar_tst;
NAME LENGTHB(NAME) LENGTH(NAME)
------ ------------- ------------
趙元傑 6 3
9、LOWER ( )
返回字串並將所有字元變為小寫。
SQL> select lower('AaBbCcDd') AaBbCcDd from dual;
AABBCCDD
--------
aabbccdd
10、UPPER( )
與 LOWER 相反,將給出字串變為大寫。如:
SQL> select upper('AaBbCcDd') AaBbCcDd from dual;
AABBCCDD
--------
AABBCCDD
11、RPAD和LPAD(貼上字元)
RPAD(string,Length[,'set'])

LPAD(string,Length[,'set'])

RPAD在列的右邊貼上字元;
LPAD在列的左邊貼上字元。
例1:
SQL>select RPAD(City,35,'.'),temperature from weather;
RPAD(City,35,'.') temperature
-------------------------- ----------------
CLEVELAND...... 85
LOS ANGELES.. 81
.........................
(即不夠35個字元用'.'填滿)
12、LTRIM(左截斷)RTRIM(右截斷) 函式
LTRIM (string [,’set’])
Left TRIM (左截斷)刪去左邊出現的任何set 字元。
RTRIM (string [,’set’])
Right TRIM (右截斷)刪去右邊出現的任何set 字元。
例1:
SELECT RTRIM (‘Mother Theresa, The’, ‘The’) “Example of Right
Trimming” FROM DUAL;
Example of Right
----------------
Mother Theresa,
13、SUBSTR Substr(string,start[,Count])
取子字串中函式
對字串(或欄位),從start字元 開始,連續取 count 個字元並返回結果,如果沒有指count則一直取到尾。
select phone,substr(phone,1,3) || ‘0’ || substr(phone,4)
from telecommunication where master=’中國電信’;
14、SUBSTRB(string,start[,Count])
對字串(或欄位),從start位元組 開始,連續取 count 個位元組並返回結果,如果沒有指count則一直取到尾。
15、REPLACE (‘string’ [,’string_in’,’string_out’])
String: 希望被替換的字串或變數。
String_in: 被替換字串。
String_out: 要替換字串。
SQL> select replace('Informaix中國公司','Informaix','IBM Informix')
2 IBM資料庫 from dual;
IBM資料庫
--------------------
IBM Informix中國公司
16、SOUNDEX( )
返回一個與給定的字串讀音相同的字串(不管拼寫是否一樣)。
SELECT DPL_NAME FROM DENIED_PARTIES_LIST WHERE
SOUNDEX(DPL_NAME) = SOUNDEX(‘Saddam Hussain’) ;
DPL_NAME
----------------------------------------------
Al Husseni
Sadda Al Sada.
17、REPLACE (‘string’ [,’string_in’,’string_out’])
String:希望被替換的字串或變數。
String_in: 被替換字串。
String_out: 要替換字串。
SELECT REPLACE (‘Oracle’, ‘Or’, ‘Mir’) “Example “ FROM DUAL;
Example
-------
Miracle
18、TRIM( [] FROM

TRIM可以使你對給定的字串進行裁剪(前面,後面或前後)。

如果指定 LEADING, Oracle 從trim_char 中裁剪掉前面的字元;

如果指定TRAILING, Oracle 從trim_char 中裁剪掉尾面的字元;

如果指定兩個都指定或一個都沒有給出,Oracle從trim_char 中裁剪掉前面及尾面的字元;

如果不指定 trim_character, 預設為空格符;

如果只指定trim_source, Oracle Oracle從trim_char 中裁剪掉前面及尾面的字元。

例子:將下面字串中的前面和後面的‘0‘字元都去掉:

SELECT TRIM (0 FROM 0009872348900) "TRIM Example" FROM DUAL;

TRIM example

--------------------------------

98723489
數字函式
函式
說明
Value1 + value2
Value1 - value2

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/64991/viewspace-1006126/,如需轉載,請註明出處,否則將追究法律責任。

SQL 語句基礎
請登入後發表評論 登入
全部評論

相關文章