SQL中exists及案例練習

一、語法

用exists代替in是SQL性能優化的一個手段,使用exists能提高查詢性能。

EXISTS語法:
如果子查詢包含任何行,則EXISTS運算符返回true。 否則它返回false。

eg: select * from T1 where exists(select 1 from T2 where T1.a=T2.a)

關於EXISTS函數很早就知道了,但對裏面的邏輯一直不清楚。比如看下面這個SQL,不知道返回結果是tableex所有數據,還是返回tableex與tableln能關聯上的數據。
自己練習之後,知道返回結果是tableex與tableln 能關聯上數據

select  *  from tableex a
where exists
(select  *  from  tableln b where a.Bname=b.ANAME)

如果不是很瞭解的小夥伴可以練習下面的數據

二、exists案例練習01

#建表
create  table tableln
(aid varchar2(20),
aname varchar2(20),
asex varchar2(20));

create table tableex
(bid varchar2(20),
bname varchar(20),
bsex varchar2(20),
baddress varchar2(20));

#插入數據
insert into tableln
select 1 aa,'張晉娟' bb,'女' cc from dual union all
select 2 aa,'張翠蘭' bb,'女' cc from dual union all
select 3 aa,'李海濱' bb,'男' cc from dual union all
select 4 aa,'馬豔豔' bb,'女' cc from dual union all
select 5 aa,'鄧事文' bb,'男' cc from dual;

insert into tableex
select '1' aa,'馬豔豔' bb,'女' cc,'太原' dd from dual union all
select '2' aa,'譚建軍' bb,'男' cc,'長沙' dd from dual union all
select '3' aa,'李紅軍' bb,'男' cc,'長沙' dd from dual union all
select '4' aa,'丁秀娟' bb,'女' cc,'北京' dd from dual union all
select '5' aa,'鄧事文' bb,'男' cc,'深圳' dd from dual ;

練習題:用exits語法查詢tablee表中的數據,並且tablee表中的Bname姓名在tableln中

select  *  from tableex where Bname in(select   ANAME from  tableln)
go
select  *  from tableex a
where exists
(select  *  from  tableln b where a.Bname=b.ANAME)

查詢結果如下

總結:
1、看了19年寫的文章,知道爲什麼進步比別人快一點了。每次在工作中遇見不會的函數或者比較難的函數週末會詳細的總結成文章。
2、遇見一位同事每次提起一個知識點,他都說會。但是在實際運用中很慢甚至不會用。這就是區別吧,可能別人是瞭解或者聽過某個函數或者知識點,但是不會熟練的使用;而我能詳細的講解給別人。
3、所以針對工作常用的還是得熟練掌握,一個問題一個問題解決。
4、發現對not exists也不是很瞭解,明天學習下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章