)
一、MySQL 高級SQL 語句
1.1select -顯示表格中一個或數(shù)個字段的所有數(shù)據(jù)記錄
語法:SELECT "字段" FROM "表名";
SELECT Store_Name FROM Store_Info;
1.2distinct不顯示重復的數(shù)據(jù)記錄
語法:SELECT DISTINCT "字段" FROM "表名";
SELECT DISTINCT Store_Name FROM Store_Info;
1.3where有條件查詢
語法:SELECT "字段" FROM "表名" WHERE "條件";
SELECT Store_Name FROM Store_Info WHERE Sales > 1000;
1.4and、or且 或
語法:SELECT "字段" FROM "表名" WHERE "條件1" {[AND|OR] "條件2"}+ ;
SELECT Store_Name FROM Store_Info WHERE Sales > 1000 OR (Sales < 500 AND Sales > 200);
1.5in 顯示已知的值的數(shù)據(jù)記錄
語法:SELECT "字段" FROM "表名" WHERE "字段" IN ('值1', '值2', ...);
SELECT * FROM Store_Info WHERE Store_Name IN ('Los Angeles', 'Houston');
1.6between 顯示兩個值范圍內(nèi)的數(shù)據(jù)記錄
語法:SELECT "字段" FROM "表名" WHERE "字段" BETWEEN '值1' AND '值2';
SELECT * FROM Store_Info WHERE Date BETWEEN '2020-12-06' AND '2020-12-10';
1.7通配符,通常通配符都是跟 like 一起使用的
- % :百分號表示零個、一個或多個字符
- _ :下劃線表示單個字符
- ‘A_Z’:所有以 ‘A’ 起頭,另一個任何值的字符,且以 ‘Z’ 為結(jié)尾的字符串。例如,‘ABZ’ 和 ‘A2Z’ 都符合這一個模式,而 ‘AKKZ’ 并不符合 (因為在 A 和 Z 之間有兩個字符,而不是一個字符)。
- ‘ABC%’: 所有以 ‘ABC’ 起頭的字符串。例如,‘ABCD’ 和 ‘ABCABC’ 都符合這個模式。
- ‘%XYZ’: 所有以 ‘XYZ’ 結(jié)尾的字符串。例如,‘WXYZ’ 和 ‘ZZXYZ’ 都符合這個模式。
- ‘%AN%’: 所有含有 'AN’這個模式的字符串。例如,‘LOS ANGELES’ 和 ‘SAN FRANCISCO’ 都符合這個模式。
- ‘_AN%’:所有第二個字母為 ‘A’ 和第三個字母為 ‘N’ 的字符串。例如,‘SAN FRANCISCO’ 符合這個模式,而 ‘LOS ANGELES’ 則不符合這個模式。
- LIKE 匹配一個模式來找出我們要的數(shù)據(jù)記錄
語法:SELECT "字段" FROM "表名" WHERE "字段" LIKE {模式};
SELECT * FROM Store_Info WHERE Store_Name like '%os%';
1.8order by 按關(guān)鍵字排序
語法:SELECT "字段" FROM "表名" [WHERE "條件"] ORDER BY "字段" [ASC, DESC];
#ASC 是按照升序進行排序的,是默認的排序方式。
#DESC 是按降序方式進行排序。
SELECT Store_Name,Sales,Date FROM Store_Info ORDER BY Sales DESC;
二、函數(shù)
2.1數(shù)學函數(shù)
函數(shù) | 解釋 |
---|---|
abs(x) | 返回 x 的絕對值 |
rand() | 返回 0 到 1 的隨機數(shù) |
mod(x,y) | 返回 x 除以 y 以后的余數(shù) |
power(x,y) | 返回 x 的 y 次方 |
round(x) | 返回離 x 最近的整數(shù) |
round(x,y) | 保留 x 的 y 位小數(shù)四舍五入后的值 |
sqrt(x) | 返回 x 的平方根 |
truncate(x,y) | 返回數(shù)字 x 截斷為 y 位小數(shù)的值 |
ceil(x) | 返回大于或等于 x 的最小整數(shù) |
floor(x) | 返回小于或等于 x 的最大整數(shù) |
greatest(x1,x2…) | 返回集合中最大的值,也可以返回多個字段的最大的值 |
least(x1,x2…) | 返回集合中最小的值,也可以返回多個字段的最小的值 |
2.2、聚合函數(shù)
函數(shù) | 解釋 |
---|---|
avg() | 返回指定列的平均值 |
count() | 返回指定列中非 NULL 值的個數(shù) |
min() | 返回指定列的最小值 |
max() | 返回指定列的最大值 |
sum(x) | 返回指定列的所有值之和 |
- #count(*) 包括了所有的列的行數(shù),在統(tǒng)計結(jié)果的時候,不會忽略列值為 NULL
- #count(列名) 只包括列名那一列的行數(shù),在統(tǒng)計結(jié)果的時候,會忽略列值為 NULL 的行
2.3字符串函數(shù)
函數(shù) | 解釋 |
---|---|
trim() | 返回去除指定格式的值 |
concat(x,y) | 將提供的參數(shù) x 和 y 拼接成一個字符串 |
substr(x,y) | 獲取從字符串 x 中的第 y 個位置開始的字符串,跟substring()函數(shù)作用相同 |
substr(x,y,z) | 獲取從字符串 x 中的第 y 個位置開始長度為 z 的字符串 |
length(x) | 返回字符串 x 的長度 |
replace(x,y,z) | 將字符串 z 替代字符串 x 中的字符串 y |
upper(x) | 將字符串 x 的所有字母變成大寫字母 |
lower(x) | 將字符串 x 的所有字母變成小寫字母 |
left(x,y) | 返回字符串 x 的前 y 個字符 |
right(x,y) | 返回字符串 x 的后 y 個字符 |
repeat(x,y) | 將字符串 x 重復 y 次 |
space(x) | 返回 x 個空格 |
strcmp(x,y) | 將字符串 x 反轉(zhuǎn) |
2.3.1trim(),去除指定格式值
SELECT TRIM ([ [位置] [要移除的字符串] FROM ] 字符串);
#[位置]:的值可以為 LEADING (起頭), TRAILING (結(jié)尾), BOTH (起頭及結(jié)尾)。
#[要移除的字符串]:從字串的起頭、結(jié)尾,或起頭及結(jié)尾移除的字符串。缺省時為空格。
2.3.2concat(x,y),將提供的參數(shù) x 和 y 拼接成一個字符串
SELECT concat(Region, Store_Name) FROM location WHERE Store_Name = 'Boston';
2.3.3substr(x,y) 獲取從字符串 x 中的第 y 個位置開始的字符串,跟substring()函數(shù)作用相同
- substr(x,y,z) 獲取從字符串 x 中的第 y 個位置開始長度為 z 的字符串
2.3.4length(x) 返回字符串 x 的長度
SELECT Region,length(Store_Name) FROM location;
2.3.5 II符號的用法
#如sql_mode開啟了PIPES_AS_CONCAT,"||"視為字符串的連接操作符而非或運算符,和字符串的拼接函數(shù)Concat相類似。
SELECT Region || ' ' || Store_Name FROM location WHERE Store_Name = 'Boston';
2.3.6 replace(x,y,z) 將字符串 z 替代字符串 x 中的字符串 y
2.4 sql語句執(zhí)行的優(yōu)先級
FROM
<left table>
ON
<join_condition>
<join_type>
JOIN
<right_table>
WHERE
<where condition>
GROUP BY
<group_by_list>
HAVING
<having_condition>
SELECT
DISTINCT
<select list>
ORDER BY
<order_by_condition>
LIMIT
<limit number
2.4 GROUP BY,匯總分組
對GROUP BY后面的字段的查詢結(jié)果進行匯總分組,通常是結(jié)合聚合函數(shù)一起使用的
GROUP BY 有一個原則,凡是在 GROUP BY 后面出現(xiàn)的字段,必須在 SELECT 后面出現(xiàn);
凡是在 SELECT 后面出現(xiàn)的、且未在聚合函數(shù)中出現(xiàn)的字段,必須出現(xiàn)在 GROUP BY 后面
2.5 HAVING用來過濾由 GROUP BY 語句返回的記錄集
- HAVING ----用來過濾由 GROUP BY 語句返回的記錄集,通常與 GROUP BY 語句聯(lián)合使用
HAVING 語句的存在彌補了 WHERE 關(guān)鍵字不能與聚合函數(shù)聯(lián)合使用的不足。 - where執(zhí)行優(yōu)先級在group by前面所有不能對group by語句返回的記錄做過濾所以需要having
語法:SELECT "字段1", SUM("字段2") FROM "表格名" GROUP BY "字段1" HAVING (函數(shù)條件);
SELECT Store_Name, SUM(Sales) FROM Store_Info GROUP BY Store_Name HAVING SUM(Sales) > 1500;
2.6別名,字段別名,表格別名
語法:SELECT "表格別名"."字段1" [AS] "字段別名" FROM "表格名" [AS] "表格別名";
SELECT A.Store_Name Store, SUM(A.Sales) "Total Sales" FROM Store_Info A GROUP BY A.Store_Name;
2.7子查詢(連接表格)
語法:SELECT "字段1" FROM "表格1" WHERE "字段2" [比較運算符] #外查詢
(SELECT "字段1" FROM "表格2" WHERE "條件"); #內(nèi)查詢
#可以是符號的運算符,例如 =、>、<、>=、<= ;也可以是文字的運算符,例如 LIKE、IN、BETWEEN
SELECT SUM(Sales) FROM Store_Info WHERE Store_Name IN
(SELECT Store_Name FROM location WHERE Region = 'West');
SELECT SUM(A.Sales) FROM Store_Info A WHERE A.Store_Name IN
(SELECT Store_Name FROM location B WHERE B.Store_Name = A.Store_Name);
文章來源:http://www.zghlxwxcb.cn/news/detail-493749.html
2.8 EXISTS(用來測試內(nèi)查詢有沒有產(chǎn)生任何結(jié)果)
#如果有的話,系統(tǒng)就會執(zhí)行外查詢中的SQL語句。若是沒有的話,那整個 SQL 語句就不會產(chǎn)生任何結(jié)果。
語法:SELECT "字段1" FROM "表格1" WHERE EXISTS (SELECT * FROM "表格2" WHERE "條件");
SELECT SUM(Sales) FROM Store_Info WHERE EXISTS (SELECT * FROM location WHERE Region = 'West');
文章來源地址http://www.zghlxwxcb.cn/news/detail-493749.html
到了這里,關(guān)于【MySQL數(shù)據(jù)庫】MySQL 高級SQL 語句一的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!