SQLマルチテーブルクエリの概要
- (1)データの初期化
- (2)実際のプロジェクトでは、データは複数のテーブルに格納されます。必要なデータが複数のテーブルから取得される場合は、マルチテーブルクエリを使用する必要があります
- (3)クエリの分類
"1:クロスジョインクエリ(理解)
" 2:インナージョインクエリ
暗黙的な内部ジョイン、明示的な内部ジョイン***
"3:外部ジョインクエリ
左外部ジョイン、右外部ジョイン
" 4:サブ問い合わせる
# 初始化数据
create database day13_3;
use database day13_3;
create table category (
cid int primary key ,
cname varchar(50)
);
create table products(
pid int primary key ,
pname varchar(50),
price int,
flag varchar(2), #是否上架标记为:1表示上架、0表示下架
category_id int,
constraint products_fk foreign key (category_id) references category (cid)
);
#分类
insert into category(cid,cname) values('1','家电');
insert into category(cid,cname) values('2','服饰');
insert into category(cid,cname) values('3','化妆品');
#商品
insert into products(pid, pname,price,flag,category_id) values('1','联想',5000,'1',1);
insert into products(pid, pname,price,flag,category_id) values('2','海尔',3000,'1',1);
insert into products(pid, pname,price,flag,category_id) values('3','雷神',5000,'1',1);
insert into products (pid, pname,price,flag,category_id) values('4','杰克琼斯',800,'1',2);
insert into products (pid, pname,price,flag,category_id) values('5','真维斯',200,'1',2);
insert into products (pid, pname,price,flag,category_id) values('6','花花公子',440,'1',2);
insert into products (pid, pname,price,flag,category_id) values('7','劲霸',2000,'1',2);
insert into products (pid, pname,price,flag,category_id) values('8','香奈儿',800,'1',2);
insert into products (pid, pname,price,flag,category_id) values('9','相宜本草',200,'1',2);
マルチテーブルクエリクロス結合クエリ
(1)クロスジョインクエリとは何ですか?
クロスジョインクエリは、2つのテーブルを乗算することです:AおよびB —> A * B
(2)デカルトセットとは?
データが正しいかどうかに関係なく、2つのテーブルを乗算した結果
(3)
マルチテーブルクエリの本質マルチテーブルクエリは、デカルト集合に基づく条件付きフィルタリングとして理解できます
(4)ケース:各カテゴリとそのカテゴリ内のすべての製品をクエリします
select * from category,products;
マルチテーブルクエリの内部結合
- (1)内部結合クエリとは何ですか?
求めているのは、複数のテーブルの共通部分であり、
本質はデカルト集合に条件を追加することです。 - (2)分類:
暗黙的な内部結合:select * from A、B where条件;
明示的な内部結合:select * from A 内部結合 B on condition;(高効率)
(3)相違点
"キーワード内部結合の使用
"前者デカルト集合に基づいてフィルタリングします。後者は元のリストにあります
(4)演習:地方と都市
隐式内连接:select * from A,B where 条件;
select * from category c,products p where c.cid = p.category_id;
显式内连接:select * from A inner join B on 条件;(效率更高)
select * from category c inner join products p on c.cid = p.category_id;
select * from province,city;
select * from province p inner join city c on p.pid = c.pid_fk;
マルチテーブルクエリ-外部結合
- (1)外部結合クエリとは何ですか?
2つのテーブルのいずれかを選択してすべてのデータを出力します。対応するデータがない場合、もう一方のテーブルはNULLを出力します - (2)分類
左外部結合
select * from A left outer join B on 条件;
は主に左テーブルにあり、左テーブルのすべてのデータが出力され、右テーブルに同等のデータがない場合はNULLが入力されます。
右外部結合
select * from A right outer join B on 条件;
は主に右テーブルに基づいており、右テーブルのすべてのデータが出力されます。テーブルに同等のデータがない場合は、NULLを入力します
# 外连接
select * from province p inner join city c on p.pid = c.pid_fk;
# 左外连接
select * from province p left outer join city c on p.pid = c.pid_fk;
# 右外连接
select * from province p right outer join city c on p.pid = c.pid_fk;
演習
(1)各アクターが
どのような役割を果たしているかを問い合わせる(2)各アクターがどの役割を持っているか、およびどのような権限を問い合わせる
サブクエリ
- (1)サブクエリとは何ですか?
ネストの選択:1つの選択のクエリ結果は、別の選択クエリの構文の一部として使用されます - (2)
製品表の電子分類に属する製品を検索するケース
select *from product where cid = 1
select cid from category where cname='电子'
select *from product where cid = (select cid from category where cname='电子')
製品テーブルで家電および化粧品のカテゴリに属する製品をクエリします。製品テーブルで化粧品のカテゴリに属する製品をクエリします(テーブルは選択クエリの後に取得されます)