1、exists的返回結果是bool型,只有true或者false
如 select * from alumni_info t where exists(select a_id from alumni_education e where e.a_id=』6588′ ),返回的結果跟select * from alumni_info t一樣(a_id=6588存在),因為select語句先執行where條件後的語句,再篩選字段,當執行完where條件後,若這條結果集存在,則where表示式後面永遠都是true,否則為false。也就是說要麼查詢所有,要麼沒有資料。那麼我只想查校友id,為6588的校友,使用exists該怎麼寫,經過一番測試,內查詢中的id,必須為外查詢的id,即select * from alumni_info t where exists(select a_id from alumni_education e where t.id_=』6588′ ),ok,完事.
2、如果我想查詢所有教育經歷的校友,使用exists實現,當然用in實現也一樣,不過效率低點 select * from alumni_info t where exists(select a_id from alumni_education e where e.a_id=t.id_ )
3、exists的效率比in查詢要高,因為in不走索引,但要看實際情況具體使用,in適合於外表資料量大而內錶資料小的情況;exists適合於外表小而內錶大的情況
select sname=「張三」 from student s where exists(select tname,sname from student,teacher where teacher_id=student_id)
有趣的是,mysql內部優化器會把第一條使用 in 的語句轉化為第二條使用 exists 的語句執行。執行的結果當然就是一樣的了。
二、mysql函式 :date_format(date,format) 根據format字串格式化date值。下列修飾符可以被用在format字串中: %m 月名字(january……december)
%m 月, 數字(01……12)
三、ifnull() 函式 :用於判斷第乙個表示式是否為 null,如果為 null 則返回第二個引數的值,如果不為 null 則返回第乙個引數的值。 ifnull() 函式語法格式為:
四、left join a表全部和ab表的交集 inner join ab表的交集 right join b表全部和ab表的交集
left join 中的on只是對區域性條件做限制 而where是對全域性做限制,什麼是全域性做限制呢,也就是相當於,對最後查詢出來的整個結果做限制 where加上就相當於對這個結果集再次進行限制
五、limit 50 查詢前50條資料 但是還是進行了全文索引
六、or運算子 和and運算子
當所列出的某個條件為 true 時,or 運算子會顯示記錄。當列出的所有條件為 true 時,and 運算子會顯示記錄。正確的
select distinctsql 語句可返回唯一不同的值
如何把 「persons」 表中 「lastname」 列的 「gates」 改為 「wilson」
update persons set lastname=』wilson』 where lastname=』gates』
mysql資料庫常用SQL語句
1.給資料庫新增乙個字段 alter table pre common member field home 表名 add stickblogs 欄位名 varchar 50 資料型別 2.刪除資料庫的乙個字段 alter table param info 表名 drop column channel...
MySQL資料庫SQL語句小結
資料庫指的是檔案的集合,操作這個集合需要用到sql語句,sql語句是由socket連線的。一,啟動資料庫 linux下啟動伺服器程序 進入管理員身份,執行 service mysqld start,然後執行 mysql u root p,如果有密碼的話則輸入密碼,無密碼就直接enter。由上圖資訊可...
mysql資料庫sql語句優化
昨天幫同事優化了乙個sql語句發出來共勉下 select t.select s.codename from sys codelist s where s.codevalue t.packagingtype and s.kindcode packaging as packagingtypename,s...