MySQL資料庫 組合查詢

2021-08-13 20:38:14 字數 1393 閱讀 7486

這一次說下如何利用union操作符實現組合查詢,即將多條select語句組合成乙個結果集。

我們目前每次使用資料庫查詢都是用單個select來用的,但是mysql也允許執行多個查詢,就是說多個select,但是是乙個結果集。這樣的組合查詢稱為並(union),也叫復合查詢。

有兩種情況,我們需要用到組合查詢:

1.在單個查詢中從不同的表返回類似結構的資料;

2.對單個表執行多個查詢,按單個查詢返回資料;

tip: 組合查詢和多個where條件 。 我們可以發現,多數情況下,組合相同表的兩個查詢和多個where子句條件的單select查詢功能類似。但是從效能上講,我們可以實驗一下,看看哪個更好。

part 1 建立組合查詢

可用union操作符來組合多條sql語句。

select coder.name from coder union

select git.name from git;

可以看見,這條語句由前面兩條select語句組成,語句中用union關鍵字分隔。

union只是mysql執行兩條select語句,並把輸出組合成單個查詢結果集。

part 2 組合查詢的union的規則

1.union必須由兩條或兩條以上的select語句組成,語句之間用關鍵字union分隔,所以說如果是4條select語句,需要使用三個union關鍵字。

2.union中每個select查詢必須包含相同的列、表示式或聚集函式,不過各列不必以相同的順序出現。

3.列資料型別必須相容,就是說型別不必完全相同,但是必須是資料庫可以隱含轉換的型別。

part 3 包含或取消重複的行

不過說 我們只要改一下剛剛的例子就可以

select coder.name from coder union

allselect git.name from git;

在上面返回的結果集中,會發現他是包含重複name行地! 就是說,我們union查詢在結果集中預設去除了重複的行,這是預設行為,但是如果需要我們可以改變他,我們可以用union all返回所有匹配的行。

part 4 對組合查詢結果進行排序

我們還是看例子吧:

select coder.name from coder union

allselect git.name from git order

by name;

在union組合查詢中,只能使用一條order by子句,他必須出啊現在最後一條select語句之後。 但是這個排序是作用於最終的結果集地,不存在排序一部分的問題,也不能使用多條 order by 子句。

資料庫組合查詢

在使用資料庫的過程中,資料的查詢是使用最多的,所以,資料的精確查詢是乙個很重要的問題。以前的資料查詢是最簡單的資料查詢,也從來沒想過組合查詢的問題,可是在做機房收費系統的時候,遇到了乙個很大的問題,當三個條件隨意組合的時候,會出現7中組合情況。具體問題,見下圖 首先,當連線資料庫時,必須要用到查詢條...

資料庫組合查詢和模糊查詢

搜尋條件 排序 得到所有捲菸 param is promote 0表示是 1表示捲菸列表 param pricevalues 排序 1 降序,2公升序 param price 批發價 預設為 不限 param cigarettefactory 菸廠 預設為 不限 param activity 活動 ...

mysql資料庫查詢作業 mysql資料庫查詢練習

建立四張資料表 學生表student 學號,姓名,性別,出生年月日,所在班級 課程表course 課程號,課程名,教師編號 成績表score 學號,課程號,成績 教師表teacher 教師編號,教師名,教師性別,出生年月日,職稱,所在部門 新增資訊 學生表 insert into student v...