首页 > 其他分享 >子查询

子查询

时间:2022-08-17 21:59:41浏览次数:44  
标签:-- gender age 查询 student SELECT

子查询

按照结果集的行列数不同,子查询可以分为以下几类:

  • 标量子查询:结果集只有一行一列(单行子查询)
  • 列子查询:结果集有一列多行
  • 行子查询:结果集有一行多列
  • 表子查询:结果集多行多列
-- 查询比小虎年龄大的所有学生
-- 标量子查询
SELECT
	* 
FROM
	student 
WHERE
	age > ( SELECT age FROM student WHERE NAME = '小虎' );
-- 查询有一门学科分数大于90分的学生信息
-- 列子查询
SELECT
	* 
FROM
	student 
WHERE
	id IN (
	SELECT
		s_id 
	FROM
		scores 
WHERE
	score > 90);
-- 查询男生且年龄最大的学生
-- 行子查询
SELECT
	* 
FROM
	student 
WHERE
	age = (
	SELECT
		max( age ) 
	FROM
		student 
	GROUP BY
		gender 
	HAVING
	gender = '男' 
	)
	
-- 优化
SELECT
	* 
FROM
	student 
WHERE
	( age, gender ) = (
	SELECT
		max( age ),
		gender 
	FROM
		student 
	GROUP BY
		gender 
	HAVING
	gender = '男' 
	)

-- 查询男生且年龄最大的学生
-- 行子查询
SELECT
*
FROM
student
WHERE
age = (
SELECT
max( age )
FROM
student
GROUP BY
gender
HAVING
gender = '男'
)

-- 优化
SELECT
*
FROM
student
WHERE
( age, gender ) = (
SELECT
max( age ),
gender
FROM
student
GROUP BY
gender
HAVING
gender = '男'
)
总结:

  • where型子查询,如果是where 列 = (内层sql),则内层的sql返回的必须是单行单列,单个值。
  • where型子查询,如果是where (列1,列2) = (内层sql),内层的sql返回的必须是单列,可以是多行。
    -- 取排名数学成绩前五的学生,正序排列
    SELECT

FROM
(
SELECT
s.*,
sc.score score,
c.NAME 科目
FROM
student s
LEFT JOIN scores sc ON s.id = sc.s_id
LEFT JOIN course c ON c.id = sc.c_id
WHERE
c.NAME = '数学'
ORDER BY
score DESC
LIMIT 5
) t
WHERE
t.gender = '男';

标签:--,gender,age,查询,student,SELECT
From: https://www.cnblogs.com/sevenxx/p/16596874.html

相关文章

  • MySQL查询关键字where、group by、having、distinct、order by、limit、redexp正则、
    目录操作表的SQL语句补充truncate\delete\drop的区别查询关键字之select与from查询关键字之where筛选查询关键字之groupby分组查询关键字之having过滤查询关键字之distin......
  • MySQL之查询关键字
    今日内容操作表的SQL语句补充1.修改表名 altertable表名remane新表名;2.新增字段 altertable表名add字段名字段类型(数字)约束条件; altertable表名add......
  • Mysql使用实际01---SQL分组查询
    1.SQL分组查询使用场景对记录的分组是通过关键字GROUPBY实现的,GROUPBY后面跟着一个定义组的构成的属性列表。 如果我们使用语句GROUPBYA1,……,Ak我们就把记......
  • 【MySQL】多表查询:自连接VS非自连接
    区别:多表查询时是否和自身连接(自恋)1.自连接查询员工last_name和他的领导名称SELECTCONCAT(worker.last_name,'的领导是',manager.last_name)FROMemployeesworke......
  • 【MySQL】多表查询:等值连接VS非等值连接
    区别:多表查询中的where条件是否相等1.等值连接查询员工的employee_id,last_name,department_name,citySELECTe.last_name,d.department_name,l.cityFROMemployeese,......
  • 表操作与数据查询
    关于表的操作[]添加字段altertablet1addgendervarchar(32)deault"male";指定在某个字段后添加altertablet1addhobbyvarchar(32)aftername;在开头......
  • Winform下拉框使用拼音首字母查询
    项目需要一个搜索所在单位的选项,因为选项众多需要用下拉框来进行选择。众多选择为了更好的使用,采用了拼音首字母进行查询。显示的效果如果下:在输入框输入X出现X相关的单......
  • 查询信息系统项目管理师2022年上半年考试成绩,意外通过,给自己点个赞!
    原本准备的是2021年下半年的考试,因成都疫情影响,准考证都打印出来了,结果临时取消了。终于2022年上半年的考试得以进行,殊为不易。考试在5月28日,这次考试内容变化有些大,刚考......
  • 第39关--堆叠查询,整形注入
     先进行判断是否存在注入:?id=1and1=1  接着?id=1and1=2进行判断找出注入点是整形还是字符型注入  ?id=1and1=2--+ 返回异常。说明是整形注入  判断......
  • 用户信息分页查询功能
    用户信息分页查询功能分析:   具体步骤: 后台代码的实现PageBean实体类:packagecom.peng.ca.domain;importjava.util.List;/***分页工具对象*/pub......