美文网首页JAVA后台开发_从入门到精通
3.7 创建第二张表(两张表结合查询)

3.7 创建第二张表(两张表结合查询)

作者: 笑Skr人啊 | 来源:发表于2017-04-07 15:56 被阅读0次

pet表追踪你有哪个宠物。如果你想要记录其它相关信息,例如在他们一生中看兽医或何时后代出生,你需要另外的表。这张表应该像什么呢?需要:
· 它需要包含宠物名字以便你知道每个事件属于哪个动物。

· 需要一个日期以便你知道事件是什么时候发生的。

· 需要一个描述事件的字段。

· 如果你想要对事件进行分类,则需要一个事件类型字段。

综合上述因素,event表的CREATE TABLE语句应为:

mysql> CREATE TABLE event (name VARCHAR(20), date DATE,
    -> type VARCHAR(15), remark VARCHAR(255));

对于pet表,最容易的方法是创建包含信息的用定位符分隔的文本文件来装载初始记录:

Paste_Image.png

采用如下方式装载记录:

mysql> LOAD DATA LOCAL INFILE 'event.txt' INTO TABLE event;
根据你从已经运行在pet表上的查询中学到的,你应该能执行对event表中记录的检索;原理是一样的。但是什么时候event表本身不能回答你可能问的问题呢?

当他们有了一窝小动物时,假定你想要找出每只宠物的年龄。我们前面看到了如何通过两个日期计算年龄。event表中有母亲的生产日期,但是为了计算母亲的年龄,你需要她的出生日期,存储在pet表中。说明查询需要两个表:

mysql> SELECT pet.name,
    -> (YEAR(date)-YEAR(birth)) - (RIGHT(date,5)<RIGHT(birth,5)) AS age,
    -> remark
    -> FROM pet, event
    -> WHERE pet.name = event.name AND event.type = 'litter';
+--------+------+-----------------------------+
| name   | age  | remark                      |
+--------+------+-----------------------------+
| Fluffy |    2 | 4 kittens, 3 female, 1 male |
| Buffy  |    4 | 5 puppies, 2 female, 3 male |
| Buffy  |    5 | 3 puppies, 3 female         |
+--------+------+-----------------------------+

关于该查询要注意的几件事情:

FROM子句列出两个表,因为查询需要从两个表提取信息。
当从多个表组合(联结)信息时,你需要指定一个表中的记录怎样能匹配其它表的记录。这很简单,因为它们都有一个name列。查询使用WHERE子句基于name值来匹配2个表中的记录。
因为name列出现在两个表中,当引用列时,你一定要指定哪个表。把表名附在列名前即可以实现。
你不必有2个不同的表来进行联结。如果你想要将一个表的记录与同一个表的其它记录进行比较,可以将一个表联结到自身。例如,为了在你的宠物之中繁殖配偶,你可以用pet联结自身来进行相似种类的雄雌配对:


mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
    -> FROM pet AS p1, pet AS p2
    -> WHERE p1.species = p2.species AND p1.sex = 'f' AND p2.sex = 'm';
+--------+------+--------+------+---------+
| name   | sex  | name   | sex  | species |
+--------+------+--------+------+---------+
| Fluffy | f    | Claws  | m    | cat     |
| Buffy  | f    | Fang   | m    | dog     |
| Buffy  | f    | Bowser | m    | dog     |
+--------+------+--------+------+---------+

在这个查询中,我们为表名指定别名以便能引用列并且使得每一个列引用与哪个表实例相关联更直观。

相关文章

  • 3.7 创建第二张表(两张表结合查询)

    pet表追踪你有哪个宠物。如果你想要记录其它相关信息,例如在他们一生中看兽医或何时后代出生,你需要另外的表。这张表...

  • SQL多表查询高级应用

    SQL多表查询 多表连接示范 两张表t_user t_judge 给两张表设置外键约束查询内容 SQL多表查询 多...

  • 多表查询

    两张表: 左连接: 左表全部查询,以左表为基准 右连接: 右表全部查询,以右表为基准 内连接: 找交集

  • iOS简单的多表查询以及SQLite注意点

    多表查询 假如有两张表: 表A: 表B: 这里我们是通过相同列名departmentNumber来进行条件查询相关...

  • DDL 数据库视图定义

    创建视图 根据表的查询结果创建视图 创建简单视图,由一张表的查询生成的视图 创建复杂视图,由多张表的查询或有函数时...

  • 数据库 - 多表查询

    多表查询 关联关系 创建表格时,表与表之间是存在业务关系的。 有哪些 1对1 :有AB两张表,A表中1条数据对应B...

  • 45-多表查询

    一、建表 二、多表联合查询 把多张物理表合并成一张虚拟表再进行查询。 1、内连接:保留两张表有对应关系的记录 2、...

  • 约束类型测试4

    目的: 使两张表产生关联,同步更新内容。 创建员工信息表,创建员工薪资表。观察同步效应 创建父表 父表compan...

  • 存储过程与视图的比较--并且在mybatis中的实现过程

    两张表的联立视图查询: 创建视图的sql语句: 创建存储过程的sql语句: mybatis的mapper.xml代...

  • sql练习题

    1. mysql查询 两张表:user用户表:id (主键,自增),namebuy 购买记录表: id (主键,自...

网友评论

    本文标题:3.7 创建第二张表(两张表结合查询)

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