MySQL数据库学习之去重与连接查询详解
在MySQL数据库中,去重和连接查询是两个非常常用的操作,本文将详细介绍这两种操作的使用方法和注意事项。
去重操作
1、使用DISTINCT关键字去重
在MySQL中,可以使用DISTINCT关键字对查询结果进行去重,语法如下:
SELECT DISTINCT 列名 FROM 表名;
有一个名为students的表,包含以下数据:
id | name | age |
1 | 张三 | 20 |
2 | 李四 | 22 |
3 | 王五 | 20 |
4 | 赵六 | 22 |
要查询所有不同的年龄,可以使用以下SQL语句:
SELECT DISTINCT age FROM students;
查询结果为:
age |
20 |
22 |
2、使用GROUP BY子句去重
除了使用DISTINCT关键字,还可以使用GROUP BY子句对查询结果进行去重,语法如下:
SELECT 列名 FROM 表名 GROUP BY 列名;
要查询所有不同的年龄,可以使用以下SQL语句:
SELECT age FROM students GROUP BY age;
查询结果为:
age |
20 |
22 |
需要注意的是,使用GROUP BY子句去重时,查询结果中的列名不能直接使用原始表中的列名,需要使用聚合函数(如COUNT、SUM等)或者重新命名。
SELECT age, COUNT(age) as count FROM students GROUP BY age;
连接查询
1、内连接(INNER JOIN)
内连接是最常见的连接方式,它会返回两个表中满足连接条件的记录,语法如下:
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.列名 = 表2.列名;
有两个名为students和courses的表,分别包含学生信息和课程信息,可以使用以下SQL语句进行内连接查询:
SELECT * FROM students INNER JOIN courses ON students.id = courses.student_id;
查询结果为:
id | name | age | course_id | course_name | student_id | teacher_id | score |
1 | 张三 | 20 | 1 | Python | 1 | 1 | 90 |
2 | 李四 | 22 | 2 | Java | 2 | 2 | 85 |
3 | 王五 | 20 | NULL | NULL | NULL | NULL | NULL |
NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||//NULL表示没有匹配的记录。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/505360.html