内连接的例子分析

简介: select top 3 "E".ename,"E".sal,"S".GRADE,"D".dnamefrom emp "E"join SALGRADE "S"on "E".
select top 3 "E".ename,"E".sal,"S".GRADE,"D".dname
from emp "E"
join SALGRADE "S"
on "E".sal>="S".LOSAL and "E".sal<="S".HISAL
join dept "D"
on "E".deptno="D".deptno
where "D".dname not like '%o%'
order by "E".sal desc

第一行top 3是显示前三行的数据
“E”“S” “D”都是取别名
from 。。。 join 是将两张表连接在一起 on是连接条件

where “D”.dname not like ‘%o%’是对内连接后的结果进行筛选
最后的结果有点出乎意料不是 小于 3 而是还是三行数据 因为top 3的原因 意思就是如果结果数量够多的话,即使用where将数据过滤一部分 到最后还是会有后面的数据顶上来替换掉原来的数据 所以最后显示的数据还是3行

order by “E”.sal desc 是按照”E”.sal的降序排序

注意点:
where “D”.dname not like ‘%o%’不能放在from后面 我也不知道为什么
而在group 分组中却要from后面可以在分组前对数据进行筛选

select "T".deptno,"T".sal1,"S".grade
from(
    select deptno,avg(sal) "sal1"  //取别名 
    from emp
    group by deptno
)"T"  //临时表取别名
join "salgrade" "S"
on "T".sal1 between "S".losal and "S".hisal

“T”是临时表,可以当作一个整体来用 然后就是“T”和“S”的组合

select top 3 *
from(select *
from emp
where sal>(select MIN(sal) from emp)
) "T"
join dept "D"
on "T".deptno="D".deptno
join SALGRADE "S"
on "T".sal between "S".LOSAL and "S".HISAL
order by "T".sal asc

select *
from emp
where sal>(select MIN(sal) from emp)是一个临时表
order by “T”.sal asc是按照sal的降序排序
select top 3 *是显示前三个的数据

select "E".*
    from (  
            select deptno, avg(sal) "avg_sal" 
                from emp 
                group by deptno 
        ) "E"
    where "E"."avg_sal" = (
            select max("avg_sal") from (select deptno, avg(sal) "avg_sal" from emp group by deptno) "T"
    )

这个是内嵌套

select "T".*,"D".dname,"S".GRADE
from (
select top 2 "E".deptno,AVG(sal) "sal1"
from emp "E"
join dept "D"
on "E".deptno="D".deptno
join SALGRADE "S"
on "E".sal between "S".LOSAL and "S".HISAL
where "E".sal>1500
group by "E".deptno
having AVG("E".sal)>2000
order by AVG("E".sal) desc
)"T"
join
dept "D"
on "D".deptno="T".deptno
join SALGRADE "S"
on T.sal1 between "S".LOSAL and "S".HISAL
select top 2 "E".deptno,AVG(sal) "sal1"
from emp "E"
join dept "D"
on "E".deptno="D".deptno
join SALGRADE "S"
on "E".sal between "S".LOSAL and "S".HISAL
where "E".sal>1500
group by "E".deptno
having AVG("E".sal)>2000
order by AVG("E".sal) desc

是临时表 有个问题就是 如果它是单独的话 去掉top2会显示全部
但是 如果它是嵌套使用的话 如例子 如果去掉top 2她就会报错 除非去掉order

select *
from (
    select deptno,AVG(sal) "avg_sal"
    from emp
    group by deptno
)"T"
where "T".avg_sal=(
select MAX("E"."avg_sal") from( select deptno,AVG(sal) "avg_sal"
from emp
group by deptno
)"E"
)

这个是求出平均工工资最高的部分的信息

目录
相关文章
|
8月前
|
关系型数据库 MySQL 索引
mysql查询中内连接和左连接有什么区别
mysql查询中内连接和左连接有什么区别
53 0
|
8月前
|
SQL 数据可视化 关系型数据库
【MySQL-11】多表查询全解-【多表关系/内外自连接/子查询/多表查询案例链接】(可cv代码&案例演示)
【MySQL-11】多表查询全解-【多表关系/内外自连接/子查询/多表查询案例链接】(可cv代码&案例演示)
|
7月前
|
关系型数据库 MySQL 数据库
MySQL数据库——多表查询(1)-多表关系(一对多、多对对多、一对一)、多表查询概述(概念、笛卡尔积、分类)
MySQL数据库——多表查询(1)-多表关系(一对多、多对对多、一对一)、多表查询概述(概念、笛卡尔积、分类)
165 0
|
数据库
子查询与内连接查询区别(效率上,连接查询高于子查询)、左连接以及连接的原理,还有内连接与左连接的区别
子查询与内连接查询区别(效率上,连接查询高于子查询)、左连接以及连接的原理,还有内连接与左连接的区别
1147 0
子查询与内连接查询区别(效率上,连接查询高于子查询)、左连接以及连接的原理,还有内连接与左连接的区别
|
SQL 关系型数据库 数据库
10个高级SQL写法,包括窗口函数、联合查询、交叉查询、递归查询
10个高级SQL写法,包括窗口函数、联合查询、交叉查询、递归查询
224 1
SQl课程实验(外连接,聚集函数,分组,行数限制)
文章目录 1.看完这篇文章你会得到什么 2.实验内容 1. 查询没有任何学生选学的课程编号和课程名称及学分 2. 查询每个班学生入学成绩最高分和最低分的差距,列名为“最大分差” 3. 查询至少选修了三门课程的学生编号 4.统计各个班级男生和女生的平均年龄及人数。 5.查询至少被两名学生选修的课程名称 6. 查询计算机学院至少有两门课的成绩在80以上的女学生学号、姓名和出生日期及其期末成绩的最高分 7. 查询所选课程期末成绩平均分在85分以上的“女”学生学号、姓名、期末成绩平均分 8. 查询“马克思主义基本原理”期末成绩排在6-10名的学生学号、姓名和期末成绩
126 0
SQl课程实验(外连接,聚集函数,分组,行数限制)
|
SQL 关系型数据库 MySQL
SQL内连接、外连接、全连接、交叉连接、自连接、自然连接区别
本文是博主学习SQL的记录,希望对大家有所帮助
1173 0
SQL内连接、外连接、全连接、交叉连接、自连接、自然连接区别
|
SQL Java 数据库
一文速学-玩转SQL之执行顺序,单表自连接操作和用法
一文速学-玩转SQL之执行顺序,单表自连接操作和用法
201 0
一文速学-玩转SQL之执行顺序,单表自连接操作和用法
|
关系型数据库 MySQL 开发者
连接查询之内连接(标签和自然) | 学习笔记
快速学习连接查询之内连接(标签和自然)。
112 0
连接查询之内连接(标签和自然) | 学习笔记
|
SQL 关系型数据库 MySQL
MySQL优化系列(二)--查找优化(2)(外连接、多表联合查询以及查询注意点)
MySQL优化系列(二)--查找优化(2)(外连接、多表联合查询以及查询注意点) 继续这一系列,上篇的简单查询优化并没讲完,第二点还有查询注意点以及多表查询优化呢!! 文章结构:(1)多表查询步步优化;(2)查询编写的注意点。
1848 0