用户登录

我们先去创建一个 note 数据表 …. CREATE TABLE IF NOT EXISTS note (id INTEGER PRIMARY KEY ASC, note_content TEXT, member_id INTEGER) ;

在这个表里面,有三个栏 …. id ,note_content ,还有 member_id … 下面我们再去给这个表插入一些数据 …

INSERT INTO note (note_content, member_id) VALUES ('我是小雪,今天心情挺好。', 2);

在插入内容的时候,指定一下这条数据对应的用户的 id .. 这条笔记属于小雪这个用户 .. 小雪的 id 是 2 ….

再插入一些内容 ….

INSERT INTO note (note_content, member_id) VALUES ('我是王皓,《 Peaky Blinders 》很好看', 1);

这条笔记属于 王皓 这个用户 … 他的 id 是 1 ….

下面我们可以再去插入一条笔记内容 ….

INSERT INTO note (note_content) VALUES ('我是张三');

在这条内容里,没有指定它所属的用户的 ID ….

测试

下面,我们可以使用 SELECT … 去找出用户写的所有的笔记的内容 … 另外在结果里面,还要包含对应的用户的名称 ….

SELECT id, note_content, name

指定想要显示的栏内容 … note_content 这栏内容来自 note 这个表,它是笔记的内容 … name 这栏内容来自 member 表,是用户的名称 …

FROM note

在 FROM 后面加上数据表的名称 … 先输入 note 这个数据表的名称 … 接着使用一个 JOIN 关键词 … 后面再加上 member 这个表 …

这个 JOIN 的意思就是,去把两个表结合在一起,或者连接在一起 …

然后,我们需要再去指定一下,这两个表用什么东西结合在一起 … 这里我们要用 note 表里的 member_id … 还有 member 表里的 id …. 这里我们需要用到一个 ON …

ON member_id = member.id … SELECT note_content, name FROM note JOIN member ON member_id = id;

回车 …

出现了一个错误 … 提示这条 SQL 声明里面,有一个模糊的栏,id … 这是因为在 note 表里,还有 member 表里面,都有一个栏叫 id …

最后的这个 member_id = id 就是出现问题的地方 … 我们需要明确的去指定 … 这个 id 到底是哪个表里的 id  ..

member_id 来自 note 表 … 等号后面的 id 是来自 member 表 … 所以在它的前面,我们可以明确的指定表的名称 … member.id

在栏的名称的前面,加上所属的数据表的名称 .. 再加上一个点 ... 这样可以解决数据表里的栏名称命名冲突的问题 ….

修改好以后 … 回车 ...

SELECT note_content, name FROM note JOIN member ON member_id = member.id;

在返回的结果里面,会显示笔记的内容 …. 另外还有对应的用户的名称 …..

LEFT OUTER

note 这个表里,有三条数据 … 不过在返回的结果里面,只会显示出两条 … 这是因为在没显示出来的那条笔记内容里,没去指定笔记所属的用户的 ID …

如果想把类似这种情况的内容也包含在查询出的结果里面,我们可以使用 LEFT OUTER …

在这个 JOIN 的前面,加上一个 LEFT OUTER …

表示以左边的表为主 …. 去结合 note 表,还有 member 表 …. 这个左边的表,就是在 JOIN 左边的表 ….

跟 LEFT OUTER 对应的还有 RIGHT OUTER 和 FULL OUTER …. 不过 SQLite 目前只支持 LEFT OUTER

回车 …. 在查询的结果里面,会包含,没有指定用户 id 的 笔记内容 …

实践数据表关系《 HTML5:Web SQL 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点