美文网首页
SQL多对多

SQL多对多

作者: 来往穿梭 | 来源:发表于2017-05-02 23:34 被阅读175次

现有学生表teacher(图1),学生表student(图2),已知张老师的学生有小明小红小敏,王老师的学生有小明小峰,李老师暂时没有学生
a.建立老师和学生的对应关系
b.书写SQL,查出所有老师的id和此老师对应的学生数量

数据准备

CREATE table teacher(
    id INT UNIQUE,
    name VARCHAR(32)
)
INSERT INTO teacher (id,name)  SELECT 1,"张老师" UNION ALL SELECT 2,"王老师" UNION ALL SELECT 3,"李老师" ;```

![图1-老师表](https://img.haomeiwen.com/i2240277/a53a4209c327de26.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

CREATE TABLE student(
id INT ,
name VARCHAR(32)
)```

INSERT INTO student (id,name) SELECT 1,"小明" UNION ALL SELECT 2,"小红" UNION ALL SELECT 3,"小峰" UNION ALL SELECT 4,"小敏"```

![图2-学生表](https://img.haomeiwen.com/i2240277/c42f3455e0a118cc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

CREATE TABLE stu_teacher(
id int UNIQUE,
t_name VARCHAR(32),
s_name VARCHAR(32)
)```

INSERT into stu_teacher (id,t_name,s_name) SELECT 1,"张老师","小明" UNION ALL SELECT 2,"张老师","小红" UNION ALL SELECT 3,"张老师","小敏" 
UNION ALL SELECT 4,"王老师","小明" UNION ALL SELECT 5,"王老师","小峰" UNION ALL SELECT 6,"李老师",null ```
**注意:李老师的学生要设置成null!**
![图3-中间表](https://img.haomeiwen.com/i2240277/bd3c065e8789d639.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Q:查出所有老师的id和此老师对应的学生数量
```select t.id '教师ID',count(s.s_name) as '学生数' from teacher t LEFT JOIN stu_teacher s on t.name=s.t_name group by t.id;```

![结果](https://img.haomeiwen.com/i2240277/eb1a5c6554528cfa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

相关文章

  • SQL多对多

    现有学生表teacher(图1),学生表student(图2),已知张老师的学生有小明小红小敏,王老师的学生有小明...

  • MyBatis

    SQL拼接 concat 如下: 调用外部方法 一对多 多对一

  • Django Model

    django的模型挺好的,不用自己写SQL。外键,多对多,一对多,多对一。 参考:Django Project

  • SQL笔记 - 基础

    SQL对大小写不敏感SQL多使用单引号引用文本SQL语句以;作为间隔 SQL - DML (data mangam...

  • myabtis多表查询

    SQL语句查询一个数据表所有字段的类型:desc [table name] 表之间的关系 一对多一对一多对一多对多...

  • 多对多

    一、单向和双向 包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细...

  • 多对多

  • 多对多

    可用方法 $user ->roles ()->save () $user ->roles ()->savemany...

  • 多对多

  • Mybatis框架(复杂动态SQL),一对一,一对多,多对多

    复合条件查询(动态SQL)MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框...

网友评论

      本文标题:SQL多对多

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