欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL高級進階sql語句總結大全

 更新時間:2022年03月15日 11:45:59   作者:瘋狂的斯圖卡  
這篇文章主要給大家介紹了關于MySQL高級進階sql語句的相關資料,文中通過圖文以及實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

以下兩個表格做講解

SELECT

SELECT "字段" FROM "表名";
SELECT Store_Name FROM Store_Info;
顯示表格中的一個或數(shù)個字段的所有數(shù)據(jù)記錄

DISTINCT

SELECT DISTINCT "字段" FROM "表名";
select distinct store_name from store_info;
不顯示重復的數(shù)據(jù)記錄

WHERE

SELECT "字段" FROM "表名" WHERE "條件";
查找store_info 表中 符號sales=700條件 的 store_name字段
有條件查詢

AND OR

SELECT "字段" FROM "表名" WHERE "條件1" 
select store_name,sales,date from store_info where sales > 1000 or (sales < 500 and sales > 200);
且 或

IN

SELECT "字段" FROM "表名" WHERE "字段" BETWEEN ('值1' AND '值2',...);
select * from store_info where store_name in ('Houston','Los Angeles');
顯示已知的值的數(shù)據(jù)記錄

BETWEEN

SELECT "字段" FROM "表名" WHERE "字段" BETWEEN '值1' AND '值2';
select * from store_info where sales between 200 and 500;
顯示兩個值范圍

通配符

% ;百分號表示零個,一個或多個字符
_ :下劃線表示單個字符

'A_Z':所有以‘A'起頭,另一個任何值的字符,且以‘Z為結尾的字符串。如,'ABZ’和'A2Z′都符合這一個模式,而'AKKZ'并不符合(因為在A和Z之間有兩個字符,而不是一個字符)。

'ABC%':所有以 'ABC’起頭的字符串。例如,'ABCD’和'ABCABC’都符合這個模式。
'%XYZ':所有以'XYZ’結尾的字符串。例如,'WXYZ’和‘ZZXYZ’都符合這個模式。
'%AN%':所有含有 'AN'這個模式的字符串。例如,'LOS ANGELES’和 'SAN FRANCISCo’都符合這個模式。
'_AN%':所有第二個字母為'A′和第三個字母為'N’的字符串。例如,'SAN FRANCIScO’符合這個模式,而'LoS ANGELES'則不符合這個模式。

LIke

SELECT "字段" FROM "表名" WHERE"字段" LIKE {模式};
select * from store_info where store_name like '%os%';
匹配一個模式來找出我們要的數(shù)據(jù)記錄

ORDER BY

SELECT "字段" FROM "表名" [WHERE "條件"] ORDER BY "字段" [ASC,DESC];
select * from store_info order by sales;
select * from store_info order by sales desc;
#ASC 是按照升序進行排序的,是默認的排序方式。
#DESC 是按降序方式進行排序

函數(shù)

數(shù)學函數(shù);

abs (x)                           返回x的絕對值

rand ()                           返回o到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...)                   返回集合中最小的值

聚合函數(shù):
avg ()                            返回指定列的平均值

count ()                          返回指定列中非NULL值的個數(shù)

min ()                            返回指定列的最小值

max ()                            返回指定列的最大值

sum (x)                           返回指定列的所有值之和

city表格

#count(*)包括了所有的列的行數(shù),在統(tǒng)計結果的時候,不會忽略列值為NULL
#count(列名)只包括列名那一列的行數(shù),在統(tǒng)計結果的時候,會忽略列值為NULL的行

字符串函數(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和y,返回的值可以為-1,0,1

reverse (x)					將字符串x反轉

常用函數(shù)實例:

concat

如果sql_mode開啟了PIPES_AS_CONCAT,’||’ 視為字符串的連接操作符而非或運算符,和字符串的拼接函數(shù)Concat相類似,這和Oracle相類似,這和Oracle數(shù)據(jù)庫使用方法一樣

substr

trim

region

replace

group by

select "字段1",sum("字段2") from "表名" group by "字段1";
group by 有一個原則,就是select后面的所有列中,沒有使用聚合函數(shù)的列,必須出現(xiàn)在group by后面

having

用來過來由group by 語句返回的記錄集,通常與group by 語句聯(lián)合使用
having 語句的存在彌補了where關鍵字不能與聚合函數(shù)聯(lián)合使用的不足,如果被select的只有函數(shù)欄,那就不需要group by子句

別名

select "表格別名"."字段一" [AS] "字段別名" from "表格名" [AS] "表格別名";
字段別名,表格別名

子查詢

select "字段1" from "表格" where "字段2" [比較運算符]     #外查詢
select "字段1" from "表格2" where "條件";
連接表格,在where 子句或 having 子句中插入另一個 sql語句
可以是符號的運算符,例如 = > < <= >=  也可以文字的運算符 例如 LIKE IN BETWEEN

exists

用來測試內(nèi)查詢有沒有產(chǎn)生任何結果,類似布爾值是否為真
#如果有的話,系統(tǒng)就會執(zhí)行外查詢中的SQL語句,若是沒有的話,那整個SQL語句就不會產(chǎn)生任何結果。
語法:SELECT "字段1" from "表格1" where exists (SELECT * FROM "表格2" WHERE "條件");
SELECT SUM(Sales) FROM Store_Info WHERE EXISTS (SELECT * FROM location WHERE Region = 'West');

表鏈接

以下兩表做實驗

inner join(內(nèi)連接): 只返回兩個表中聯(lián)結字段相等的行
left join(左連接):返回包括左表中的所有記錄和右表中聯(lián)結字段相等的記錄
right join (右連接):返回包括右表中的所有記錄和左表中聯(lián)結字段相等的記錄

使用子查詢實現(xiàn)多表查詢

create view

視圖,可以當作是虛擬表或存儲查詢
視圖跟表格的不同是,表格中有實際儲存數(shù)據(jù)記錄,而視圖是建立在表格之上的一個架構,它本身并不實際儲存數(shù)據(jù)記錄。臨時表在用戶退出或同數(shù)據(jù)庫的連接斷開后就自動消失了,而視圖不會消失。
視圖不含有數(shù)據(jù),只存儲它的定義,它的用途一般可以簡化復雜的查詢。比如你要對幾個表進行連接查詢,而且還要進行統(tǒng)計排序等操作,寫SQL語句會很麻煩的,用視圖將幾個表聯(lián)結起來,然后對這個視圖進行查詢操作,就和對一個表查詢一樣,很方便。
視圖表不會像臨時表一樣,斷開連接后自動消失
視圖表保存的是select 語句查詢的結果,它本身不存儲數(shù)據(jù)
當視圖表的結構跟存儲數(shù)據(jù)的原始表結構相同則可以修改或插入數(shù)據(jù),如果不一樣則不能修改或插入數(shù)據(jù)(比如多表連接查詢的結果)

union

union:生成結果的數(shù)據(jù)記錄值將沒有重復,且按照字段的順序進行排序
語法:[select 語句1] union [select 語句2];

union all:將生成結果的數(shù)據(jù)記錄值都列出來,無論有多少重復
語法:[select 語句1] union all [select 語句2];

交集值

取兩個SQL語句結果的交集
select A.store_name from location A inner join store_info B on A.store_name=B.store_name;

select A.store_name from location A inner join store_info B using(store_name);

兩表其中的一個表沒有指定的行,而另一個表這個行有重復不適用,要求兩個表確實有交集的行的時候用

取兩個SQL語句結果的交集,且沒有重復

無交集值

顯示第一個SQL語句的結果,且與第二個SQL語句沒有交集的結果,且沒有重復

case

是SQL用來做為 if-then-else 之類邏輯的關鍵字
語法:select casd("字段名")
       when "條件1" then "結果2"
       when "條件2" then "結果2"
       ....
       [else "結果N"]
       end
from "表名";

#條件可以是一個數(shù)值或公式。else 子句并不是必須的

空值(null) 和無值(’ ') 的區(qū)別

1.無值的長度為0,不占用空間的;而 NULL值的長度是NULL,是占用空間的。
2.IS NULL或者 IS NoT NULL,是用來判斷字段是不是為NULL或者不是 NULL,
                                            不能查出是不是無值的。
3.無值的判斷使用=''或者<>''來處理。<>代表不等于。
4.在通過 count()指定字段統(tǒng)計有多少行數(shù)時,如果遇到NULL值會自動忽略掉,遇到無值會加入到記錄中進行計算。

正則表達式 

匹配模式描述實例
^匹配文本的開始字符‘^bd’ 匹配以bd開頭的字符串
$匹配文本的結束字符‘qn$’ 匹配以qn結尾的字符串
.匹配任何單個字符's.t’匹配任何s和t之間有一個字符的字符串
*匹配零個或多個在它前面的字符‘fo*t’ 匹配t前面有任意個o
+匹配前面的字符1次或多次‘hom+’ 匹配ho開頭,后面至少一個m的字符串
字符串匹配包含指定的字符串‘clo’ 匹配含有clo的字符串
p1|p2匹配p1或p2‘bg | fg’ 匹配bg或fg
[…]匹配字符集合中的任意一個字符‘[abc]’ 匹配a或b或c
[^…]匹配不在括號中的任何字符‘[ ^ ab]’ 匹配不含a或b的字符串
{n}匹配前面的字符串n次‘g{2}’ 匹配含有2個g的字符串
{n,m}匹配前面的字符串至少n次,至多m次‘f{1,3}’ 匹配f最少1次 最多3次

語法:select "字段" from "表名" where "字段" regexp {模式};

存儲過程

存儲過程是一組為了完成特定功能的SQL語句集合。
存儲過程在使用過程中是將常用或者復雜的工作預先使用SQL語句寫好并用一個指定的名稱存儲起來,這個過程經(jīng)編譯和優(yōu)化后存儲在數(shù)據(jù)庫服務器中。當需要使用該存儲過程時,只需要調用它即可。存儲過程在執(zhí)行上比傳統(tǒng)SQL速度更快、執(zhí)行效率更高。

存儲過程的優(yōu)點:
1、執(zhí)行一次后,會將生成的二進制代碼駐留緩沖區(qū),提高執(zhí)行效率
2、SQL語句加上控制語句的集合,靈活性高
3、在服務器端存儲,客戶端調用時,降低網(wǎng)絡負載
4、可多次重復被調用,可隨時修改,不影響客戶端調用
5、可完成所有的數(shù)據(jù)庫操作,也可控制數(shù)據(jù)庫的信息訪問權限

創(chuàng)建存儲過程

delimiter $$			##將語句的結束符號從分號;臨時改為兩個$$ 可以自定義
create procedure proc() ##創(chuàng)建存儲過程,過程名為proc,不帶參數(shù)
           
-> begin                ##過程體以關鍵字 begin 開始

-> select * from Store_info; ##過程體語句
-> end $$                    ##過程體以關鍵字 end結束
delimiter;					 ##將語句的結束符號恢復為分號

call proc					##調用存儲過程

show create procedure [數(shù)據(jù)庫.]存儲過程名;

存儲過程的參數(shù)

in 輸入?yún)?shù):表示調用折向過程傳入值(傳入值可以是字面量或變量)
out 輸出參數(shù):表示過程向調用者傳出值(可以返回多個值)(傳出值只能是變量)
inout 輸入輸出參數(shù):即表示調用者向過程傳入值,又表示過程向調用者傳出值(值只能是變量)

查看存儲過程

show create procedure [數(shù)據(jù)庫.]存儲過程名;

刪除存儲過程

存儲過程內(nèi)容的修改方法是通過刪除原有存儲過程,之后再以相同的名詞創(chuàng)建新的存儲過程
drop procedure if exists Proc;
#僅當存在時刪除,不添加 if exists時,如果指定的過程不存在,則產(chǎn)生一個錯誤
 drop procedure proc1;

存儲過程的控制語句

(1) 條件語句 if-then-else …end if

 delimiter $$
 create procedure proc2(in num int) 
 begin
 declare var int;
 set var=num*2;
 if var >= 10 then 
 update t set id=id+1; 
 else
 update t set id=id-1; 
 end if; 
 end$$

(2)循環(huán)語句while… end while

總結 

到此這篇關于MySQL高級進階sql語句的文章就介紹到這了,更多相關Mysql高階sql語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • windows server 2008 64位MySQL5.6免安裝版本配置方法圖解

    windows server 2008 64位MySQL5.6免安裝版本配置方法圖解

    這篇文章主要介紹了windows server 2008 64位MySQL5.6免安裝版本配置方法圖解,需要的朋友可以參考下
    2017-08-08
  • Mysql sql慢查詢監(jiān)控腳本代碼實例

    Mysql sql慢查詢監(jiān)控腳本代碼實例

    這篇文章主要介紹了Mysql sql慢查詢監(jiān)控腳本代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • MySQL存儲引擎應用場景MyISAM?vs?InnoDB優(yōu)勢選擇

    MySQL存儲引擎應用場景MyISAM?vs?InnoDB優(yōu)勢選擇

    這篇文章主要為大家介紹了MySQL存儲引擎應用場景MyISAM?vs?InnoDB優(yōu)勢選擇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 解決Node.js mysql客戶端不支持認證協(xié)議引發(fā)的問題

    解決Node.js mysql客戶端不支持認證協(xié)議引發(fā)的問題

    這篇文章主要介紹了解決Node.js mysql客戶端不支持認證協(xié)議引發(fā)的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,,需要的朋友可以參考下
    2019-06-06
  • mysql 常用命令集錦[絕對精華]

    mysql 常用命令集錦[絕對精華]

    測試環(huán)境:mysql 5.0.45 【注:可以在mysql中通過mysql> SELECT VERSION();來查看數(shù)據(jù)庫版本】
    2009-06-06
  • mysql自定義函數(shù)原理與用法實例分析

    mysql自定義函數(shù)原理與用法實例分析

    這篇文章主要介紹了mysql自定義函數(shù),結合實例形式分析了mysql自定義函數(shù)基本功能、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • mysql中插入emoji表情失敗的原因與解決

    mysql中插入emoji表情失敗的原因與解決

    這篇文章主要給大家介紹了關于mysql中插入emoji表情失敗的原因與解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • MySQL如何快速定位慢SQL的實戰(zhàn)

    MySQL如何快速定位慢SQL的實戰(zhàn)

    在項目中我們會經(jīng)常遇到慢查詢,當我們遇到慢查詢的時候一般都要開啟慢查詢?nèi)罩荆疚闹饕榻B了MySQL如何快速定位慢SQL的實戰(zhàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • MySQL對window函數(shù)執(zhí)行sum函數(shù)可能出現(xiàn)的一個Bug

    MySQL對window函數(shù)執(zhí)行sum函數(shù)可能出現(xiàn)的一個Bug

    這篇文章主要給大家介紹了關于MySQL對window函數(shù)執(zhí)行sum函數(shù)可能出現(xiàn)的一個Bug,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用MySQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-07-07
  • MySQL之information_schema數(shù)據(jù)庫詳細講解

    MySQL之information_schema數(shù)據(jù)庫詳細講解

    這篇文章主要介紹了MySQL之information_schema數(shù)據(jù)庫詳細講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評論