(202307)wonderful-sql:复杂一点的查询(task3)

这篇具有很好参考价值的文章主要介绍了(202307)wonderful-sql:复杂一点的查询(task3)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

教程链接:Datawhale - 一个热爱学习的社区

知识学习

1 视图

视图是一张虚拟的表。《sql基础教程第2版》用一句话非常凝练的概括了视图与表的区别---“是否保存了实际的数据”。

  1. 通过定义视图可以将频繁使用的SELECT语句保存以提高效率。
  2. 通过定义视图可以使用户看到的数据更加清晰。
  3. 通过定义视图可以不对外公开数据表全部字段,增强数据的保密性。
  4. 通过定义视图可以降低数据的冗余。

创建视图的基本语法是

CREATE VIEW <视图名称>(<列名1>,<列名2>,...) AS <SELECT语句>

注意:可以在视图的基础上再创建视图;需要注意的是在一般的DBMS中定义视图时不能使用ORDER BY语句,因为视图和表一样,数据行都是没有数据的;

我们也可以创建多表视图,使用WHERE进行条件控制

CREATE VIEW view_shop_product(product_type, sale_price, shop_name)
AS
SELECT product_type, sale_price, shop_name
  FROM product,
       shop_product
 WHERE product.product_id = shop_product.product_id;

2 子查询

子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从 MySQL 4.1 开始引入,在 SELECT 子句中先计算子查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一个表或者多个表。

与视图的关系:子查询就是将用来定义视图的 SELECT 语句直接用于 FROM 子句当中。其中AS studentSum可以看作是子查询的名称,而且由于子查询是一次性的,所以子查询不会像视图那样保存在存储介质中, 而是在 SELECT 语句执行之后就消失了。

小结

视图和子查询是数据库操作中较为基础的内容,对于一些复杂的查询需要使用子查询加一些条件语句组合才能得到正确的结果。但是无论如何对于一个SQL语句来说都不应该设计的层数非常深且特别复杂,不仅可读性差而且执行效率也难以保证,所以尽量有简洁的语句来完成需要的功能。

练习题-第一部分

3.1 创建出满足下述三个条件的视图

CREATE VIEW ViewPractice5_1 AS
SELECT product_name, sale_price, regist_date
FROM product
WHERE sale_price >= 1000
    AND regist_date = '2009-09-20';

输入 SELECT * FROM ViewPractice5_1; 检查结果

(202307)wonderful-sql:复杂一点的查询(task3),参与dw开源学习,sql,数据库,mysql

3.2 向习题一中创建的视图 ViewPractice5_1 中插入如下数据,会得到什么样的结果?为什么?

INSERT INTO ViewPractice5_1 VALUES (' 刀子 ', 300, '2009-11-02');

结果

[2023-07-26 14:18:18] [HY000][1423] Field of view 'shop.ViewPractice5_1' underlying table doesn't have a default value

 翻译为底层的表没有默认的值,推测因为这个视图底层的表有的列要求非空,而这里给不出值,就不能了。由此也可知道修改视图也会修改底层的表。

3.3 请根据如下结果编写 SELECT 语句,其中 sale_price_avg 列为全部商品的平均销售单价。

SELECT product_id, product_name, sale_price, (SELECT AVG(sale_price) FROM product) AS sale_price_avg
FROM product;

(202307)wonderful-sql:复杂一点的查询(task3),参与dw开源学习,sql,数据库,mysql

 3.4 请根据习题一中的条件编写一条 SQL 语句,创建一幅包含如下数据的视图(名称为AvgPriceByType)。

CREATE VIEW AvgPriceByType(product_id,product_name,product_type,sale_price,sale_price_avg_type)
AS
SELECT product_id,product_name,product_type,sale_price,
(SELECT avg(sale_price) FROM product AS pm WHERE pm.product_type = pn.product_type GROUP BY product_type) 
    AS sale_price_avg_type FROM product AS pn

练习题-第二部分

3.5 四则运算中含有 NULL 时(不进行特殊处理的情况下),运算结果是否必然会变为NULL ?

 是的,四则运算中含有NULL,不进行特殊处理,运算结果是必然变成NULL。

3.6 对本章中使用的 product(商品)表执行如下 2 条 SELECT 语句,能够得到什么样的结果呢

SELECT product_name, purchase_price
  FROM product
 WHERE purchase_price NOT IN (500, 2800, 5000);

返回product_name和purchase_price两列,行的数据满足其原本在product表中的purchase_price不是500,2800,500和NULL。

SELECT product_name, purchase_price
  FROM product
 WHERE purchase_price NOT IN (500, 2800, 5000, NULL);

NULL不等于任何值,无法判断即使不是500,2800,5000的那些值是否为NULL。

可以用NOT EXISTS字句来查找,因为在子查询中使用等于操作符时,NULL 值将被视为与其他 NULL 值不相等。例如:

SELECT * FROM mytable WHERE NOT EXISTS (SELECT * FROM mytable2 WHERE mytable2.col1 = mytable.col1);

3.7 编写语句将商品分为三档

SELECT SUM(CASE WHEN sale_price <= 1000 THEN 1 ELSE 0 END) AS low_price,
       SUM(CASE WHEN sale_price BETWEEN 1001 AND 3000 THEN 1 ELSE 0 END ) AS mid_price,
       SUM(CASE WHEN sale_price >= 3001 THEN 1 ELSE 0 END) AS high_price
FROM product;

结果

(202307)wonderful-sql:复杂一点的查询(task3),参与dw开源学习,sql,数据库,mysql

 文章来源地址https://www.toymoban.com/news/detail-608907.html

到了这里,关于(202307)wonderful-sql:复杂一点的查询(task3)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MongoDB - 构造复杂查询条件执行查询

    1. 构造 keyword 的查询条件 2. 构造 threatSubType 的查询条件 3. 相应的实体类

    2024年02月11日
    浏览(30)
  • Mysql 复杂查询丨联表查询

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 联表查询(Join)是一种在数据库中使用多个表进行关联查询的操作。它通过使用 JOIN 将多个表连接在一起,并根据关联条件从这些表中检索数据 INNER JOIN(内连接) 内连接(Inner Join)是一种在联表查询中使用的

    2024年02月13日
    浏览(38)
  • [MySQL]复杂查询(进阶)

    专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来!  1.新增 2. 聚合查询 2.1 聚合函数 3. 分组查询(grop by) 4. ha

    2024年02月16日
    浏览(33)
  • ElasticSearch学习4--复杂查询

    查询所有:查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:         match_query 根据单个字段查询         multi_match_query  根据多个字段查询         3.精确查询:根据精确

    2024年02月11日
    浏览(41)
  • ElasticSearch多条件复杂查询实现

    前面实现方式和但条件一致 查询代码区别如下 注释里面标注了或者和and那两行的区别 网站链接 elasticsearch(ES)在SpringBoot中的复杂查询(多条件分页查询以及聚合查询)_尺规作图的博客-CSDN博客_springboot 整合es多条件

    2024年02月04日
    浏览(47)
  • ElasticSearch的复杂查询与脚本功能

    Elasticsearch是一个基于分布式搜索和分析引擎,它可以为应用程序提供实时、可扩展的搜索功能。Elasticsearch是一个基于Lucene的搜索引擎,它提供了一个分布式多用户能力的全文搜索引擎。Elasticsearch是一个基于Lucene的搜索引擎,它提供了一个分布式多用户能力的全文搜索引擎。

    2024年02月21日
    浏览(35)
  • MySQL数据库——复杂查询(一)

    一、本关任务:给定一张  tb_Salary  表,如下所示,有 m = 男性 和 f = 女性 的值。交换所有的 f 和 m 值(例如,将所有 f 值更改为 m ,反之亦然)。 id name sex salary 1 Elon f 7000 2 Donny f 8000 3 Carey m 6000 4 Karin f 9000 5 Larisa m 5500 6 Sora m 500 要求只使用一句更新 update 语句,且不允许含

    2023年04月09日
    浏览(84)
  • Llama2跟进:GPU硬件要求、微调注意事项等【202307】

    在过去几天里关注Llama 2 的所有新闻已经超出了全职工作的范围。 信息网络确实充满了拍摄、实验和更新。 至少还要再过一周,但已经有一些关键点了。 推荐:用 NSDT设计器 快速搭建可编程3D场景。 在这篇文章中,我将澄清我对原始帖子中有关 Llama 2 的所有内容所做的一些

    2024年02月15日
    浏览(38)
  • Springboot整合Elasticsearch 7.X 复杂查询

    这里使用Springboot 2.7.12版本,Elasticsearch为7.15.0。 导入依赖 yaml文件配置: 构建实体类,这里为商品的SKU属性表 构建service层进行复杂查询:指定条件查询,聚合查询,分页查询,排序查询,高亮等等 接口测试: 查询如下:      

    2024年02月03日
    浏览(38)
  • 数据库实验一:基本表操作、基本数据查询和复杂数据查询

    按下图创建四个表:teacher、student、course和SC,为属性选择合适的域、合适的主码和外键约束,并为他们插入所列出数据; 中文语义 teacher (TID,TNAME,DEPT,SALARY) 教师(教工号,姓名,系,薪水) student (SID,SNAME,DEPT,AGE,GENDER) 学生(学号,姓名,系,年龄,性别) course (CID,CNAME,DE

    2024年02月01日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包