sql子查询

sql子查询

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))

你可能感兴趣的:(sql,数据库)