创建三张表

1、学生表

mysql> create table students(
sid int primary key auto_increment,
sname varchar(100) not null,
age int,
address varchar(100),
courseid int,
constraint fk_stu_cid foreign key(courseid)
references course(cid)
);
mysql> insert into students(sname,age,address,courseid) values('小海子',23,'北京',1003);
mysql> insert into students(sname,age,address,courseid) values('小沈阳',45,'沈阳',1003);
mysql> insert into students(sname,age,address,courseid) values('刘阳',25,'山东',1002);
mysql> insert into students(sname,age,address,courseid) values('甘能',22,'广东',1002);
mysql> select * from students;
+-----+--------+-----+---------+----------+
| sid | sname | age | address | courseid |
+-----+--------+-----+---------+----------+
| 1 | 小海子 | 23 | 北京 | 1003 |
| 2 | 小沈阳 | 45 | 沈阳 | 1003 |
| 3 | 刘阳 | 25 | 山东 | 1002 |
| 4 | 甘能 | 22 | 广东 | 1002 |
+-----+--------+-----+---------+----------+

2、老师表

mysql> create table teacher(
-> tid int(5) primary key auto_increment,
-> tname varchar(100) not null,
-> age int(4),
-> address varchar(100),
-> courseid int
-> )engine=innodb auto_increment=101;
mysql> insert into teacher(tname,age,address) values('马云',50,'杭州');
mysql> insert into teacher(tname,age,address) values('赵本山',52,'沈阳');
mysql> insert into teacher(tname,age,address) values('刘强东',45,'北京');
mysql> select* from teacher;
+-----+--------+-----+---------+----------+
| tid | tname | age | address | courseid |
+-----+--------+-----+---------+----------+
| 101 | 马云 | 50 | 杭州 | NULL |
| 102 | 赵本山 | 52 | 沈阳 | NULL |
| 103 | 刘强东 | 45 | 北京 | NULL |
+-----+--------+-----+---------+----------+

3、课程表

mysql> create table course(
-> cid int primary key auto_increment,
-> cname varchar(100) not null,
-> xuefen int,
-> tid int,
-> constraint fk_course_tid foreign key(tid)
-> references teacher(tid)
-> )engine=innodb auto_increment = 1001;
mysql> insert into course(cname,xuefen,tid) values('C++',3,'');
mysql> insert into course(cname,xuefen,tid) values('java',5,'');
mysql> insert into course(cname,xuefen,tid) values('相声表演',2,'');
mysql> insert into course(cname,xuefen,tid) values('电子商务',3,'');
mysql> select * from course;
+------+----------+--------+-----+
| cid | cname | xuefen | tid |
+------+----------+--------+-----+
| 1001 | C++ | 3 | 101 |
| 1002 | java | 5 | 101 |
| 1003 | 相声表演 | 2 | 102 |
| 1004 | 电子商务 | 3 | 103 |
+------+----------+--------+-----+

学生修了哪些课程

mysql> select s.sname,c.cid,c.cname
-> from students s left join course c
-> on s.courseid = c.cid;
+--------+------+----------+
| sname | cid | cname |
+--------+------+----------+
| 刘阳 | 1002 | java |
| 甘能 | 1002 | java |
| 小海子 | 1003 | 相声表演 |
| 小沈阳 | 1003 | 相声表演 |
+--------+------+----------+

学生修的课程有哪些老师教

mysql> select s.sname,c.cid,c.cname,t.tname
-> from students s,course c,teacher t
-> where s.courseid = c.cid and c.tid = t.tid;
+--------+------+----------+--------+
| sname | cid | cname | tname |
+--------+------+----------+--------+
| 刘阳 | 1002 | java | 马云 |
| 甘能 | 1002 | java | 马云 |
| 小海子 | 1003 | 相声表演 | 赵本山 |
| 小沈阳 | 1003 | 相声表演 | 赵本山 |
+--------+------+----------+--------+

或者

mysql> select s.sname,c.cid,c.cname,t.tname
-> from students s inner join course c inner join teacher t
-> on s.courseid = c.cid and c.tid = t.tid; +--------+------+----------+--------+
| sname | cid | cname | tname |
+--------+------+----------+--------+
| 刘阳 | 1002 | java | 马云 |
| 甘能 | 1002 | java | 马云 |
| 小海子 | 1003 | 相声表演 | 赵本山 |
| 小沈阳 | 1003 | 相声表演 | 赵本山 |
+--------+------+----------+--------+

其他关联不行。left join ,right join

2018年1月17日01:07:40

MySQL之三张表关联的更多相关文章

  1. mysql三张表关联查询

    三张表,需要得到的数据是标红色部分的.sql如下: select a.uid,a.uname,a.upsw,a.urealname,a.utel,a.uremark, b.rid,b.rname,b. ...

  2. MySQL 两张表关联更新(用一个表的数据更新另一个表的数据)

    有两张表,info1, info2 . info1: info2: 现在,要用info2中的数据更新info1中对应的学生信息,sql语句如下: UPDATE info1 t1 JOIN info2 ...

  3. 【Mysql进阶技巧(1)】 MySQL的多表关联与自连接

    自连接 测试数据准备 CREATE TABLE `t2` ( `id` int(11) NOT NULL, `gid` char(1) DEFAULT NULL, `col1` int(11) DEF ...

  4. MSSQL N张表关联查询

    declare @newTime varchar(50); declare @lasetTime varchar(50); set @newTime= getdate(); set @lasetTim ...

  5. Oracle两张表关联批量更新其中一张表的数据

    Oracle两张表关联批量更新其中一张表的数据 方法一(推荐): UPDATE 表2 SET 表2.C = (SELECT B FROM 表1 WHERE 表1.A = 表2.A) WHERE EXI ...

  6. mysql一张表到底能存多少数据?

    前言 程序员平时和mysql打交道一定不少,可以说每天都有接触到,但是mysql一张表到底能存多少数据呢?计算根据是什么呢?接下来咱们逐一探讨 知识准备 数据页 在操作系统中,我们知道为了跟磁盘交互, ...

  7. Mysql两张表的关联字段不一致

    工作中遇到了一个问题,邮件系统群发失败,后来经过排查查找到了原因 原来是因为mysql中的两张表的关联字段竟然不一致, 表A mysql> desc rm_user_router;+------ ...

  8. mysql一张表多个字段关联另一张表查询

    如下:一张订单表多个字段关联用户表: 1.链表查询 SELECT cu.id AS 'id',cu.version AS 'version',cu.cid AS 'cid',cu.uid AS 'ui ...

  9. Oracle中如何实现Mysql的两表关联update操作

    在看<MySQL 5.1参考手册>的时候,发现MySQL提供了一种两表关联update操作.原文如下: UPDATE items,month SET items.price=month.p ...

随机推荐

  1. 《构建之法》——GitHub和Visual Studio的基础使用

    git地址 https://github.com/microwangwei git用户名 microwangwei 学号后五位 62214 博客地址 https://www.cnblogs.com/w ...

  2. Java 中的并发工具类

    Java 中的并发工具类 CountDownLatch public class JoinCountDownLatchTest { public static void main(String[] a ...

  3. [转帖]kubernetes ingress 在物理机上的nodePort和hostNetwork两种部署方式解析及比较

    kubernetes ingress 在物理机上的nodePort和hostNetwork两种部署方式解析及比较 https://www.cnblogs.com/xuxinkun/p/11052646 ...

  4. WCF-方法重载

    一.服务端重载 一般写法直接重载,但是会报错,如下. [ServiceContract] public interface IService1 { [OperationContract] string ...

  5. TypeScript tsconfig.json(TypeScript配置)

    如果一个目录下存在一个tsconfig.json文件,那么意味着这个目录是TypeScript项目的根目录. tsconfig.json文件中指定了用来编译这个项目的根文件和编译选项. 一个项目可以通 ...

  6. Ribbon源

    在Riibon中一个非常重要的组件为LoadBalancerClient,它作为负载均衡的一个客户端 ServiceInstance choose(String serviceId); 从负载均衡器中 ...

  7. nginx配置的记录

    基本使用 语法规则: location [=|~|~*|^~] /uri/ { - } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url ...

  8. 【转】MySQL中EXISTS的用法

    原文链接:https://www.cnblogs.com/qlqwjy/p/8598091.html 比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,Compan ...

  9. PAT甲级 链表题_C++题解

    链表处理 PAT (Advanced Level) Practice 链表题 目录 <算法笔记> 重点摘要:静态链表 1032 Sharing (25) 1052 Linked List ...

  10. 详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本(转)

    原文:https://www.jb51.net/article/156927.htm