in 子查詢:巢狀查詢(重點是思路)
為什麼要用in?
in 在數值上相當於『=』但是它可以查詢到更多的符合條件的結果,等於號只可以查詢乙個結果
question:
有兩種方法:
第一種:使用子查詢替換表連線:
使用 inner join 將表與表之間聯動,再將實現條件依次寫出來
第二種:採用子查詢:
在where那裡新增select兩表聯動通過studentno找出條件滿足的學生
select 列名(最終要查詢的)from 表名 where 條件1(select from where)and 條件2(select from where);
資料庫優化的方式 和l語句優化方式:
資料庫優化方式:1.選取最適用的字段屬性2.使用連線(inner join)來代替子查詢3.使用聯合(union)來代替手動建立的臨時表.4使用外來鍵5使用索引
sql語句優化方式:1.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。
2.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,如:
select id from t where num is null
可以在num上設定預設值0,確保表中num列沒有null值,然後這樣查詢:
select id from t where num=0
3.應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃瞄。
4.應盡量避免在 where 子句中使用 or 來連線條件,否則將導致引擎放棄使用索引而進行全表掃瞄,如:
select id from t where num=10 or num=20
可以這樣查詢:
select id from t where num=10
union all
select id from t where num=20
5.in 和 not in 也要慎用,否則會導致全表掃瞄,如:
select id from t where num in(1,2,3)
對於連續的數值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3
6.下面的查詢也將導致全表掃瞄:
select id from t where name like '%abc%'
7.應盡量避免在 where 子句中對字段進行表示式操作,這將導致引擎放棄使用索引而進行全表掃瞄。如:
select id from t where num/2=100
應改為:
select id from t where num=100*2
mysql 高階 查詢 MYSQL中的高階查詢
1.1.子查詢 1.1.1.在房屋型別中,如何找出比雙人間貴的所有房屋型別?找到雙人間的 根據第一步找到的 作為查詢條件去查滿足條件的房屋型別,利用where字句 子查詢是乙個巢狀在 select insert update 或 delete 語句或其他子查詢中的查詢 子查詢在where語句中的一般...
Mysql高階查詢
if expr1,expr2,expr3 如果 expr1 是true 則 if 的返回值為expr2 否則返回值則為 expr3。如 select if status 0 and status promotion 1,1,2 as status from my table ifnull expr1...
mysql 高階查詢
1 巢狀子查詢和相關子查詢 子查詢 1 乙個詢語句中還包含其他查詢。其中包含其他查詢的查詢叫父查詢,被包含的查詢叫子查詢。2 子查詢也可以和update insert delete一起使用,語法類似於select語句 3 子查詢中可以再包含子查詢,即允許多層巢狀。select from studen...