大数据面试SQL题-笔记01【运算符、条件查询、语法顺序、表连接】

  1. 大数据面试SQL题复习思路一网打尽!(文档见评论区)_哔哩哔哩_bilibili
  2. Hive SQL 大厂必考常用窗口函数及相关面试题

  1. 大数据面试SQL题-笔记01【运算符、条件查询、语法顺序、表连接】
  2. 大数据面试SQL题-笔记02【...】

目录

01、力扣网-sql题

1、高频SQL50题(基础版)

2、高频SQL50题(进阶版)

02、牛客网-sql题

2.1、运算符

2.2、条件查询

2.3、语法顺序

2.4、表连接方式

2.5、语法元素

2.5.1、union

2.5.2、case

2.5.3、if / is null

2.5.4、日期函数-DATEDIF


HSQL绝对重点

三、窗口函数用法举例

  1. 序号函数:row_number() / rank() / dense_rank()(面试重点)
  2. 分布函数:percent_rank() / cume_dist()
  3. 前后函数 lag(expr, n, defval)、lead(expr, n, defval)(面试重点)
  4. 头尾函数:FIRST_VALUE(expr)、LAST_VALUE(expr)
  5. 聚合函数+窗口函数联合使用

01、力扣网-sql题

力扣sql题

1、高频SQL50题(基础版)

没写完 ...

2、高频SQL50题(进阶版)

没写完 ...

02、牛客网-sql题

非技术快速入门

2.1、运算符

2.2、条件查询

_:匹配任意一个字符;
SELECT * FROM 学生表 WHERE name LIKE '张__'//查询姓“张”且名字是3个字的学生姓名。

%:匹配0个或多个字符;
SELECT * FROM 学生表 WHERE 姓名 LIKE ‘张%’//查询学生表中姓‘张’的学生的详细信息。

[ ]:匹配[ ]中的任意一个字符(若要比较的字符是连续的,则可以用连字符“-”表 达 );
SELECT * FROM 学生表 WHERE 姓名 LIKE '[张李刘]%’//查询学生表中姓‘张’、姓‘李’和姓‘刘’的学生的情况。

[^ ]:不匹配[ ]中的任意一个字符。
SELECT * FROM 学生表 WHERE 学号 LIKE '%[^235]' //从学生表表中查询学号的最后一位不是2、3、5的学生信息。

2.3、语法顺序

SELECT columns
FROM table_name
WHERE conditions
GROUP BY columns
HAVING conditions
ORDER BY columns DESC
LIMIT num;
-------------------------------
SELECT * | 字段列表 [as 别名]
FROM 表名
[WHERE 子句]
[GROUP BY 子句]
[HAVING 子句]
[ORDER BY 子句]
[LIMIT 子句];

在 SQL 查询中,通常的语法顺序是这样的:

  1. SELECT:选择要查询的列。
  2. FROM:指定查询的数据表。
  3. WHERE:对数据进行筛选,根据指定的条件过滤行。
  4. GROUP BY:按照指定的列对结果进行分组。
  5. HAVING:对分组后的结果应用条件过滤。
  6. ORDER BY:指定结果的排序顺序。
  7. LIMIT:限制返回的行数。

虽然在实际的 SQL 查询中,您不一定需要每个子句都使用,但是一般来说,这是它们的一般顺序。

至于 AND,它是用于连接多个条件的逻辑运算符。它通常出现在 WHERE 子句中,用于结合多个条件以过滤行。

SELECT * FROM table_name WHERE condition1 AND condition2;

在这种情况下,AND 的使用是在 WHERE 子句中,但它可以根据需要出现在其他地方。

牛客网——SQL19 分组过滤练习题

select

    university,

    avg(question_cnt) as avg_question_cnt,

    avg(answer_cnt) as avg_answer_cnt

from

    user_profile

group by

    university

having #聚合函数结果作为筛选条件时,不能用where,而是用having语法

    avg_question_cnt < 5

    or avg_answer_cnt < 20;

3.3.3 总结内连接查询步骤:

1) 确定查询哪些表

2) 确定表连接的条件

3) 确定查询的条件

4) 确定查询的字段

2.4、表连接方式

  1. 内连接(Inner Join):返回匹配连接条件的行,包括两个表中同时出现的行。
  2. 左连接(Left Join 或 Left Outer Join):返回左表中的所有行,以及右表中与左表匹配的行。如果右表中没有匹配的行,则返回 NULL 值。
  3. 右连接(Right Join 或 Right Outer Join):返回右表中的所有行,以及左表中与右表匹配的行。如果左表中没有匹配的行,则返回 NULL 值。
  4. 全连接(Full Join 或 Full Outer Join):返回左表和右表中的所有行,如果某行在其中一个表中没有匹配的行,则返回 NULL 值。
  5. 自连接(Self Join):将表与自身连接,通常用于比较表中的不同行。

除了这些基本的连接方式外,还有一些其他变体和组合,但这些是最常见的表连接方式。

这些连接方式可以组合使用,因此可能会导致多个表同时参与连接。例如,在一个查询中,您可以使用多个内连接,左连接,右连接或全连接。

2.5、语法元素

2.5.1、union

UNION 是用于合并两个或多个 SELECT 语句的结果集的操作符。它用于将多个查询结果合并为单个结果集,并且会自动去除重复的行。UNION 用于组合两个或多个查询的结果集,并返回一个包含所有查询结果的单个结果集。

分别查看&结果不去重:所以直接使用两个条件的or是不行的,直接用union也不行,要用union all,分别去查满足条件1的和满足条件2的,然后合在一起不去重。

  1. UNIONUNION 操作符用于合并两个查询结果集,并且会自动去除重复的行。如果两个查询的结果集中存在相同的行,则 UNION 只会返回一次该行。UNION 不会返回重复的行。
  2. UNION ALLUNION ALL 也用于合并两个查询结果集,但是它不会去除重复的行。即使两个查询的结果集中存在相同的行,UNION ALL 也会将它们都返回。UNION ALL 返回所有行,包括重复的行。
select 
    device_id, gender, age, gpa
from user_profile
where university = '山东大学'

union all

select 
    device_id, gender, age, gpa
from user_profile
where gender = 'male';

2.5.2、case

CASE
    WHEN 简单表达式1 THEN 结果表达式1
    WHEN 简单表达式2 THEN 结果表达式2 …
    WHEN 简单表达式n THEN 结果表达式n
    [ ELSE 结果表达式n+1 ]
END
----------------------------------------------------
SELECT
    CASE
        WHEN GRADE BETWEEN 85 AND 100 THEN '优'
        WHEN GRADE BETWEEN 70 AND 84  THEN '良'
        WHEN GRADE BETWEEN 60 AND 69  THEN '及格'
        ELSE '不及格'
    END 等级,
    COUNT(*) 人数
FROM
    SC
GROUP BY
    CASE
        WHEN GRADE BETWEEN 85 AND 100 THEN '优'
        WHEN GRADE BETWEEN 70 AND 84  THEN '良'
        WHEN GRADE BETWEEN 60 AND 69  THEN '及格'
        ELSE '不及格'
    END

2.5.3、if / is null

#if判断
SELECT IF(age < 25 OR age IS NULL, '25岁以下', '25岁及以上') age_cut, COUNT(device_id) Number
FROM user_profile
GROUP BY age_cut
---------------------------------
SELECT
    IF (age < 25 OR age IS NULL,
        '25岁以下',
        '25岁及以上'
    ) age_cut,
    COUNT(device_id) Number
FROM
    user_profile
GROUP BY
    age_cut;
---------------------------------
SELECT
    device_id,
    gender,
    IF (age is null, '其他',
        IF (age < 20, '20岁以下',
            IF (age <= 24, '20-24岁', '25岁及以上')
        )
    ) age_cut
FROM
    user_profile;

2.5.4、日期函数-DATEDIFF

MySQL 中的 DAY()MONTH()YEAR() 函数用于从给定的日期中提取日、月和年,返回类型:int。

select
    day (date) as day,
    count(question_id) as question_cnt
from
    question_practice_detail
where
    month (date) = 8
    and year (date) = 2021
group by
    date;

DATEDIFF() 是 MySQL 中的日期函数,用于计算两个日期之间的天数差异。它的语法如下:DATEDIFF(date1, date2)

其中,date1date2 是要比较的两个日期或日期/时间表达式。函数返回 date1 减去 date2 的结果,以天为单位的差值。

例如,假设有两个日期 date1date2,你可以使用 DATEDIFF() 函数来计算它们之间的天数差:

SELECT DATEDIFF('2024-04-26', '2024-04-20'); -- 返回 6

在这个例子中,结果是 6,因为从 2024-04-202024-04-26 之间相隔了 6 天。

ヾ(◍°∇°◍)ノ゙加油~

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 07:26:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 07:26:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 07:26:03       58 阅读
  4. Python语言-面向对象

    2024-07-16 07:26:03       69 阅读

热门阅读

  1. Android Studio Download Gradle 时慢问题解决

    2024-07-16 07:26:03       25 阅读
  2. 网络安全-网络安全及其防护措施3

    2024-07-16 07:26:03       30 阅读
  3. 安全加固:Eureka服务实例安全组配置全攻略

    2024-07-16 07:26:03       26 阅读
  4. Vue+Electron打包桌面应用(从零到一完整教程)

    2024-07-16 07:26:03       34 阅读
  5. Web3发展的基本要素

    2024-07-16 07:26:03       30 阅读
  6. 自研electron31+vue3+elementPlus桌面聊天Exe应用-源码版

    2024-07-16 07:26:03       22 阅读
  7. 2024最新超详细SpringMvc常用注解总结

    2024-07-16 07:26:03       25 阅读
  8. 编织微服务网络:在Eureka中打造分布式服务网格

    2024-07-16 07:26:03       26 阅读
  9. 策略模式原理与C++实现

    2024-07-16 07:26:03       22 阅读
  10. 高效守护:在Eureka中构筑服务的分布式安全防线

    2024-07-16 07:26:03       25 阅读
  11. 什么是HTML?

    2024-07-16 07:26:03       24 阅读