MYSQL--多表查询

外键:

引用另外一个数据表的某条记录。

外键列类型与主键列类型保持一致 数据表之间的关联/引用关系是依靠具体的主键(primary key)和外键 (foreign key)建立起来的。

create table student(

id int not null auto_increment primary key,

num int,

name varchar(10) majorid int,

CONSTRAINT 约束名 foreign key(majorid ) references major(id) );

约束名规则: 例:FK_ForeignTable_PrimaryTable_On_ForeignColumn

1、当主表中没有对应的记录时,不能将记录添加到从表

2、不能更改主表中的值而导致从表中的记录孤立

3、从表存在与主表对应的记录,不能从主表中删除该行

4、删除主表前,先删从表

CREATE TABLE major(
id INT  PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL
)

ALTER TABLE student ADD majorid INT 

-- 添加外键约束,为什么要添加约束,如果没有添加约束,数据与数据之间,没有任何约束,可以随意操作
-- 为外键添加约束后,操作时就不能随便操作,要保证数据完整性

ALTER TABLE student ADD CONSTRAINT fk_student_major_on_majorid FOREIGN KEY(majorid) REFERENCES major(id)

CREATE TABLE student_class(
studentid INT, 
classid INT,
CONSTRAINT fk_student_class_student_on_studentid FOREIGN KEY(studentid) REFERENCES student(num)
)

关联查询

含义:又称多表查询,当查询的字段来自于多个表时,

就会用到连接查询 笛卡尔乘积现象:

表1有m行,表2有n行,结果=m*n 发生原因:

没有有效的连接条件

如何避免:

添加有效的连接条件 按功能分类: 内连接 外连接 左外连接 右外连接 

-- 关联查询
-- 内连接
SELECT
sname,
NAME,
s.gender
FROM student s INNER JOIN major m ON
s.majorid=m.id

-- 左连接
SELECT
sname,
NAME,
s.gender
FROM student s  LEFT JOIN major m ON
s.majorid=m.id

-- 右连接
SELECT
sname,
NAME,
s.gender
FROM student s RIGHT JOIN major m ON
s.majorid=m.id

-- 统计各个专业的人数
SELECT
COUNT(s.num),
m.NAME
FROM student s RIGHT JOIN major m ON
s.majorid=m.id
GROUP BY m.name

CREATE TABLE coure(
id INT  PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
)

SELECT
s.sname,
m.name,
GROUP_CONCAT(c.name) cname
FROM student s LEFT JOIN major m ON s.majorid=m.id
      LEFT JOIN student_class sc ON s.num=sc.studentid
       LEFT JOIN coure c ON sc.classid=c.id
      GROUP BY s.sname,m.name

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值