数据库--多表联查

作者: 满堂风来 | 来源:发表于2016-09-26 01:02 被阅读0次

在数据库中,我们有时候提取信息不得不要从多张表中抓取数据。
我先用两张表举个例子。

科目表:course
字段 类型 附加属性 备注
id int 主键、自增
name varchar(50)
alias varchar(50) 索引 英文别名
题库表:question_bank
字段 类型 附加属性 备注
id int 主键、自增
course_id int 索引 course表外键
name varchar(200)
alias varchar(50) 索引 英文别名
publish bool 可空 默认为0,是否发布

直接使用WHERE连表

注意到question_bank表含有外键course_id,这就是连接两张表的关键。外键一般要加上索引以提高搜索的效率(一般数据量很大的时候提升非常明显)。
我们做一次简单的select。
SELECT * FROM course,question_bank WHERE course.id=question_bank.course_id
这样可以得到一张连起来的大表格。具体效果可以自己操作一下。

使用JOIN语句连表

执行以下sql语句:
SELECT * FROM question_bank JOIN course ON course.id=question_bank.course_id
可以得到和上面的查找一样的结果。之所以是用JOIN语句是因为join语句对于连表操作有自己的一套优化方式,可以加快查找速度。并且方便整理sql语句,当sql语句的WHERE条件非常复杂的时候,看起来更清晰一些。
当有更多的表格加入搜索的时候,可以这样写JOIN语句:
(我加一张表格先

题目表:question
字段 类型 附加属性 备注
id int 主键、自增
bank_id int 索引 题库表外键
number int 题号
title text 题干
type int 默认值:0 0:不定项,1:单选题,2:多选题
options text 选项采用序列化存储,格式:{[{option:(str),correct:(tinyint)]}
point int 可空 分值
analysis text 可空 答案解析

SELECT * FROM question_bank JOIN course ON course.id=question_bank.course_id JOIN question ON question.bank_id=question_bank.id
这样就可以得到三张表格的联查结果。

使用视图进行多表联查

当我们需要对连接后的大表格进行非常频繁的查找时,频繁地连接表格会对数据库造成很大的负担,这个时候,我们就需要建立一个视图,仅仅做一次连表就足够了。
CREATE algorithm=merge view question_list as SELECT question.* , course.id as course_id FROM question_bank ,course, question WHERE course.id=question_bank.course_id AND question.bank_id=question_bank.id
这样就可以获得一张虚拟表格,就是视图(View),以后的查找操作就可以直接针对这张虚拟表格来进行。在开放权限的时候,可以只开放这张视图的权限,这样就可以有效地保护我们别的数据不被看到。

捕获.PNG

相关文章

  • 数据库操作

    FMDB 创建数据库 创建表 增 删 改 查 索引 事务 多表联查

  • python面试题01

    1、什么是多表关联查询,有几种多表关联的查询方式,分别是什么? 多表关联查询概念: 多表关联查询分类:1.1内连接...

  • 数据库--多表联查

    在数据库中,我们有时候提取信息不得不要从多张表中抓取数据。我先用两张表举个例子。 科目表:course 题库表:q...

  • mysql 基础知识

    3, 数据库的考点:多表联查,聚合函数和分组, 自查询 1. 简述数据库查询语句中,内连接inner join ,...

  • 多表联查

    1、原生查询示例:代码如下:$Model = new Model();$sql = 'select a.id,a....

  • 多表联查

  • 多表联查

    表结构 t_sys_user系统用户表image t_course班课表image 内连接查询 就是两个表的相同部...

  • 多表联查

    多表联查 多个有关系的表可以同时查询,语法和单表查询基本一致 select from 表1,表2,... wher...

  • Oracle学习(二)

    --======================================多表关联查询--查询员工编号,员工...

  • MySQL的多表关联查询

    一、多表关联查询 多表关联查询是使用一条SQL语句,将关联的多张表的数据查询出来。 1.1 交叉查询 交叉查询就是...

网友评论

    本文标题:数据库--多表联查

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