`
yzyspy
  • 浏览: 82080 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关联数据库字典表的多表联合查询

    博客分类:
  • Java
阅读更多


 

 

 

insert into employee (id,position,xueli,emplyee_name) values(1,1,4,'杨忠宇');

就是说这个员工  是高中学历  职位是项目经理

怎样才能把他的个人信息查找出来的?

select   a.emplyee_name,b.item_value,c.item_value
from   employee   a
join   my_dictionary   b   on   b.item_type = '职位'   and   a.position = b.id
join   my_dictionary   c   on   c.item_type = '学历'   and   a.xueli=c.id
where a.id=1;

如果有的员工没有学历 那么就用 left

select   a.emplyee_name,b.item_value,c.item_value
from   employee   a
left outer join   my_dictionary   b   on   b.item_type = '职位'  and a.position=b.id
left outer join   my_dictionary   c   on   c.item_type = '学历'   and   a.xueli=c.id

但是目前对 设计数据库字典表 好处还不是很了解。节省空间吗?

 

=================================================================

 

只需掌握  隐式内连接  左外连接   右外连接  即可 

 

学习数据库查询的时候对多表连接查询的有些概念还比较模糊。而连接查询是在数据库查询操作的时候肯定要用到的。对于此概念 

我用通俗一些的语言和例子来进行讲解。这个例子是我讲课的时候经常采用的例子。 

首先我们做两张表:员工信息表和部门信息表,在此,表的建立只为讲述连接的概念,所以字段非常的简单 

 

EmployeeTB(员工信息表): 

 

employeeid employeename       deptid 

0001          张三               01 

0002          李四               01 

0003          王五               02 

0004          赵六               02 

0005          郑七              NULL 

 

DeptTB(部门信息表) 

deptid  deptname 

01      技术部 

02      市场部 

03      工程部 

 

我们现在需要进行连接查询,连接两张表检索数据。分别检索员工信息表的员工编号、员工姓名和部门信息表中的部门名称。 

显然,两个表的连接条件是 员工表的部门编号=部门表的部门编号 

 

注意:郑七不属于任何部门(新来的员工,还没有分配到任何的部门),而工程部不存在任何的员工(比如是一个新成立的部门,

还没有员工) 

 

1、内连接查询 

我们可以有两种方式,这两种是等效的 

一种是:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e,DeptTB AS d WHERE e.deptid=d.deptid 

另外一个是:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e INNER JOIN DeptTB AS d ON e.deptid=d.deptid 

检索的结果都是: 

 

employeeid employeename deptname 

0001  张三  技术部 

0002  李四  技术部 

0003  王五  市场部 

0004  赵六  市场部 

 

而“郑七”和“工程部”的信息是不会检索出来。因为采用内连接计算的时候必须要保证连接的条件e.deptid=d.deptid匹配,结果才会被检索出来。当我们连接两张检索数据的时候,检索的方式是首先逐行扫描“员工信息表”中的记录,然后根据连接条件来决定此记录是否被检索。比如对于张三,这条记录的deptid是01(部门编号),它在部门表中能找到和它匹配的编号01,而编号01的部门名称(deptname)是“技术部”所以张三这条记录会被检索,最终的结果肯定是: 

 

0001  张三  技术部 

 

同样,李四、王五、赵六也能。但是郑七的部门编号是NULL,它在部门信息表中找不到匹配的项(因为部门信息表中不存在部门编号为NULL的部门),所以郑七不会被检索。 

同理,没有任何人员的部门编号为03,所以工程部的记录也不会被检索 

 

2、左外联结 

但是有些情况下,我们需要知道所有员工的信息,即使他不属于任何部门。这样我们就可以采用外连接,在这里为左外连接,也就是连接中的左表的表中的记录,无论能不能在右表中找到匹配的项,都要检索,如果没有匹配的项目,那么右表中的字段值为NULL(空),在这里就代表,此员工不属于任何部门。 

检索语句为: 

SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e LEFT OUTER JOIN DeptTB AS d ON e.deptid=d.deptid 

检索的结果都是: 

 

employeeid employeename deptname 

0001  张三  技术部 

0002  李四  技术部 

0003  王五  市场部 

0004  赵六  市场部 

0005  郑七  NULL 

 

但是在这里,工程部同样不会被检索,因为,deptname是在连接的右边的表中,“工程部”在左表中不存在任何的记录,所以不会被检索。这里关注的是“连接中的左边的表” 

 

 

3、右外连接 

有时,我们需要知道,全部部门的信息,即使它没有任何的员工。在我们的查询中部门表在连接的右边,如果我们想知道右边表中的所有记录信息,那么就可以采用右外连接,如果此记录在左边的表中找不到匹配项,则相应字段(employeeid,employeename)为NULL 

检索语句为: 

SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e RIGHT OUTER JOIN DeptTB AS d ON e.deptid=d.deptid 

检索的结果都是: 

 

employeeid employeename deptname 

0001  张三  技术部 

0002  李四  技术部 

0003  王五  市场部 

0004  赵六  市场部 

NULL  NULL  工程部 

 

但在这里,郑七是不会被检索了,因为它在右表中找不到匹配项,这里关注的是“连接中的右边的表” 

 

4、完全外连接 

如果我们想知道所有的记录呢?无论员工有没有部门,部门有没有员工,我们都需要检索。这里就可以使用完全外连接。关注连接中的两部分。如果没有部门,部门为空,没有员工,员工信息为空。 

检索语句为: 

SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e FULL OUTER JOIN DeptTB AS d ON e.deptid=d.deptid 

检索的结果都是: 

 

employeeid employeename deptname 

0001  张三  技术部 

0002  李四  技术部 

0003  王五  市场部 

0004  赵六  市场部 

0005  郑七  NULL 

NULL  NULL  工程部 

 

  • 大小: 19.1 KB
分享到:
评论

相关推荐

    School数据库数据字典1

    在"School数据库数据字典1"中,我们讨论的是一个教育机构的信息管理系统,它涵盖了教师、学生、课程、成绩等多个核心元素。以下是各个表格及其详细解释: 1. **Department 表** - 这个表存储了学校的系别资料。每个...

    Oracle数据库集群

    Oracle数据库集群是一种高级数据库架构,它通过将多个服务器硬件节点联合起来,形成一个逻辑上的单一数据库实例,以提供高可用性、性能优化和资源共享。集群数据库系统可以在多个服务器之间分配工作负载,使得数据...

    002-OA开发基础之--E9常见表结构(后端)(1).ppt

    * Cus_FormDict:字段扩展字典表,用于存储字段的扩展信息。 * Cus_FormField:字段扩展字段表,用于存储字段的扩展信息。 人员扩展表: * 人员扩展表用于存储员工的扩展信息,以(scope+scopeid+id)三个字段为联合...

    U632字典数据字典

    4. **关系**:定义了不同表之间的关联,比如一对一、一对多或多对多的关系,用于描述实体间的联系。 5. **视图**:逻辑上的数据组合,可以是单个或多个表的联合,提供不同的数据展示方式。 6. **查询**:用于从...

    数据库大作业.pdf

    通过查询数据字典表如"user_sys_privs", "user_tab_privs", "user_role_privs"来确认用户权限和角色。 3. **使用新创建的账号进行操作**: 使用新创建的"wk"账号登录Oracle,执行"show user"命令验证当前登录用户...

    数据库简介与实例.pdf

    联合查询是将两个或多个数据库中的数据表进行连接以获得更全面信息的过程。组合查询则涉及了多个条件的组合,通过使用逻辑运算符来实现对数据集的更精确选择。 最后,文档简要介绍了MYSQL的维护知识。MYSQL是一种...

    思科语音报表数据字典

    此外,思科语音报表数据字典也提供了对表结构和视图的定义、表之间关联关系的详细说明,帮助用户理解如何通过联合查询、子查询等方式进行数据的整合和分析。 需要特别注意的是,文档中提醒用户,虽然手册中的信息和...

    图书管理系统数据字典

    数据字典是数据库设计中的一个重要组成部分,它详细记录了数据库中各个表的结构、字段类型、约束条件等信息。这对于后续的数据维护、查询优化等方面具有重要意义。 #### 二、系统环境配置 文档中提到的“主要仪器...

    EAS8.2数据字典.zip

    4. **关系模型**:数据字典会描述各个表之间的关联关系,如一对一、一对多、多对多等,以及外键的定义。这些信息有助于理解数据间的逻辑关系,便于进行数据的联合查询和分析。 5. **权限和安全性**:数据字典可能...

    数据库课程设计--学校教务管理系统(优.选).pdf

    数据字典列出了各个表格的结构,包括系表、班级表、学生信息表、教师信息表、课程表、学生成绩表和教师授课信息表,明确了各字段的数据类型、长度和约束条件,如学号、课程号作为联合主键,确保数据的完整性和一致性...

    数据库课程设计--学生选课成绩管理系统 (2).pdf

    每个表都有自己的主键,如学生表的主键是学号,课程表的主键是课程号,选课表则有学号和课程号作为联合主键,确保数据的唯一性。 这个课程设计项目不仅锻炼了学生的数据库理论知识,还提高了他们的实践能力和编程...

    数据库物流设计.doc

    5. **数据库的分析设计及实现**:在实际设计过程中,需要创建数据字典,详细列出每个表的字段信息,如“邮件分类”表的类型号、标签号、类型、重量、宽度和高度等,确保数据的一致性和完整性。同时,要考虑数据库的...

    ABAP数据字典

    例如,使用SE11事务码可以查看和编辑数据字典对象,SE16用于查询表内容,DDIC报表可以帮助分析和维护数据字典对象。 通过深入理解ABAP数据字典,开发人员能够更好地设计和管理SAP系统的数据层,从而编写出高效、...

    原子-分子字典结合的联合扩展加权稀疏表示人脸识别算法.pdf

    在测试阶段,对于每一个输入的测试样本,算法会根据其与扩展字典基之间的距离进行加权,从而得到与当前测试样本关联的重构字典集。这种加权过程使得对测试样本的稀疏重构更具针对性,提高了识别的准确性。最后,通过...

    Discuz!NT2.0数据字典

    同样,如果想实现一个统计功能,可能需要联合查询多个表以获取所需数据。 总结来说,《Discuz!NT2.0数据字典》是深入理解Discuz!NT系统内部运作的钥匙,它涵盖了数据库设计、数据存储和数据关系的方方面面。通过...

    oracle数据库课程设计报告学生成绩管理系统.doc

    - 成绩表(gd):包含学号(联合主键,外键关联学生表)、科目(联合主键,外键关联科目表)以及具体成绩。 五、编程步骤 这部分未提供具体内容,但通常涉及以下环节: - 设计数据库表结构 - 编写Java代码实现业务...

    简历管理系统数据库设计.pdf

    在实际开发中,还可以根据需求添加更多的表和字段,例如,面试记录表、职位发布表等,以增强系统的功能和实用性。 总之,简历管理系统数据库设计是系统成功的关键,通过合理的表结构和约束设计,可以确保数据的准确...

    订单销售数据库设计.doc

    - SP 表是两个实体的联合主键,由Snumber和Pnumber组成,确保每个供给商对每个产品的供给记录是唯一的。 - 其他表的设计遵循类似的原则,确保数据的一致性和完整性。 **总结** 这个订单销售数据库设计考虑了供应链...

    2021年数据库大作业设计题目 (2).pdf

    - 查询是数据库操作的基础,包括简单查询、联合查询、分组查询、子查询等,用于获取所需信息。 - 存储过程是一组预先编译的SQL语句,可封装成一个函数,提高效率和代码重用性。例如,可以创建存储过程来查询特定...

Global site tag (gtag.js) - Google Analytics