電腦研習測試網站
 
  Create an account  

 Linux 題庫 
LPI 認證考試
· 硬體的基礎與安裝
· shell的基本操作
· 文字處理
· 使用者、群組管理
· 檔案系統與分割區
· 文件的運用
· 封裝管理
· 程序管理
· 開機程序、執行層級
· 系統管理的基礎
· 網路入門
· 伺服軟體
· 安全性
· Shell Script
· 核心的基礎知識
· X的運用
· 列印
· 模擬測驗-1
· 模擬測驗-2

 資料庫教材區 
· DBMS概論
· 簡介與安裝
· 資料庫建立
· 資料型別
· 建立資料表
· 資料庫維護作業
· 運算式與相關函式
· 資料庫查詢作業
· 資料的匯入與匯出
· 鎖定資料表
· 結合
· 系統權限控管
· PHP 與 MySQL
· 日期資料
· MySQL語法列表
· MySQL函數列表

 PHP 教材區 
· PHP 介紹
· Apache 的設定
· PHP 語法介紹
· 流程控制
· 模組化
· 用 PHP 存取資料
· PHP 內建函數介紹
· 用戶驗證
· SQL 語法
· MySQL 資料庫操作

 網路管理 
· 動態IP申請轉址
· 加裝IP分享器也能架站
· 在無線網路架設伺服器

 誰在線上 
目前有 3 位來賓和 0 會員在線上


 語系選擇 
選擇語言:

第四章 運算子
 第七講 運算式與相關函式 

所謂算術運算子是使用於運算式中,使運算子兩側可進行運算的符號,SQL 中可以使用的運算子有很多,在這裡先介紹三種基本的運算子:算數運算子、邏輯運算子、比較運算子。

4.1 算術運算及常用數學函式

算術運算子包括加法 (+) 減法 (-) 乘法 (*) 除法 (/) 四種運算子。數學運算可以放在 SELECT 子句或 WHERE 子句中,我門可以利用 SELECT 進行測試。
運算或函式 意義與說明
+-*/ 加法 (+) 減法 (-) 乘法 (*) 除法 (/)。
ABS(X) 求 X 的絕對值。
SIGN(X) 當 X 為正數時傳回 1,X 為 0 時傳回 0,當 X 為負數時傳回 -1。
MOD(N,M) 求 N/M 後的餘數。
FLOOR(X) 求不大於 X 的最大整數。
CEILING(X) 求不小於 X 的最小整數。
ROUND(X) 求 X 四捨五入到個位的值。
ROUND(X,D) 求 X 四捨五入到小數第 D 位的值。
EXP(X) 求對數 e 的 X 次方。
LOG(X) 求 ln X 的值。
LOG10(X) 求以十為底的 log X 值。
POW(X,Y) OR POWER(X,Y) 求 X 的 Y 次方。
SQRT(X) 求 X 的平方。
PI( ) 求圓周率。
SIN(X),COS(X),TAN(X) 求 X 的三角函數。
ASIN(X),ACOS(X),ATAN(X) 求 X 的反三角函數。
ATAN2(X,Y) 求 Y/X 的 ARCTAN 函數值。
COT(X) 求 COT X。
RAND(N) 產生一個介於 0 至 1.0 之間的浮點亂數。
LEAST(N1,N2,N3.....) 在兩個以上的參數間進行比較,將其中最小的值傳回。
GREATEST(N1,N2,N3.....) 在兩個以上的參數間進行比較,將其中最大的值傳回。
DEGREES(X) 將徑度轉成角度。
RADIANS(X) 將角度轉成徑度。
TRUNCATE(X,D) 將 X 的小數以下的第 D 位以後無條件捨去。

範例:

4.2 比較運算子

在 Where 子句中最重要的就是比較運算子,比較運算子常用的有: = 運算子、> 與 >=、< 與 <=、<> 運算子........。
運算或函式 意義與說明
= 相等,注意它與 PHP 或某些語言不一樣,只有一個等號。
!= OR <> 不等於。
< 小於。
> 大於。
>= 大於或等於。
<= 小於或等於。
<=> 與 = 很相似,只是可以做 NULL值的比較運算。
IS NULL 檢查欄位的值是否為 NULL。 NULL 值不是 "0" ,也不是空白字元 ' ',也不是長度為零的字串'' ,當一個欄位處於沒有儲存著任何值的狀態時,就稱為儲存著 NULL 值。
IS NOT NULL 檢查欄位的值是否不為 NULL。
BETWEEN A AND B 指定一個介於 A 與 B 之間的範圍。
IN (Value1,Value2....) 檢查是否符合列舉項目的範圍。
NOT IN (Value1,Value2......) 檢查是否不在列舉項目的範圍。
IS NULL(exp) 檢查 exp 的運算式中是不是 NULL 值。
COLESCE(LIST) 在 LIST 的所有項目中,找出第一個不是 NULL 值的資料。
INTERVAL(N,N1,N2,........) 當N<N1,傳回 1,否則傳回 0,當 N<N2,再將傳回值加上 1, 否則傳回 0,依此類推。

範例:

首先建立一個資料表,名稱為 customers,內容如下所示:

create table customers (customer_name varchar(10),id int,address varchar(10),phone_no varchar(10));
insert into customers values('郭俊及',1,'高雄市',23423455);
insert into customers values ('莊啟明',4,'台北市',46645625);
insert into customers values ('周立華',3,'台北縣',24552355);
insert into customers values ('陳例夫',2,'高雄市',36234523);
insert into customers values ('鍾馗文',5,'台北縣',23534511);
insert into customers values ('鄭誠新',6,'台北市',65757567);
insert into customers values ('吳文華',8,'台北縣',97858676);
insert into customers values ('王一銘',7,'台北市',89563677);
insert into customers values ('趙紫新',9,'高雄市',95795643);

4.3 邏輯運算

邏輯運算子可以在時局中組合多個運算讓他們運作,邏輯運算子共有三種,分別是 AND 、OR、NOT ,以下分別介紹之

  • AND 運算子 (&&)

    當左側與右側都為真的時候,它就會傳回真,若其中一個為假時,會傳回假,AND 運算子的語法如下:

    運算式 AND 運算式

    譬如,當我們想要取出工作時段為日班,且工作年資在五年以下的員工資料時,我們便可以使用下列的敘述:

    SELECT *
    FROM SALARY
    WHERE WORKTIME='DAY' AND EXP<=5;

    WORKTIME='DAY' 這個運算表示了工作時段是日班的條件,EXP<=5 這個運算表示了工作年資在 5 年以下的條件,當這兩個條件同時成立,WHERE 之後的運算會傳回 TRUE 。

    接著我們再來執行更複雜一點的查詢。有一家餐廳每年都會發給年終獎金,每個員工可以領多少年終獎金,是以他的基本月薪和工作年資來決定。今年老闆決定發出的獎金是每人基本月薪的 3 倍,同時每一年的年資再加發 1000 元,現在如果我們要看看日班中是否有人可以領到 10 萬元,他的查詢於法如下:

    SELECT *
    FROM SALARY
    WHERE WORKTIME='DAY' AND ((BASE_SALARY*3)+(EXP*2)) >=100000;

    WORKTIME='DAY' 這個運算表示了工作時段是日班的條件,((BASE_SALARY*3)+(EXP*2)) >=100000 這個運算表示了獎金總額在十萬以上的條件。同時滿足 AND 左邊及右邊的條件的資料,才會被選取出來。

  • OR 運算子 (||)

    譬如,當我們想要取出工作時段為日班,或工作年資在五年以下的員工資料時,我們便可以使用下列的敘述:

    SELECT *
    FROM SALARY
    WHERE WORKTIME='DAY' AND EXP<=5;

    WORKTIME='DAY' 這個運算表示了工作時段是日班的條件,EXP<=5 這個運算表示了工作年資在 5 年以下的條件,當這兩個條件任一個條件成立,WHERE 之後的運算都會傳回 TRUE。

  • NOT 運算子 (!)

    NOT 運算子表示了否定的意思,當在 NOT 之後的運算是 TRUE 時,得到的運算結果是 FALSE ,當在 NOT 之後的運算是 FALSE 時,得到的運算結果是 TRUE

    SELECT *
    FROM SALARY
    WHERE NOT WORKTIME='NIGHT';
    SELECT *
    FROM SALARY
    WHERE JOB IS NOT NULL;

  • LIKE 運算子

    利用 = 運算子,我們可以取出某一段與特定字串完全相同的資料,但是有的時候我們並不需要和這特定字串完全相同,只要它的其中某一部分和這個特定字串相便可以,碰到這種情況,就可以使用 LIKE 運算, LIKE 可以和萬用字元組合在一起使用。

% 萬用字元

欄位名稱 LIKE %<值> 或 欄位名稱 LIKE * <值>

% 是一種可以用來替代任何字元的萬用字元,在鍵入 % 符號的地方,不論有多少個字元,不論是什麼字元,或者是根本沒有任何字元,這個符號都可以替代它。因此上面的例子可以將名字中有'俊'這個字的資料全部列出,如果將上面的例子修改成如下所示:

會選擇列出地址開始是'台北'的所有資料。

_或 ? 萬用字元

% 是以一種可以替代任何字元的萬用字元,但是除此之外還有一種萬用字元'_' 或 '?',可以用來替代一個字元,它的用法如下:

欄位名稱 LIKE _<值> 或 欄位名稱 LIKE ?<值>

4.4 字串函式

算術運算子是以數字為操作對象,而字串函式則是以字串型態做為操作的目標。
字串運算或函式 意義與說明
ASCII(X) 傳回 X 字串中最左邊字元的 ASCII 值。
CONV(N,FROM BASE,TO_BASE) 將 N 的基底 FROM BASE 轉成 TO_BASE,N 可以是字串或數字
BIN(N) 將十進制的數值 N 轉換為二進制。
OCT(N) 將十進制的數值 N 轉換為八進制。
HEX(N) 將十進制的數值 N 轉換為十六進制。
CHAR(N,....) 將 ASCII 字元 N 轉換為對應的字元。
CONCAT(S1,S2,.....) 將字串 S1,S2,... 全部連接成一個字串,即使 S1,S2...中有數字,也會轉成文字。
LENGTH(STRING) 傳回 STRING 此字串的長度。
LOCATE(S1,S2) 傳回 S1 字串在 S2 字串第一次出現的位置是第幾個字。
INSTR(S2,S1) 與 LOACTE 相同,傳回 S1 字串在 S2 字串第一次出現的位置是第幾個字。
LPAD(STRING,LEN,PADSTR) 將 PADSTR 從左邊填入,再加上 STRING 字串,最後取總長度為 LEN。
RPAD(STRING,LEN,PADSTR) 將 PADSTR 從右邊填入,再加上 STRING 字串,最後取總長度為 LEN。
LEFT(STR,LEN) 從字串 STR 的左邊取 LEN 長度的字串傳回。
RIGHT(STR,LEN) 從字串 STR 的右邊取 LEN 長度的字串傳回。
SUBSTRING(STR,POS,LEN) 從字串 STR 的第 POS 位置開始,取出 LEN 長度的字串傳回。
SUBSTRING_INDEX(STR,DELIM,COUNT) 將字串 STR 用 DELIM 切成數個字串,然後取出 COUNT 長度的字串傳回,當 COUNT 為正數時,從字串開頭開始,當 COUNT 為負數時,從字串結尾開始。
LTRIM(STRING) 移除字串 STRING 開頭的空白。
RTRIM(STRING) 移除字串 STRING 結尾的空白。
TRIM([[BOTH|LEADING|

TRAILING][REMSTR] FROM ] STR)

移除 STR 字串中與 REMSTR 相同的字串,BOTH 是開始與結尾都移除,LEADING 是移除開始,TRAILING 是移除結尾,預設是 BOTH。
SPACE(N) 產生 N 個空白字元。
REPLACE(STRING,FROM_STR,TO_STR) 將STRING 字串中,有 FROM_STR 出現的地方用 TO_STR 來取代。
REPEAT (STR,COUNT) 產生 COUNT 個 STR 字串。
REVERSE(STR) 將字串反順序輸出。
INSERT(STR,POS,LEN,NEWSTR) 將 STR 字串的第 POS 個字元之後,插入一個長度為 LEN 的 NEWSTR 字串。
ELT(N,S1,S2,......) 依據 N 選擇 S1,S2 之中的第 N 個字串傳回。
FIELD (STRING,S1,S2,......) 將 STRING 與後面的字串進行比對,發現相同則傳回他是第幾個,否則傳 0。
FIND_IN_SET(STRING,STRLIST) STRLIST 是字串集合,元素間用 , 逗號做為分隔。找出 STRING 是 STRLIST 的第幾個元素。
LCASE(STR) OR LOWER(STR) 將 STR 中的字串轉成小寫。
UCASE(STR) OR UPPER(STR) 將 STR 中的字串轉成大寫。

範例:

SELECT REPEAT('Y',5);
SELECT ELT(3,'A','B','C','D');

習題:

將 customers 資料表中 id 大於 3,且住址在台北縣市的人,他的電話及姓名找出來。


PHP-Nuke Copyright © 2004 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
本頁產生時間: 0.07 秒