在mysql中,exists用於檢查子查詢是否至少會傳回一行數據,該子查詢實際上並不會傳回任何數據,而是傳回true或false,語法為「SELECT 欄位FROM table WHERE EXISTS (subquery);」。
本教學操作環境:windows10系統、mysql8.0.22版本、Dell G3電腦。
mysql中exists的用法是什麼
#語法:
SELECT 字段 FROM table WHERE EXISTS (subquery);
參數:
subquery是一個受限的SELECT語句(不允許COMPUTE子句和INTO關鍵字)
範例:
SELECT * FROM A WHERE EXISTS (SELECT 1 FROM B WHERE B.id = A.id);
EXISTS執行順序:
1、先執行一次外部查詢,並快取結果集,如SELECT * FROM A
2、遍歷外部查詢結果集的每一行記錄R,代入子查詢中作為條件進行查詢,如SELECT 1 FROM B WHERE B.id = A. id
3、如果子查詢有回傳結果,則EXISTS子句傳回TRUE,這一行R可作為外部查詢的結果行,否則不能作為結果
範例如下:
假設現在有三張表:
student:學生表,其中有字段sno為學號,sname為學生姓名
course:課程表,其中有字段cno為課程號,cname為課程名稱
student_course_relation:選課表,記錄學生選擇了哪些課程,其中有字段sno為學號,cno為課程號
下面透過幾個範例來說明EXISTS和NOT EXISTS的用法,及其與IN和NOT IN的區別
1、在子查詢中使用NULL,仍然傳回結果集
下面三種情況回傳資料相同,都會傳回student表的所有資料:
select * from student; select * from student where exists (select 1); select * from student where exists (select null);
2、EXISTS子查詢傳回的是一個布林值true或false
EXISTS用於檢查子查詢是否至少會傳回一行數據,該子查詢實際上不傳回任何數據,而是傳回布林值true或false,EXISTS指定一個子查詢,偵測行的存在。
EXISTS只在乎子查詢中是否有記錄,與特定的結果集無關,所以下面範例中,子查詢中的select sno也可以換成select cno或select 1,查詢出的結果集是一樣的。
查詢所有選修了課程編號為3的學生:
select * from student a where exists (select sno from student_course_relation b where b.cno=3 and b.sno=a.sno); select * from student a where exists (select cno from student_course_relation b where b.cno=3 and b.sno=a.sno); select * from student a where exists (select 1 from student_course_relation b where b.cno=3 and b.sno=a.sno);
推薦學習:mysql影片教學
以上是mysql中exists的用法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!