- SQL 教程
- SQL - 首页
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 数据库
- SQL - 语法
- SQL - 数据类型
- SQL - 运算符
- SQL - 表达式
- SQL 数据库
- SQL - 创建数据库
- SQL - 删除数据库
- SQL - 选择数据库
- SQL - 重命名数据库
- SQL - 显示数据库
- SQL - 备份数据库
- SQL 表
- SQL - 创建表
- SQL - 显示表
- SQL - 重命名表
- SQL - 截断表
- SQL - 克隆表
- SQL - 临时表
- SQL - 修改表
- SQL - 删除表
- SQL - 删除表数据
- SQL - 约束
- SQL 查询
- SQL - 插入查询
- SQL - 选择查询
- SQL - Select Into
- SQL - Insert Into Select
- SQL - 更新查询
- SQL - 删除查询
- SQL - 对结果排序
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL - Where 子句
- SQL - Top 子句
- SQL - Distinct 子句
- SQL - Order By 子句
- SQL - Group By 子句
- SQL - Having 子句
- SQL - AND & OR
- SQL - BOOLEAN (BIT) 运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY, ALL 运算符
- SQL - EXISTS 运算符
- SQL - CASE
- SQL - NOT 运算符
- SQL - 不等于
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 运算符
- SQL - EXCEPT 运算符
- SQL - 别名
- SQL 连接
- SQL - 使用连接
- SQL - 内连接
- SQL - 左连接
- SQL - 右连接
- SQL - 交叉连接
- SQL - 全连接
- SQL - 自连接
- SQL - 删除连接
- SQL - 更新连接
- SQL - 左连接 vs 右连接
- SQL - Union vs Join
- SQL 键
- SQL - 唯一键
- SQL - 主键
- SQL - 外键
- SQL - 复合键
- SQL - 候选键
- SQL 索引
- SQL - 索引
- SQL - 创建索引
- SQL - 删除索引
- SQL - 显示索引
- SQL - 唯一索引
- SQL - 聚簇索引
- SQL - 非聚簇索引
- 高级 SQL
- SQL - 通配符
- SQL - 注释
- SQL - 注入
- SQL - 托管
- SQL - Min & Max
- SQL - 空值函数
- SQL - 检查约束
- SQL - 默认约束
- SQL - 存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复数据
- SQL - 使用序列
- SQL - 自动递增
- SQL - 日期和时间
- SQL - 游标
- SQL - 公共表表达式
- SQL - Group By vs Order By
- SQL - IN vs EXISTS
- SQL - 数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数值函数
- SQL - 文本和图像函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL - JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问答
- SQL - 快速指南
- SQL - 有用函数
- SQL - 有用资源
- SQL - 讨论
SQL - 交叉连接
SQL 交叉连接
SQL 交叉连接 是一种基本的内部连接类型,用于检索两个单独表的笛卡尔积(或叉积)。这意味着,此连接将第一个表中的每一行与第二个表中的每一行组合(即排列)。
笛卡尔积或叉积是两个集合相乘后得到的结果。这是通过将两个集合中的所有可能对相乘来完成的。
下面的示例图以简单的方式说明了交叉连接。
如您所见,我们考虑了两个表列:发型和发型类型。这些列中的每一个都包含一些需要匹配的记录。因此,使用交叉连接,我们将“发型”列中的每条记录与“发型类型”列中的所有记录组合。获得的结果表被视为笛卡尔积或连接表。
语法
以下是 SQL 中交叉连接查询的基本语法:
SELECT column_name(s) FROM table1 CROSS JOIN table2;
示例
假设我们创建了一个名为 CUSTOMERS 的表,其中包含客户的个人详细信息,包括他们的姓名、年龄、地址和工资等,使用以下查询:
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
现在,使用 INSERT 语句将值插入此表,如下所示:
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ), (2, 'Khilan', 25, 'Delhi', 1500.00 );
该表将创建为:
ID | 姓名 | 年龄 | 地址 | 工资 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
让我们创建另一个名为 ORDERS 的表,其中包含所做订单的详细信息以及订单的日期。
CREATE TABLE ORDERS ( OID INT NOT NULL, DATE VARCHAR (20) NOT NULL, CUSTOMER_ID INT NOT NULL, AMOUNT DECIMAL (18, 2) );
使用 INSERT 语句,将值插入此表,如下所示:
INSERT INTO ORDERS VALUES (100, '2009-10-08 00:00:00', 3, 1500.00), (101, '2009-11-20 00:00:00', 2, 1560.00);
该表显示如下:
OID | 日期 | 客户 ID | 金额 |
---|---|---|---|
100 | 2009-10-08 00:00:00 | 3 | 1500.00 |
101 | 2009-11-20 00:00:00 | 2 | 1560.00 |
现在,如果我们对上面给出的这两个表执行以下交叉连接查询,则交叉连接将 CUSTOMERS 表中的每一行与 ORDERS 表中的每一行组合。
SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS CROSS JOIN ORDERS;
输出
结果表如下:
ID | 姓名 | 金额 | 日期 |
---|---|---|---|
2 | Khilan | 1500.00 | 2009-10-08 00:00:00 |
1 | Ramesh | 1560 | 2009-11-20 00:00:00 |
2 | Khilan | 1560 | 2009-11-20 00:00:00 |
1 | Ramesh | 1500.00 | 2009-10-08 00:00:00 |
使用交叉连接连接多个表
我们还可以使用交叉连接连接两个以上的表。在这种情况下,将显示多路排列,并且结果表预计将包含比各个表多得多的记录。
语法
以下是使用 SQL 中的交叉连接连接多个表的语法:
SELECT column_name(s) FROM table1 CROSS JOIN table2 CROSS JOIN table3 CROSS JOIN table4 .... .... .... CROSS JOIN tableN;
示例
假设我们使用以下查询创建了另一个名为 ORDER_RANGE 的表:
CREATE TABLE ORDER_RANGE ( SNO INT NOT NULL, ORDER_RANGE VARCHAR (20) NOT NULL );
现在,我们可以使用 INSERT 语句将值插入这些空表,如下所示:
INSERT INTO ORDER_RANGE VALUES (1, '1-100'), (2, '100-200'), (3, '200-300');
ORDER_RANGE 表创建如下:
SNO | ORDER_RANGE |
---|---|
1 | 1-100 |
2 | 100-200 |
3 | 200-300 |
以下查询使用交叉连接组合了三个表 CUSTOMERS、ORDERS 和 ORDER_RANGE:
SELECT ID, NAME, AMOUNT, DATE, ORDER_RANGE FROM CUSTOMERS CROSS JOIN ORDERS CROSS JOIN ORDER_RANGE;
输出
结果表如下所示:
ID | 姓名 | 金额 | 日期 | ORDER_RANGE |
---|---|---|---|---|
2 | Khilan | 1560 | 2009-11-20 00:00:00 | 1-100 |
1 | Ramesh | 1560 | 2009-11-20 00:00:00 | 1-100 |
2 | Khilan | 1500.00 | 2009-10-08 00:00:00 | 1-100 |
1 | Ramesh | 1500.00 | 2009-10-08 00:00:00 | 1-100 |
2 | Khilan | 1560 | 2009-11-20 00:00:00 | 100-200 |
1 | Ramesh | 1560 | 2009-11-20 00:00:00 | 100-200 |
2 | Khilan | 1500.00 | 2009-10-08 00:00:00 | 100-200 |
1 | Ramesh | 1500.00 | 2009-10-08 00:00:00 | 100-200 |
2 | Khilan | 1560 | 2009-11-20 00:00:00 | 200-300 |
1 | Ramesh | 1560 | 2009-11-20 00:00:00 | 200-300 |
2 | Khilan | 1500.00 | 2009-10-08 00:00:00 | 200-300 |
1 | Ramesh | 1500.00 | 2009-10-08 00:00:00 | 200-300 |
广告