国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL中in與exists的使用及區別介紹

2024-07-24 12:49:29
字體:
來源:轉載
供稿:網友

先放一段代碼

for(int i=0;i<1000;i++){ for(int j=0;j<5;j++){ System.out.println("hello"); }} for(int i=0;i<5;i++){ for(int j=0;j<1000;j++){ System.out.println("hello"); }}

分析以上代碼可以看到兩行代碼除了循環的次序不一致意外,其他并無區別,在實際執行時兩者所消耗的時間和空間應該也是一致的。但是這僅僅是在Java中,現在我們轉化一下情景,最外層循環是數據庫中的連接操作,內層循環為查找操作,那么現在兩次的結果將相差巨大。

之所以出現這樣的原因是數據庫的特點決定的,數據庫中相比較于查詢操作而言,建立連接是更消耗資源的。第一段代碼建立了1000次連接,每一次連接卻只做了5次查詢,顯然是很浪費的。

因此在我們對數據庫進行操作時需要遵循的操作應當是小表驅動大表(小的數據集驅動大的數據集)。

in與exists

表結構

tbl_emp為員工表,deptld為部門id。tbl_dept為部門表。員工表中含有客人,其deptld字段為-1

mysql> desc tbl_emp;+--------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+--------+-------------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || name | varchar(20) | YES | | NULL | || deptld | int(11) | YES | MUL | NULL | |+--------+-------------+------+-----+---------+----------------+3 rows in set (0.00 sec)mysql> desc tbl_dept;+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || deptName | varchar(30) | YES | MUL | NULL | || locAdd | varchar(40) | YES | | NULL | |+----------+-------------+------+-----+---------+----------------+3 rows in set (0.01 sec)

我們知道對于一個公司而言相對于部門來說員工數要多得多。現在我們有這樣一個需求:查詢屬于這個公司的員工(不含來訪客人),我們可以用以下代碼解決

利用in

# 先查詢部門表中所有的id,然后拿員工表中的deptld字段與之對比,若含有則保留。

mysql> select * from tbl_emp a where a.deptld in (select id from tbl_dept);

in關鍵字就像or的拼接,例如上述sql雨中子查詢查出的結果為1,2,3。則sql語句等價于以下形式

mysql> select * from tbl_emp a where a.deptld=1 or a.deptld=2 or a.deptld=3

總的來說in關鍵字就是將子查詢中的所有結果都查出來,假設結果集為B,共有m條記錄,然后在將子查詢條件的結果集分解成m個,再進行m次查詢。可以看到這里主要是用到了A的索引,B表如何對查詢影響不大

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新绛县| 合川市| 称多县| 海阳市| 合江县| 无极县| 汽车| 敦化市| 敖汉旗| 阿拉善左旗| 四子王旗| 澎湖县| 澄江县| 寿宁县| 长乐市| 沙坪坝区| 南雄市| 慈溪市| 信阳市| 新闻| 文山县| 曲麻莱县| 永年县| 温泉县| 拉孜县| 武清区| 乌鲁木齐县| 双鸭山市| 澄迈县| 犍为县| 探索| 建瓯市| 磴口县| 罗城| 商城县| 嘉鱼县| 宜良县| 南澳县| 湖南省| 嘉鱼县| 杨浦区|