- 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 - 选择进入
- SQL - 插入选择
- SQL - 更新查询
- SQL - 删除查询
- SQL - 对结果进行排序
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL-Where 子句
- SQL - 顶部子句
- SQL - 不同子句
- SQL - Order By 子句
- SQL - Group By 子句
- SQL-Having 子句
- SQL - 与与或
- SQL - 布尔(位)运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY、ALL 运算符
- SQL - EXISTS 运算符
- SQL-案例
- SQL - NOT 运算符
- SQL - 不等于
- SQL - 为空
- SQL - 不为空
- SQL - 非空
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION 与 UNION ALL
- SQL - 相交运算符
- SQL - EXCEPT 运算符
- 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 - 非聚集索引
- 高级SQL
- SQL - 通配符
- SQL - 注释
- SQL-注入
- SQL-托管
- SQL - 最小值和最大值
- SQL - 空函数
- SQL - 检查约束
- SQL - 默认约束
- SQL-存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL-自动递增
- SQL - 日期和时间
- SQL-游标
- SQL - 公用表表达式
- SQL - 分组依据与排序依据
- SQL - IN 与 EXISTS
- SQL——数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数字函数
- SQL - 文本和图像函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL-JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问题与解答
- SQL - 快速指南
- SQL - 有用的函数
- SQL - 有用的资源
- SQL - 讨论
SQL-交叉连接
SQL 交叉连接
SQL 交叉联接是一种基本类型的内部联接,用于检索两个单独表的笛卡尔积(或叉积)。这意味着,此连接将把第一个表的每一行与第二个表的每一行组合起来(即排列)。
笛卡尔积或叉积是两个集合相乘得到的结果。这是通过将两个集合中所有可能的对相乘来完成的。
下面的示例图以简单的方式说明了交叉连接。
正如您所看到的,我们考虑了两个表列:发型和发型。每列都包含一些需要匹配的记录。因此,使用交叉联接,我们将“Hair Style”列中的每条记录与“Hair Type”列中的所有记录组合起来。获得的结果表被视为笛卡尔积或连接表。
句法
以下是 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 | 拉梅什 | 32 | 艾哈迈达巴德 | 2000.00 |
2 | 基兰 | 25 | 德里 | 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);
该表显示如下 -
奥德 | 日期 | 客户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 | 基兰 | 1500.00 | 2009-10-08 00:00:00 |
1 | 拉梅什 | 1560 | 2009-11-20 00:00:00 |
2 | 基兰 | 1560 | 2009-11-20 00:00:00 |
1 | 拉梅什 | 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 表创建如下 -
斯诺 | 订单范围 |
---|---|
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 | 姓名 | 数量 | 日期 | 订单范围 |
---|---|---|---|---|
2 | 基兰 | 1560 | 2009-11-20 00:00:00 | 1-100 |
1 | 拉梅什 | 1560 | 2009-11-20 00:00:00 | 1-100 |
2 | 基兰 | 1500.00 | 2009-10-08 00:00:00 | 1-100 |
1 | 拉梅什 | 1500.00 | 2009-10-08 00:00:00 | 1-100 |
2 | 基兰 | 1560 | 2009-11-20 00:00:00 | 100-200 |
1 | 拉梅什 | 1560 | 2009-11-20 00:00:00 | 100-200 |
2 | 基兰 | 1500.00 | 2009-10-08 00:00:00 | 100-200 |
1 | 拉梅什 | 1500.00 | 2009-10-08 00:00:00 | 100-200 |
2 | 基兰 | 1560 | 2009-11-20 00:00:00 | 200-300 |
1 | 拉梅什 | 1560 | 2009-11-20 00:00:00 | 200-300 |
2 | 基兰 | 1500.00 | 2009-10-08 00:00:00 | 200-300 |
1 | 拉梅什 | 1500.00 | 2009-10-08 00:00:00 | 200-300 |