select exists 的应用一例

当遇到多层exists的时候,事情就变得开始复杂了。我们来看看这个例子吧

假设有三张表

  • 选课表:学号、课程号
  • 学生表:学号、姓名
  • 课程表:课程号、课程名

请选出选了所有课程的学生

SELECT 姓名
FROM 学生表
WHERE NOT EXISTS
( 
//学生缺的学科
SELECT *
FROM 课程表
WHERE NOT EXISTS
(
//学生选的学科 
SELECT *
FROM 选课表
WHERE 学生表.学号 = 选课表.学号 AND 课程表.课程号 = 选课表.课程号
)
);

下面解读一下这两个exists。

第一层not exists的意思是 对一个学生 而言选出他没选过的课程。如果他没选过的课程为空,那么他就选择了所有课程。

第二层not exits的意思是 对一个学生一门指定的课程 筛选出选课表中对应的记录。

从逻辑上说,“选了所有课程的学生”等价于

对一个学生,不存在这样的课程,这个课程不没有被这个学生选。

 

转载于:https://www.cnblogs.com/englefly/p/8503780.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 中有很多数据库接口模块可以与 MySQL 数据库进行交互,比如 `mysql-connector-python` 和 `pymysql` 等。这里以 `pymysql` 模块为例,演示如何使用 Python 连接 MySQL 数据库,并执行一些常见的操作。 首先,需要安装 `pymysql` 模块。你可以使用 pip 命令进行安装: ``` pip install pymysql ``` 接下来,可以编写一个简单的 Python 脚本,连接到 MySQL 数据库,并执行一些操作。下面的代码演示了如何连接到数据库、创建表、插入数据、查询数据、更新数据和删除数据: ```python import pymysql # 连接到数据库 conn = pymysql.connect( host='localhost', port=3306, user='root', password='password', database='test' ) # 创建表 cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, age INT(11) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ''') # 插入数据 cursor.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ('Alice', 20)) cursor.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ('Bob', 25)) conn.commit() # 查询数据 cursor.execute("SELECT id, name, age FROM users WHERE age > %s", (20,)) rows = cursor.fetchall() for row in rows: print(row) # 更新数据 cursor.execute("UPDATE users SET age = %s WHERE name = %s", (30, 'Alice')) conn.commit() # 删除数据 cursor.execute("DELETE FROM users WHERE name = %s", ('Bob',)) conn.commit() # 关闭连接 cursor.close() conn.close() ``` 在上面的代码中,首先使用 `pymysql.connect()` 方法连接到 MySQL 数据库。然后,使用 `cursor.execute()` 方法执行 SQL 语句,包括创建表、插入数据、查询数据、更新数据和删除数据等操作。执行更新和删除操作后,需要使用 `conn.commit()` 方法提交更改。最后,使用 `cursor.close()` 和 `conn.close()` 方法关闭连接。 这只是一个简单的示例,实际应用中可能需要更复杂的操作。但是,使用 `pymysql` 模块可以很方便地与 MySQL 数据库进行交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值