SQL数据分析之基础语法的注意事项与妙用【MySQL补充】

2023-05-16

文章目录

    • 1、语法与运行顺序
    • 2、计算字段在select里进行
    • 3、列表的使用
    • 4、between...and...范围在什么之间
    • 5、模糊查询(注意:单引号)
    • 6、多条件模糊查询
    • 7、指定前排的排序
    • 8、limit的第二个参数(表示个数,一参表示起始位置)
    • 9、count的用法
    • 10、group+聚合
    • 11、group+having
    • 写在最后

1、语法与运行顺序

(1)语法顺序:select–from–where–group by–having–order by–limit

(2)运行顺序:from–where–group by–having–order by–limit–select

2、计算字段在select里进行

通过GDP和人口来计算人均GDP

select name,gdp,gdp/population 人均GDP  from world
order by 人均GDP desc

3、列表的使用

查询’China’,‘Japan’,'Italy’三个国家中的人口

select name,population from world
where name in ('China','Japan','Italy')

等于三个or:

select name,population from world
where name='China' or name='Japan' or name='Italy'

4、between…and…范围在什么之间

查询国土面积在30万到34万之间的国家名字

select name,area from world
where area between 300000 and 340000

5、模糊查询(注意:单引号)

%任意个字符,_一个占位符

(1)以A开头ia结尾的国家(Australia):

select name,popution from world 
where name like 'A%ia' 

(2)第二个字母为u且倒数第三个字符为l 的国家和人口(Australia)

select name,population from world
where name like '_u%l__'

(3)包含3个o且国土面积小于30万的国家及面积

select name,area from world
where name like '%o%o%o%' and area<300000

6、多条件模糊查询

查询国家名字中既包含5个元音字母(a,e,i,o,u),又不包含空格的国家和人口

select name,population from world 
where name like '%a%'
and name like '%e%'
and name like '%i%'
and name like '%o%'
and name like '%u%'
and name not like '% %'

7、指定前排的排序

查询国土面积大于100万的所有国家和人口,结果将非洲(Africa)、北美洲(North America)排在最后,然后按照人口降序,再按照国家面积降序
1)国土面积小于30万的大洲、国家和人口:
select continent,name,population from world
where area>2000000
where =‘Africa’

2)排序条件:第一条件是’Africa’,'North America’放最后(因为它们在这里满足条件故值为1,默认排在0之后),再人口降序条件下,面积降序
order by continent in (‘Africa’,‘North America’), population desc,area desc

3)最终结果:

select continent,name,population,area from world
where area>2000000
order by continent in ('Africa','North America'), population desc,area desc

8、limit的第二个参数(表示个数,一参表示起始位置)

查询国土面积大小为第10大到第20大的国家、面积和人口

select name,area,population from world
order by area desc
limit 9,10

表示从9开始数10个,这里用索引进行查询,默认第一位索引值为0,因此第10大索引值为9

9、count的用法

(1)count(*)表示行数(包括空值):

select count(*) from wrold

(2)count(字段)表示该字段的个数(会忽略空值):

select count(name),count(continent),count(gdp) from world
count(distinct 字段)非重复计数:八大州
select count(name),count(distinct continent),count(gdp)  from world

(3)注意:
sum,avg,max,min也会默认忽略空值,因此可以看出聚合函数是忽略空值进行计算的

10、group+聚合

计算每个大洲有多少个国家

select continent,count(name) from world
group by continent

11、group+having

(1)group by子句中有多个字段时,依据写的字段依次对数据分区,因此group by字段1,字段2与group by字段2,字段1 是不一样的;使用group by子句时,select 只能使用聚合函数和group by应用过的字段,否则会报错

(2)询每个大洲人口数大于2000万的国家数量:

select continent, count(name) 'number of countries'
from world 
where population>=20000000
group by continent

(3)haing+聚合函数的用法:筛选出大洲总人口数量至少为5亿的国家数量

#先筛选出总人口数量至少为5亿的大洲,再在select中用聚合函数求出这些大洲的国家数量
select continent,count(name)
from world
group by continent
having sum(population)>=500000000

(4)查询总人口数至少为3亿的大洲及其平均GDP,其中只有GDP高于200亿且人口数大于6000万或者GDP低于80亿且首都中包含有3个a的国家计入计算,最后按国家数从大到小排序,只显示前2行

select continent,avg(gdp)
from world
where (gdp>=20000000000 and population>=60000000) or (gdp<=8000000000 and capital like '%a%a%a%')
group by continent
having sum(population)>=300000000
order by count(name) desc
limit 2

(5)查询人均gdp大于3000的大洲、人口数及其人均GDP,仅GDP在200亿和500亿的国家计入

select continent,sum(population),sum(gdp)/sum(population) 人均gdp
from world
where gdp>=20000000000 and gdp<=50000000000
group by continent
having sum(gdp)/sum(population)>3000

(6)where和having的区别:where是聚合前的条件,having是聚合后的条件

写在最后

(1)本文所有代码均是在SQL ZOO平台进行,数据也该平台下的world表,所有代码均已通过测试。
sql zoo

(2)文章总结归纳于自戴师兄的课程:https://www.bilibili.com/video/BV1ZM4y1u7uF?p=4
在此课程学习的基础上进行了一些修改和验证。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL数据分析之基础语法的注意事项与妙用【MySQL补充】 的相关文章

  • SQL Server:如果存在会大大减慢查询速度

    正在使用SQL Server 2012 我找到了一些关于查询优化的主题 并将 EXISTS 与 COUNT 进行比较 但我找不到这个确切的问题 我有一个看起来像这样的查询 select from tblAccount as acc join
  • Oracle REGEXP_INSTR() 和“a-z”字符范围与预期不匹配

    我想用REGEXP INSTR 在 oracle 数据库中检查小写 大写字符 我知道 upper and lower POSIX 字符类 但我选择了a z这给了我非常奇怪的结果 我不明白 有人可以解释一下吗 SELECT REGEXP IN
  • 为什么 ISNUMERIC('.') 返回 1?

    最近我在 SQL Server 中使用 ISNUMERIC 时遇到了一个问题 导致找到了这段代码 SELECT ISNUMERIC 这会返回 1 如 true 所示 难道不应该像 false 一样返回 0 吗 See Numeric 损坏了
  • 如何使用 SQL 查询创建逗号分隔的列表?

    我有 3 个表 名为 应用程序 ID 名称 资源 id 名称 应用程序资源 id app id resource id 我想在 GUI 上显示所有资源名称的表格 在每一行的一个单元格中 我想列出该资源的所有应用程序 以逗号分隔 所以问题是
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据
  • 在 MySQL 中进行全文搜索的最有效方法

    我有 3 个表 我想查询搜索词文本框 我的查询目前看起来像这样 SELECT Artist FROM Artist Band Instrument WHERE MATCH Artist name AGAINST mysearchterm O
  • mysql GROUP_CONCAT 重复项

    我从 farmTOanimal 表中进行连接 如下所示 有一个类似的farmTotool表 id FarmID animal 1 1 cat 2 1 dog 当我在视图中加入表时 我得到的结果如下所示 FarmID animal tool
  • 处理ON INSERT触发器时,innodb表如何锁定?

    我有两个 innodb 表 articles id title sum votes 1 art 1 5 2 art 2 8 3 art 3 35 votes id article id vote 1 1 1 2 1 2 3 1 2 4 2
  • 如何在Word 2010中从SQL数据库检索数据?

    我想用 MS SQL 数据库中的数据填充 Word 文档 这可能吗 如果可能的话 如何实现 我过去曾通过多种方式做到这一点 这取决于用户是从 Microsoft Word 外部还是从 Microsoft Word 内部启动操作 From I
  • 如何将 SQL Server 中同一表中的一列插入到另一列中

    我需要将一列的数据插入到同一个表中的另一列中 谁能告诉我这个怎么写 Thanks UPDATE table SET col 2 col 1
  • 将用户定义的表类型从 VBA 传递到 SQL

    我的任务是创建一个 Excel 电子表格作为 SQL 数据库的前端 以及一些对数据执行复杂计算的 C 我的老板想要前端作为电子表格 而计算对于 VBA 来说似乎太复杂了 目前 检索数据集的存储过程运行良好 然后 用户将在 Excel 中编辑
  • 复杂的sql树行

    表结构 id message reply id 1 help me 0 434 love to 1 852 didn t work 434 0110 try this 852 2200 this wont 0 5465 done 0110
  • PHP 和 MySQL 的重音字符错误

    我的问题是 直接通过 PHP 编写的内容是正确重音的 但是当重音单词来自 MySQL 时 字母会像这样 我尝试使用html charset as ISO 8859 1它修复了 MySQL 字母 但破坏了其他字母 解决这一切的一种方法是设置我
  • MySQL 中布尔值的 TINYINT 与 ENUM(0, 1)

    MyISAM 表和 MySQL 5 1 中具有 0 和 1 值的 Tinyint 或 ENUM 0 1 哪个更好 您可以使用BIT 1 如中提到的MySQL 5 1 参考 http dev mysql com doc refman 5 1
  • 使用 Proc sql 和 Teradata 在 SAS 中编写高效查询

    编辑 这是一组更完整的代码 它准确地显示了下面的答案所发生的情况 libname output data files jeff let DateStart 01Jan2013 d let DateEnd 01Jun2013 d proc s
  • 如何检查一个值是否已经存在以避免重复?

    我有一个 URL 表 但我不想要任何重复的 URL 如何使用 PHP MySQL 检查给定 URL 是否已在表中 如果您不想重复 可以执行以下操作 添加唯一性约束 use REPLACE http dev mysql com doc ref
  • PHP:如何检查总数。 URL 中的参数?

    我正在使用 REQUEST 检索参数 有没有办法找到总数 URL 中的参数 而不是检索每个参数然后进行计数 这将为您提供总数 分隔的 URL 查询参数 count explode SERVER QUERY STRING 如果您只想要唯一的参
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • 使用“AND”表达式构建动态 SQL,而不混淆嵌套条件?

    总的来说 我对 php 和编码相当陌生 我有一系列条件需要测试它们是否已设置 它们是 option1 option2 option3 if isset option1 if isset option2 if isset option3 qu
  • Innodb页面大小设置

    在innodb中 页面大小默认为16kb 如何将页面大小设置为 8kb 是否有在源编译步骤中设置的选项 您不需要在源编译步骤中指定页面大小 MySQL 5 6 及更高版本支持不同的页面大小 无需重新编译 但是 您必须在初始化 InnoDB

随机推荐