MySQL之連線查詢

2021-09-27 09:51:28 字數 1763 閱讀 7282

在連線查詢中一直要遵守的乙個原則就是:小表驅動大表原則

union操作符主要用來連線兩個以上的select語句的結果組合到乙個結果集合中。多個select語句會刪除重複資料

可選關鍵字:

distinct:可選,去除重複資料,但是union本身會去除重複資料,所以 distinct對結果沒啥影響

all:可選,結果集中包含重複資料

注意:被連線的兩個select的列數必須相同語法格式:

select expression1, expression2,..

. expression_n

from

tables

[where conditions]

union

[all

|distinct

]select expression1, expression2,..

. expression_n

from

tables

[where conditions]

;

關於in

1>in的操作在記憶體中執行

2>in適合「外大內小」的查詢

3> 例子:

select

*from score where score.stu_id in(

select id from student where student.id = score.stu_id)

;

執行過程:
list result =

newarraylist()

;string a =

"select * from score"

;string b =

"select id from student"

;for

(int i =

0; i < a.length; i++)}

}

可知,先遍歷外層,再遍歷內層,之後比較條件,若條件滿足則新增結果。若是內層表資料量太多,in就不適合了。例如內層表有10000條,那麼迴圈的次數最多是10000次,若是100條的話最多隻執行100次。效率自然就可知了

關於exists

1>exists在操作中需要查詢資料庫【in是在記憶體操作】

2> exists實際不返回資料,而是返回布林值

3>適合「外小內大」的情況

3> 原理及例子

select

*from student where

exists

(select id from score where score.stu_id = student.id)

執行原理:

string a =

"select * from student"

;list result =

newarraylist()

;for

(int i =

0; i < a.

length()

; i++

)

可知,exists適合表層表比較大的情況,它不需要兩層遍歷,只需要執行一次查詢即可。

當內外表大小接近時用in和exists都可以

mysql內連線查詢之自連線

連線查詢 當查詢資料時,通過連線操作查詢出存放在多個表中的不同資料,當兩個或者多個表中存在相同意義的字段時,便可以通過這些欄位對不同的表進行連線查詢。自連線 如果在乙個連線查詢中,涉及的兩個表都是同乙個表,這種查詢稱為自連線查詢。自連線是一種特殊的內連線,它是指相互連線的表在物理上為同一張表,但可以...

mysql資料查詢之連線查詢

連線查詢概念 1 交叉連線 最後得到的結果是拼在一起的,所謂的笛卡爾積的形式,這個沒什麼用 select from student cross join class 2 內連線 從左表中取出每條資料,和右表中的所有資料進行匹配,當左表和右表的值相同時,結果才保留 select from studen...

mysql連線查詢例項 MySQL連線查詢例項詳解

建立表suppliers create table suppliers s id int not null auto increment,s name char 50 not null,s city char 50 null,s zip char 10 null,s call char 50 not...