
- MySQL 基礎
- MySQL - 首頁
- MySQL - 簡介
- MySQL - 特性
- MySQL - 版本
- MySQL - 變數
- MySQL - 安裝
- MySQL - 管理
- MySQL - PHP 語法
- MySQL - Node.js 語法
- MySQL - Java 語法
- MySQL - Python 語法
- MySQL - 連線
- MySQL - Workbench
- MySQL 資料庫
- MySQL - 建立資料庫
- MySQL - 刪除資料庫
- MySQL - 選擇資料庫
- MySQL - 顯示資料庫
- MySQL - 複製資料庫
- MySQL - 資料庫匯出
- MySQL - 資料庫匯入
- MySQL - 資料庫資訊
- MySQL 使用者
- MySQL - 建立使用者
- MySQL - 刪除使用者
- MySQL - 顯示使用者
- MySQL - 修改密碼
- MySQL - 授予許可權
- MySQL - 顯示許可權
- MySQL - 收回許可權
- MySQL - 鎖定使用者賬戶
- MySQL - 解鎖使用者賬戶
- MySQL 表
- MySQL - 建立表
- MySQL - 顯示錶
- MySQL - 修改表
- MySQL - 重命名錶
- MySQL - 克隆表
- MySQL - 截斷表
- MySQL - 臨時表
- MySQL - 修復表
- MySQL - 描述表
- MySQL - 新增/刪除列
- MySQL - 顯示列
- MySQL - 重新命名列
- MySQL - 表鎖定
- MySQL - 刪除表
- MySQL - 派生表
- MySQL 查詢
- MySQL - 查詢
- MySQL - 約束
- MySQL - 插入查詢
- MySQL - 選擇查詢
- MySQL - 更新查詢
- MySQL - 刪除查詢
- MySQL - 替換查詢
- MySQL - 插入忽略
- MySQL - 插入重複鍵更新
- MySQL - 插入到選擇
- MySQL 運算子和子句
- MySQL - WHERE 子句
- MySQL - LIMIT 子句
- MySQL - DISTINCT 子句
- MySQL - ORDER BY 子句
- MySQL - GROUP BY 子句
- MySQL - HAVING 子句
- MySQL - AND 運算子
- MySQL - OR 運算子
- MySQL - LIKE 運算子
- MySQL - IN 運算子
- MySQL - ANY 運算子
- MySQL - EXISTS 運算子
- MySQL - NOT 運算子
- MySQL - 不等於運算子
- MySQL - IS NULL 運算子
- MySQL - IS NOT NULL 運算子
- MySQL - BETWEEN 運算子
- MySQL - UNION 運算子
- MySQL - UNION 與 UNION ALL
- MySQL - MINUS 運算子
- MySQL - INTERSECT 運算子
- MySQL - INTERVAL 運算子
- MySQL 連線
- MySQL - 使用連線
- MySQL - 內連線
- MySQL - 左連線
- MySQL - 右連線
- MySQL - 交叉連線
- MySQL - 全連線
- MySQL - 自連線
- MySQL - 刪除連線
- MySQL - 更新連線
- MySQL - UNION 與 JOIN
- MySQL 觸發器
- MySQL - 觸發器
- MySQL - 建立觸發器
- MySQL - 顯示觸發器
- MySQL - 刪除觸發器
- MySQL - 插入前觸發器
- MySQL - 插入後觸發器
- MySQL - 更新前觸發器
- MySQL - 更新後觸發器
- MySQL - 刪除前觸發器
- MySQL - 刪除後觸發器
- MySQL 資料型別
- MySQL - 資料型別
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正則表示式
- MySQL - 正則表示式
- MySQL - RLIKE 運算子
- MySQL - NOT LIKE 運算子
- MySQL - NOT REGEXP 運算子
- MySQL - regexp_instr() 函式
- MySQL - regexp_like() 函式
- MySQL - regexp_replace() 函式
- MySQL - regexp_substr() 函式
- MySQL 函式和運算子
- MySQL - 日期和時間函式
- MySQL - 算術運算子
- MySQL - 數值函式
- MySQL - 字串函式
- MySQL - 聚合函式
- MySQL 其他概念
- MySQL - NULL 值
- MySQL - 事務
- MySQL - 使用序列
- MySQL - 處理重複項
- MySQL - SQL 注入
- MySQL - 子查詢
- MySQL - 註釋
- MySQL - 檢查約束
- MySQL - 儲存引擎
- MySQL - 將表匯出到 CSV 檔案
- MySQL - 將 CSV 檔案匯入資料庫
- MySQL - UUID
- MySQL - 公共表表達式
- MySQL - ON DELETE CASCADE
- MySQL - Upsert
- MySQL - 水平分割槽
- MySQL - 垂直分割槽
- MySQL - 遊標
- MySQL - 儲存函式
- MySQL - Signal
- MySQL - Resignal
- MySQL - 字元集
- MySQL - 校對
- MySQL - 萬用字元
- MySQL - 別名
- MySQL - ROLLUP
- MySQL - 當天日期
- MySQL - 字面量
- MySQL - 儲存過程
- MySQL - Explain
- MySQL - JSON
- MySQL - 標準差
- MySQL - 查詢重複記錄
- MySQL - 刪除重複記錄
- MySQL - 選擇隨機記錄
- MySQL - 顯示 Processlist
- MySQL - 更改列型別
- MySQL - 重置自動遞增
- MySQL - Coalesce() 函式
- MySQL 有用資源
- MySQL - 有用函式
- MySQL - 語句參考
- MySQL - 快速指南
- MySQL - 有用資源
- MySQL - 討論
MySQL - 交叉連線
MySQL 交叉連線
MySQL 交叉連線將第一個表的每一行與第二個表的每一行組合。它是一種基本的內部連線型別,用於檢索兩個獨立表的笛卡爾積(或叉積)(即排列)。
笛卡爾積或叉積是兩個集合相乘後得到的結果。這是透過將兩個集合的所有可能對相乘來完成的。
下面的示例圖以簡單的方式說明了交叉連線。

語法
以下是 MySQL 中交叉連線查詢的基本語法:
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 | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
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 | DATE | CUSTOMER_ID | AMOUNT |
---|---|---|---|
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 | NAME | AMOUNT | DATE |
---|---|---|---|
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 |
使用交叉連線連線多個表
我們還可以使用交叉連線連線兩個以上的表。在這種情況下,將顯示多路排列,並且結果表預計將包含比各個表多得多的記錄。
語法
以下是使用 MySQL 中的交叉連線連線多個表的語法:
SELECT column_name(s) FROM table1 CROSS JOIN table2 CROSS JOIN table3 CROSS JOIN table4 . . .
示例
現在讓我們結合三個表 CUSTOMERS、ORDERS 和 ORDER_RANGE,以演示如何使用交叉連線組合多個表。
我們將使用以下查詢建立 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 |
現在我們對給定的表使用以下交叉連線查詢,
SELECT ID, NAME, AMOUNT, DATE, ORDER_RANGE FROM CUSTOMERS CROSS JOIN ORDERS CROSS JOIN ORDER_RANGE;
輸出
結果表如下所示:
ID | NAME | AMOUNT | DATE | 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 |
使用客戶端程式進行交叉連線
我們還可以使用客戶端程式對一個或多個表執行交叉連線操作。
語法
要透過 PHP 程式執行交叉連線,我們需要使用mysqli函式query()執行帶有 CROSS JOIN 子句的 SQL 查詢,如下所示:
$sql = "SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count FROM tutorials_tbl a CROSS JOIN tcount_tbl b"; $mysqli->query($sql);
要透過 JavaScript 程式執行交叉連線,我們需要使用mysql2庫的query()函式執行帶有 CROSS JOIN 子句的 SQL 查詢,如下所示:
sql = "SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count FROM tutorials_tbl a CROSS JOIN tcount_tbl b"; con.query(sql);
要透過 Java 程式執行交叉連線,我們需要使用JDBC函式executeQuery()執行帶有 CROSS JOIN 子句的 SQL 查詢,如下所示:
String sql = "SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count FROM tutorials_tbl a CROSS JOIN tcount_tbl b ON a.tutorial_author = b.tutorial_author"; statement.executeQuery(sql);
要透過 Python 程式執行交叉連線,我們需要使用MySQL Connector/Python的execute()函式執行帶有 CROSS JOIN 子句的 SQL 查詢,如下所示:
cross_join_query = "SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS CROSS JOIN ORDERS" cursorObj.execute(cross_join_query)
示例
以下是程式:
$dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $dbname = 'TUTORIALS'; $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname); if ($mysqli->connect_errno) { printf("Connect failed: %s
", $mysqli->connect_error); exit(); } // printf('Connected successfully.
'); $sql = 'SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count FROM tutorials_tbl a CROSS JOIN tcount_tbl b'; $result = $mysqli->query($sql); if ($result->num_rows > 0) { echo " following is the details after executing cross join! \n"; while ($row = $result->fetch_assoc()) { printf("Id: %s, Author: %s, Count: %d", $row["tutorial_id"], $row["tutorial_author"], $row["tutorial_count"]); printf("\n"); } } else { printf('No record found.
'); } mysqli_free_result($result); $mysqli->close();
輸出
獲得的輸出如下所示:
following is the details after executing cross join! Id: 102, Author: Sarika Singh, Count: 20 Id: 101, Author: Aman kumar, Count: 20 Id: 3, Author: Sanjay, Count: 20 Id: 2, Author: Abdul S, Count: 20 Id: 1, Author: John Poul, Count: 20 Id: 102, Author: Sarika Singh, Count: 5 Id: 101, Author: Aman kumar, Count: 5 Id: 3, Author: Sanjay, Count: 5 Id: 2, Author: Abdul S, Count: 5 Id: 1, Author: John Poul, Count: 5 Id: 102, Author: Sarika Singh, Count: 4 Id: 101, Author: Aman kumar, Count: 4 Id: 3, Author: Sanjay, Count: 4 Id: 2, Author: Abdul S, Count: 4 Id: 1, Author: John Poul, Count: 4 Id: 102, Author: Sarika Singh, Count: 20 Id: 101, Author: Aman kumar, Count: 20 Id: 3, Author: Sanjay, Count: 20 Id: 2, Author: Abdul S, Count: 20 Id: 1, Author: John Poul, Count: 20 Id: 102, Author: Sarika Singh, Count: 1 Id: 101, Author: Aman kumar, Count: 1 Id: 3, Author: Sanjay, Count: 1 Id: 2, Author: Abdul S, Count: 1 Id: 1, Author: John Poul, Count: 1 Id: 102, Author: Sarika Singh, Count: 1 Id: 101, Author: Aman kumar, Count: 1 Id: 3, Author: Sanjay, Count: 1 Id: 2, Author: Abdul S, Count: 1 Id: 1, Author: John Poul, Count: 1
var mysql = require("mysql2"); var con = mysql.createConnection({ host: "localhost", user: "root", password: "password", }); //Connecting to MySQL con.connect(function (err) { if (err) throw err; // console.log("Connected successfully...!"); // console.log("--------------------------"); sql = "USE TUTORIALS"; con.query(sql); //Cross Join sql = "SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count FROM tutorials_tbl a CROSS JOIN tcount_tbl b"; con.query(sql, function (err, result) { if (err) throw err; console.log(result); }); });
輸出
生成的輸出如下所示:
[ { tutorial_id: 102, tutorial_author: 'Sarika Singh', tutorial_count: 20 }, { tutorial_id: 101, tutorial_author: 'Aman kumar', tutorial_count: 20 }, { tutorial_id: 2, tutorial_author: 'Abdul S', tutorial_count: 20 }, { tutorial_id: 1, tutorial_author: 'John Poul', tutorial_count: 20 }, { tutorial_id: 102, tutorial_author: 'Sarika Singh', tutorial_count: 5 }, { tutorial_id: 101, tutorial_author: 'Aman kumar', tutorial_count: 5 }, { tutorial_id: 2, tutorial_author: 'Abdul S', tutorial_count: 5 }, { tutorial_id: 1, tutorial_author: 'John Poul', tutorial_count: 5 }, { tutorial_id: 102, tutorial_author: 'Sarika Singh', tutorial_count: 4 }, { tutorial_id: 101, tutorial_author: 'Aman kumar', tutorial_count: 4 }, { tutorial_id: 2, tutorial_author: 'Abdul S', tutorial_count: 4 }, { tutorial_id: 1, tutorial_author: 'John Poul', tutorial_count: 4 }, { tutorial_id: 102, tutorial_author: 'Sarika Singh', tutorial_count: 20 }, { tutorial_id: 101, tutorial_author: 'Aman kumar', tutorial_count: 20 }, { tutorial_id: 2, tutorial_author: 'Abdul S', tutorial_count: 20 }, { tutorial_id: 1, tutorial_author: 'John Poul', tutorial_count: 20 }, { tutorial_id: 102, tutorial_author: 'Sarika Singh', tutorial_count: 1 }, { tutorial_id: 101, tutorial_author: 'Aman kumar', tutorial_count: 1 }, { tutorial_id: 2, tutorial_author: 'Abdul S', tutorial_count: 1 }, { tutorial_id: 1, tutorial_author: 'John Poul', tutorial_count: 1 }, { tutorial_id: 102, tutorial_author: 'Sarika Singh', tutorial_count: 1 }, { tutorial_id: 101, tutorial_author: 'Aman kumar', tutorial_count: 1 }, { tutorial_id: 2, tutorial_author: 'Abdul S', tutorial_count: 1 }, { tutorial_id: 1, tutorial_author: 'John Poul', tutorial_count: 1 }, { tutorial_id: 102, tutorial_author: 'Sarika Singh', tutorial_count: 2 }, { tutorial_id: 101, tutorial_author: 'Aman kumar', tutorial_count: 2 }, { tutorial_id: 2, tutorial_author: 'Abdul S', tutorial_count: 2 }, { tutorial_id: 1, tutorial_author: 'John Poul', tutorial_count: 2 } ]
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class CrossJoin { public static void main(String[] args) { String url = "jdbc:mysql://:3306/TUTORIALS"; String username = "root"; String password = "password"; try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection connection = DriverManager.getConnection(url, username, password); Statement statement = connection.createStatement(); System.out.println("Connected successfully...!"); //MySQL CROSS JOIN...!; String sql = "SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count FROM tutorials_tbl a CROSS JOIN tcount_tbl b ON a.tutorial_author = b.tutorial_author"; ResultSet resultSet = statement.executeQuery(sql); System.out.println("Table records after CROSS Join...!"); while (resultSet.next()){ System.out.println(resultSet.getString(1)+ " "+ resultSet.getString(2)+" "+resultSet.getString(3)); } connection.close(); } catch (Exception e) { System.out.println(e); } } }
輸出
獲得的輸出如下所示:
Connected successfully...! Table records after CROSS Join...! 1 John Paul 1 3 Sanjay 1
import mysql.connector #establishing the connection connection = mysql.connector.connect( host='localhost', user='root', password='password', database='tut' ) cursorObj = connection.cursor() cross_join_query = f"""SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS CROSS JOIN ORDERS""" cursorObj.execute(cross_join_query) # Fetching all the rows that meet the criteria filtered_rows = cursorObj.fetchall() for row in filtered_rows: print(row) cursorObj.close() connection.close()
輸出
以下是上述程式碼的輸出:
(1, 'Ramesh', 2060, '2008-05-20 00:00:00') (1, 'Ramesh', 1560, '2009-11-20 00:00:00') (1, 'Ramesh', 1500, '2009-10-08 00:00:00') (1, 'Ramesh', 3000, '2009-10-08 00:00:00') (2, 'Khilan', 2060, '2008-05-20 00:00:00') (2, 'Khilan', 1560, '2009-11-20 00:00:00') (2, 'Khilan', 1500, '2009-10-08 00:00:00') (2, 'Khilan', 3000, '2009-10-08 00:00:00') (3, 'kaushik', 2060, '2008-05-20 00:00:00') (3, 'kaushik', 1560, '2009-11-20 00:00:00') (3, 'kaushik', 1500, '2009-10-08 00:00:00') (3, 'kaushik', 3000, '2009-10-08 00:00:00') (4, 'Chaital', 2060, '2008-05-20 00:00:00') (4, 'Chaital', 1560, '2009-11-20 00:00:00') (4, 'Chaital', 1500, '2009-10-08 00:00:00') (4, 'Chaital', 3000, '2009-10-08 00:00:00') (5, 'Hardik', 2060, '2008-05-20 00:00:00') (5, 'Hardik', 1560, '2009-11-20 00:00:00') (5, 'Hardik', 1500, '2009-10-08 00:00:00') (5, 'Hardik', 3000, '2009-10-08 00:00:00') (6, 'Komal', 2060, '2008-05-20 00:00:00') (6, 'Komal', 1560, '2009-11-20 00:00:00') (6, 'Komal', 1500, '2009-10-08 00:00:00') (6, 'Komal', 3000, '2009-10-08 00:00:00') (7, 'Muffy', 2060, '2008-05-20 00:00:00') (7, 'Muffy', 1560, '2009-11-20 00:00:00') (7, 'Muffy', 1500, '2009-10-08 00:00:00') (7, 'Muffy', 3000, '2009-10-08 00:00:00')