sql之外键约束及表的链接

  • 1,外键约束
  • 以创建一个dog表为例,其中有个字段为owner, 同已经创建的person表进行约束,约束语句如下:(最后一句为约束语句)
  • 也可以通过navicat进行生成该语句进行使用
CREATE TABLE "dog" (
     "name" TEXT,
     "age" INTEGER,
     "id" INTEGER NOT NULL,
     "owner" integer,
    PRIMARY KEY("id"),
    CONSTRAINT "fk_dog_ref_person" FOREIGN KEY ("owner") REFERENCES "person" ("id")
)

Snip20170109_1.png
  • 2,表的连接:
  • 需要联合多张表才能查到自己想要的数据,下面看一下为什么要连接表:
  • 如下有具体菜和菜系两张表:
![Snip20170109_5.png](http://upload-images.jianshu.io/upload_images/3930130-25c47e027fc04b8e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  • 如果想要从具体菜中找出所有属于“鲁菜”的菜,不使用连接表的时候需要在表一种找到鲁菜具体的 food_type_id等于多少,然后才可以进行真正的查到鲁菜,写法如下:
select * from t_food where food_type_id = 3;
  • 但是在连接表之后可以不用查看表一,直接这样写
-- 1,嵌套查询,严格意义上来说,嵌套查询不属于表连接
select * from t_food where food_type_id = (SELECT id from t_food_type WHERE name = '鲁菜');


-- 2,表连接(起别名然后进行调用对应的属性)
SELECT *FROM t_food food, t_food_type type where 
type.name = '鲁菜' 
AND 
food.food_type_id = type.id;


-- 3,表连接,展示特定的属性,其实还是起别名
SELECT food.name foodName, type.name typeName FROM t_food food, t_food_type type where 
type.name = '鲁菜' 
AND 
food.food_type_id = type.id;

注意嵌套查询也是一种不错的选择,但是如果查询的内容不仅仅是一张表里的内容,那么肯定需要用连接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,778评论 18 399
  • 1. SQL 简介 SQL 的目标 理想情况下,数据库语言应允许用户: 建立数据库和关系结构 完成基本数据管理任务...
    板蓝根plank阅读 2,385评论 0 11
  • 前言 读《sql必知必会 第四版》随手做的笔记,写的比较乱,可读性并不好,读的是中文版,翻译过来的感觉有点怪怪的。...
    _老徐_阅读 651评论 0 0
  • 一、 镜头切换到了十年前; 利和雪同住在一个房子里; 那天我提着行李去投奔了她们。 利打开门看到提着行李站在门口的...
    喻心阅读 839评论 2 4
  • 我,来自一个地地道道的农村家庭,有幸通过读大学,来到了这个城市,一个充满诱惑却又物语横流的城市,一个充满机会却又压...
    兰香若君阅读 382评论 0 1