在連線查詢中一直要遵守的乙個原則就是:小表驅動大表原則
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...