美文网首页
数据库笔记-SQL子查询

数据库笔记-SQL子查询

作者: adi0229 | 来源:发表于2020-02-07 23:16 被阅读0次

子查询:关联查询和非关联查询

子查询是「查询」中的「查询」,就是「嵌套查询」。

以 NBA 的SQL数据库文件为例。

检索问题:谁是数据库里身高最高的球员?

SELECT player_name, height 
FROM player 
WHERE height = (SELECT max(height) FROM player);

关联查询

关联查询:对外部的表进行了条件关联。

检索问题:查询每支球队中,身高大于球队平均身高的球员?

SELECT player_name, height, team_id
FROM player AS a 
WHERE height > (SELECT avg(height) 
FROM player AS b 
WHERE a.team_id = b.team_id);

EXISTS子查询

SELECT player_id, team_id, player_name 
FROM player 
WHERE EXISTS (SELECT player_id 
FROM player_score WHERE player.player_id = player_score.player_id);

通过判断某个球员是否出现在 player_score 表中,得知该名球员是否出场。

SELECT player_id, team_id, player_name 
FROM player 
WHERE NOT EXISTS (SELECT player_id 
FROM player_score WHERE player.player_id = player_score.player_id);

反过来,如果主表的 player_id不在 player_score 上,就是 NOT EXIST,可以查询未出场的球员

子查询中的「集合比较」

集合比较的操作符关键词与其英文含义一样,见下:

操作符 说明
IN 判断,是否在集合中
ANY 与比较操作符一起使用,去子查询返回的任何值做比较
ALL 与比较操作符一起使用,去子查询返回的所有值做比较
SOME 其实,它是 ANY 的别名

同样的查询目的,查看出场球员名单,用 IN 子查询实现:

SELECT player_id, team_id, player_name 
FROM player 
WHERE player_id in (SELECT player_id FROM player_score WHERE player.player_id = player_score.player_id)

IN 替代 EXIST,查询结果一致。

SELECT * FROM A WHERE cc IN (SELECT cc FROM B)
SELECT * FROM A WHERE EXIST (SELECT cc FROM B WHERE B.cc=A.cc)

在这里,EXISTIN查询效率更高,为什么?
因为表 player 小于 表 play_score。
在对 cc 列建索引时, 先判断表 A 和 B谁更大。如果A更大,B 中对列 cc 进行索引,IN 的效率更高。

SELECT player_id, player_name, height, team_id 
FROM player 
WHERE height > ALL (SELECT height FROM player WHERE team_id = 1002)

子查询:计算字段

SELECT team_name, (SELECT count(*) 
FROM player 
WHERE player.team_id = team.team_id) AS player_num 
FROM team

这里,子查询得到的 count(*) 结果作为计算字段,起别名为 player_num

相关文章

  • 数据库笔记-SQL子查询

    子查询:关联查询和非关联查询 子查询是「查询」中的「查询」,就是「嵌套查询」。 以 NBA 的SQL数据库文件为例...

  • 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟

    前言 接上一篇关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询,主要是关系型数据库基本数据查询。包括子查...

  • 数据分析之SQL子查询

    文章阅读路线: SQL子查询概念 独立子查询实例 相关子查询实例 SQL子查询常见玩伴 1.SQL子查询概念 子查...

  • SQL第11-14课:查询与联结

    查询(query): 子查询的select语句只能查询单个列。 关系数据库与非关系数据库 sql语句中出现笛卡尔乘...

  • Mysql学习之二 Mysql概念及安装

    一、程序员的数据库要求 基本的SQL操作、CRUD操作 多表连接查询、分组查询和子查询。 常用数据库的的单行函数。...

  • SQL 学习笔记

    《SQL 基础教程》学习笔记 01 - 数据库和 SQL 02 - 表的创建、删除和更新 03 - 查询基础 04...

  • SQL数据查询

    关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询 字数1843阅读1707评论10喜欢115 前言 上一...

  • Mysql高性能-是什么影响了数据库

    Mysql高性能笔记 影响数据库的因素 sql查询速度 服务器硬件 网卡流量 磁盘IO 超高的QPS(每秒查询速度...

  • MySql的基础用法

    概念 SQL:对数据库进行查询和修改的语言叫做SQL,SQL的含义结构化查询语言

  • sql

    sql-基础sql-基础查询-1sql-基础查询-2sql-更新 概览 数据库(Database,DB):将大量数...

网友评论

      本文标题:数据库笔记-SQL子查询

      本文链接:https://www.haomeiwen.com/subject/ptvnzctx.html