mysql 算子 谓词_[SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式
SQL 基礎(chǔ)知識(shí)梳理(六)- ?函數(shù)、謂詞、CASE 表達(dá)式
目錄
函數(shù)
謂詞
CASE 表達(dá)式
一、函數(shù)
1.函數(shù):輸入某一值得到相應(yīng)輸出結(jié)果的功能,輸入值稱為“參數(shù)”,輸出值稱為“返回值”。
2.函數(shù)的種類:
(1)算術(shù)函數(shù) - 數(shù)值計(jì)算
(2)字符串函數(shù) - 字符串操作
(3)日期函數(shù) - 日期操作
(4)轉(zhuǎn)換函數(shù) - 轉(zhuǎn)換數(shù)據(jù)類型
(5)聚合函數(shù) - 數(shù)據(jù)聚合
3.算術(shù)函數(shù)(加、減、乘、除):+、-、*、/
【備注】數(shù)據(jù)類型 NUMBERIC(全體位數(shù),小數(shù)位數(shù))可以指定數(shù)值的大小。
CREATE TABLESampleMath
(
m NUMERIC(10, 3) ,
nINTEGER,
pINTEGER);BEGIN TRAN;INSERT INTOdbo.SampleMath
( m, n, p )VALUES ( 500, --m - numeric
0, --n - integer
NULL --p - integer
);INSERT INTOdbo.SampleMath
( m, n, p )VALUES ( -180, --m - numeric
0, --n - integer
NULL --p - integer
);INSERT INTOdbo.SampleMath
( m, n, p )VALUES ( NULL, --m - numeric
NULL, --n - integer
NULL --p - integer
);INSERT INTOdbo.SampleMath
( m, n, p )VALUES ( NULL, --m - numeric
7, --n - integer
3 --p - integer
);INSERT INTOdbo.SampleMath
( m, n, p )VALUES ( NULL, --m - numeric
5, --n - integer
2 --p - integer
);INSERT INTOdbo.SampleMath
( m, n, p )VALUES ( NULL, --m - numeric
4, --n - integer
NULL --p - integer
);INSERT INTOdbo.SampleMath
( m, n, p )VALUES ( 8, --m - numeric
NULL, --n - integer
3 --p - integer
);INSERT INTOdbo.SampleMath
( m, n, p )VALUES ( 2.27, --m - numeric
1, --n - integer
NULL --p - integer
);INSERT INTOdbo.SampleMath
( m, n, p )VALUES ( 5.555, --m - numeric
2, --n - integer
NULL --p - integer
);INSERT INTOdbo.SampleMath
( m, n, p )VALUES ( NULL, --m - numeric
1, --n - integer
NULL --p - integer
);INSERT INTOdbo.SampleMath
( m, n, p )VALUES ( 8.76, --m - numeric
NULL, --n - integer
NULL --p - integer
);COMMIT;
初始化數(shù)據(jù)
(1)ABS - 絕對(duì)值:不考慮數(shù)值的符號(hào),表示一個(gè)數(shù)到原點(diǎn)距離的數(shù)值。
絕對(duì)值的計(jì)算方法:0 和正數(shù)的絕對(duì)值就是其本身,負(fù)數(shù)的絕對(duì)值就是去掉符號(hào)后的結(jié)果。
--語法: ABS(數(shù)值)
圖:第 2 行:-180 的絕對(duì)值為 180
(2)MOD - 取余、求余
--語法: MOD(被除數(shù),除數(shù))
【備注】Oracle、DB2、PostgreSQL、MySQL 支持該函數(shù),而 SQL Server 不支持該函數(shù),所以這里用“%”代替。
(3)ROUND - 四舍五入
如果指定四舍五入的位數(shù)為 1,那么會(huì)對(duì)小數(shù)點(diǎn)第 2 位進(jìn)行四舍五入;如果指定位數(shù)為 2,那么就會(huì)對(duì)第 3 位進(jìn)行四舍五入。
4.字符串函數(shù)
CREATE TABLESampleStr
(
str1VARCHAR(40),
str2VARCHAR(40),
str3VARCHAR(40)
)BEGIN TRAN;INSERT INTOdbo.SampleStr
( str1, str2, str3 )VALUES ( 'opx', --str1 - varchar(40)
'rt', --str2 - varchar(40)
NULL --str3 - varchar(40)
);INSERT INTOdbo.SampleStr
( str1, str2, str3 )VALUES ( 'abc', --str1 - varchar(40)
'def', --str2 - varchar(40)
NULL --str3 - varchar(40)
);INSERT INTOdbo.SampleStr
( str1, str2, str3 )VALUES ( 'aaa', --str1 - varchar(40)
NULL, --str2 - varchar(40)
NULL --str3 - varchar(40)
);INSERT INTOdbo.SampleStr
( str1, str2, str3 )VALUES ( 'aaa', --str1 - varchar(40)
NULL, --str2 - varchar(40)
NULL --str3 - varchar(40)
);INSERT INTOdbo.SampleStr
( str1, str2, str3 )VALUES ( NULL, --str1 - varchar(40)
'xyz', --str2 - varchar(40)
NULL --str3 - varchar(40)
);INSERT INTOdbo.SampleStr
( str1, str2, str3 )VALUES ( '@!#$%', --str1 - varchar(40)
NULL, --str2 - varchar(40)
NULL --str3 - varchar(40)
);INSERT INTOdbo.SampleStr
( str1, str2, str3 )VALUES ( 'ABC', --str1 - varchar(40)
NULL, --str2 - varchar(40)
NULL --str3 - varchar(40)
);INSERT INTOdbo.SampleStr
( str1, str2, str3 )VALUES ( 'aBC', --str1 - varchar(40)
NULL, --str2 - varchar(40)
NULL --str3 - varchar(40)
);INSERT INTOdbo.SampleStr
( str1, str2, str3 )VALUES ( 'abc太郎', --str1 - varchar(40)
'abc', --str2 - varchar(40)
'ABC' --str3 - varchar(40)
);INSERT INTOdbo.SampleStr
( str1, str2, str3 )VALUES ( 'abcdefabc', --str1 - varchar(40)
'abc', --str2 - varchar(40)
'ABC' --str3 - varchar(40)
);INSERT INTOdbo.SampleStr
( str1, str2, str3 )VALUES ( 'micmic', --str1 - varchar(40)
'i', --str2 - varchar(40)
'T' --str3 - varchar(40)
);COMMIT;
初始化數(shù)據(jù)
(1)拼接:+
(2)LEN - 字符串長(zhǎng)度
--語法: LEN(字符串)
(3)LOWER - 小寫轉(zhuǎn)換
--語法:LOWER(字符串)
(4)REPLACE - 字符串的替換
--語法:REPLACE(對(duì)象字符串, 替換前的字符串, 替換后的字符串)
(5)SUBSTRING - 字符串的截取
--語法:SUBSTRING(對(duì)象字符串,截取的起始位置,截取的字符數(shù))
(6)UPPER - 大寫轉(zhuǎn)換
--語法:UPPER(字符串)
5.日期函數(shù)
(1)獲取當(dāng)前日期和時(shí)間:
(2)DATEPART -?截取日期元素
6.轉(zhuǎn)換函數(shù)
(1)CAST - 類型轉(zhuǎn)換
(2)COALESCE - 將 NULL 轉(zhuǎn)換為其他值
作用:返回可變參數(shù)中左側(cè)開始的第一個(gè)不是 NULL 的值(參數(shù)是可變的,即可以個(gè)數(shù)是無限的)。
--語法:COALESCE(數(shù)據(jù)1, 數(shù)據(jù)2, 數(shù)據(jù)3 ...)
圖
圖
二、謂詞
1.謂詞:返回值為真值(TRUE/FALSE/UNKNOWN)的函數(shù)。
2.LIKE - 字符串的部分一致查詢
【備注】= 運(yùn)算符:字符串完全一致。
CREATE TABLESampleLike
(
strcoolVARCHAR(6) NOT NULL,PRIMARY KEY(strcool)
)BEGIN TRAN;INSERT INTOdbo.SampleLike
( strcool )VALUES ( 'abcddd' --strcool - varchar(6)
);INSERT INTOdbo.SampleLike
( strcool )VALUES ( 'dddabc' --strcool - varchar(6)
);INSERT INTOdbo.SampleLike
( strcool )VALUES ( 'abdddc' --strcool - varchar(6)
);INSERT INTOdbo.SampleLike
( strcool )VALUES ( 'ddabc' --strcool - varchar(6)
)INSERT INTOdbo.SampleLike
( strcool )VALUES ( 'abddc' --strcool - varchar(6)
)COMMIT;
初始化數(shù)據(jù)
%:0 字符以上的任意字符串。
_:任意 1 個(gè)字符。
圖:前部分一致
圖:中間一致
圖:后部分一致
后面 ddd 是 3 個(gè)字符,所以“abc__(2個(gè) _)”不滿足條件。
3.BETWEEN - 范圍查詢
BETWEEN 會(huì)在結(jié)果中包含臨界值(100 和 1000)。如果不想包含臨界值可以使用 < 和 >。
4.IS NULL、IS NOT NULL - 判斷是否為 NULL
為了選取部分值為 NULL 的列的數(shù)據(jù),不能使用 =,只能使用 IS NULL。
取反(不為空的數(shù)據(jù)),請(qǐng)使用 IS NOT NULL。
5.IN - OR 的簡(jiǎn)便用法
用 IN 替換上述語句:
否定形式 NOT IN:
【備注】IN 和 NOT IN 是無法選取 NULL 數(shù)據(jù)的。
6.使用子查詢作為 IN 謂詞的參數(shù)
IN 和 NOT IN 謂詞具有其它謂詞沒有的用法,它的參數(shù)可以是子查詢。
--DDL:創(chuàng)建表
CREATE TABLETenpoShohin
(tenpo_idCHAR(4) NOT NULL,
tenpo_meiVARCHAR(200) NOT NULL,
shohin_idCHAR(4) NOT NULL,
suryoINTEGER NOT NULL,PRIMARY KEY(tenpo_id, shohin_id));--DML:插入數(shù)據(jù)
INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000A', '東京', '0001', 30);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000A', '東京', '0002', 50);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000A', '東京', '0003', 15);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000B', '名古屋', '0002', 30);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000B', '名古屋', '0003', 120);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000B', '名古屋', '0004', 20);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000B', '名古屋', '0006', 10);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000B', '名古屋', '0007', 40);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000C', '大阪', '0003', 20);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000C', '大阪', '0004', 50);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000C', '大阪', '0006', 90);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000C', '大阪', '0007', 70);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000D', '福岡', '0001', 100);
測(cè)試數(shù)據(jù)
圖
7.EXIST
很多時(shí)候基本上可以使用 IN 或 NOT IN 來代替該謂詞。
作用:判斷是否存在滿足某種條件的記錄。
NOT EXIST 與 EXIST 相反,不存在:
三、CASE 表達(dá)式
1.CASE 表達(dá)式:(條件)分歧。
2.語法
--語法--CASEWHEN THEN --WHEN THEN --...--ELSE --END
判斷表達(dá)式類似“鍵 = 值”的形式,返回值為真值(TRUE/FALSE/UNKNOW)的表達(dá)式。如果結(jié)果為真,就會(huì)返回 THEN 子句中的表達(dá)式;如果不為真,就跳轉(zhuǎn)到下一條 WHEN 子句的判斷中;如果到最后的 WHEN 子句都不為真,就執(zhí)行最后一條 ELSE 的表達(dá)式。
下面是簡(jiǎn)化版的 CASE 表達(dá)式:
3.行轉(zhuǎn)列
備注
這里采用 MS SQL Server 進(jìn)行驗(yàn)證,不保證所有的 DBMS 執(zhí)行結(jié)果正確。
《SQL 基礎(chǔ)知識(shí)梳理》系列
【博主】反骨仔
【參考】《SQL ゼロからはじめるデータベース操作》
總結(jié)
以上是生活随笔為你收集整理的mysql 算子 谓词_[SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ef mysql modelfirst_
- 下一篇: mysql基础知识整理_mysql基础知