美文网首页
SQLite子查询和连接查询Demo

SQLite子查询和连接查询Demo

作者: LennonLin | 来源:发表于2016-01-26 21:29 被阅读2950次

--一对多外键关联
create table TbDept
(
deptno tinyint primary key,
dname varchar(10) not null,
dloc varchar(20) not null
);

insert into TbDept values (10, '会计部', '北京');
insert into TbDept values (20, '研发部', '成都');
insert into TbDept values (30, '销售部', '重庆');
insert into TbDept values (40, '运维部', '深圳');

create table TbEmp
(
empno int primary key,
ename varchar(20) not null,
job varchar(10) not null,
mgr int,
sal int not null,
dno tinyint,
foreign key (dno) references TbDept(deptno)
);

insert into TbEmp values (7800, '张三丰', '总裁', null, 9000, 20);
insert into TbEmp values (2056, '乔峰', '分析师', 7800, 5000, 20);
insert into TbEmp values (3088, '李莫愁', '设计师', 2056, 3500, 20);
insert into TbEmp values (3211, '张无忌', '程序员', 2056, 3200, 20);
insert into TbEmp values (3233, '丘处机', '程序员', 2056, 3400, 20);
insert into TbEmp values (3251, '张翠山', '程序员', 2056, 4000, 20);
insert into TbEmp values (5566, '宋远桥', '会计师', 7800, 4000, 10);
insert into TbEmp values (5234, '郭靖', '出纳', 5566, 2000, 10);
insert into TbEmp values (3344, '黄蓉', '销售主管', 7800, 3000, 30);
insert into TbEmp values (1359, '胡一刀', '销售员', 3344, 1800, 30);
insert into TbEmp values (4466, '苗人凤', '销售员', 3344, 2500, 30);
insert into TbEmp values (3244, '欧阳锋', '程序员', 3088, 3200, 20);
insert into TbEmp values (3577, '杨过', '会计', 5566, 2200, 10);
insert into TbEmp values (3588, '朱九真', '会计', 5566, 2500, 10);

  1. 查询最高工资及其对应员工

    select ename, sal from TbEmp where sal=(select max(sal) from TbEmp);
    
  2. 计算每位员工的年薪

    select ename, sal*12 as annSal from TbEmp;
    
  3. 统计有员工的部门的人数
    group by 按部门分组

    select dno, count(dno) from TbEmp group by dno;
    

select dname, total from (select dno,count(dno) as total from TbEmp group by dno) as t1,TbDept as t2 where T1.dno=t2.deptno;(部门名称和人数,()里的是临时表格)
select dname,total from (select dno, count(dno) as total from TbEmp group by dno) as t1 inner join TbDept as t2 on t1.dno=t2.deptno;
--左外连接,不满足条件的直接补空值
select dname,total from TbDept as t2 left outer join(select dno, count(dno) as total from TbEmp group by dno) as t1 on t1.dno=t2.deptno;

  1. 求挣最高薪水的员工(boss除外)的姓名
    --null不能直接用等号赋值,而是要用is null或者is not
    null

    select ename, sal from TbEmp where sal=(select max(sal) from TbEmp where mgr is not null);
    
  2. 查询薪水超过平均薪水的员工的姓名和工资
    select ename,sal from TbEmp ,(select avg(sal) as avgSal from TbEmp) where sal > avgSal;

select ename, sal from TbEmp
where sal>(select avg(sal) from TbEmp);

  1. 查询薪水超过其所在部门平均薪水的员工的姓名、部门编号和工资

--t1.dno是为了区分两个dno的歧义
select ename, sal, t1.dno from TbEmp as t1,
(select dno, avg(sal) as avgSal from TbEmp group by dno) as t2 where t1.dno=t2.dno and t1.sal>t2.avgSal;

select ename, sal, t1.dno from TbEmp as t1 inner join
(select dno, avg(sal) as avgSal from TbEmp group by dno) as t2 on 
t1.dno=t2.dno and t1.sal>t2.avgSal;
```
  1. 查询部门中薪水最高的人姓名、工资和所在部门名称
    select ename, sal, dname from (select ename, sal, t1.dno from TbEmp as t1 inner join(select dno, max(sal) as maxSal from TbEmp group by dno) as t2 on t1.dno=t2.dno and sal=maxSal) as t3 inner join TbDept as t4 where dno=deptno;

  2. 哪些人是主管
    --distinct去除重复出现的
    INITERSECT叉集
    UNION并集
    IN交集

    select ename, job from TbEmp where empno in 
    (select distinct mgr from TbEmp where mgr is not null);
    

select ename from TbEmp where empno in (select distinct mgr from TbEmp where mgr is not null);

  1. 求平均薪水最高的部门的名称和平均工资
    select dname,maxSal from(select dno, max(avgSal) as maxSal from (select dno,avg(sal) as avgSal from TbEmp group by dno)) as t1 inner join TbDept as t2 on t1.dno=t2.deptno;

  2. 求薪水最高的前3名雇员

    select ename, sal from TbEmp order by sal desc limit 3;
    
  3. 求薪水排在第4-6名雇员

    select ename, sal from TbEmp order by sal desc limit 3 offset 3;
    
    

--从第3个开始查询三个,也可以是五个什么的
select * from TbEmp order by sal desc limit 3,3;

  1. 求薪水最低的部门经理所在部门的名称

相关文章

  • SQLite子查询和连接查询Demo

    --一对多外键关联create table TbDept(deptno tinyint primary key,d...

  • SQLite 子查询

    SQLite 子查询 子查询或内部查询或嵌套查询是在另一个 SQLite 查询内嵌入在 WHERE 子句中的查询。...

  • Mysql--连接查询和子查询

    连接查询和子查询 一、连接查询 1.1 概念 连接查询:也可以叫跨表查询,需要关联多个表进行查询 1.2 根据年代...

  • 「SQLite学习笔记」子查询

    子查询或内部查询或嵌套查询是在另一个 SQLite 查询内嵌入在 WHERE 子句中的查询。 使用子查询返回的数据...

  • MySQL-高级查询

    嵌套查询(子查询) 把内层的查询结果作为外层的查询条件 示例 多表查询 多个表之间联合查询 连接查询 内连接 外连...

  • MySQL Demo 03

    阅读原文 MySQL Demo 03 1. 子查询 1. 查询和Zlotkey相同部门的员工姓名和工资 ①查询Z...

  • MySQL 学习 Part7 - MySQL子查询和连接表

    ? MySQL的子查询和连接表以及高级连接表的使用? 兼顾工作和考试实在是太累了 1.子查询语句 1.子查询 需求...

  • 第三天下午、自连接、子连接、分页查询

    自连接 查询每个员工的编号、姓名、领导姓名 外连接查询 连接查询代码 课下作业题 子查询(分页查询) 查找工资最高...

  • mysql-数据查询语句-多表

    连接查询 连接查询,是关系数据库中最主要的查询,包括等值查询、自然连接查询、非等值查询、自身连接查询、外连接查询和...

  • SQL语言之查询

    SQL语言之查询(二) 前言 本章我们将学习SQL查询中的高级部分,如内连接、外连接和子查询,通过这些查询技术我们...

网友评论

      本文标题:SQLite子查询和连接查询Demo

      本文链接:https://www.haomeiwen.com/subject/ehpdkttx.html