SQL 中NOT EXISTS的改写

   在标准SQL语句中 NOT EXISTS 对应于EXISTS,EXISTS筛选剩下的数据就是 NOT EXISTS对应数据,有了这层思路,我们就可以对相关的NOT EXISTS进行改写了。
<p>在进行SQL改写之前,我们先来看一对简单的例子,也许大部分人都会有这样的意识,EXISTS对应于INNER JOIN。</p>
SELECT T.* FROM TEST_EXISTS   T
WHERE  EXISTS(SELECT 1 FROM TEST01_EXISTS P WHERE T.CUST_CODE=P.CUST_CODE AND P.CUST_SHOURU >8000)
ORDER BY  T.CUST_CODE; 

select T.* FROM TEST_EXISTS T
        INNER JOIN TEST01_EXISTS P
      ON T.CUST_CODE=P.CUST_CODE 
      AND P.CUST_SHOURU >8000
      ORDER BY T.CUST_CODE; 

 两条SQL语句中出来的结果是一致的,显然是用INNER JOIN 去改写EXISTS是正确的,但是要是改写NOT EXISTS呢,还能用INNER JOIN吗,显然稍微想一想这是行不通的。

要想从EXISTS的反面筛选出数据,最起码你需要保持源表数据的完整性以后才能从源表中筛选出满足你条件的数据。

SELECT T.* FROM TEST_EXISTS   T
WHERE NOT  EXISTS(SELECT 1 FROM TEST01_EXISTS P WHERE T.CUST_CODE=P.CUST_CODE AND P.CUST_SHOURU >8000)
ORDER BY  T.CUST_CODE; 

SELECT T.*
  FROM TEST_EXISTS T
  LEFT JOIN TEST01_EXISTS P
    ON T.CUST_CODE = P.CUST_CODE
   AND P.CUST_SHOURU > 8000
 WHERE P.CUST_CODE IS NULL
 ORDER BY T.CUST_CODE;
要想保持数据的完整性,你只能用LEFT JOIN,然后从一个集合中去筛选满足你要求的数据,where可以满足你的需求。






  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用文件存储数据的 Python 代码示例: ```python class User: def __init__(self, name, age): self.name = name self.age = age class UserDatabase: def __init__(self, filename): self.filename = filename def add_user(self, user): with open(self.filename, 'a') as file: file.write(f'{user.name},{user.age}\n') def get_users(self): users = [] with open(self.filename, 'r') as file: for line in file: name, age = line.strip().split(',') user = User(name, int(age)) users.append(user) return users ``` 为了改写为使用 SQL 数据库存储数据,我们需要先创建一个数据库和表格,然后使用 Python 的 SQL 库来操作数据库。以下是改写后的代码: ```python import sqlite3 class User: def __init__(self, name, age): self.name = name self.age = age class UserDatabase: def __init__(self, filename): self.conn = sqlite3.connect(filename) self.cursor = self.conn.cursor() self.cursor.execute('CREATE TABLE IF NOT EXISTS users (name TEXT, age INT)') def add_user(self, user): self.cursor.execute('INSERT INTO users VALUES (?, ?)', (user.name, user.age)) self.conn.commit() def get_users(self): self.cursor.execute('SELECT * FROM users') rows = self.cursor.fetchall() users = [] for row in rows: name, age = row user = User(name, age) users.append(user) return users ``` 在这个新的版本,我们使用 sqlite3 库连接到一个 SQLite 数据库,并创建了一个名为 "users" 的表格来存储用户数据。add_user 方法使用 SQL 语句将用户数据插入到表格,而 get_users 方法使用 SQL 查询语句从表格读取用户数据,并将其转换为 User 类型的实例。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值