数据库外键的基本介绍:

我们用一个简单的例子来说明:有一个老师表里面都是班主任,和一个学生表。其中很多学生对应有一个唯一的班主任。很明显,这两张表有明显的关联关系。我们先单独设计两张表,且无关联关系。


students表:

假设我们现在有三个学生,数据如下。这里提一下一个重要的点,所有的数据库必定有id字段且一定是唯一自增。经常有人说有服务器字段是来自服务器,服务器数据id可能重复,所以id不应该设计成唯一且自增,这个说法非常肤浅。id一定是唯一且自增,如果有服务器id应该新加一个如host_id这样的新的字段,而不应该去污染自增id。


students表

teachers表:

同样的。我们新建第二张老师表并插入对应数据:


teachers表


请注意两张表都有id这个字段,学生表的id=1.2.3是学生们的id。

一般我们可以用students.id来表示学生表的id。

老师表的id=1.2是老师们的id,我们用teachers.id来表示老师表的id。


到目前为止,这两张表没任何关联。我们接下来让两张表产生关联关系。每个学生都有一个班主任的,我们需要为学生表新建一个字段,teacher_id老师的id表明这个学生的老师的id值是多少。



上面的teacher_id值是对应老师表的id值。很明显张三和李四的班主任都是jack,王五的班主任是jim。


问题1: 为什么不把老师信息合并到学生表?分成两个张多麻烦?

(1)我这里信息比较简单只有几个字段,复杂情况下两个表各自可能有几十个字段,其中还有若干是重叠的。这么多字段合并在一起这个表是多么的庞杂。

(2)从逻辑封装的角度来说,不同的数据和信息,分开存储比较符合程序开发规范。


关联查询的使用:

一、过滤筛选:

查询出班主任是jack的所有学生列表,这个比较简单直接在所有的学生中,teacher_id=1的就可以了。可使用navicate自带查询输入sql语句,自带变量提示和大小写自动矫正:

SELECT * FROM students WHERE teacher_id = 1





二、数据联查:

我们现在看到的老师id,但我想在学生列表直接看到老师的名字和年龄。就需要把学生表和老师表两个表的数据联合起来。使用left join关键字联合多表。

A表 left join B表,表示以A表为根基追加B表的字段。

我们需要在学生表的基础上追加teacher_id对应的老师的名字和年龄信息,很明显是学生表left join老师表。

如果你直接left join直接查数据库可能会崩溃,因为直接联查会导致两个数据库两两交叉,数量排列组合式出现。 

很明显王五的班主任是jim,严格来说王五和jack这个老师没任何交集。也就是说我们在left join的时候一定要有一个联查条件,从我们这个例子来说,就是学生表数据的teacher_id需要等于老师表数据的id。这样两个表就可以融为一个整体。


SELECT * FROM students

LEFT JOIN teachers

WHERE students.teacher_id = teachers.id


现在,我们已经看到了我们想要的基本样子了,但里面出现了id(1), name(1)这样的奇怪字段,是因为学生表有id和name字段,老师表同样有,字段重复。

此时,我们把取出字段的 * 使用 AS别名 语法如下整理下就可以了:

注意as后的字段有,逗号分割字段:




这样,我们就实现了多表联查。上面的例子像不像用户和群组的关系呢?

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352