高频 SQL 50 题(基础版)连接部分

1、使用唯一标识码替换员工ID

sql 复制代码
# Write your MySQL query statement below
SELECT 
    b.unique_id, a.name
FROM 
    Employees as a
LEFT JOIN 
    EmployeeUNI as b
ON 
    a.id = b.id;

2、产品销售分析 I

sql 复制代码
# Write your MySQL query statement below
SELECT
    p.product_name, s.year, s.price
FROM 
    Sales s
JOIN
    Product p
ON
    s.product_id = p.product_id

总结

  • INNER JOIN:仅返回匹配的记录。
  • LEFT JOIN:返回左表的所有记录,即使右表没有匹配的记录。
  • RIGHT JOIN:返回右表的所有记录,即使左表没有匹配的记录。
  • FULL JOIN :返回左表和右表的所有记录,没匹配的部分用 NULL 填充。
  • CROSS JOIN:返回两张表的笛卡尔积,生成所有可能的组合。
  • SELF JOIN:将表与自身进行连接,常用于表示层级关系。
  • NATURAL JOIN:自动根据同名列进行连接。

在MySQL中,JOIN操作默认使用的是INNER JOIN。INNER JOIN是MySQL默认的JOIN类型。它返回两个表中符合条件的行。INNER JOIN使用ON关键字来指定连接条件,将两个表中符合条件的记录合并在一起,生成一个新的结果集。

3、进店却未进行过交易的顾客

sql 复制代码
# Write your MySQL query statement below
SELECT
    v.customer_id,count(v.customer_id)count_no_trans
FROM
    Visits v
LEFT JOIN 
    Transactions t
ON 
    v.visit_id = t.visit_id
WHERE
    transaction_id is NULL
GROUP BY
    v.customer_id

4、上升的温度

sql 复制代码
SELECT 
    a.id
FROM 
    Weather as a
CROSS JOIN
    Weather as b
WHERE
    datediff(a.recordDate,b.recordDate) = 1 
AND
    a.Temperature >b.Temperature

5、每台机器的进程平均运行时间

sql 复制代码
# Write your MySQL query statement below
SELECT
    machine_id, round(sum(if(activity_type = 'start', -timestamp, timestamp)) / count(*)*2, 3) as processing_time
FROM 
    Activity
GROUP BY
    machine_id

6、员工奖金

sql 复制代码
# Write your MySQL query statement below
SELECT
    e.name, b.bonus
FROM 
    Employee e
LEFT JOIN
    Bonus b
ON
    e.empId = b.empId
WHERE
    b.bonus is NULL OR b.bonus < 1000

7、学生们参加各科测试的次数

sql 复制代码
SELECT 
    s.student_id, s.student_name, sub.subject_name, IFNULL(grouped.attended_exams, 0) AS attended_exams
FROM 
    Students s
CROSS JOIN 
    Subjects sub
LEFT JOIN (
    SELECT student_id, subject_name, COUNT(*) AS attended_exams
    FROM Examinations
    GROUP BY student_id, subject_name
) grouped 
ON s.student_id = grouped.student_id AND sub.subject_name = grouped.subject_name
ORDER BY s.student_id, sub.subject_name;

8、至少有5名直接下属的经理

sql 复制代码
# Write your MySQL query statement below
SELECT 
    b.name
FROM 
    Employee a
LEFT JOIN
    Employee b
ON 
    a.managerId = b.id
GROUP BY
    a.managerId
HAVING 
    COUNT(b.id)>=5  

9、确认率

sql 复制代码
# Write your MySQL query statement below
SELECT
    T1.user_id,round(count(if(T2.action = "confirmed",true,null)) / count(*),2) AS confirmation_rate
FROM
    Signups as T1 
JOIN 
    confirmations AS T2
ON 
    T1.user_id = T2.user_id
GROUP BY
    T1.user_id;
相关推荐
●VON3 小时前
鸿蒙Flutter实战:分类管理页BottomSheet CRUD
数据库·flutter·华为·harmonyos·鸿蒙
Cosolar3 小时前
Chroma向量库面试学习指南
数据库·人工智能·面试·职场和发展·数据库架构
企服AI产品测评局4 小时前
Agent适配信创环境实测:企业级自动化如何实现国产操作系统与数据库全兼容?
运维·数据库·人工智能·ai·chatgpt·自动化
cfm_29144 小时前
Redis数据安全性解析
数据库·redis·缓存
DIY源码阁4 小时前
JavaSwing学生成绩管理系统 - MySQL版
java·数据库·mysql·eclipse
NiceCloud喜云6 小时前
Claude Code Routines 实战:三种触发器跑通云端自动化编码
android·运维·数据库·人工智能·自动化·json·飞书
辞忧九千七6 小时前
Redis 单机一主二从主从复制完整搭建指南
数据库·redis·缓存
lzhdim6 小时前
SQL 入门 16:SQL 事务隔离级别与死锁解析(易懂)
数据库·sql
AI 小老六7 小时前
Claude Code 如何压缩上下文:Microcompact、Prompt Cache 与 cache_edits 工程拆解
数据库·人工智能·ai·语言模型·架构·系统架构
Chasing__Dreams7 小时前
Redis--基础知识点--32--redis底层存储结构
数据库·redis·缓存