觉得会却又忘记怎么写的SQL(二)
目录
SQL在线测试地址
SQL online 以下内容均可在此地址下找到对应模块并测试
tablename world
name | continent | area | population | gdp |
---|---|---|---|---|
Afghanistan | Asia | 652230 | 25500100 | 20343000000 |
Albania | Europe | 28748 | 2831741 | 12960000000 |
Algeria | Africa | 2381741 | 37100000 | 188681000000 |
Andorra | Europe | 468 | 78115 | 3712000000 |
Angola | Africa | 1246700 | 20609294 | 100990000000 |
… | … |
select in select 我要的结果集在上个结果集中(单行数据)
SELECT name FROM world
WHERE population >
(
SELECT population FROM world
WHERE name='Russia'
)
-- 小提示:当 条件是比较操作符,且子查询无ALL()函数包裹时,其子查询的结果集有且仅有一行且只有一列,就是一个数据
select in select in 我要的结果集在上一个结果集中(多行数据)
SELECT name, continent FROM world
WHERE continent in
(
SELECT continent FROM world
WHERE name IN
('Argentina','Australia')
)
ORDER BY name
select in select table 我要的结果在上个结果集里面
-- 注意通常用于多表查询,本次仅做个示例
-- 注意,一定要用别名将子查询结果转为一张表
-- 子查询的结果集就是派生表/字表
SELECT name, continent FROM
(
SELECT name,continent FROM world
) as tmp
ALL 我要对某个字段的多列数据进行比较所得结果集
-- 得出世界上人口最多的国家, ALL()同这所有比较
-- 假设 子查询结果集有5列,及有5个人口数值
-- 则,此时ALL函数的作用是,
-- 求一个国家人口比这5个结果都大于或者等于的国家名称
SELECT name FROM world
WHERE population >=
ALL(SELECT population FROM world
WHERE population>0)
-- ALL 函数支持的操作符 >=,<=,>,<
group by 对结果集进行分组后展示
SELECT continent,SUM(population)
FROM world
GROUP BY continent
-- 注意:在有分组后,SUM函数是对分组后的字段项进行求和操作
-- SUM(字段名称) 只会返回一个单独的值,在此处只,每个continent
-- 下的总population