SQL_ZOO刷题笔记

SQL ZOO是什么?

SQL ZOO是一个在线的SQL练习的网站,这里提供比较丰富的练习题目。和Leetcode相比,SQL ZOO练习材料更加丰富更加系统,而且免费。Leetcode上面免费的SQL练习题大概是20道左右;SQL ZOO上则有9个模块的练习题,每个模块有10-20个练习题。不足之处是讨论区不那么好用,且没有参考答案。

basics

例题部分

三道题例题分别考察 where, in, between的用法。

quiz

增加了like, 通配符%, 函数length的考察

world quiz

例题部分

  • 8题 考察了逻辑运算符号xor的用法,直接和and,or一样在where 字段中使用就好了。
  • 9题 考察了round函数 该函数控制小数位。需要注意在SQL里面 3/5 = 0
  • 12题 考察了left函数。

nobel quiz

例题部分

  • 12题目 考察单引号在字符串中的表示法。用转义字符\,比如'EUGENE O\'NEILL'
  • 例题增加了对order by的考察

select in selects quiz

  • 子查询直接出一个结果
  • 子查询中的条件依赖于父查询中的变量
  • 如果需要用到子查询,思考是不是可以用分组聚合函数解决问题

例题部分

  • 例题5 考察round(v1,v2) 第二个变量为0,则表示保留到整数位。
  • 子查询结果应用到父查询中 例题5中的一个例子
SELECT name
  FROM world
 WHERE population >= ALL(SELECT population
                           FROM world
                          WHERE population>0)

注意All的用法,第二个select语句直接出了字段结果。理论上只需要运行一次。

  • 例题9中 查找
select a.name, a.continent,a.population
from world a
where  25000000 >= all(select population from world b where a.continent = b.continent)

这里子表查询中字表查询是嵌套的,父查询有多少条记录,那么字表就运行多少次。

  • 例题10 第一次做时条件没有写对。

sum and count quiz

  • group by 同时存在字段和聚合函数的时候,一定记得加上。
  • having 条件写在group by 之后
  • group by 有组合的去除重复项目的功能

more join quiz

电影-演员
15. List all the people who have worked with ‘Art Garfunkel’.
类似Edinburgh Buses的解题思路:

select a2.name
from actor a1
join casting c1 on a1.id = c1.actorid and a1.name = 'Art Garfunkel'
join casting c2 on c1.movieid = c2.movieid
join  actor a2 on c2.actorid = a2.id and a2.name <> 'Art Garfunkel'

--self join casting on movieid 可以查询到所有共事的演员(包括自己和自己)。

self join quize

Edinburgh Buses
6. The query shown is similar to the previous one, however by joining two copies of the stops table we can refer to stops by name rather than by number. Change the query so that the services between ‘Craiglockhart’ and ‘London Road’ are shown.

SELECT a.company, a.num, stopa.name, stopb.name
FROM route a JOIN route b ON
  (a.company=b.company AND a.num=b.num)
  JOIN stops stopa ON (a.stop=stopa.id)
  JOIN stops stopb ON (b.stop=stopb.id)
WHERE stopa.name='Craiglockhart' and stopb.name = 'London Road'

在此之前,没有想到过可以用笛卡尔积的解法求解路线的问题。

你可能感兴趣的:(SQL)