提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql


提示:以下是本篇文章正文内容,下面案例可供参考

一、查询语句——select

  1. 从表中选取数据
  • 选取某一列数据:select 列名 from 表名
  • 选取全部数据:select * from 表名
  1. 从表中选取符合条件的数据
  • select 列名1,列名2 from 表名 where 条件
  1. 规范
  • 汉语别名需要用"括起来;
  • 单行注释为两条横线加一个空格“-- 注释内容
  • 多行注释为“/注释内容/”
  • select distinct name,会返回不重复的结果

二、运算符

1.算数/比较/逻辑运算符

  • 算数运算符:+ - * /
  • 比较运算符:=, <>, >=, >, <=, <
  • 逻辑运算符:NOT, AND, OR
运算符 含义
+ 加法
- 减法
* 乘法
/ 除法
= 等于
<> 不等于
>= 大于等于
> 大于
<= 小于等于
< 小于
NOT 逻辑非
AND 逻辑与
OR 逻辑或

2. 使用规范

  • NOT不能单独使用,一般是“IS NOT …”或者"NOT IN…"
  • AND和OR用于where有多个条件时
  • AND和OR条件都有时,()里的优先

三、 练习

1. 练习题1

编写一条SQL语句,从product(商品)表中选取出“登记日期(regist在2009年4月28日之后”的商品,查询结果要包含product_name和regist_date两列。

代码如下(示例):

select product_name, register_date from product
where regist > '2009-04-28';

2. 练习题2

请说出对product 表执行如下3条SELECT语句时的返回结果。
①.

select * from product
where purchase_price = NULL; 

select * from product
where purchase_price<>null;

select * from product 
where purchase_price>null;

返回结果如下:上述语句中null的使用不争取,想要查询是否为控制时,应使用is null或is not null
在这里插入图片描述

3. 练习题3

写出两种得到下图所示的select语句:
在这里插入图片描述

① 代码1:

select product_name,sale_price,purchase_price
from product
where sale_price-500>=purchase_price;

② 代码2:

select product_name,sale_price,purchase_price
from product
where sale_price >=purchase_price+500;

4. 练习题4

请写出一条SELECT语句,从product表中选取出满足“销售单价打九折之后利润高于100日元的办公用品和厨房用具”条件的记录。查询结果要包括product_name列、product_type列以及销售单价打九折之后的利润(别名设定为profit)。

select product_name,product_type,(sale_price*0.9-purchase_price) as profit
from product 
where sale_price*0.9-purchase_price>=100
and product_type in ('厨房用具','办公用品');

结果如图所示:
在这里插入图片描述

5. 练习题5

请指出下述SELECT语句中所有的语法错误。

SELECT product_id, SUM(product_name)
--本SELECT语句中存在错误。
  FROM product 
 GROUP BY product_type 
 WHERE regist_date > '2009-09-01';
  • 错误1: product_name不能用sum()函数聚合
  • 错误2:group by 后的字段product_type和select后的product_id不一致
  • 错误3:where应在group by之前使用

6. 练习题6

请编写一条SELECT语句,求出销售单价(sale_price列)合计值大于进货单价(purchase_price列)合计值1.5倍的商品种类。

select product_type,sum(sale_price) as total_sale, sum(purchase_price) as total_purchase
from product
group by product_type
having sum(sale_price)>1.5*sum(purchase_price);

7. 练习题7

此前我们曾经使用SELECT语句选取出了product(商品)表中的全部记录。当时我们使用了ORDERBY子句来指定排列顺序,但现在已经无法记起当时如何指定的了。请根据下列执行结果,思考ORDERBY子句的内容。

select * from product
order by regist_date desc,sale_price asc;