首頁  >  文章  >  資料庫  >  mysql中exists的用法是什麼

mysql中exists的用法是什麼

WBOY
WBOY原創
2022-01-05 09:47:0230698瀏覽

在mysql中,exists用於檢查子查詢是否至少會傳回一行數據,該子查詢實際上並不會傳回任何數據,而是傳回true或false,語法為「SELECT 欄位FROM table WHERE EXISTS (subquery);」。

mysql中exists的用法是什麼

本教學操作環境: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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn