最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL語句中EXISTS的詳細(xì)用法大全

 更新時間:2022年06月23日 10:56:00   作者:zhangbeizhen18  
最近重新用到了exists關(guān)鍵字,對于其基本用法記錄一下,下面這篇文章主要給大家介紹了關(guān)于SQL語句中EXISTS的詳細(xì)用法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

在業(yè)務(wù)開展中,會遇到類似需求。

需求1:UPDATE表TEST_TB01中的記錄;滿足條件:這些記錄不在TEST_TB02中。

需求2:UPDATE表TEST_TB01中的記錄;滿足條件:這些記錄在TEST_TB02中。

在SQL語句中EXISTS的用法,能夠比較簡潔的去解決這類需求。

一、建表

1.在MySQL數(shù)據(jù)庫建表語句

CREATE TABLE TEST_TB01
(
  sensor_id   BIGINT,
  part_id     BIGINT,
  flag        VARCHAR(64)
 )
COMMENT '數(shù)據(jù)表一';
CREATE TABLE TEST_TB02
(
  sensor_id   BIGINT,
  part_id     BIGINT,
  flag        VARCHAR(64)
 )
COMMENT '數(shù)據(jù)表二';
CREATE TABLE TEST_TB03
(
  sensor_id   BIGINT,
  part_id     BIGINT,
  flag        VARCHAR(64)
 )
COMMENT '數(shù)據(jù)表三';

2.在ORACLE數(shù)據(jù)庫建表語句

CREATE TABLE TEST_TB01
(
  sensor_id  NUMBER(16),
  part_id    NUMBER(16),
  flag       VARCHAR(64)
 );
CREATE TABLE TEST_TB02
(
  sensor_id  NUMBER(16),
  part_id    NUMBER(16),
  flag       VARCHAR(64)
 );

二、在SELECT語句中使用EXISTS

在SELECT的SQL語句中使用EXISTS。

在TEST_TB01插入數(shù)據(jù):

INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2101,8811,'廈門');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2102,8812,'泉州');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2103,8813,'福州');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2104,8814,'漳州');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2105,8815,'杭州');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2106,8816,'上海');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2107,8817,'北京');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2108,8818,'深圳');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2109,8819,'中國');

在TEST_TB02插入數(shù)據(jù):

INSERT INTO TEST_TB02 (sensor_id,part_id,flag) VALUES(2101,8811,'廈門');
INSERT INTO TEST_TB02 (sensor_id,part_id,flag) VALUES(2102,8812,'泉州');
INSERT INTO TEST_TB02 (sensor_id,part_id,flag) VALUES(2103,8813,'福州');
INSERT INTO TEST_TB02 (sensor_id,part_id,flag) VALUES(2104,8814,'漳州');
INSERT INTO TEST_TB02 (sensor_id,part_id,flag) VALUES(2109,8819,'中國');

在TEST_TB03插入數(shù)據(jù):

INSERT INTO TEST_TB03 (sensor_id,part_id,flag) VALUES(2106,8816,'上海');
INSERT INTO TEST_TB03 (sensor_id,part_id,flag) VALUES(2107,8817,'北京');
INSERT INTO TEST_TB03 (sensor_id,part_id,flag) VALUES(2109,8819,'中國');

查看TEST_TB01數(shù)據(jù):

查看TEST_TB02數(shù)據(jù):

查看TEST_TB03數(shù)據(jù):

 1.在SQL中使用EXISTS

需求:從TEST_TB01中查詢出在TEST_TB02中存在的記錄,關(guān)聯(lián)條件是兩個表的sensor_id相等。

SQL語句:

SELECT
  aa.sensor_id,aa.part_id,aa.flag
FROM
  TEST_TB01 aa
WHERE EXISTS
  (SELECT 1 FROM
    TEST_TB02 bb
  WHERE aa.sensor_id = bb.sensor_id);

執(zhí)行結(jié)果:

 2.在SQL中使用NOT EXISTS

需求:從TEST_TB01中查詢出在TEST_TB02中不存在的記錄,關(guān)聯(lián)條件是兩個表的sensor_id相等。

SQL語句:

SELECT
  aa.sensor_id,aa.part_id,aa.flag
FROM
  TEST_TB01 aa
WHERE NOT EXISTS
  (SELECT 1 FROM
    TEST_TB02 bb
  WHERE aa.sensor_id = bb.sensor_id);

執(zhí)行結(jié)果:

 3.在SQL中使用多個NOT EXISTS

需求:從TEST_TB01中查詢出在TEST_TB02和TEST_TB03中都不存在的記錄,關(guān)聯(lián)條件是表的sensor_id相等。

SQL語句:

SELECT
  aa.sensor_id,aa.part_id,aa.flag
FROM
  TEST_TB01 aa
WHERE NOT EXISTS
  (SELECT 1 FROM
    TEST_TB02 bb
  WHERE aa.sensor_id = bb.sensor_id)
  AND NOT EXISTS
  (SELECT 1 FROM
    TEST_TB03 cc
  WHERE aa.sensor_id = cc.sensor_id);

執(zhí)行結(jié)果:

 4.在SQL中使用多個EXISTS

需求:從TEST_TB01中查詢出在TEST_TB02和TEST_TB03中都存在的記錄,關(guān)聯(lián)條件是表的sensor_id相等。

SQL語句:

SELECT
  aa.sensor_id,aa.part_id,aa.flag
FROM
  TEST_TB01 aa
WHERE  EXISTS
  (SELECT 1 FROM
    TEST_TB02 bb
  WHERE aa.sensor_id = bb.sensor_id)
  AND  EXISTS
  (SELECT 1 FROM
    TEST_TB03 cc
  WHERE aa.sensor_id = cc.sensor_id);

執(zhí)行結(jié)果:

 5.在SQL中使用NOT EXISTS和EXISTS

需求:從TEST_TB01中查詢出在TEST_TB02存在但是TEST_TB03中不存在的記錄,關(guān)聯(lián)條件是表的sensor_id相等。

SQL語句:

SELECT
  aa.sensor_id,aa.part_id,aa.flag
FROM
  TEST_TB01 aa
WHERE  EXISTS
  (SELECT 1 FROM
    TEST_TB02 bb
  WHERE aa.sensor_id = bb.sensor_id)
  AND NOT EXISTS
  (SELECT 1 FROM
    TEST_TB03 cc
  WHERE aa.sensor_id = cc.sensor_id);

執(zhí)行結(jié)果:

三、在DELETE語句中使用EXISTS

在DELETE的SQL語句中使用EXISTS和NOT EXISTS。

在TEST_TB01插入數(shù)據(jù):

INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2101,8811,'廈門');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2102,8812,'泉州');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2103,8813,'福州');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2104,8814,'漳州');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2105,8815,'杭州');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2106,8816,'上海');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2107,8817,'北京');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2108,8818,'深圳');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2109,8819,'中國');

在TEST_TB02插入數(shù)據(jù):

INSERT INTO TEST_TB02 (sensor_id,part_id,flag) VALUES(2101,8811,'廈門');
INSERT INTO TEST_TB02 (sensor_id,part_id,flag) VALUES(2102,8812,'泉州');
INSERT INTO TEST_TB02 (sensor_id,part_id,flag) VALUES(2103,8813,'福州');
INSERT INTO TEST_TB02 (sensor_id,part_id,flag) VALUES(2104,8814,'漳州');
INSERT INTO TEST_TB02 (sensor_id,part_id,flag) VALUES(2109,8819,'中國');

1.在MySQL中使用

需求:從TEST_TB01中刪除在TEST_TB02中存在的記錄,關(guān)聯(lián)條件是兩個表的sensor_id相等。

注意:本例使用MySQL版本:MySQL 5.7.33。

SQL語句:

DELETE  FROM 
TEST_TB01 aa
WHERE EXISTS
  (SELECT 1 FROM
    TEST_TB02 bb
  WHERE aa.sensor_id = bb.sensor_id);

執(zhí)行結(jié)果:

 結(jié)論:在MySQL中是不支持在DELETE的SQL語句中使用EXISTS和NOT EXISTS這種句法。(本例版本:MySQL 5.7.33)。

解決此需求

SQL語句:

DELETE
  aa
FROM
  TEST_TB01 aa
 INNER JOIN TEST_TB02 bb
    ON aa.sensor_id = bb.sensor_id;

注意:在SQL中DELETE后面緊跟著的是需求中需要刪除的表名的別名。

如果不使用別名會報錯:

 2.在Oracle中使用

需求:從TEST_TB01中刪除在TEST_TB02中存在的記錄,關(guān)聯(lián)條件是兩個表的sensor_id相等。

SQL語句:

DELETE  FROM 
TEST_TB01 aa
WHERE EXISTS
  (SELECT 1 FROM
    TEST_TB02 bb
  WHERE aa.sensor_id = bb.sensor_id);

執(zhí)行結(jié)果:

執(zhí)行前TEST_TB01:

 執(zhí)行前TEST_TB02:

 執(zhí)行后TEST_TB01:

四、在UPDATE語句中使用EXISTS

在UPDATE的SQL語句中使用EXISTS。

在TEST_TB01插入數(shù)據(jù):

INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2101,8811,'城市');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2102,8812,'城市');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2103,8813,'城市');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2104,8814,'城市');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2105,8815,'城市');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2106,8816,'城市');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2107,8817,'城市');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2108,8818,'城市');
INSERT INTO TEST_TB01 (sensor_id,part_id,flag) VALUES(2109,8819,'城市');

在TEST_TB02插入數(shù)據(jù):

INSERT INTO TEST_TB02 (sensor_id,part_id,flag) VALUES(2101,8811,'廈門');
INSERT INTO TEST_TB02 (sensor_id,part_id,flag) VALUES(2102,8812,'泉州');
INSERT INTO TEST_TB02 (sensor_id,part_id,flag) VALUES(2103,8813,'福州');
INSERT INTO TEST_TB02 (sensor_id,part_id,flag) VALUES(2104,8814,'漳州');
INSERT INTO TEST_TB02 (sensor_id,part_id,flag) VALUES(2109,8819,'中國');

1.在MySQL中使用

需求:在TEST_TB01中更新,在TEST_TB02中存在的記錄,關(guān)聯(lián)條件是兩個表的sensor_id相等。

注意:本例使用MySQL版本:MySQL 5.7.33。

SQL語句:

UPDATE TEST_TB01 aa
   SET (aa.part_id, aa.flag) =
       (SELECT bb.part_id, bb.flag
          FROM TEST_TB02 bb
         WHERE aa.sensor_id = bb.sensor_id)
 WHERE EXISTS
 (SELECT 1 FROM TEST_TB02 cc 
       WHERE aa.sensor_id = cc.sensor_id);

執(zhí)行結(jié)果:

 結(jié)論:在MySQL中是不支持在UPDATE的SQL語句中使用EXISTS和NOT EXISTS這種句法。(本例版本:MySQL 5.7.33)。

解決此需求

SQL語句:

UPDATE TEST_TB01 aa ,TEST_TB02 bb
SET 
    aa.part_id=bb.part_id,
    aa.flag=bb.flag
WHERE aa.sensor_id = bb.sensor_id;

執(zhí)行結(jié)果:

執(zhí)行前TEST_TB01:

 執(zhí)行前TEST_TB02:

 執(zhí)行后TEST_TB01:

 2.在Oracle中使用

需求:在TEST_TB01中更新,在TEST_TB02中存在的記錄,關(guān)聯(lián)條件是兩個表的sensor_id相等。

SQL語句:

UPDATE TEST_TB01 aa
   SET (aa.part_id, aa.flag) =
       (SELECT bb.part_id, bb.flag
          FROM TEST_TB02 bb
         WHERE aa.sensor_id = bb.sensor_id)
 WHERE EXISTS
 (SELECT 1 FROM TEST_TB02 cc 
       WHERE aa.sensor_id = cc.sensor_id);

執(zhí)行結(jié)果:

執(zhí)行前TEST_TB01:

 執(zhí)行前TEST_TB02:

 執(zhí)行后TEST_TB01:

 以上,感謝。

總結(jié)

到此這篇關(guān)于SQL語句中EXISTS用法的文章就介紹到這了,更多相關(guān)SQL語句EXISTS用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL判斷列的值既不為NULL又不為空字符串的問題

    MySQL判斷列的值既不為NULL又不為空字符串的問題

    這篇文章主要介紹了MySQL判斷列的值既不為NULL又不為空字符串的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • MySQL SHOW PROCESSLIST協(xié)助故障診斷全過程

    MySQL SHOW PROCESSLIST協(xié)助故障診斷全過程

    這篇文章主要給大家介紹了關(guān)于MySQL SHOW PROCESSLIST協(xié)助故障診斷的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • 詳解MySQL like如何查詢包含''%''的字段(ESCAPE用法)

    詳解MySQL like如何查詢包含''%''的字段(ESCAPE用法)

    這篇文章主要介紹了詳解MySQL like如何查詢包含'%'的字段(ESCAPE用法),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • MySQL 覆蓋索引的優(yōu)點(diǎn)

    MySQL 覆蓋索引的優(yōu)點(diǎn)

    當(dāng)索引包含了所有查詢的數(shù)據(jù)時,這個索引就稱之為覆蓋索引。覆蓋索引能夠成為一個非常有力的工具并且能夠顯著改善性能,本文將具體講述覆蓋索引的優(yōu)點(diǎn)
    2021-05-05
  • 解決mybatis查詢結(jié)果為null時,值被默認(rèn)值替換問題

    解決mybatis查詢結(jié)果為null時,值被默認(rèn)值替換問題

    這篇文章主要介紹了解決mybatis查詢結(jié)果為null時,值被默認(rèn)值替換問題。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • MySQL提示表不存在的解決error:1146:Table doesn‘t exist的原因和解決方法

    MySQL提示表不存在的解決error:1146:Table doesn‘t exist的原因和解決

    在使用MySQL的過程中,有時會遇到“Table doesn't exist”(表不存在)的錯誤,錯誤代碼通常為1146,這個問題可能由多種原因引起,本文將幫助你診斷和解決這個問題,如果遇到同樣問題的小伙伴跟著小編一起來看看吧
    2024-12-12
  • MySQL動態(tài)SQL拼接實(shí)例詳解

    MySQL動態(tài)SQL拼接實(shí)例詳解

    動態(tài)SQL呢?首先是SQL語句,是根據(jù)條件來拼接SQL,下面這篇文章主要給大家介紹了關(guān)于MySQL動態(tài)SQL拼接的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • MySQL中CREATE DATABASE語句創(chuàng)建數(shù)據(jù)庫的示例

    MySQL中CREATE DATABASE語句創(chuàng)建數(shù)據(jù)庫的示例

    在MySQL中,可以使用CREATE DATABASE語句創(chuàng)建數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • mysql中event的用法詳解

    mysql中event的用法詳解

    本篇文章是對mysql中event的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL六種約束的示例詳解

    MySQL六種約束的示例詳解

    約束是作用于表中字段上的規(guī)則,用于限制存儲在表中的數(shù)據(jù)。這篇文章主要為大家整理了一下MySQL中六種約束的用法,感興趣的可以了解一下
    2023-02-02

最新評論

云安县| 永德县| 鲜城| 梁平县| 潮州市| 迁西县| 化德县| 巴南区| 图片| 东乡族自治县| 沁阳市| 邢台县| 兴国县| 扶余县| 天峻县| 屯门区| 尉犁县| 张家川| 河津市| 克东县| 闻喜县| 廉江市| 安岳县| 开鲁县| 库车县| 大渡口区| 莱芜市| 永丰县| 富源县| 额敏县| 光泽县| 淳安县| 福贡县| 开阳县| 北辰区| 衡东县| 金寨县| 昆明市| 西青区| 石城县| 宜昌市|