SQL 查询详细指南
SQL(Structured Query Language)是一种用于管理和操作关系数据库的标准语言。本文将详细介绍 SQL 中的一些常见操作及其用法,包括 DISTINCT 去重、LIMIT 限制、排序、开窗函数、NULL 值替换、JOIN 与 UNION 等。
1. DISTINCT 去重
当从数据库中查询数据时,可能会遇到重复的行。DISTINCT 关键字用于去除结果中的重复行。
            
            
              sql
              
              
            
          
          SELECT DISTINCT column1, column2 FROM table_name;
        2. LIMIT 限制返回行数
LIMIT 子句用于限制返回的行数。例如,返回前 5 行:
            
            
              sql
              
              
            
          
          SELECT column1, column2 FROM table_name LIMIT 5;
        3. 排序与开窗函数
- ORDER BY :用于对结果集进行排序。可以按升序(
ASC)或降序(DESC)排列。 
            
            
              sql
              
              
            
          
          SELECT column1, column2 FROM table_name ORDER BY column1 ASC;
        - 开窗函数 :提供对行集的分析能力。
ROW_NUMBER()是常用的开窗函数。 
            
            
              sql
              
              
            
          
          SELECT column1, column2, ROW_NUMBER() OVER (PARTITION BY column1 ORDER BY column2 DESC) AS row_num
FROM table_name;
        4. NULL 值处理
使用 COALESCE 或 NVL 函数(在 Oracle 中)处理 NULL 值:
            
            
              sql
              
              
            
          
          SELECT COALESCE(column1, 'default_value') FROM table_name;
        在 Oracle 中可以使用:
            
            
              sql
              
              
            
          
          SELECT NVL(column1, 'default_value') FROM table_name;
        5. SQL 执行顺序
SQL 查询的执行顺序通常如下:
- FROM:确定数据来源。
 - WHERE:过滤行。
 - GROUP BY:对结果进行分组。
 - HAVING:对分组结果进行过滤。
 - SELECT:选择返回的列。
 - ORDER BY:对结果进行排序。
 
6. 联接 (JOIN) 与 UNION
在 SQL 中,JOIN 和 UNION 用于不同的目的:
- 
JOIN:从多个表中获取相关数据,通过匹配条件合并表,将结果集左右叠加。
- INNER JOIN:返回两个表中匹配的行。
 - LEFT JOIN:返回左表中的所有行,即使右表中没有匹配的行。
 - RIGHT JOIN:返回右表中的所有行,即使左表中没有匹配的行。
 - FULL JOIN:返回两个表中的所有行,MySQL 不直接支持 FULL JOIN,通常可以通过 UNION 实现。
 
示例:
sqlSELECT a.column1, b.column2 FROM table1 a LEFT JOIN table2 b ON a.common_field = b.common_field; - 
UNION:合并多个查询的结果,将结果集垂直叠加。
- UNION:去除重复行。
 - UNION ALL:包括所有行,包含重复行。
 
示例:
sqlSELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2; 
注意
在银行,金融数据处理中,LEFT JOIN 经常使用,以确保主要表(左表)的所有行都被保留,即使右表中没有匹配的记录。这样可避免数据丢失。