首页 > 其他分享 >联表查询

联表查询

时间:2023-12-20 11:13:37浏览次数:15  
标签:查询 emp 联表 deptno where 连接 select

联表查询

查询语句的结果如果在一张表中无法获取时,或者查询某写内容需要多张表时,这样就需要联表查询,

而联表查询的基础在于外键的约束,使得表与表之间存在一定的关联。

联表查询的种类

     1. 连接查询:分为内连接,外连接和自连接

      ①内连接:相当于查询表A和表B之间交集部分数据

      ②外连接:

         左外连接:查询左表所有数据,以及两张表交集部分数据

         右外连接:查询右表所有数据,以及两张表交集部分数据

      ③自连接:当前表与自身的连接查询,自连接必须使用表别名  

   2. 子查询:通过使用表与表嵌套的方式  

如下表:

内连接

内连接是查询两张表之间的交集的部分。

语法:

①隐式内连接
select 字段列表  from 表1,表2 where 两表连接条件  其它条件......;

②显示内连接
select 字段列表  from  表1   [inner]  join 表2  on  两表连接条件  where  其它条件....;

隐式内连接

举个例子:

select * from emp,dept 

效果展示:

发现数据特点多,而且仔细发现还存在重复出现的数据。

因为当你如果没有添加【联表条件】时,会出现笛卡尔积现象,所以为了解决这个问题一定一定要写【联表条件】

正确的例子:

select * from emp,dept where emp.deptno=dept.deptno

效果展示:

如果后续需要过滤某些数据时,可以在where条件后面继续添加条件语句。

显式内连接

举个例子:

select * from emp inner join dept on emp.deptno=dept.deptno

效果展示:

两者显式内连接和隐式内连接效果完全一样的。

外连接

左外连接:相当于查询左表的所有数据包含表1和表2 交集部分的数据

右外连接:相当于查询右表的所有数据包含表1和表2 交集部分的数据

语法:

①左外连接
select 字段列表  from  表1  left [outer] join  表2  on  两表连接条件  where  条件语句;

①右外连接
select 字段列表  from  表1  right [outer] join  表2  on  两表连接条件  where  条件语句;

左外连接

举个例子:

-- 左外连接
select * from emp left join dept on emp.deptno=dept.deptno;

效果展示:

右外连接

举个例子:

-- 右外连接
select * from emp right join dept on emp.deptno=dept.deptno;

效果展示:

会发现右外连接它会把表2(dept)中的deptno=40的也查询出来,即使左表(emp)没有员工在这个部门里面。

 自连接

自己与自己进行连接,必须给表起别名

语法:

①隐式自连接
select  字段列表   from   表A   as  别名1  表A  as  别名2    where   连接条件

②显示自连接
select  字段列表   from   表A   as  别名1   join   表A   as   别名2  on  连接条件

举个例子:

要求: 查询员工名称以及对应的领导名

分析: 查询的结果都在一张表中。但是设计员工表---领导表

select e.ename 员工姓名,l.ename 领导名 from emp e join emp l on e.mgr=l.empno;

效果展示:

子查询(嵌套查询)

把一次查询的结果作为另一个查询的条件值。这种方式就是嵌套查询。

语法:

select * from 表名 where 字段 [in|=] (select 字段 from 表名 where 条件)

例子:

根据部门名称查询到部门的编号

select * from emp where deptno=(
select deptno from dept where dname='研发部'
)

 

标签:查询,emp,联表,deptno,where,连接,select
From: https://www.cnblogs.com/gzyhrc/p/17914761.html

相关文章

  • ElasticSearch中查询语句用法(match、match_phrase、multi_match、query_string)
    1、match略1.1不同字段权重如果需要为不同字段设置不同权重,可以考虑使用bool查询的should子句来组合多个match查询,并为每个match查询设置不同的权重。{"query":{"bool":{"should":[{"match":{"product_name":......
  • 关于把long类型的参数直接传到xml中当sql查询的参数非常慢这件事
    起初,有一张表超级大想要将表复制下来如果查出来list再去复制这将非常慢,听了同事的建议使用了insertinto(select*fromtable)速度得到了显著改善。可是我写代码的时候,再调用接口的时候发现足足有15s,而navicat执行sql语句只有400ms,感觉哪里出了问题但还不知道,最终经过同事的明......
  • 列表查询查询数据
    当进行列表分页查询的时候,有些数据需要换一下格式或者数据库中不存在某些数据,所以在业务层需要进行一些处理。 这个例子是查询的数据里面有图片我们需要给前端一个base64的数据。我们需要对查询记录进行循环,根据ID来获取查询出来数据,然后调用某个方法进行数据处理,最后将数据......
  • 当指定了一个 messageid 后,发送或插入消息,即使成功,也查询不到此消息
    SDKmessageid仅在发送失败时,可以使用SDK已经构建好的id,不支持自己指定一个自定义的id值。如果传入一个SDK不存在的id会导致消息丢失如果传入一个SDK存在的但不是当前消息的id,会导致原有消息内容发生变更,导致消息错乱。......
  • C#的相关知识,封装一个泛型的数据库访问查询方法
    publicTGet<T>(intid)whereT:BaseModel{stringConnectionString="DataSource=DESKTOP-63QE7M1;Database=CustomerDB;UserID=sa;Password=sa123;MultipleActiveResultSets=True";Typetype=typeof(T);varpropList=type.GetProperties......
  • go gorm 软删除和查询
    软删除如果您的模型包含了一个gorm.deletedat字段(gorm.Model已经包含了该字段),它将自动获得软删除的能力!拥有软删除能力的模型调用Delete时,记录不会从数据库中被真正删除。但GORM会将DeletedAt置为当前时间,并且你不能再通过普通的查询方法找到该记录。//user的ID......
  • easyexcel只通过表名来动态查询并动态导出数据
    EasyExcel动态表头即动态数据生成1️⃣业务需求需要将数据库中的所有表放在一个下拉框中,下拉框支持模糊查询到相关的表,然后通过这个表名查询到数据库的数据,切换不同的表查询出来相关表的列和数据需要注意的点:1)js实现模糊搜索   2)导出的表头和数据都是动态生......
  • SslSugar导航查询与EF Core导航查询
    SqlSugar:当我们在SQLSugar中定义了两个实体类之间的关联关系时,可以使用导航属性进行关联查询。导航属性是表示一个实体对象与其他实体对象之间关联的属性。通过导航属性,我们可以方便地在查询中访问和检索相关联的实体数据。在SQLSugar中,导航属性需要满足以下条件:导航属性必须......
  • mysql在使用myisam引擎的情况下如何提升查询速度
    MyISAM是MySQL的一种存储引擎,它在某些情况下可能比其他存储引擎(例如InnoDB)慢。但是,仍然有一些方法可以优化MyISAM表的查询速度:索引优化:为经常用于查询的列和WHERE子句中的列添加索引。使用复合索引来覆盖多个列,但要注意索引的列顺序。定期使用 OPTIMIZETABLE 命令来重新......
  • C++中SQLite数据库操作实例:查询、增加、修改、删除一网打尽
     在C++中使用SQLite数据库需要使用SQLite的C/C++接口。以下是一个简单的示例,演示如何在C++中使用SQLite,并提供了常见的查询、增加、修改和删除功能。为了使用SQLite,你需要下载SQLite的C/C++接口,并链接到你的项目中。首先,确保你已经下载了SQLite的C/C++接口,然后将头文件和库文......