惊艳到我的几个MySQL高级查询技巧

更多资源可添加客服微信:umeitimes

随着数据量持续增长,对合格数据专业人员的需求也会增长。具体而言,对SQL流利的专业人士的需求日益增长,而不仅仅是在初级层面。

因此,Stratascratch的创始人Nathan Rosidi以及我觉得我认为10个最重要和相关的中级到高级SQL概念。

那个说,我们走了!

1.常见表表达式(CTEs)

如果您想要查询子查询,那就是CTEs施展身手的时候 – CTEs基本上创建了一个临时表。

使用常用表表达式(CTEs)是模块化和分解代码的好方法,与您将文章分解为几个段落的方式相同。

请在Where子句中使用子查询进行以下查询。

SELECT
name,
    salary
FROM
    People
WHERE
NAME IN ( SELECT DISTINCT NAME FROM population WHERE country = 'Canada' AND city = 'Toronto' )
AND salary >= (
SELECT
AVG( salary )
FROM
        salaries
WHERE
        gender = 'Female')

这似乎似乎难以理解,但如果在查询中有许多子查询,那么怎么样?这就是CTEs发挥作用的地方。

with toronto_ppl as (
SELECT DISTINCT name
FROM population
WHERE country = 'Canada'
AND city = 'Toronto'
)
   , avg_female_salary as (
SELECT AVG(salary) as avgSalary
FROM salaries
WHERE gender = 'Female'
    )
SELECT name
     , salary
FROM People
WHERE name in (SELECT DISTINCT FROM toronto_ppl)
AND salary >= (SELECT avgSalary FROM avg_female_salary)

现在很清楚,Where子句是在多伦多的名称中过滤。如果您注意到,CTE很有用,因为您可以将代码分解为较小的块,但它们也很有用,因为它允许您为每个CTE分配变量名称(即toronto_ppl和avg_female_salary)

同样,CTEs允许您完成更高级的技术,如创建递归表。

2.递归CTEs.

递归CTE是引用自己的CTE,就像Python中的递归函数一样。递归CTE尤其有用,它涉及查询组织结构图,文件系统,网页之间的链接图等的分层数据,尤其有用。

递归CTE有3个部分:

  • 锚构件:返回CTE的基本结果的初始查询
  • 递归成员:引用CTE的递归查询。这是所有与锚构件的联盟
  • 停止递归构件的终止条件

以下是获取每个员工ID的管理器ID的递归CTE的示例:

with org_structure as (
SELECT id
         , manager_id
FROM staff_members
WHERE manager_id IS NULL
UNION ALL
SELECT sm.id
         , sm.manager_id
FROM staff_members sm
INNER JOIN org_structure os
ON os.id = sm.manager_id

3.临时函数

如果您想了解有关临时函数的更多信息,请检查此项,但知道如何编写临时功能是重要的原因:

  • 它允许您将代码的块分解为较小的代码块
  • 它适用于写入清洁代码
  • 它可以防止重复,并允许您重用类似于使用Python中的函数的代码。

考虑以下示例:

SELECT name
     , CASE WHEN tenure < 1 THEN 'analyst'
WHEN tenure BETWEEN 1 and 3 THEN 'associate'
WHEN tenure BETWEEN 3 and 5 THEN 'senior'
WHEN tenure > 5 THEN 'vp'
ELSE 'n/a'
END AS seniority
FROM employees

 

更多资源可添加客服微信:umeitimes
© 版权声明
THE END
喜欢就支持一下吧
赞赏