鼓勵有時比壓力要重要!
java
在學習的過程當中,不少時候咱們聽到的都是,你要怎樣,怎樣,你瞧瞧誰誰誰
,哪怕今天聽不到這樣的聲音了,但由於曾經反覆聽到過而致使心裏抗拒。雖然也知道本身要去學,可是很難堅持,學着學着就沒有了方向,看到還有那麼多不會的就更慌了,以致於最後心態崩了,更不肯意學。其實程序員的壓力並不小,想成長几乎是須要一直的學習,就像彷佛不再敢說精通java了同樣,知識量實在是隨着學習的深刻,愈來愈深,愈來愈廣。因此須要,開心學習,快樂成長!mysql
咱們都知道到MySQL能夠經過 LIKE ...% 來進行模糊匹配。git
MySQL
一樣也支持其餘正則表達式的匹配, MySQL
中使用 REGEXP
操做符來進行正則表達式匹配。程序員
正則表達式的做用是匹配文本,將一個模式(正則表達式)與一個文本串進行比較。MySQL用 WHERE
子句對正則表達式提供了初步的支持,容許你指定正則表達式,過濾 SELECT
檢索出的數據。正則表達式
下表中的正則模式可應用於 REGEXP
操做符中sql
模式 | 描述 |
---|---|
^ | 匹配輸入字符串的開始位置。若是設置了 RegExp 對象的 Multiline 屬性,^ 也匹配 '\n' 或 '\r' 以後的位置。 |
$ | 匹配輸入字符串的結束位置。若是設置了RegExp 對象的 Multiline 屬性,$ 也匹配 '\n' 或 '\r' 以前的位置。 |
. | 匹配除 "\n" 以外的任何單個字符。要匹配包括 '\n' 在內的任何字符,請使用象 '[.\n]' |
[...] | 字符集合。匹配所包含的任意一個字符。例如, '[abc]' 能夠匹配 "plain" 中的 'a'。 |
[^...] | 負值字符集合。匹配未包含的任意字符。例如, '[^abc]' 能夠匹配 "plain" 中的'p'。 |
p1 p2 p3 | 匹配 p1 或 p2 或 p3。例如,'z |
+|匹配前面的子表達式一次或屢次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於 {1,}。 {n}|n 是一個非負整數。匹配肯定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',可是能匹配 "food" 中的兩個 o。 {n,m}|m 和 n 均爲非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。數據庫
基本字符匹配:ide
REGEXP關鍵字來匹配正則學習
SELECT name FROM tab1 WHERE name REGEXP 'abc'; //REGEXP後所跟的東西做爲正則表達式ui
匹配字符類:
匹配多個字符:
0個或多個匹配 1個或多個匹配(等於{1,}) ? 0個或1個匹配(等於{0,1}) {n} 指定數目的匹配 {n,} 很多於指定數目的匹配 {n,m} 匹配數目的範圍(m不超過255) 將以上的字符放在你想匹配的字符的後面,便可匹配多個字符 eg: SELECT 列名... FROM 表名 WHERE 列名 REGEXP 'a*'; 匹配0個和多個a
定位符:
匹配特殊字符使用\進行轉義:
示例:
查詢找到全部的名字以'st'開頭
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
查詢找到全部的名字以'ok'結尾
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
查詢找到全部的名字包函'mar'的字符串
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
查詢找到全部名稱以元音開始和'ok'結束 的 mysql> SELECT name FROM person_tbl WHERE name
REGEXP '^[aeiou]|ok$';
一個正則表達式中的可使用如下保留字
^
所匹配的字符串之後面的字符串開頭\
mysql> select "fonfo" REGEXP "^fo$"; -> 0(表示不匹配)
mysql> select "fofo" REGEXP "^fo"; -> 1(表示匹配)
$
所匹配的字符串之前面的字符串結尾
mysql> select "fono" REGEXP "^fono$"; -> 1(表示匹配)
mysql> select "fono" REGEXP "^fo$"; -> 0(表示不匹配)
.
匹配任何字符(包括新行)
mysql> select "fofo" REGEXP "^f.*"; -> 1(表示匹配)
mysql> select "fonfo" REGEXP "^f.*"; -> 1(表示匹配)
a*
匹配任意多個a(包括空串)
mysql> select "Ban" REGEXP "^Ba*n"; -> 1(表示匹配)
mysql> select "Baaan" REGEXP "^Ba*n"; -> 1(表示匹配)
mysql> select "Bn" REGEXP "^Ba*n"; -> 1(表示匹配)
a+
匹配任意多個a(不包括空串) \
mysql> select "Ban" REGEXP "^Ba+n"; -> 1(表示匹配)
mysql> select "Bn" REGEXP "^Ba+n"; -> 0(表示不匹配)
a?
匹配一個或零個a \
mysql> select "Bn" REGEXP "^Ba?n"; -> 1(表示匹配)
mysql> select "Ban" REGEXP "^Ba?n"; -> 1(表示匹配)
mysql> select "Baan" REGEXP "^Ba?n"; -> 0(表示不匹配)
de|abc
匹配de或abc
mysql> select "pi" REGEXP "pi|apa"; -> 1(表示匹配)
mysql> select "axe" REGEXP "pi|apa"; -> 0(表示不匹配)
mysql> select "apa" REGEXP "pi|apa"; -> 1(表示匹配)
mysql> select "apa" REGEXP "^(pi|apa)$"; ->> 1(表示匹配)
mysql> select "pi" REGEXP "^(pi|apa)$"; -> 1(表示匹配)
mysql> select "pix" REGEXP "^(pi|apa)$"; -> 0(表示不匹配)
(abc)*
匹配任意多個abc(包括空串)
mysql> select "pi" REGEXP "^(pi)*$"; -> 1(表示匹配)
mysql> select "pip" REGEXP "^(pi)*$"; -> 0(表示不匹配)
mysql> select "pipi" REGEXP "^(pi)*$"; -> 1(表示匹配)
[a-dX]
匹配「a」、「b」、「c」、「d」或「X」
[^a-dX]
匹配除
「a」、「b」、「c」、「d」、「X」
之外的任何字符。「[」、「]」必須成對使用 \
mysql> select "aXbc" REGEXP "[a-dXYZ]"; -> 1(表示匹配)
mysql> select "aXbc" REGEXP"^[a-dXYZ]$"; -> 0(表示不匹配)
mysql> select "aXbc" REGEXP "^[a-dXYZ]+$"; -> 1(表示匹配)
mysql> select "aXbc" REGEXP "^[^a-dXYZ]+$"; -> 0(表示不匹配)
mysql> select "gheis" REGEXP "^[^a-dXYZ]+$"; -> 1(表示匹配)
mysql> select "gheisa" REGEXP "^[^a-dXYZ]+$"; -> 0(表示不匹配)
WHERE子句
在咱們使用數據庫時,一般只會根據特定條件提取表數據的子集。只檢索所需數據須要指定搜索條件(search criteria),搜索條件也稱爲過濾條件(filtercondition)。
SELECT name, age FROM sys_user WHERE age=18; 返回age=18的行
WHERE子句支持的操做符
= 等於 <> 不等於 != 不等於 < 小於 <= 小於等於 大於 = 大於等於 BETWEEN 在指定的兩個值之間 eg: //獲取age大於20的數據 SELECT name,age FROM sys_user WHERE age>20; //獲取age在12到18之間的數據,包括12和18 SELECT name,age FROM sys_user WHERE age BETWEEN 12AND 18;
另外一個特殊子句
IS NULL用來返回爲空的數據 SELECT name, age FROM sys_user WHERE name IS NULL;
比較運算符
組合 WHERE
子句
使用AND或者OR子句,組合WHERE子句 //查詢age=20而且name='cyj'的數據 SELECT name,age FROM sys_user WHERE age=20 AND name='cyj'; //查詢age=20或者age=50的數據 SELECT name,age FROM sys_user WHERE age=20 OR age=50; AND和OR能夠同時使用,不過AND的優先級高於OR,因此會先處理AND操做符, 另外能夠用括號分組,明確的顯示優先級.
IN
操做符
指定條件範圍,範圍中的每一個條件均可以進行匹配。IN取合法值的由逗號分隔的清單,全都括在圓括號中。
//查詢age在18,19或20......的全部數據,功能與OR類似. SELECT name,age FROM sys_user WHERE age IN (18,19,20,21,22,23);
IN相比於OR的一些好處:
1)在使用長的合法選項清單時,IN操做符的語法更清楚且更直觀。 2)在使用IN時,計算的次序更容易管理 3)IN操做符通常比OR操做符清單執行更快 4) IN的能夠包含其餘SELECT語句,使得可以更動態地創建WHERE子句
NOT
操做符
否認它以後所寫的任何條件。
//查詢age不在18,19或20的全部數據,功能與OR類似. SELECT name,age FROM sys_user WHERE age NOT IN (18,19,20);
BETWEEN
與日期類型(NOT BETWEEN
與之相反)
當使用BETWEEN運算符與日期類型值時,要得到最佳結果,應該使用類型轉換將列或表達式的類型顯式轉換爲DATE類型。
要查詢獲取所需日期(requiredDate)從2013-01-01到2013-01-31的全部訂單,可是這裏要注意(查詢的日期AND後面的默認爲2019-5-11 00:00:00)也就是說沒法查詢出2019-05-11當天日期。
SELECT orderNumber, requiredDate, status FROM jmccsm_orders WHERE requireddate BETWEEN CAST('2019-05-01' AS DATE) AND CAST('2019-5-11' AS DATE);
想知道怎麼辦麼,請持續關注博主的博文(前臺、後臺、sql均可以處理哦)。
LIMIT
在 SELECT
語句中使用 LIMIT
子句來約束結果集中的行數。 LIMIT
子句接受一個或兩個參數。兩個參數的值必須爲零或正整數。
語法:
LIKE操做符(NOT LIKE與之相反)
%通配符
%能夠匹配表示任何字符出現任意次數 //能夠匹配任何name以a開頭的數據 SELECT name FROM sys_user WHERE name LINK 'cyj%';
通配符
下劃線(_)。下劃線只匹配單個字符,用法同%
注意
不要過分使用通配符。 若是其餘操做符能達到相同的目的,應該使用其餘操做符。 儘可能不要把它們用在搜索模式的開始處,由於速度會很慢