3.6 MySQL基本查询大全(select、子查询、Distinct、group by分组,order排序、limit限制、左右连接查询)

admin2024-09-11  29

文章目录

  • 3.6.1 MySQL的基本查询
      • 1. SELECT语句基本语法
      • 2. DISTINCT
      • 3. 指定列,去除重复列
      • 4. 给列设置别名
      • 5. 使用WHERE子句查询指定条件
        • 比较判断
        • 范围判断
        • 字符串模式匹配
        • 错误判断
        • 空值判断
      • 6. 使用ORDER子句对查询结果排序
      • 7. 使用LIMIT限制查询结果数量
  • 3.6.2 分组查询
        • 1. 聚合查询
        • 2. GROUP BY语句
        • 3. HAVING语句
  • 3.6.3 连接查询
        • 1. 相等连接
        • 2. 自连接
        • 3. 不等值连接
        • 4. 左外连接
        • 5. 右外连接
  • 3.6.4 子查询
        • 1. 返回单值的子查询
        • 2. 返回多值的子查询
  • 3.6.5 合并查询
        • 使用UNION
        • 使用UNION ALL
      • 注意事项

3.6.1 MySQL的基本查询

让我们详细探讨MySQL中的基本查询操作,包括各种子句和查询技巧。

1. SELECT语句基本语法

SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column1, column2, ...
LIMIT offset, count;
  • SELECT 用于指定要查询的列。
  • FROM 指定查询的表名。
  • WHERE 用于设置查询条件。
  • ORDER BY 用于对查询结果进行排序。
  • LIMIT 用于限制查询结果的数量。

2. DISTINCT

DISTINCT 关键字用于返回唯一不同的值。

SELECT DISTINCT column1, column2, ...
FROM table_name
WHERE condition;

3. 指定列,去除重复列

指定列时,可以列出需要查询的列名,去除重复列通常使用 DISTINCT

SELECT DISTINCT column1, column2
FROM table_name;

4. 给列设置别名

使用 AS 关键字给列设置别名。

SELECT column1 AS alias1, column2 AS alias2
FROM table_name;

5. 使用WHERE子句查询指定条件

比较判断
SELECT *
FROM table_name
WHERE column1 = 'value';

显示效果:返回 table_name 表中 column1 列值为 ‘value’ 的所有行。

范围判断
SELECT *
FROM table_name
WHERE column1 BETWEEN value1 AND value2;

显示效果:返回 table_name 表中 column1 列值在 value1value2 范围内的所有行。

字符串模式匹配
SELECT *
FROM table_name
WHERE column1 LIKE '%value%';

显示效果:返回 table_name 表中 column1 列值包含 ‘value’ 字符串的所有行。

错误判断
SELECT *
FROM table_name
WHERE column1 REGEXP '^[a-zA-Z]+$';

显示效果:返回 table_name 表中 column1 列值符合正则表达式(只包含字母)的所有行。

空值判断
SELECT *
FROM table_name
WHERE column1 IS NULL;

显示效果:返回 table_name 表中 column1 列为 NULL 的所有行。

6. 使用ORDER子句对查询结果排序

SELECT *
FROM table_name
ORDER BY column1 ASC, column2 DESC;

显示效果:返回 table_name 表中所有行,按 column1 升序和 column2 降序排序。

7. 使用LIMIT限制查询结果数量

SELECT *
FROM table_name
LIMIT 10;

显示效果:返回 table_name 表中的前10行数据。

3.6.2 分组查询

1. 聚合查询
SELECT COUNT(*), AVG(column1), MAX(column2)
FROM table_name;

显示效果:返回 table_name 表的记录数、column1 列的平均值和 column2 列的最大值。

2. GROUP BY语句
SELECT column1, COUNT(*)
FROM table_name
GROUP BY column1;

显示效果:返回 table_name 表中 column1 列的每个不同值及其对应的行数。

3. HAVING语句
SELECT column1, COUNT(*)
FROM table_name
GROUP BY column1
HAVING COUNT(*) > 1;

显示效果:返回 table_name 表中 column1 列的每个值,且该值对应的行数大于1。

3.6.3 连接查询

1. 相等连接
SELECT a.*, b.*
FROM table_a a
JOIN table_b b ON a.id = b.a_id;

显示效果:返回 table_atable_b 表中 id 相等的行的合并结果。

2. 自连接
SELECT a.*, b.*
FROM table_name a
JOIN table_name b ON a.id = b.parent_id;

显示效果:返回 table_name 表中 idparent_id 相等的行的合并结果。

3. 不等值连接
SELECT a.*, b.*
FROM table_a a
LEFT JOIN table_b b ON a.id <> b.a_id;

显示效果:返回 table_a 表中的所有行,以及 table_b 表中 id 不等于 a_id 的行。

4. 左外连接
SELECT a.*, b.*
FROM table_a a
LEFT JOIN table_b b ON a.id = b.a_id;

显示效果:返回 table_a 表中的所有行,以及 table_b 表中 id 等于 a_id 的行。

5. 右外连接
SELECT a.*, b.*
FROM table_a a
RIGHT JOIN table_b b ON a.id = b.a_id;

显示效果:返回 table_b 表中的所有行,以及 table_a 表中 id 等于 a_id 的行。

3.6.4 子查询

1. 返回单值的子查询
SELECT *
FROM table_name
WHERE column1 = (SELECT MAX(column1) FROM table_name);

显示效果:返回 table_name 表中 column1 列值等于该列最大值的所有行。

2. 返回多值的子查询
SELECT *
FROM table_name
WHERE column1 IN (SELECT column1 FROM another_table);

显示效果:返回 table_name 表中 column1 列值在 another_table 表的 column1 列中的所有行。

3.6.5 合并查询

使用UNION
SELECT column1 FROM table1
UNION
SELECT column1 FROM table2;

显示效果:返回 table1table2 表中 column1 列的所有不同值。

使用UNION ALL
SELECT column1 FROM table1
UNION ALL
SELECT column1 FROM table2;

显示效果:返回 table1table2 表中 column1 列的所有值,包括重复值。

注意事项

  • 在使用 WHERE 子句时,确保条件表达式正确。
  • 使用 ORDER BY 时,可以指定多个列进行排序。
  • 使用 LIMIT 时,可以指定偏移量和数量。
  • 在使用 GROUP BYHAVING 时,确保聚合函数和条件正确。
  • 在进行连接查询时,确保连接条件正确。
  • 在使用子查询时,确保子查询返回正确的结果集。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!