mysql高階查詢in MySQL高階查詢(一)

2021-10-19 00:17:07 字數 1382 閱讀 2141

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...