MySQL5.7データベース-テーブルの結合とサブクエリと外部キー

テーブル結合

  • クエリ結果の列が複数のテーブルからのものである場合、複数のテーブルを大きなデータセットに結合してから、適切な列を選択してmysqlに返す必要があります。
  • このとき、テーブルを接続する必要があります

内部接続

  • 内部結合は、2つのテーブルで互いに一致するレコードのみを選択します
select * from1 inner join2 on1.=2.-- 显示学生的所有信息,但只显示班级名称
select s.*, c.name from students s inner join classes c on s.id=c.id;

-- 将班级名称显示在第一列
select c.name, s.* from students s inner join classes c on s.id=c.id;

-- 查询 有能够对应班级的学生以及班级信息,按照班级进行排序
select c.name, s.* from students s inner join classes c on s.cls_id = c.id order by c.name asc;

-- 当同一个班级时,按照学生的id进行从小到大排序
select c.name, s.* from students s inner join classes c on s.cls_id = c.id order by c.name asc, s.id asc;

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

左接続

クエリの結果は、2つのテーブルと一致するデータ、左側のテーブルに保持されているデータ、および右側のテーブルに存在しないデータはnullで埋められます。

select * from1 left join2 on1.=2.-- students表左连接classes表 并查看班级为null的数据
select * from students s left join classes c on s.cls_id=c.id having s.cls_id is null;

-- 左连接 并且 查询 s.cls_id=1 并且 s.name="small-j" 的数据
select * from students s left join classes c on s.cls_id=c.id having s.cls_id=1 and s.name="small-j";

ここに画像の説明を挿入

正しい接続

クエリ結果は、2つのテーブルの一致したデータです。左側のテーブルに存在しないデータについては、右側のテーブルに保持されているデータがnullで埋められます。

select * from 表1 right join 表2 on 表1.列 = 表2.列;

サブクエリ

場合によっては、クエリを実行するときに、必要な条件が別のselectステートメントの結果であることがあります。このとき、サブクエリが使用されます。

select * fromwhere(子查询语句)
-- 查询出students中身高最高的男生。显示名字和身高
select s.name, s.high from students s where high=(select max(high) from students) and gender="男";

-- 查询出高于平均身高的学生信息
select * from students where high>(select avg(high) from students);

-- 查询学生班级号cls_id能够对应的学生信息
select * from students where cls_id in (select id from students);

-- 查询最大年龄的女生的id
select * from students where id=(select max(id) from students where gender="女") and  gender="女";

ここに画像の説明を挿入

自己連想

接続して自分でクエリできることを理解するだけです

-- 查询广东省下的所有广东市
select * from cities c inner join provinces p on c.provinceid=p.provinceid having p.province="广东省";

-- 查询广东省下的所有广东市
-- 自关联
select * from areas a inner join areas b on a.id=b.pid having a.name="广东";

ここに画像の説明を挿入
ここに画像の説明を挿入

外部キー

外部キーの概要

  • MySQLの外部キー(外部キー)は、テーブルの特別なフィールドです。関連付け関係のある2つのテーブルの場合、関連付けられたフィールドの主キーが配置されているテーブルがプライマリテーブル(親テーブル)であり、外部キーが配置されているテーブルがセカンダリテーブル(子テーブル)です。
  • 注:主キーにnull値を含めることはできませんが、外部キーにはnull値を含めることができます。つまり、外部キーのnull以外の各値が、指定された主キーに表示されている限り、外部キーの内容です。正しい。

テーブルを作成するときに外部キー制約を設定する

  • 外部キーを作成するときは、プライマリテーブルを削除する前にセカンダリテーブルを削除する必要があります。
  • マスターテーブルが存在する必要がある場合は、スレーブテーブルを作成します。
  • セカンダリテーブルの外部キーの関連付けは、プライマリテーブルのプライマリキーである必要があり、プライマリキーと外部キーのタイプは一貫している必要があります。
[constraint 外键名] foreign key (字段名 [,字段名2, ...]) references <主表名> 主键列1 [, 主键列2, ...]
-- 创建班级表
create table classes(
    id int(4) not null primary key,
    name varchar(36)
);

-- 创建学生表
create table student(
    sid int(4) not null primary key,
    sname varchar(30),
    cid int(4) not null
);

-- 创建直接含有外键关系的学生表
create table student(
  	sid int(4) not null primary key,
  	sname varchar(30),
  	cid int(4) not null,
  	constraint pk_id foreign key (cid) references classes(id)
);

-- 通过alter来添加外键关系
alter table student add constraint pk_id foreign key (cid) references classes(id);

-- 删除外键约束
alter table student drop foreign key pk_id;

ここに画像の説明を挿入
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_37662827/article/details/113056373