日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL(八)子查询和分组查询

發(fā)布時(shí)間:2024/2/28 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL(八)子查询和分组查询 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、子查詢

1、子查詢(subquery):嵌套在其他查詢中的查詢。

例如:select user_id from usertable where mobile_no in (select mobile_no from mobile where mobile_id = '10086');

這條SQL語句中,括號(hào)內(nèi)為從mobile表匯總檢索mobile_id為10086的所有行中的mobile_no列,括號(hào)外為從user_table表中檢索mobile_id為10086的所有行中的user_id列;

PS:select語句中,子查詢總是從內(nèi)向外處理(實(shí)際上,MySQL執(zhí)行了2個(gè)select操作),where子句中使用子查詢,必須保證select語句具有與where子句中相同數(shù)目的列;

? 子查詢一般與in操作符結(jié)合使用,但也可用于測(cè)試等于(=)、不等于(<>)等。

格式化SQL:包含子查詢的select語句一般相較來說閱讀和調(diào)試更為不方便,特別是它比較復(fù)雜的情況下,因此把子查詢分解為多行并且適當(dāng)縮進(jìn),能極大的簡(jiǎn)化子查詢的使用。

?

2、使用計(jì)算字段使用子查詢

例如:select user_name,user_id,(select count(*))?

? ? ?from orders where orders_cust_id = usertable_user_id)

? ? ?as orders

? ? ?from usertable

? ? ?order by user_name;

這條SQL語句對(duì)usertable表中每個(gè)用戶返回3列:user_name,user_id和orders,orders是一個(gè)計(jì)算字段,由圓括號(hào)內(nèi)的子查詢建立,它對(duì)檢索出的每個(gè)用戶執(zhí)行一次,

子查詢中where子句它使用了完全限定表名,它告訴SQL比較orders表和usertable表中的user_id列。

相關(guān)子查詢(correlated subquery):涉及外部查詢的子查詢(任何時(shí)候只要列名可能存在多叉性,就必須使用這種語法[表名和列名有一個(gè)句點(diǎn)分隔])。

PS:使用子查詢建立查詢的最可靠方法是逐漸進(jìn)行(首先建立最內(nèi)層的查詢,確認(rèn)后用硬編碼數(shù)據(jù)建立外層查詢,由內(nèi)到外)

?

二、組合查詢

MySQL允許執(zhí)行多個(gè)查詢(多條select語句),并將結(jié)果作為單個(gè)查詢結(jié)果集返回,這些組合查詢稱為并(union)復(fù)合查詢(compound query)

以下兩種基本情況,需要使用組合查詢:

在單個(gè)查詢中從不同表返回類似結(jié)構(gòu)的數(shù)據(jù);

對(duì)單個(gè)表執(zhí)行多個(gè)查詢,按單個(gè)查詢返回?cái)?shù)據(jù);

1、union

union可將多條select語句的結(jié)果組合成單個(gè)結(jié)果集,例子如下

select user_id, mobile_id, mobile_num

from mobiletables

where mobile_num = 10086

union

select user_id, mobile_id, mobile_num

from mobuletables

where user_id in (10000,10010);

這條SQL語句中,union指示MySQL執(zhí)行兩條select語句,并把輸出組合成單個(gè)查詢結(jié)果集。

union使用規(guī)則:

union必須由兩條或以上的select語句組成,語句之間用關(guān)鍵字union分隔;

union中每個(gè)查詢必須包含相同的列、表達(dá)或聚集函數(shù)(各個(gè)列不需要以相同的次序列出);

列數(shù)據(jù)類型必須兼容:類型不用完全相同,但必須是DBMS可以隱含的轉(zhuǎn)換類型;

union自動(dòng)從查詢結(jié)果集中去除重復(fù)的行(這是union的默認(rèn)行為,如果想返回所有匹配行,可使用union all

?

2、union all

union自動(dòng)從查詢結(jié)果集中去除重復(fù)的行,如果想返回所有匹配行,可使用union all;例子如下:

select user_id, mobile_id, mobile_num

from mobiletables

where mobile_num = 10086

union all

select?user_id, mobile_id, mobile_num

from mobuletables

where user_id in (10000,10010);

union和where的區(qū)別:

union幾乎可以完成與多個(gè)where條件相同的工作。union all為union的一種形式,它完成where子句完成不了的工作(如果需要每個(gè)條件匹配行全部出現(xiàn),則必須使用union all)。

?

3、對(duì)組合查詢結(jié)果排序

select語句的輸出用order by子句排序,在用union組合查詢時(shí),只能使用一條order by子句,它必須出現(xiàn)在最后一條select語句之后。

select user_id, mobile_id, mobile_num

from mobiletables

where mobile_num = 10086

union all

select?user_id, mobile_id, mobile_num

from mobuletables

where user_id in (10000,10010)

order by user_id, mobile_num;

MySQL將用它來排序所有的select語句返回的所有結(jié)果。

?

總結(jié)

以上是生活随笔為你收集整理的MySQL(八)子查询和分组查询的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。