Mysql多表查询

这里写图片描述

一、一对多,多对一

CREATE TABLE COUNTRY(
    COUNTRY_ID INT(10) NOT NULL AUTO_INCREMENT,
    COUNTRY_NAME VARCHAR(32) NOT NULL,
    PRIMARY KEY(COUNTRY_ID)
);
INSERT INTO COUNTRY(COUNTRY_NAME) VALUES("中国"),("美国");

CREATE TABLE AREA(
    AREA_ID INT(10) NOT NULL AUTO_INCREMENT,
    AREA_NAME VARCHAR(32) NOT NULL,
    COUNTRY_ID INT(10),
    PRIMARY KEY(AREA_ID)
);

INSERT INTO AREA(AREA_NAME,COUNTRY_ID) VALUES("湖南",1),("四川",1),("NEW YARK",2),("LOS SAN",2);
        查询:
mysql> SELECT * FROM COUNTRY a,AREA b WHERE a.COUNTRY_ID = b.COUNTRY_ID;
+------------+--------------+---------+-----------+------------+
| COUNTRY_ID | COUNTRY_NAME | AREA_ID | AREA_NAME | COUNTRY_ID |
+------------+--------------+---------+-----------+------------+
|          1 | 中国         |       1 | 湖南      |          1 |
|          1 | 中国         |       2 | 四川      |          1 |
|          2 | 美国         |       3 | NEW YARK  |          2 |
|          2 | 美国         |       4 | LOS SAN   |          2 |
+------------+--------------+---------+-----------+------------+
4 rows in set (0.00 sec)

mysql> SELECT a.COUNTRY_NAME,b.AREA_NAME FROM COUNTRY a,AREA b WHERE a.COUNTRY_I
D = b.COUNTRY_ID;
+--------------+-----------+
| COUNTRY_NAME | AREA_NAME |
+--------------+-----------+
| 中国         | 湖南      |
| 中国         | 四川      |
| 美国         | NEW YARK  |
| 美国         | LOS SAN   |
+--------------+-----------+
4 rows in set (0.00 sec)

二、自关联


CREATE TABLE DEPT2(
    DEPT_ID INT(10) NOT NULL AUTO_INCREMENT,
    DEPT_NAME VARCHAR(32) NOT NULL,
    PARENT_DEPT_ID INT(10),
    PRIMARY KEY(DEPT_ID)
);

INSERT INTO DEPT2(DEPT_NAME,PARENT_DEPT_ID)VALUES("总裁办公室",null);
INSERT INTO DEPT2(DEPT_NAME,PARENT_DEPT_ID)VALUES("质量",1);
INSERT INTO DEPT2(DEPT_NAME,PARENT_DEPT_ID)VALUES("技术",1);
INSERT INTO DEPT2(DEPT_NAME,PARENT_DEPT_ID)VALUES("IQC",2);
INSERT INTO DEPT2(DEPT_NAME,PARENT_DEPT_ID)VALUES("OQC",2);
INSERT INTO DEPT2(DEPT_NAME,PARENT_DEPT_ID)VALUES("前端",3);
INSERT INTO DEPT2(DEPT_NAME,PARENT_DEPT_ID)VALUES("后端",3);
        查询
mysql> SELECT a.DEPT_NAME,b.DEPT_NAME FROM DEPT2 a,DEPT2 b WHERE a.DEPT_ID = 2 A
ND  b.PARENT_DEPT_ID = a.DEPT_ID;
+-----------+-----------+
| DEPT_NAME | DEPT_NAME |
+-----------+-----------+
| 质量      | IQC       |
| 质量      | OQC       |
+-----------+-----------+
2 rows in set (0.00 sec)

三、多对多

CREATE TABLE STUDENT(
    STUDENT_ID INT(10) NOT NULL AUTO_INCREMENT,
    STUDENT_NAME VARCHAR(32) NOT NULL,
    PRIMARY KEY (STUDENT_ID)
);
INSERT INTO STUDENT(STUDENT_NAME)VALUES("牧牛");
INSERT INTO STUDENT(STUDENT_NAME)VALUES("遛马");

CREATE TABLE COURSE(
    COURSE_ID INT(10) NOT NULL AUTO_INCREMENT,
    COURSE_NAME VARCHAR(32) NOT NULL,
    PRIMARY KEY(COURSE_ID)
);
INSERT INTO COURSE(COURSE_NAME) VALUES("JAVA"),("BIGDATA"),("PYTHON");

CREATE TABLE STUDENT_COURSE_MAPPING(
    STUDENT_ID INT(10) NOT NULL,
    COURSE_ID INT(10) NOT NULL
);
INSERT INTO STUDENT_COURSE_MAPPING(STUDENT_ID,COURSE_ID) VALUES(1,1),(1,2),(2,2),(2,3);
        查询:
mysql> SELECT A.STUDENT_NAME,B.COURSE_NAME FROM STUDENT A,COURSE B,STUDENT_COURS
E_MAPPING C WHERE A.STUDENT_ID = C.STUDENT_ID AND B.COURSE_ID = C.COURSE_ID;
+--------------+-------------+
| STUDENT_NAME | COURSE_NAME |
+--------------+-------------+
| 牧牛         | JAVA        |
| 牧牛         | BIGDATA     |
| 遛马         | BIGDATA     |
| 遛马         | PYTHON      |
+--------------+-------------+
4 rows in set (0.01 sec)

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值