作用
一般与GROUP BY一起使用,将GROUP BY产生的同一个分组中的值连接起来,返回一个字符串结果。
简单用法示例:
students表:学生编号,学生姓名
s_id | s_name |
---|---|
001 | 熊大 |
002 | 熊二 |
003 | 熊三 |
004 | 熊四 |
score表:课程编号,学生编号,成绩
c_id | s_id | s_score |
---|---|---|
01 | 001 | 91 |
01 | 002 | 92 |
01 | 003 | 93 |
01 | 004 | 94 |
02 | 001 | 81 |
02 | 003 | 83 |
02 | 004 | 81 |
03 | 001 | 71 |
03 | 002 | 82 |
03 | 004 | 84 |
查询和‘001’号学生所学课程完全一致的学生信息
-- 查询编号为‘001’的学生所学课程号
# 不使用group_concat()直接查询
mysql> select c_id from score where s_id='001';
+------+
| c_id |
+------+
| 01 |
| 02 |
| 03 |
+------+
# group_concat()可以将查询结果拼接为一个字符串
mysql> select group_concat(c_id) from score group by s_id having s_id='001';
+--------------------+
| group_concat(c_id) |
+--------------------+
| 01,02,03 |
+--------------------+
-- 查询和‘001’号学生所学课程完全一致的学生信息
mysql> select * from students s1
inner join score s2 on s1.s_id=s2.s_id
group by s1.s_id having group_concat(c_id)=(
select group_concat(c_id) from score where s_id='01' group by s_id);
+------+--------+
| s_id | s_name |
+------+--------+
| 01 | 熊大 |
| 02 | 熊四 |
+------+--------+