マルチテーブルクエリ
複数のテーブルに関連するクエリの結果から抽出された単一のSELECT文は、マルチテーブルは通常、親子関係を持つテーブルに基づいてジョイン。
クロスコネクト
デカルト積である第二のテーブルのすべての行を乗じた最初のテーブルのすべての行
顧客テーブルとコンシューマを作成する:
次のようにコードです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
-- create table customers(
-- id int primary key auto_increment,
-- name VARCHAR(20)not null,
-- address VARCHAR(20)not NULL
-- );
-- CREATE table orders(
-- order_namre VARCHAR(20) primary key,
-- num char(20) not NULL,
-- price int not null,
-- customers_id int,
-- constraint cus_ord_fk FOREIGN key(customers_id) REFERENCES customers(id)
-- )
自己插入数据即可。
语法:
|
暗黙の文法(キーワードを使用しないでください):顧客、受注から選択*;
結果は以下の通りであります:
明示的な構文(キーワード):選択* INNER Cの顧客からは、O ON c.id = o.customer_id注文を登録しよう。
2つの動作の結果のような、しかし、デカルト積は、エラー、次の補正方法を有します
コネクタ2
クロスコネクト得られた結果セットが間違っているので。したがって、接続は、クロスコネクトに基づいて
のみ接続状態テーブルに接続されたリストデータラインレコードと一致しないと一致する表示されません。
構文:
暗黙の構文:
1
|
select
*
from
customers,orders
where
customers.id=orders.customers_id;
|
明示的な構文:
1
|
select
*
from
customers c
INNER
JOIN
orders o
ON
c.id=o.customer_id;
|
結果は以下のとおりであります
また、プログラムにエイリアスを再生することができます。
コードは以下の通りであります:
1
2
|
select
*
from
customers
as
c,orders o
where
c.id=o.customers_id;
SELECT
*
from
customers
as
c
inner
join
orders o
on
c.id=o.customers_id;
|
外側コネクタ3
エン購入した商品のすべてのユーザーに対してのみリスト情報は、商品を購入しないユーザーは表示されません。
外側リンクテーブルであるヌルを表示しない場合、最後にそこに縫合されている場合、ベーステーブルは、このメッセージの他のテーブルスプライシングである下部接続に参加して左右外側に連結されています。
左外部結合:スプライシングのための基本テーブルのキーワードの表の左に
構文:
1
|
select
*
from
customers c
LEFT
JOIN
orders o
ON
c.id=o.customer_id;
|
右の外部接続:グループのためのキーワードテーブルを形成する権利
構文:
1
|
select
*
from
orders o
RIGHT
JOIN
customers c
ON
c.id=o.customer_id;
|
4サブクエリ
いくつかのケースでは、照会するとき、条件がSELECT文の別の結果である必要、それは最初のデータを提供するために、メイン・クエリ(外部クエリ)を与えるために、サブクエリを使用します。この時間が行わ(内部問い合わせ)これは、サブクエリと呼ばれる、ネストされたサブクエリは、サブクエリと相関サブクエリに分割されます。
ネストされたサブクエリ:
内部クエリを実行すると、外部クエリから独立している条件を用いて、外部クエリの結果として終了した後、クエリのみ、内部一度実行される(サブネストされたサブクエリクエリが別々に実行してもよいです。)
文法と練習問題:教師の1のために教えてすべての生徒のIDをチェックしてください。
1
|
select
*
from
students
where
id
in
(
select
s_id
from
teacher_student
where
t_id=1);
|
相関サブクエリ:
内部クエリの実装は、各外側のクエリの実行時間、外部クエリデータに依存して、内部の問い合わせは一度実行されます。毎回最初の外側のクエリの実行は、タプル外部のルックアップテーブル、内部クエリに現在のタプルのデータ伝送を削除し、内部クエリを実行します。外部クエリでの条件は、現在のタプルが会ったかどうかどこそれがタプルの現在の要件を満たすのであれば、判断するために行われた内部調査の結果によると遵守の記録である、または要件を満たしていません。次いで、外側のクエリはすべてのタプルが処理されるまで上記の操作を行う、次のタプルデータに続けて取り除きます。
3つのテーブルを作成
1人の教師のIDから練習1.チェックをすべての学生を教えました。
-テーブルの先生を作成します。
1
2
3
4
5
|
create
table
teacher1(
id
int
primary
key
auto_increment,
name
char
(20)
not
NULL
,
subject
char
(20)
not
null
);
|
- 学生テーブルを作成します。
1
2
3
4
5
|
create
table
student1(
id
int
primary
key
auto_increment,
name
char
(20)
unique
not
null
,
age
int
null
);
|
- 第三のテーブルを作成します。
1
2
3
4
5
6
7
8
9
|
create
table
tea_stu(
id
int
PRIMARY
KEY
,
name
char
(20),
t_id
int
,
s_id
int
,
score
int
not
null
,
constraint
teacher1_id_fk
foreign
key
(t_id)
references
teacher1(id),
constraint
student_id_fk
foreign
key
(s_id)
references
student1(id)
);
|
练习1. 查询出id为1的老师教过的所有学生。
做法1 用分开的方法写出来:
1
2
|
select
s_id
from
tea_stu
where
t_id=1;
select
*
from
student1
where
id
in
(2,3);
|
做法2:
1
|
select
*
from
student1
where
id
in
(
select
s_id
from
tea_stu
where
t_id=1);
|
相关子查询:
内部查询的执行依赖于外部查询的数据,外部查询每执行一次,内部查询也会执行一次。每一次都是外部查询先执行,取出外部查询表中的一个元组,将当前元组中的数据传递给内部查询,然后执行内部查询。根据内部查询执行的结果,判断当前元组是否满足外部查询中的where条件,若满足则当前元组是符合要求的记录,否则不符合要求。然后,外部查询继续取出下一个元组数据,执行上述的操作,直到全部元组均被处理完毕。
求:每一科考试成绩大于平均分的学生的分数。
1
|
select
*
from
tea_stu
as
a
where
a.score>(
select
avg
(b.score)
from
tea_stu
as
b
where
a.s_id=b.s_id);
|
以上所述是小编给大家介绍的MySQL多表查询详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
<div class="art_xg">
<h4>您可能感兴趣的文章:</h4><ul><li><a href="/article/75456.htm" title="MySQL中基本的多表连接查询教程" target="_blank">MySQL中基本的多表连接查询教程</a></li><li><a href="/article/107813.htm" title="mysql delete 多表连接删除功能" target="_blank">mysql delete 多表连接删除功能</a></li><li><a href="/article/148401.htm" title="mysql多表连接查询实例讲解" target="_blank">mysql多表连接查询实例讲解</a></li><li><a href="/article/177142.htm" title="MySQL多表连接的完美实例教程" target="_blank">MySQL多表连接的完美实例教程</a></li></ul>
</div>
<p class="tip">如您对本文有所疑义或者对本文内容提供补充建议,请联系小编<a href="http://wpa.qq.com/msgrd?v=3&uin=2998481778&site=jb51net&menu=yes" target="_blank"><img border="0" src="https://pub.idqqimg.com/qconn/wpa/button/button_111.gif" alt="点击这里给我发消息" title="点击这里给我发消息"></a>,本站会保留修改者版权</p><div class="lbd_bot clearfix">
<div id="_ifawebpf8ce" style=""><iframe width="820" frameborder="0" height="250" scrolling="no" src="https://pos.baidu.com/s?hei=250&wid=820&di=u4846790&ltu=https%3A%2F%2Fwww.jb51.net%2Farticle%2F159634.htm&psi=2cf4d6fa3c0f93cfba5f3d5f3ebd4ab3&ari=2&cja=false&cec=GBK&prot=2&ti=%E8%AF%A6%E8%A7%A3MySQL%E6%95%B0%E6%8D%AE%E5%BA%93--%E5%A4%9A%E8%A1%A8%E6%9F%A5%E8%AF%A2--%E5%86%85%E8%BF%9E%E6%8E%A5%EF%BC%8C%E5%A4%96%E8%BF%9E%E6%8E%A5%EF%BC%8C%E5%AD%90%E6%9F%A5%E8%AF%A2%EF%BC%8C%E7%9B%B8%E5%85%B3%E5%AD%90%E6%9F%A5%E8%AF%A2_Mysql_%E8%84%9A%E6%9C%AC%E4%B9%8B%E5%AE%B6&drs=1&pis=-1x-1&ant=0&dis=0&cfv=0&cpl=21&pcs=1899x941&psr=1920x1080&par=1920x1030&ccd=24&tpr=1580798985393&ps=5886x364&dc=3&cmi=33&cce=true&dri=0&dai=1&dtm=HTML_POST&tcn=1580798985&chi=1&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DFk8UwWVXXnmBsHJnlli9U8yEm1nIxsbT-qcQbPXYc2yvJTHxLvU2P1kNbr3kbUqHTyH1_aNmI_vNXt27d19AW_%26wd%3D%26eqid%3D882c4fd70034142a000000035e3913ae&tlm=1580798985&pss=1899x7769&exps=111000,110011&col=zh-CN&cdo=-1"></iframe></div><script type="text/javascript" src="//jscode.jbzj.com/production/ql/common/h/source/n/h/production/kmtr.js"></script>
</div>
<p>原文链接:https://blog.csdn.net/python20180218/article/details/89192518</p><div class="jb51ewm"><div class="fl"><img src="//files.jb51.net/skin/2018/images/jb51ewm.png"></div><div class="fr"><p>微信公众号搜索 “ <span>脚本之家</span> ” ,选择关注</p><p>程序猿的那些事、送书等活动等着你</p></div></div></div>