首页 > 数据库 >sql 高级查询

sql 高级查询

时间:2024-03-20 21:29:05浏览次数:27  
标签:-- 高级 查询 dept emp sql deptno 链接 select

1.多表查询:

链接查询(多表查询)

多表查询,本质上来说就是多张表当中获取数据

select * from emp;-- 14 条数据

select * from dept;-- 4 条数据

select * from emp,dept;-- 56 条数据

select * from emp,dept where ename = 'SMITH';-- 4条数据

/*

产生了错误的数据,错误的数据叫做笛卡尔积

A 表中有 3条数据,B表中有2条数据,笛卡尔积 6 条数

*/

多表查询本质上来说就是为了过滤掉笛卡尔积,过滤掉错误的数据

等值链接

查询两张表中相同的列,相同的关系可以消除掉 笛卡尔积

用相同的列进行链接,消除掉不满足条数据的数据

select *

from emp e,dept d

where e.deptno = d.deptno;

等值链接本质就是把多余的数据过滤掉,找到一条或者多条相互匹配的数据进行显示

表和表之间会产生一定的关系,最少创建 ER图

-- 找到收取奖金的员工信息和部门信息

select * from emp e, dept d where e.deptno = d.deptno and comm is not null ;

-- 查询员工编号、姓名、工作、部门编号、部门名称

select empno,ename,job,deptno,dname

from emp e,dept d

where e.deptno = d.deptno;

非等值链接

没有关系的列,如何链接

不是所有表中的列都是等值链接的,有的时候就需要用到非等值链接(不等值链接)

-- 输出员工信息,并输出员工工资等级

select e.*,s.grade from emp e,salgrade s

where sal between losal and hisal;

/*

链接就是一张表的一行数据和另外一张表的所有行进行匹配

等值链接就是通过相同的关系,把笛卡尔积过滤掉

只要能够消除掉 笛卡尔积,找到合适的数据,不管 where 条件后面跟什么都可以

非等值链接,可以去找A 表中相对应的值

*/

内链接

满足条件的显示,不满足条件的过滤掉

select *

from emp e join dept d

on e.deptno = d.deptno;

内连接只显示相互关联的数据,如果是不关联的数据不显示

外连接

-- 先插入一条数据

insert into emp values(1000,'zhangsan','san',7782,null,null,null,null);

select * from emp e join dept d on e.deptno = d.deptno; -- 没有新插入的数据

/*

内连接是通过相等来消除笛卡尔积,不满足条件就会被过滤掉(不满足条件的就不会显示)

如果我们想要把不满足条件的数据显示出来就需要使用到外连接(显示某张表全部内容)

*/

外连接:左外链接和右外链接

外连接:两张表相互连接,把满足条件的数据返回,返回主表不满足条件的数据, 这种链接形式叫做外连接

主表当中不满足条件的也会显示出来

主从关系如何确认

左外连接,左表是主表

右外链接,右表是主表

Oracle 中可以用 + 做链接

-- 左外链接, + 在右边

select *

from emp e,dept d

where e.depeno=d.deptno(+);

-- 右外链接, + 在左边

select * 

from emp e,dept d

where e.deptno(+) = d.deptno;

-- + 放到相反的方向

左外链接

left join

select *

from emp left join dept

on emp.deptno = dept.deptno;

右外链接

right join

select *

from emp right join dept

on emp.deptno = dept.deptno;

满外链接

满外链接,属于 Oracle 的特性 full、

两张表中不满足条件的内容全部都显示出来

select *

from emp e full join dept d

on e.deptno = d.deptno;

作业

  1. 找出在 (任何年份的)2 月受雇的所有员工信息
  1. 请查询中 1987 年雇员的员工名和雇佣日期
  1. 查询员工信息和sal
  1.         如果是'MANAGER' 部门 sal 为工资的1.1倍
  1.         如果是'CLERK' 部门 sal 为工资的1.2倍
  1.         如果是'SALESMAN' 部门 sal 为工资的1.3倍,
  1.         否则 sal 为工资
  1. 查询所有员工的姓名,工资,部门名称
  1. 查询20部门员工的工资等级
  1. 查询员工的信息和其所在的部门信息
  1. 查询指定年份之间入职的员工信息及入职年份。(1980-1985)

进阶

/* 在emp表中,给职位加薪,MANAGER加1500,SALESMAN加1800,

ANALYST加500,加完薪后,因公司盈利,每个部门,之前没有奖金的人,

加2000的奖金,有奖金的人,奖金翻倍,然后统计总收入。

6000 以上 土豪  5000以上是 上等

4000以上是 中等 3000以上是 一般 其他为 人嫌 */

标签:--,高级,查询,dept,emp,sql,deptno,链接,select
From: https://blog.csdn.net/ziaoming_biu/article/details/136884746

相关文章

  • 了解和编译安装mysql数据库
    一.数据库的基本概念1.1数据①描述事物的符号记录称为数据(Data)。包括数字、文字、图形、图像、声音、档案记录等②数据是以“记录”的形式按照统一的格式进行存储的,而不是杂乱无章的。相同格式和类型的数据统一存放在一起,而不会把“人”和“书”混在一起存储。这样,数......
  • MySQL | CRUD
    目录1.Create2.Retrieve2.1.SELECT列2.1.1.全列查询2.1.2.指定列查询2.1.3.查询字段为表达式2.1.4.为查询结果指定别名2.1.5.结果去重2.2.WHERE条件2.2.1.年龄小于19的同学2.2.2.id在2~3的同学2.2.3.id为1和4的同学2.2.4.姓张的同学及张某的同学2.3......
  • 记一下mysql隔离级别问题
      MSQL默认隔离级别是  可重复读; 可重复读即 同一次查询,再次查询结果一致;不会查询到别的事务提交的内容;原理:开始事务后,做一次select产生一个readview,这个readview已经确定了能读取的undolog链;简单理解就是只能读取到当前事务版本之前的数据;当另一个事务插入数据......
  • MySQL中如何快速定位占用CPU过高的SQL
    作为DBA工作中都会遇到过数据库服务器CPU飙升的场景,我们该如何快速定位问题?又该如何快速找到具体是哪个SQL引发的CPU异常呢?下面我们说两个方法。聊聊MySQL中如何快速定位占用CPU过高的SQL。技术人人都可以磨炼,但处理问题的思路和角度各有不同,希望这篇文章可以抛砖引玉。 以一......
  • 【数据库】MySQL表的增删改查(二)
    文章目录一、数据库约束一、数据库约束1.1约束类型NOTNULL-指示某列不能存储NULL值。UNIQUE-保证某列的每行必须有唯一的值。DEFAULT-规定没有给列赋值时的默认值。PRIMARYKEY-NOTNULL和UNIQUE的结合。确保某列(或两个列多个列的结合)有唯一标识......
  • 【Linux】Linux系统(如CentOS)宝塔面板 如何安装SQL Server
    在Linux系统(如CentOS)上安装SQLServer是可能的,但是要注意,宝塔面板主要是用于管理Web服务器的,并不直接支持SQLServer的安装。SQLServer是微软开发的一款关系数据库管理系统,而宝塔面板通常用于管理类似于MySQL或MariaDB这样的数据库。不过,你可以在宝塔面板外部安装SQLServ......
  • SQL窗口函数
    通俗易懂的学会:SQL窗口函数-知乎(zhihu.com)SQL题目讲解——窗口函数(一)_哔哩哔哩_bilibili因为窗口函数是对where或者groupby子句处理后的结果进行操作,所以窗口函数原则上只能写在select子句中  ......
  • mysql 1248错误 多级查询之别名
    【mysql解决方案】ERROR1248(42000):Everyderivedtablemusthaveitsownalias-CSDN博客 多级查询的过程中,会需要给表一个别名。代码错误的查询方式:select*from(selects.snofromstudentswheres.ssex='女');正确的查询方式:select*from(selects.sno......
  • w10下安装mysql8.0及dbeaver24记录
    1、首先到官网或者下载网站,下载mysql8.0的安装包,本次是从第三方下载网站下载的msi安装包,直接点开安装就行2、安装完后,参考https://blog.csdn.net/Javachichi/article/details/1327585513、然后下载安装dbeaver,安装好后配置连接mysql,其中自动下载mysql驱动时可能会报错,提示maven......
  • MySQL varchar详解
    ......