SQL学习记录

文章目录

    • 序言
      • 常识
      • group by
        • 1 group by可以用多个列来分组
      • having
        • 1、having与where的差别
        • 2、使用having
      • row_number、over、partition的例子
      • concat、百分比、保留小数
      • all 以及 内外表格
        • all的这个很经典
      • 分组中的字母序
      • distinct
      • CASE WHEN
      • More join
        • 使用多个join
      • COALESCE


序言

  在我研一(18年春)上《大规模数据存储与处理》的时候,老师在课堂里给我讲过SQL的知识。课堂上老师举了几个经典的例子,把select、where、group by、having、order by给讲完了,感觉是很好懂的。其实那时我还选了一门《数据库新技术》的课。这些课对我来讲有点收获,但大体的评价是:所谓新数据库技术、大数据处理,在我只是听到了几个新名词而已。再加之后来没有再接触过数据库的东西,也就渐渐忘得没影了。然而,SQL这个东西在校招面试中是有问到的。可是由于一向的懒惰,加之也没想到以后会用到,所以SQL至今也不怎么会。我想可以说SQL是基础,而大数据和新技术这些书潮流。之前看过一篇文章,一个教授劝勉道:“你应该花大把时间那些基础之上,而不是一直追逐潮流。”这话现在回想起来,愈发觉得有理了。
  年前(2019年末)我借了《SQL必知必会》一书,书中内容倒是简单,易上手,但光看书只是假把式罢了。浏览知乎时遇到一个好的答案,其中提及了一个好的练习网站,昨夜(20200302)上手练习之后就有点欲罢不能——有那种“读书破万卷,下笔如有神”的意思。今日练习之后,更觉SQL功力大增,差不多掌握五六成的样子吧。知识得来不易,然而记忆却是不可靠的,因此记录下来,以便日后回忆和复习。 ——2020年3月3日于武汉


在如何学习 SQL 语言? - 佰初的回答 - 知乎中,提到了一个练习网站:https://zh.sqlzoo.net/wiki/Aggregates_with_DISTINCT,提供了很好的练习题。


PS:以下提到的页码如p86,是指来自《SQL必知必会》第四版(中文)的第86页

常识

  • 1 SQL中的关键字不区分大小写;
  • 2 select子句及其顺序:SQL学习记录_第1张图片

group by

1 group by可以用多个列来分组

  书中p86有提到,下面是一个例子
SQL学习记录_第2张图片


having

1、having与where的差别

  where过滤指定的是行而不是分组。where在分组前过滤,他所排除的行不会出现在分组中。having是基于组进行过滤。

2、使用having

The_nobel_table_can_be_used_to_practice_more_SUM_and_COUNT_functions
SQL学习记录_第3张图片
SQL学习记录_第4张图片
SQL学习记录_第5张图片


row_number、over、partition的例子

  来自The nobel table can be used to practice more SUM and COUNT functions./zh
SQL学习记录_第6张图片

concat、百分比、保留小数

  来自SELECT within SELECT Tutorial/zh
SQL学习记录_第7张图片

all 以及 内外表格

SELECT within SELECT Tutorial/zh
SQL学习记录_第8张图片

all的这个很经典

SQL学习记录_第9张图片

分组中的字母序

SELECT within SELECT Tutorial/zh
SQL学习记录_第10张图片

distinct

The nobel table can be used to practice more SUM and COUNT functions./zh
SQL学习记录_第11张图片

CASE WHEN

The JOIN operation/zh这里只用join(返回笛卡尔积)结果不对,答案中少了部分结果。左外连接的结果是正确的,可能原因是笛卡尔积

SQL学习记录_第12张图片


More join

使用多个join

SQL学习记录_第13张图片
SQL学习记录_第14张图片

SELECT name
FROM (
  SELECT * FROM (SELECT * FROM movie WHERE title='Alien'
    ) a /*只从movie中选择alien,减少中间结果*/ LEFT JOIN casting ON a.id=movieid 
    ) b
   LEFT JOIN actor c ON b.actorid=c.id;

SQL学习记录_第15张图片
SQL学习记录_第16张图片


COALESCE

  如果你想把NULL替换成其他想要的字段,COALESCE会很有用,下面是一个例子:
SQL学习记录_第17张图片
  

你可能感兴趣的:(SQL学习记录)