MySQL的联合查询和子查询
时间:2019-05-14 14:01 来源:linux.it.net.cn 作者:IT
MySQL的联合查询和子查询
@ sunRainAmazing
联合查询
联合查询
将多次查询(多条select语句),在记录上进行拼接(字段不会增加)
基本语法
多条select语句构成,
每一条select语句获取的字段必须严格一致(与字段类型无关)
select 语句1
union [union 选项]
select 语句2......
union选项:与select选项一样有两个
all: 保留所有不管重复
district:去重(整个重复)---默认的
联合查询的意义?
1、查询同一张表,需求不同
如查询学生信息,男生年龄升序desc,女生年龄降序asc?
2、多表查询:多表的结构是完全一样的,保存的数据(结构)也是一样的
注意事项
1.在联合查询中 order by 不能单独使用,
需要对查询语句使用括号才行
2.若想器生效 必须结合limit 关键字才可以 采用最大数 999999
(select * from stu where sex='男' order by age desc limit 999999)
union
(select * from stu where sex='女' order by age asc limit 999999);
子查询
子查询
含义:
sub query从其他查出来的结果之上获取
一条select语句内部包含另外的select语句
分类:
按位置分类:子查询(select) 在外部查询(select语句)中出现的位置
① from子查询:出现在from之后
② where子查询:出现在where条件
③ exists子查询:出现在exists里面
按结果分类:根据子查询得到的数据进行分类
(理论上任何一个查询得到的结果都可以理解为二维表)
① 标量子查询:子查询得到的结果是一行一列
② 列子查询:子查询得到的结果是一列多行
③ 行子查询:结果是多列一行(多列多行)
---都是在where之后
表子查询:结果是多行多列,出现的位置是在from之后
1.确定数据源 查找查询条件
-- 查询班级名为 Java01 的学生的信息
select * from stu where cid =
(select id from cla where name='Java01');
-- 查询所有班级的学生信息(有的学生还没有正式进班)
select * from stu where cid in
(select id from cla);
-- 查询是否存在 年龄最大 且身高最高的学生的信息
select * from stu where
age = (select max(age) from stu)
and
height = (select max(height) from stu);
---还可以利用行元素进行 查询 (age,height) 称之为行元素
select * from stu where
(age,height)=
(select max(age),max(height) from stu);
(责任编辑:IT)
MySQL的联合查询和子查询 @ sunRainAmazing 联合查询 联合查询 将多次查询(多条select语句),在记录上进行拼接(字段不会增加) 基本语法 多条select语句构成, 每一条select语句获取的字段必须严格一致(与字段类型无关) select 语句1 union [union 选项] select 语句2...... union选项:与select选项一样有两个 all: 保留所有不管重复 district:去重(整个重复)---默认的 联合查询的意义? 1、查询同一张表,需求不同 如查询学生信息,男生年龄升序desc,女生年龄降序asc? 2、多表查询:多表的结构是完全一样的,保存的数据(结构)也是一样的 注意事项 1.在联合查询中 order by 不能单独使用, 需要对查询语句使用括号才行 2.若想器生效 必须结合limit 关键字才可以 采用最大数 999999 (select * from stu where sex='男' order by age desc limit 999999) union (select * from stu where sex='女' order by age asc limit 999999); 子查询 子查询 含义: sub query从其他查出来的结果之上获取 一条select语句内部包含另外的select语句 分类: 按位置分类:子查询(select) 在外部查询(select语句)中出现的位置 ① from子查询:出现在from之后 ② where子查询:出现在where条件 ③ exists子查询:出现在exists里面 按结果分类:根据子查询得到的数据进行分类 (理论上任何一个查询得到的结果都可以理解为二维表) ① 标量子查询:子查询得到的结果是一行一列 ② 列子查询:子查询得到的结果是一列多行 ③ 行子查询:结果是多列一行(多列多行) ---都是在where之后 表子查询:结果是多行多列,出现的位置是在from之后 1.确定数据源 查找查询条件 -- 查询班级名为 Java01 的学生的信息 select * from stu where cid = (select id from cla where name='Java01'); -- 查询所有班级的学生信息(有的学生还没有正式进班) select * from stu where cid in (select id from cla); -- 查询是否存在 年龄最大 且身高最高的学生的信息 select * from stu where age = (select max(age) from stu) and height = (select max(height) from stu); ---还可以利用行元素进行 查询 (age,height) 称之为行元素 select * from stu where (age,height)= (select max(age),max(height) from stu); (责任编辑:IT) |