外链论坛

 找回密码
 立即注册
搜索
查看: 53|回复: 2

MySQL8第45期-MySQL查询数据之连接查询

[复制链接]

2899

主题

1万

回帖

9606万

积分

论坛元老

Rank: 8Rank: 8

积分
96066391
发表于 2024-8-4 15:43:18 | 显示全部楼层 |阅读模式
点击蓝字关注咱们

经过连接运算符能够实现多个表查找

01内连接查找

内连接(INNER JOIN)运用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接要求相匹配的数据行,组合成新的记录,便是说,在内连接查找中,仅有满足要求的记录才可此刻结果关系中。为了演示的必须首要创建数据表suppliers,SQL语句如下:

为了演示的必须首要创建数据表suppliers,SQL语句如下:

CREATE TABLE suppliers

(

s_id int NOT NULL AUTO_INCREMENT,

s_name char(50) NOT NULL,

s_city char(50) NULL,

s_zip char(10) NULL,

s_call char(50) NOT NULL,

PRIMARY KEY (s_id)

);

插进必须演示的数据,SQL语句如下:

INSERT INTO suppliers(s_id,s_name,s_city,s_zip,s_call)

VALUES(101,FastFruit Inc.,Tianjin,300000,48075),

(102,LT Supplies,Chongqing,400000,44333),

(103,ACME,Shanghai,200000,90046),

(104,FNK Inc.,Zhongshan,528437,11111),

(105,Good Set,Taiyuang,030000,22222),

(106,Just Eat Ours,Beijing,010,45678),

(107,DK Inc.,Zhengzhou,450000,33332);

在fruits表和suppliers表之间运用内连接查找查找之前,查看两个表的结构:

DESC fruits;

DESC suppliers;

由结果能够看到,fruits表和suppliers表中都有相同数据类型的字段s_id,两个表经过s_id字段创立联系。接下来从fruits表中查找f_name、f_price字段,从suppliers表中查找s_id、s_name,SQL语句如下:

SELECT suppliers.s_id,s_name,f_name,f_price

FROM fruits,suppliers

WHERE fruits.s_id = suppliers.s_id;

下面的内连接查找语句返回与前面完全相同的结果。

在fruits表和suppliers表之间,运用INNER JOIN语法进行内连接查找,SQL语句如下:

SELECT suppliers.s_id,s_name,f_name,f_price

FROM fruits

INNER JOIN suppliers

ON fruits.s_id=suppliers.s_id;

自连接是一种特殊的内连接,它指的是相互连接的表在理学上为同一张表,但能够规律上分为两张表。

查找f_id= a1的果蔬供应商供给果蔬种类,SQL语句如下:

SELECT f1.f_id,f1.f_name

FROM fruits AS f1,fruits AS f2

WHERE f1.s_id=f2.s_id

AND f2.f_id=a1;

咱们能够这么写:

SELECT f1.f_id,f1.f_name

FROM fruits AS f1

INNER JOIN fruits AS f2

ON f1.s_id=f2.s_id

AND f2.f_id=a1;

02外连接查找

外连接分为左外连接或左连接和右外连接或右连接:

LEFT JOIN(左连接):返回包含左表中的所有记录和右表中连接字段相等的记录。

RIGHT JOIN(右连接):返回包含右表中的所有记录和左表中连接字段相等的记录。

首要创建表orders,SQL语句如下:

CREATE TABLE orders

(

o_num int NOT NULL AUTO_INCREMENT,

o_date datetime NOT NULL,

c_id int NOT NULL,

PRIMARY KEY(o_num)

);

插进必须演示的数据,SQL语句如下:

INSERT INTO orders(o_num,o_date,c_id)

VALUES(30001,2008-09-01,10001),

(30002,2008-09-12,10003),

(30003,2008-09-30,10004),

(30004,2008-10-03,10005),

(30005,2008-10-08,10001);

在customers表和orders表中,查找所有客户,包含订单的客户,SQL语句如下:

SELECT customers.c_id,orders.o_num

FROM customers LEFT OUTER JOIN orders

ON customers.c_id=orders.c_id;

右连接是左连接的反向连接,将返回右表的所有行。倘若右表的某行在左表中匹配行,左表将返回空值。

在customers表和orders表中,查找所有订单,包含客户的订单,SQL语句如下:

SELECT customers.c_id,orders.o_num

FROM customers RIGHT OUTER JOIN orders

ON customers.c_id=orders.c_id;

03复合要求连接查找

复合要求连接查找是在连接查找的过程中,经过添加过滤要求限制查找的结果,使查找的结果更加准确。

在customers表和orders表中,运用INNER JOIN语法查找customers表中ID为10001的客户的订单信息,SQL语句如下:

SELECT customers.c_id,orders.o_num

FROM customers INNER JOIN orders

ON customers.c_id=orders.c_id

AND customers.c_id=10001;

在fruits表和suppliers表之间,运用INNER JOIN语法进行内连接查找,并对查找结果排序,SQL语句如下:

SELECT suppliers.s_id,s_name,f_name,f_price

FROM fruits

INNER JOIN suppliers

ON fruits.s_id=suppliers.s_id

ORDER BY fruits.s_id;

(以上内容参考书籍《MySQL8从入门到精通》,作者王英英,如有必须自动购买,如有侵权,请联系删除。)

扫码关注认识更加多
回复

使用道具 举报

0

主题

1万

回帖

1

积分

新手上路

Rank: 1

积分
1
发表于 2024-8-20 09:08:29 | 显示全部楼层
你的见解真是独到,让我受益良多。
回复

使用道具 举报

2795

主题

1万

回帖

9997万

积分

论坛元老

Rank: 8Rank: 8

积分
99979978
发表于 2024-9-30 11:10:26 | 显示全部楼层
你的话语如春风拂面,让我感到无比温暖。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-10-19 07:29 , Processed in 0.070427 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.