查询人员表中去过所有地点的人员姓名。查询结果依人员姓名顺序排序。 -- 请用一条SQL语句实现该查询:
时间: 2024-03-18 13:41:47 浏览: 32
好的,以下是符合要求的SQL语句:
```
SELECT p.person_name
FROM persons p
WHERE NOT EXISTS (
SELECT l.location_id
FROM locations l
WHERE NOT EXISTS (
SELECT v.visit_id
FROM visits v
WHERE v.person_id = p.person_id AND v.location_id = l.location_id
)
)
ORDER BY p.person_name;
```
解释一下各个部分的含义:
- `SELECT p.person_name`:选择需要查询的字段,即人员姓名。
- `FROM persons p`:从 `persons` 表中查询。
- `WHERE NOT EXISTS (...)`:使用子查询判断该人员是否去过所有地点。如果该人员没有去过某个地点,则该子查询返回结果,整个查询结果不包含该人员。
- `SELECT l.location_id`:选择需要查询的字段,即地点编号。
- `WHERE NOT EXISTS (...)`:使用子查询判断该人员是否去过该地点。如果该人员没有去过该地点,则该子查询返回结果,整个查询结果不包含该地点。
- `SELECT v.visit_id`:选择需要查询的字段,即访问记录编号。
- `FROM visits v`:从 `visits` 表中查询。
- `WHERE v.person_id = p.person_id AND v.location_id = l.location_id`:筛选出该人员去过该地点的访问记录。
- `ORDER BY p.person_name`:按照人员姓名(person_name)进行升序排序。
希望能够帮到你!