sql用两个not exists查询给所有电影评分的人的名字
时间: 2024-02-25 15:59:44 浏览: 23
当需要使用两个NOT EXISTS时,可以这样查询所有电影评分人的名字:
```
SELECT DISTINCT name
FROM users
WHERE NOT EXISTS (
SELECT *
FROM movies
WHERE NOT EXISTS (
SELECT *
FROM ratings
WHERE ratings.user_id = users.user_id
AND ratings.movie_id = movies.movie_id
)
);
```
这个查询首先从users表中选择所有独特的用户名。然后使用两个嵌套的NOT EXISTS语句来检查每个用户是否对所有电影进行了评分。外部NOT EXISTS查询检查是否存在至少一个电影没有被评分,内部NOT EXISTS查询检查是否存在用户没有对电影进行评分。如果用户对所有电影进行了评分,则该用户的名称将被返回。
相关问题
sql查询给所有电影评分的人的名字 用not exists
可以使用如下的 SQL 查询语句来获取所有电影评分的人的名字:
```
SELECT DISTINCT user_name
FROM ratings AS r1
WHERE NOT EXISTS (
SELECT *
FROM ratings AS r2
WHERE r2.user_name = r1.user_name AND r2.rating IS NULL
);
```
这个查询语句使用了 `NOT EXISTS` 来筛选出所有没有给电影评过分的用户。具体来说,对于 `ratings` 表中的每一行 `r1`,查询语句会检查是否存在另一行 `r2`,它满足以下两个条件:
1. `r2` 的 `user_name` 值与 `r1` 的相同。
2. `r2` 的 `rating` 值是空的。
如果不存在这样的行 `r2`,那么说明该用户给所有电影都评过分,因此 `r1` 对应的 `user_name` 值将会被包含在查询结果中。最后,使用 `DISTINCT` 关键字可以去除结果中的重复值。
SQL用两个not exists的例子
以下是两个使用两个not exists的SQL示例:
1. 查询没有下订单的客户
```
SELECT *
FROM customers c
WHERE NOT EXISTS (
SELECT *
FROM orders o
WHERE o.customer_id = c.customer_id
);
```
2. 查询没有购买特定产品的客户
```
SELECT *
FROM customers c
WHERE NOT EXISTS (
SELECT *
FROM order_details od
WHERE od.customer_id = c.customer_id
AND od.product_id = 12345
)
```
以上两个示例中,第一个not exists子查询用于检查主查询中的记录是否存在与另一个表中的匹配记录,如果不存在,则返回该记录。第二个not exists子查询用于检查是否存在特定的产品记录,如果不存在,则返回该记录。