zoukankan      html  css  js  c++  java
  • 一对多关系和多对多关系的实现

    一对多关系和多对多关系的实现

    先来实现一对多关系

    什么是一对多关系呢?

    一对多是关系型数据中两个表之间的一种关系,该关系中第一个表中的单个行可以与第二个表中的一个或多个行相关,但第二个表中的一个行只可以与第一个表中的一个行相关。

    [br]-----我是分割线------[br]

    举例

    帖子与用户之间的关系

     

    现有两张表,帖子表(tab_topic),用户表(tab_user)

    每一个用户可以发多篇帖,但是每篇贴只能对应一个用户

     

    如果要实现这种关系,可以使用的设计

     

    tab_user表中的各列

     

    userId | name|....(省略)

    1 老虎

    2 武松

    3 泰格

     

    tab_topic表中的各列

     

    topicId | userId |  title|...(省略)

    1 1 标题1

    2 1 标题2

    3 2 标题3

    4 1 标题4

     

    表的设计不是很难,现在来看查询

     

    userId = 1的用户发了多少张贴

    select count(*) from tab_topic where userId = 1

    topicId = 1的帖子是谁发的呢?

    select name 
    
    from tab_user 
    
    where userId in (
    
    select usrId from tab_topic where topicId = 1 
    
    ) 

    多对多关系的实现

     

    A表的中一行可以对应B表中的多行,而B表中的一行也可以对应A表中的多行 

    举例

    学生与课程之间的关系

     

    一个学生可以选修多门课程

    一门课程可以被多名学生选修

     

    学生表(tab_student )中的各行各列

    stuId | name|..(省略)

    1 老虎

    2 武松

    3 张三

     

    课程表(tab_course)中的各行各列

    courseId | name | teacher|..(省略)

    1 c语言 A老师

    2 java B老师

    3 php c老师

     

    似乎在两张表中不能很好的反映学生与课程的关系,那就建立第三张表吧

     

    tab_student_course中的各行各列

     

    Id | stuId| courseId|..(省略)

    1 1 1

    2 1 2

    3 1 3

    4 2 3

     

    从表tab_student_course中可以看出老虎选了三门课,php的有2个人选修了

     

    查询

    php有多少个人选修了

    Select count(*) from tab_student_course where courseId = 3

    老虎选修了那几门课程

     

    select name 
    
    from tab_course 
    
    where courseId in (
    
    select couresId 
    
    from tab_student_course 
    
    where stuId = 1
    
    )
  • 相关阅读:
    pm2 配置
    添加项目到远程服务器(git)
    psql 命令行使用
    SQL
    iOS AFNetworking 打印从服务器返回的错误提示信息
    iOS 获取网络图片的大小
    iOS 10 常见配置的问题
    LGLTagsView
    xcode8 关闭控制台打印不用信息
    LGLProgressHUD
  • 原文地址:https://www.cnblogs.com/icez/p/3448010.html
Copyright © 2011-2022 走看看