复习之SQL语句(二)——常用多表查询语句使用

多表查询在现实中也经常使用

有些时候数据在不同的表中,这个时候我们就需要用到多表联查

连接(Joins)

SQL join 用于把来自两个或多个表的行结合起来。
table_order表

CREATE TABLE `table_order` (
  `orderId` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单编号',
  `userId` int(11) DEFAULT NULL COMMENT '用户编号',
  `orderName` varchar(32) DEFAULT NULL COMMENT '订单名称',
  PRIMARY KEY (`orderId`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

table_user表

CREATE TABLE `table_user` (
  `userId` int(32) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) DEFAULT NULL COMMENT '用户名',
  `password` varchar(32) DEFAULT NULL COMMENT '密码',
  `summary` varchar(128) DEFAULT NULL COMMENT '简介',
  `age` int(2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4;

,“Order” 表中的 “UserId” 列指向 “User” 表中的客户。上面这两个表是通过 “UserId” 列联系起来的。
先来个例子,方便理解

SELECT table_user.userId,table_order.orderId,table_user.username,table_order.orderName 
FROM table_order
INNER JOIN table_user
ON table_order.userId=table_user.userId

运行结果:
在这里插入图片描述
JOIN有不同的类型

  • INNER JOIN:如果表中有至少一个匹配,则返回行
  • LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN:只要其中一个表中存在匹配,则返回行

INNER JOIN

在这里插入图片描述
上面已经有了INNER JOIN例子
取别名的形式简写SQL

SELECT  u.userId,o.orderId,u.username,o.orderName 
FROM table_order o
INNER JOIN table_user u
ON o.userId=u.userId

三个表INNER JOIN写法

SELECT .... FROM table_order
((INNER JOIN ...ON ...=...)
INNER JOIN ...ON ...=...)

左连接 LEFT JOIN

左链接LEFT JOIN关键字返回左表(表1)中的所有行,即使在右表(表2)中没有匹配。如果在正确的表中没有匹配,结果是NULL。
在这里插入图片描述
SQL语句

SELECT  u.userId,o.orderId,u.username,o.orderName 
FROM table_order o
LEFT JOIN table_user u
ON o.userId=u.userId

运行结果:
在这里插入图片描述

右链接 RIGHT JOIN 语法

右链接 RIGHT JOIN 关键字返回右表(table2)的所有行,即使在左表(table1)上没有匹配。如果左表没有匹配,则结果为NULL。
在这里插入图片描述
SQL语句

SELECT  u.userId,o.orderId,u.username,o.orderName 
FROM table_order o
RIGHT JOIN table_user u
ON o.userId=u.userId

运行结果
在这里插入图片描述

全连接 FULL OUTER JOIN

在这里插入图片描述
SQL语句
MySQL不支持全连接 FULL OUTER JOIN
解决方法:left join + right join
不详述

SQL自联接

自联接是一种常规联接,但表本身是连接的。
SQL语句

SELECT  u.userId,o.orderId,u.username,o.orderName 
FROM table_order o ,table_user u
WHERE o.userId=u.userId

运行结果:
在这里插入图片描述
可以看出,自连接可以实现内部连接的效果 而且更加灵活

UNION 运算符

UNION运算符用于组合两个或更多SELECT语句的结果集。

  • UNION中的每个SELECT语句必须具有相同的列数
  • 这些列也必须具有相似的数据类型
  • 每个SELECT语句中的列也必须以相同的顺序排列
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

注释:默认情况下,UNION 运算符选择一个不同的值。如果允许重复值,请使用 UNION ALL。

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

猜你喜欢

转载自blog.csdn.net/IManiy/article/details/82934429