group_concat函数
-- 多对多查询时,分组合并 GROUP_CONCAT可以将同一组中多个名字连接起来
SELECT s.stu_num,s.stu_name,GROUP_CONCAT(s.subject) sbjt
FROM stu s
LEFT JOIN major m ON m.id=s.majorid
GROUP BY s.stu_num,s.stu_name,m.name
stu_num | stu_name | sbjt |
---|---|---|
1 | 张三 | 语文 |
1 | 张三 | 数学 |
1 | 张三 | 英语 |
2 | 李四 | 语文 |
2 | 李四 | 数学 |
2 | 李四 | 英语 |
3 | 王五 | 语文 |
3 | 王五 | 数学 |
… | … | … |
stu_num | stu_name | sbjt |
---|---|---|
1 | 张三 | 语文,数学,英语 |
2 | 李四 | 语文,数学,英语 |
3 | 王五 | 语文,数学,英语,物理 |
4 | 陈六 | 数学 |
可以看出用完这个函数,可以把同一组的不同名字连起来,但是这个例子和多对多查询关系不大
-- 子查询,用一个查询的结果当条件进行查询
-- 一行一列
-- 查询工资最多的员工,因为不知道工资最高是多少是谁,先查询出来工资最高量然后借用这个当条件查询
SELECT * FROM epmloyee WHERE money = (SELECT MAX(money) FROM epmloyee)
-- 表子查询,(多行多列)把一个表的查询结果当作另一个表的数据来源
-- 查询性别是男或女的人数大于二的一项的人数多少
SELECT * FROM (SELECT COUNT(*)c,gender FROM student GROUP BY gender) t WHERE t.c>2
-- 在where后面 使用列子查询(一列多行)
SELECT * FROM student WHERE height IN (SELECT height FROM student WHERE height IN(1.50,1.90))