- 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')