wordpress自定義頁seo代碼優(yōu)化包括哪些
目錄
語法
需求
示例
分析
代碼
語法
SELECT column1, column2, ... ?
FROM table_name ?
WHERE condition;
WHERE
?子句用于指定過濾條件,以限制從數(shù)據(jù)庫表中檢索的數(shù)據(jù)。當你執(zhí)行一個查詢時,WHERE
?子句允許你篩選出滿足特定條件的記錄。如果記錄滿足?WHERE
?子句中的條件,則這些記錄會被包含在查詢結(jié)果中;如果不滿足條件,則這些記錄會被排除在外。
WHERE
?子句是在數(shù)據(jù)被檢索之后但在結(jié)果被返回之前應用的。這意味著它不會減少數(shù)據(jù)庫需要處理的數(shù)據(jù)量,但會限制最終返回給客戶端的數(shù)據(jù)量。- 在使用?
WHERE
?子句時,確保條件正確無誤,以避免返回錯誤的數(shù)據(jù)或意外的空結(jié)果集。 - 對于大型數(shù)據(jù)庫,合理的?
WHERE
?子句條件可以顯著提高查詢性能,因為它允許數(shù)據(jù)庫系統(tǒng)更有效地定位和檢索數(shù)據(jù)。 - 在某些情況下,
WHERE
?子句可以與?GROUP BY
、HAVING
?等子句結(jié)合使用,以實現(xiàn)更復雜的查詢和數(shù)據(jù)聚合。然而,WHERE
?子句在數(shù)據(jù)分組之前過濾記錄,而?HAVING
?子句在數(shù)據(jù)分組之后過濾分組。
SELECT column_name(s)
FROM table_name
WHERE column_name REGEXP pattern;
REGEXP
(或其變種,如RLIKE
,具體取決于數(shù)據(jù)庫系統(tǒng))是一個強大的文本搜索模式匹配操作符,它允許你使用正則表達式(Regular Expressions)來搜索數(shù)據(jù)庫中的文本數(shù)據(jù)。正則表達式是一種特殊的文本字符串,用于描述搜索文本時應該匹配的模式。它們非常靈活,可以匹配復雜的文本模式,包括字符序列、字符選擇、重復模式等。
- 性能:使用
REGEXP
可能會影響查詢性能,特別是在大型數(shù)據(jù)集上。優(yōu)化你的正則表達式和索引(如果可能的話)可以幫助減輕這種影響。 - 數(shù)據(jù)庫支持:并非所有數(shù)據(jù)庫系統(tǒng)都支持
REGEXP
或類似的功能。例如,SQL Server 使用?LIKE
?和一些擴展的通配符功能,但不直接支持正則表達式。然而,SQL Server 2016及更高版本引入了TRANSLATE
和STRING_SPLIT
等函數(shù),以及CLR
集成,可以間接實現(xiàn)正則表達式功能。對于復雜的正則表達式匹配,你可能需要求助于數(shù)據(jù)庫外的處理(如應用程序代碼)。 - 語法差異:不同的數(shù)據(jù)庫系統(tǒng)(如MySQL、PostgreSQL、Oracle等)在
REGEXP
的語法和支持的正則表達式特性上可能存在差異。因此,在將REGEXP
查詢從一個數(shù)據(jù)庫遷移到另一個數(shù)據(jù)庫時,需要特別注意。
正則表達式
^:表示一個字符串或行的開頭
[a-z]:表示一個字符范圍,匹配從 a 到 z 的任何字符。
[0-9]:表示一個字符范圍,匹配從 0 到 9 的任何字符。
[a-zA-Z]:這個變量匹配從 a 到 z 或 A 到 Z 的任何字符。請注意,你可以在方括號內(nèi)指定的字符范圍的數(shù)量沒有限制,您可以添加想要匹配的其他字符或范圍。
[^a-z]:這個變量匹配不在 a 到 z 范圍內(nèi)的任何字符。請注意,字符 ^ 用來否定字符范圍,它在方括號內(nèi)的含義與它的方括號外表示開始的含義不同。
[a-z]*:表示一個字符范圍,匹配從 a 到 z 的任何字符 0 次或多次。
[a-z]+:表示一個字符范圍,匹配從 a 到 z 的任何字符 1 次或多次。
.:匹配任意一個字符。
\.:表示句點字符。請注意,反斜杠用于轉(zhuǎn)義句點字符,因為句點字符在正則表達式中具有特殊含義。還要注意,在許多語言中,需要轉(zhuǎn)義反斜杠本身,因此需要使用\\.。
$:表示一個字符串或行的結(jié)尾。
需求
表:?Users
+---------------+---------+ | Column Name | Type | +---------------+---------+ | user_id | int | | name | varchar | | mail | varchar | +---------------+---------+ user_id 是該表的主鍵(具有唯一值的列)。 該表包含了網(wǎng)站已注冊用戶的信息。有一些電子郵件是無效的。
編寫一個解決方案,以查找具有有效電子郵件的用戶。
一個有效的電子郵件具有前綴名稱和域,其中:
前綴?名稱是一個字符串,可以包含字母(大寫或小寫),數(shù)字,下劃線?'_'
?,點?'.'
?和/或破折號?'-'
?。前綴名稱?必須?以字母開頭。
域?為?'@leetcode.com'
?。
以任何順序返回結(jié)果表。
結(jié)果的格式如以下示例所示:
示例
輸入: Users 表: +---------+-----------+-------------------------+ | user_id | name | mail | +---------+-----------+-------------------------+ | 1 | Winston | winston@leetcode.com | | 2 | Jonathan | jonathanisgreat | | 3 | Annabelle | bella-@leetcode.com | | 4 | Sally | sally.come@leetcode.com | | 5 | Marwan | quarz#2020@leetcode.com | | 6 | David | david69@gmail.com | | 7 | Shapiro | .shapo@leetcode.com | +---------+-----------+-------------------------+ 輸出: +---------+-----------+-------------------------+ | user_id | name | mail | +---------+-----------+-------------------------+ | 1 | Winston | winston@leetcode.com | | 3 | Annabelle | bella-@leetcode.com | | 4 | Sally | sally.come@leetcode.com | +---------+-----------+-------------------------+ 解釋: 用戶 2 的電子郵件沒有域。 用戶 5 的電子郵件帶有不允許的 '#' 符號。 用戶 6 的電子郵件沒有 leetcode 域。 用戶 7 的電子郵件以點開頭。
分析
編寫一個解決方案,以查找具有有效電子郵件的用戶。
需要查找具有符合要求的電子郵件的用戶,輸出對應的用戶id,用戶名和郵箱,
一個有效的電子郵件具有前綴名稱和域,其中:
前綴?名稱是一個字符串,可以包含字母(大寫或小寫),數(shù)字,下劃線?
'_'
?,點?'.'
?和/或破折號?'-'
?。前綴名稱?必須?以字母開頭。域?為?
'@leetcode.com'
?。
通過where mail regexp +正則表達式檢索
^:表示一個字符串或行的開頭
$:表示一個字符串或行的結(jié)尾
要求,前綴名稱?必須?以字母開頭,不限制大小寫,所以^[a-zA-Z]
可以包含字母(大寫或小寫),數(shù)字,下劃線?'_'
?,點?'.'
?和破折號?'-'
?,所以^[a-zA-Z]+[a-zA-Z0-9_.-]*,這里面包含小寫字母、大寫字母、數(shù)字、下劃線?'_'
?、點?'.'
?和破折號?'-'。其中
[xxx]*表示一個字符范圍,匹配從 a 到 z 的任何字符 0 次或多次。
域?為?
'@leetcode.com'
后綴或者域為'@leetcode.com',需要寫作
@leetcode\\.com,然后用$結(jié)尾
其中\(zhòng).:表示句點字符。請注意,反斜杠用于轉(zhuǎn)義句點字符,因為句點字符在正則表達式中具有特殊含義。還要注意,在許多語言中,需要轉(zhuǎn)義反斜杠本身,因此需要使用\\.。
最終就是where mail regexp '^[a-zA-Z][a-zA-Z0-9_.-]*@leetcode\\.com$'
代碼
select *
from Users
where mail regexp '^[a-zA-Z][a-zA-Z0-9_.-]*@leetcode\\.com$'