mysql数据库 数据查询闯关(头哥)

第1关:简单的单表查询

本关任务:查询PetStore数据库中用户表account中的用户编号是u0001的用户姓名fullname和电话号码phone。
其中account表结构如下:

相关知识

为了完成本关任务,你需要掌握:select。

语法格式:
SELECT [ALL | DISTINCT] 输出列表达式, ...
[FROM 表名1 [ , 表名2] …] /FROM子句/ [WHERE 条件] /WHERE子句/ [GROUP BY {列名 | 表达式 | 列编号}
[ASC | DESC], ... /* GROUP BY 子句*/
[HAVING 条件] /* HAVING 子句*/
[ORDER BY {列名 | 表达式 | 列编号}
[ASC | DESC] , ...] /ORDER BY子句/ [LIMIT {[偏移量,] 行数|行数OFFSET偏移量}] /LIMIT子句/

  1. 顺序严格地排序。例如,一个HAVING子句必须位于GROUP BY子句之后,并位于ORDER BY子句之前。

首先他要求市查询用户表account中的用户编号是u0001的用户姓名fullname和电话号码phone。

这是有条件的查询字段;由于他的用户编号是"u0001",所以应该是这样

第2关:定义列别名

任务描述

本关任务:查询PetStore数据库account表中所有女性用户的姓名和email,结果中列的标题定义为“姓名”、“电子邮箱”。
其中account表结构如下:

####相关知识

为了完成本关任务,你需要掌握:select语句。

语法格式:
SELECT column_name [AS] column_alias

思路:这个可以这么理解你    首先确定表->  确定条件->查找数据(如果设置别名用as别名)

测试如下:

第3关:case

任务描述

本关任务:查询PetStore数据库product商品表中商品名称和数量,对其库存数量按以下规则进行替换:若数量小于5,替换为“需进货”;若数量在5-50之间,替换为“库存正常”;若数量大于50,替换为“库存积压”。列标题更改为“库存”。
其中product表结构如下:

相关知识

为了完成本关任务,你需要掌握:select语句。

语法格式:
CASE
WHEN 条件1 THEN 表达式1
WHEN 条件2 THEN 表达式2
……
ELSE 表达式
END

 思路:

这个的话按照语法格式来:

注:select 字段1,字段2,#这里最后一个一定要记得加上,

      end as 别名

测试如下:

第4关:计算列值

任务描述

本关任务:查询PetStore数据库lineitem订单详情表中每种商品在每个订单中的总价。
其中lineitem表结构如下:

####相关知识

为了完成本关任务,你需要掌握:select语句。

语法格式:
SELECT 计算列值的表达式1 [ , 计算列值的表达式2 ]

 思路:这个也比较简单,按照语法格式来写

这里的话由于他是要你来求它的总量,那么你就要单价x数量得到总价,

测试如下

 第5关:消除结果集重复行

任务描述

本关任务:查询PetStore数据库account用户表中的用户地址address,注意重复的不显示。
其中account表结构如下:

####相关知识

为了完成本关任务,你需要掌握:select语句。

语法格式:
SELECT [ALL | DISTINCT] 输出列表达式, ...
[FROM 表名1 [ , 表名2] …] /FROM子句/ [WHERE 条件] /WHERE子句/ [GROUP BY {列名 | 表达式 | 列编号}
[ASC | DESC], ... /* GROUP BY 子句*/
[HAVING 条件] /* HAVING 子句*/
[ORDER BY {列名 | 表达式 | 列编号}
[ASC | DESC] , ...] /ORDER BY子句/ [LIMIT {[偏移量,] 行数|行数OFFSET偏移量}] /LIMIT子句/

注:顺序严格地排序。例如,一个HAVING子句必须位于GROUP BY子句之后,并位于ORDER BY子句之前

思路:这个主要用到distinct这个去除重复;

测试如下: 

 

第6关:聚合函数

任务描述

本关任务:
1.查询PetStore数据库中所有用户数(通过查询account表的行数可以确定用户数)。
2.查询商品表product中每种商品的平均标价和平均进价。
3.查询所有商品总数量(通过查询product表的qty列数值的总和可以确定商品总数量)。
其中account表结构如下:

 product表结构如下:

####相关知识

为了完成本关任务,你需要掌握:select语句。

语法格式:

 

1.COUNT ( { [ ALL | DISTINCT ] expression } | * )

其中,expression是一个表达式,其数据类型是除BLOB或TEXT之外的任何类型。ALL表示对所有值进行运算,DISTINCT表示去除重复值,默认为ALL。使用COUNT(*)时将返回检索行的总数目,不论其是否包含 NULL值。
2.MAX和MIN分别用于求表达式中所有值项的最大值与最小值,语法格式为:
MAX / MIN ( [ ALL | DISTINCT ] expression )
其中,expression是常量、列、函数或表达式,其数据类型可以是数字、字符和时间日期 类型。
3.SUM和AVG分别用于求表达式中所有值项的总和与平均值,语法格式为:
SUM / AVG ( [ ALL | DISTINCT ] expression )
其中,expression是常量、列、函数或表达式,其数据类型只能是数值型。

思路:

因为他查询的是所有用户数所以count(*),然后用avg和sum聚合函数分别求平均值和总和.很简单

第7关:where子句

任务描述

本关任务:
1.查找订单表orders中订单金额(totalprice)大于300的所有订单的用户号(userid)、订单金额(totalprice)和订单状态(status)。
2.在订单表orders中查找用户号(userid)为u0003号顾客的所有订单情况。
3.在用户表account中查找所有地址address是’广东深圳市’的女性用户信息。
4.在用户表account中查找所有姓刘的用户的电话号码和地址。
5.在商品表product中查找标价listprice在1000-2000之间的商品信息。
6.在用户表account中查找地址address不是’广东广州市’的用户信息。

其中orders表结构如下:

 account表结构如下:

 product表结构如下:

 表中的数据如下:

相关知识

为了完成本关任务,你需要掌握:where

语法

1.WHERE子句必须紧跟FROM子句之后,在WHERE子句中,使用一个条件从FROM子句的中间结果中选取行。其基本格式为:
         WHERE 列 运算符 值

 2.逻辑运算:
通过逻辑运算符(AND、OR、XOR和NOT)组成更为复杂的查询条件。逻辑运算操作的结果是“1”或“0”,分别表示“true”或“false”。

 思路:

写这个不能急要理清思路;否则越写越烦躁;

首先1,他是要求orders中totalprice大于300的所有订单所以where后面就是totalprice大于300

然后就很简单.

2,这个很简单有条件的在表中查询

3,这个稍微加了一点难度,多条件查询,记住中间用and,or之一,

4,这个用到了模糊查询like记住它的格式

select 字段1...from 表名 where   字段 like  条件

like中%是代表多个字符,_代表一个字符

5,between   and   记住数字放两边左边小右边大就OK

6,不是用的是<>或者!=都可以

测试如下:

第8关:多表查询1

任务描述

本关任务:查找用户号是’u0003’号顾客的姓名和所有订单的订单号、订单总价。
其中orders表结构如下:

 

 account表结构如下:

####相关知识

为了完成本关任务,你需要掌握:select多表查询。

语法

SELECT的查询对象由FROM子句指定,其格式为:
FROM 表名1 [ [AS] 别名1 ] [ , 表名2[ [AS] 别名2]] … /查询表/

  1. | JOIN子句 /连接表/ ● 引用单个表的两种方式:
    可以用两种方式引用一个表,第一种方式是使用USE语句让一个数据库成为当前数据库,在这种情况下,如果在FROM子句中指定表名,则该表应该属于当前数据库。第二种方式是指定的时候在表名前带上表所属数据库的名字。例如,假设当前数据库是db1,现在要显示数据库db2里的表tb的内容,使用如下语句:
    SELECT * FROM db2.tb;
    当然,在SELECT关键字后指定列名的时候也可以在列名前带上所属数据库和表的名字,但是一般来说,如果选择的字段在各表中是唯一的,就没有必要去特别指定。

思路:这是一个简单的多表查询

很简单,记住防止有重复数据jiuok所以where后面要加上表1的id=表二的id,对应一下去掉重复

 第9关:多表查询2

任务描述

本关任务:显示订单详情表lineitem中所有订单的订单编号orderid,商品名称name和购买数量quantity。
其中lineitem表结构如下:

 product表结构如下:

 ####相关知识

为了完成本关任务,你需要掌握:select多表查询。

语法

SELECT的查询对象由FROM子句指定,其格式为:
FROM 表名1 [ [AS] 别名1 ] [ , 表名2[ [AS] 别名2]] … /查询表/

  1. | JOIN子句 /连接表/ ● 引用单个表的两种方式:
    可以用两种方式引用一个表,第一种方式是使用USE语句让一个数据库成为当前数据库,在这种情况下,如果在FROM子句中指定表名,则该表应该属于当前数据库。第二种方式是指定的时候在表名前带上表所属数据库的名字。例如,假设当前数据库是db1,现在要显示数据库db2里的表tb的内容,使用如下语句:
    SELECT * FROM db2.tb;
    当然,在SELECT关键字后指定列名的时候也可以在列名前带上所属数据库和表的名字,但是一般来说,如果选择的字段在各表中是唯一的,就没有必要去特别指定。

测试如下:

第10关:多表查询进阶版1

任务描述

本关任务:查找单个订单中订购数量大于5的用户名,订单id和商品名。

其中orders表结构如下:

 account表结构如下:

 product表结构如下:

 lineitem表结构如下:

####相关知识

为了完成本关任务,你需要掌握:select多表查询。

语法

SELECT的查询对象由FROM子句指定,其格式为:
FROM 表名1 [ [AS] 别名1 ] [ , 表名2[ [AS] 别名2]] … /查询表/

  1. | JOIN子句 /连接表/ ● 引用单个表的两种方式:
    可以用两种方式引用一个表,第一种方式是使用USE语句让一个数据库成为当前数据库,在这种情况下,如果在FROM子句中指定表名,则该表应该属于当前数据库。第二种方式是指定的时候在表名前带上表所属数据库的名字。例如,假设当前数据库是db1,现在要显示数据库db2里的表tb的内容,使用如下语句:
    SELECT * FROM db2.tb;
    当然,在SELECT关键字后指定列名的时候也可以在列名前带上所属数据库和表的名字,但是一般来说,如果选择的字段在各表中是唯一的,就没有必要去特别指定。

测试如下:

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Asshebabyฅ

学生请勿打赏,点赞转发关注就行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值