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

相关推荐

  1. MySQL - 查询

    2024-05-26 03:28:33       64 阅读
  2. MySQL-查询

    2024-05-26 03:28:33       73 阅读
  3. MySQL查询

    2024-05-26 03:28:33       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-26 03:28:33       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-26 03:28:33       97 阅读
  3. 在Django里面运行非项目文件

    2024-05-26 03:28:33       78 阅读
  4. Python语言-面向对象

    2024-05-26 03:28:33       88 阅读

热门阅读

  1. Gopeed的高级用法

    2024-05-26 03:28:33       34 阅读
  2. GitLab的原理及应用详解(四)

    2024-05-26 03:28:33       32 阅读
  3. 揭秘软件测试工程师:事业前景和成功秘诀

    2024-05-26 03:28:33       35 阅读
  4. 前端面试题日常练-day33 【面试题】

    2024-05-26 03:28:33       38 阅读
  5. Android.mk简单介绍、规则与基本格式

    2024-05-26 03:28:33       28 阅读
  6. ANDROID OLLVM 混淆配置

    2024-05-26 03:28:33       28 阅读
  7. android NetworkMonitor记录

    2024-05-26 03:28:33       29 阅读