ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

day09:子查询

2019-10-18 09:02:10  阅读:231  来源: 互联网

标签:day09 pay 查询 employee where id select


子查询:出现在其它语句中的select语句,称为子查询或内查询。外部的查询语句称为主查询或外查询

分类:

按子查询出现的位置:

    select 后面(仅仅支持标量子查询)、from后面(支持表子查询)、where或having后面(标量子查询,列子查询,行子查询)、exists后面{相关子查询}(表子查询)

按结果集的行列数不同:

    标量子查询:也称单行子查询(结果集只有一行一列)

    列子查询:也称多行子查询(结果集只有一列多行)

    行子查询(结果集有一行多列、多行多列)

    表子查询(结果集一般为多行多列)

 

一、where或having后面

1)、标量子查询(单行子查询)

2)、列子查询(多行子查询)

3)、行子查询(多行多列)

特点:

  a、子查询放在小括号内

  b、子查询一般放在条件的右侧

  c、标量子查询,一般搭配着单行操作符使用  >      <      >=      <=    =   <>。列子查询,一般搭配着多行操作符使用   in  、   any/some、  all

  d、子查询的执行优于主查询执行,主查询的条件用到了子查询的结果

 

新建:员工表和部门表

员工表

create table employee(
id int(55),
ename varchar(55),
sex varchar(55),
leaderid int(55),
pay int(55),
departmentid int(55)
);

部门表
create table department(
id int(55),
dname varchar(55)
);

分别向表中添加数据:

insert into employee(id,ename,sex,leaderid,pay,departmentid) values(101,'张三','男','104',6999,201901);
insert into employee(id,ename,sex,leaderid,pay,departmentid) values(102,'李四','男','104',5999,201901);
insert into employee(id,ename,sex,leaderid,pay,departmentid) values(103,'王五','男','102',4999,201902);
insert into employee(id,ename,sex,leaderid,pay,departmentid) values(104,'赵六','男','101',4999,201903);
insert into employee(id,ename,sex,leaderid,pay,departmentid) values(105,'小强','男','101',3999,201901);
insert into employee(id,ename,sex,leaderid,pay,departmentid) values(106,'老王','男','102',3999,201902);
insert into employee(id,ename,sex,leaderid,pay,departmentid) values(107,'王二','男','101',2999,201903);

insert into department(id,dname) values(201901,'技术部');
insert into department(id,dname) values(201902,'市场部');
insert into department(id,dname) values(201903,'后勤部');

 

  1、标量子查询

查询谁的工资比王二高?

1)、查询王二的工资

select  pay  from  employee  where ename='王二'; 

2)、查询员工的信息,满足pay > (1)结果

select * from employee where pay >
(
select pay from employee where ename='王二'
);

非法使用子查询:就是说子查询的结果不是一行或一列

 

 2、列子查询(多行子查询)

查询部门名称是技术部或市场部的部门中的所有员工的姓名

1)、查询部门名称是技术部或市场部的部门编号

select  id  from  department  where  dname  in("技术部","市场部");

2)、查询员工姓名,要求部门编号是(1)列中中的某一个

select ename from employee where departmentid in
(
select id from department where dname in("技术部","市场部")
);

 

 3、行子查询(结果集一行多列或多行多列)

查询员工编号最低并且工资最高的员工的信息

select * from employee where

id=(select min(id) from employee) and

pay=(select max(pay) from employee);

 

select  *  from employee  where (id,pay)=(select min(id),max(pay) from employee);

 

二、select后面

查询每个部门的员工个数

select d.dname,(

select count(*) from employee e where e.departmentid=d.id

) from department d;

 

标签:day09,pay,查询,employee,where,id,select
来源: https://www.cnblogs.com/wuguiyu/p/11685175.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有