点击蓝字关注咱们
经过连接运算符能够实现多个表查找。 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从入门到精通》,作者王英英,如有必须请自动购买,如有侵权,请联系删除。) 扫码关注认识更加多
|