文章目录
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
列值在 value1
和 value2
范围内的所有行。
字符串模式匹配
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_a
和 table_b
表中 id
相等的行的合并结果。
2. 自连接
SELECT a.*, b.*
FROM table_name a
JOIN table_name b ON a.id = b.parent_id;
显示效果:返回 table_name
表中 id
和 parent_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;
显示效果:返回 table1
和 table2
表中 column1
列的所有不同值。
使用UNION ALL
SELECT column1 FROM table1
UNION ALL
SELECT column1 FROM table2;
显示效果:返回 table1
和 table2
表中 column1
列的所有值,包括重复值。
注意事项
- 在使用
WHERE
子句时,确保条件表达式正确。 - 使用
ORDER BY
时,可以指定多个列进行排序。 - 使用
LIMIT
时,可以指定偏移量和数量。 - 在使用
GROUP BY
和HAVING
时,确保聚合函数和条件正确。 - 在进行连接查询时,确保连接条件正确。
- 在使用子查询时,确保子查询返回正确的结果集。