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


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 时,确保聚合函数和条件正确。
  • 在进行连接查询时,确保连接条件正确。
  • 在使用子查询时,确保子查询返回正确的结果集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值