テーブル結合
- クエリ結果の列が複数のテーブルからのものである場合、複数のテーブルを大きなデータセットに結合してから、適切な列を選択してmysqlに返す必要があります。
- このとき、テーブルを接続する必要があります
内部接続
- 内部結合は、2つのテーブルで互いに一致するレコードのみを選択します
select * from 表1 inner join 表2 on 表1.列 = 表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 * from 表1 left join 表2 on 表1.列=表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 * from 表 where 表(子查询语句)
-- 查询出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;