《MYSQL數據庫MySQL中join語句的基本使用教程及其字段對性能的影響》要點:
本文介紹了MYSQL數據庫MySQL中join語句的基本使用教程及其字段對性能的影響,希望對您有用。如果有疑問,可以聯系我們。
MYSQL應用join語句的根本使用
MYSQL應用SQL(MySQL) JOIN 用于根據兩個或多個表中的字段之間的關系,從這些表中獲得數據.
MYSQL應用JOIN 通常與 ON 關鍵字搭配使用,根本語法如下:
MYSQL應用... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona
table1 通常稱為左表,table2 稱為右表.ON 關鍵字用于設定匹配條件,用于限定在結果集合中想要哪些行.如果必要指定其他條件,后面可以加上 WHERE 條件 或者 LIMIT 以限制記錄返回數目等.
MYSQL應用下面以最常見的兩表連接來闡明 MySQL JOIN 的用法,關于多表 JOIN 請參見《MySQL JOIN 多表》.
MYSQL利用MySQL JOIN 分類
MYSQL應用JOIN 依照功能大致分為如下三類:
MYSQL應用關于 MySQL FULL JOIN 全連接
MYSQL應用MySQL 沒有提供 SQL 標準中的 FULL JOIN(全連接):兩個表記錄都取出,而不管彼此是否有對應記錄.要辦理此問題,可以使用 UNION 關鍵字來合并 LEFT JOIN 與 RIGHT JOIN,達到模擬 FULL JOIN 的目的.
MYSQL利用MySQL INNER JOIN
MYSQL應用INNER JOIN 用于取得兩個表中存在連接匹配關系的記載.下面是兩個原始數據表:
MYSQL利用
MYSQL應用article 表中文章的所屬用戶是通過 uid 這個字段與 user 表關聯起來的.通過觀察數據不難發現,對于 uid=3 的用戶,并沒有頒發任何文章;而文章中 aid=4 卻無法在 uid 表中找到對應記錄(可能是該用戶被刪除而其所屬的文章卻被保留了下來).
MYSQL利用我們列出所用文章與用戶一一對應的數據.
MYSQL利用SELECT … INNER JOIN … ON 語句如下:
MYSQL應用
SELECT article.aid,article.title,user.username FROM article INNER JOIN user ON article.uid = user.uid
MYSQL應用返回查詢成果如下:
MYSQL利用
MYSQL應用對付 INNER JOIN,等同與下面的 SQL 語句:
MYSQL利用
SELECT article.aid,article.title,user.username FROM article,user WHERE article.uid = user.uid
MYSQL利用CROSS JOIN
MYSQL利用CROSS JOIN 即交叉連接,在不指定 ON 條件下:
MYSQL應用
SELECT article.aid,article.title,user.username FROM article CROSS JOIN user
MYSQL應用得到的成果是被連接的兩個數據表的乘積,即笛卡爾積.
MYSQL應用實際上,在 MySQL 中(僅限于 MySQL) CROSS JOIN 與 INNER JOIN 的表示是一樣的,在不指定 ON 條件得到的結果都是笛卡爾積,反之取得兩個表完全匹配的結果.
MYSQL應用INNER JOIN 與 CROSS JOIN 可以省略 INNER 或 CROSS 癥結字,因此下面的 SQL 效果是一樣的:
MYSQL利用平板視圖打印?
MYSQL利用
... FROM table1 INNER JOIN table2
... FROM table1 CROSS JOIN table2
... FROM table1 JOIN table2
MYSQL利用
join的字段字符集編碼對性能的影響
MYSQL利用先來看一下示例代碼:
MYSQL利用建utf-8編碼的表 t1:
MYSQL應用
CREATE TABLE IF NOT EXISTS `t1` (
`name` varchar(50) NOT NULL DEFAULT '',
KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
MYSQL應用隨便插入些數據,數量大一點,后面實驗成果更清晰,偷個懶,構造隨機字符串插入語句
MYSQL應用
insert into t1(name)
select concat(
char(round((rand())*25)+97),
char(round((rand())*25)+65),
char(round((rand())*25)+65),
char(round((rand())*25)+97),
char(round((rand())*25)+65),
char(round((rand())*25)+65),
char(round((rand())*25)+97),
char(round((rand())*25)+65)
)
MYSQL應用每次執行插入一條記載,用你熟悉的腳本(python,php,shell等都行)寫個循環,執行一萬次以上.
MYSQL應用將該表復制成一個新表t2,刪除一部分數據,1000條左右即可.(保舉使用phpMyAdmin)
MYSQL利用再將t2復制為t3,并將字段改為gb2312編碼.
MYSQL應用使用一個left join語句,寫一個語句,查出t2/t3比t1少了哪些記載.
MYSQL利用語句很簡單,如下:
MYSQL應用
SELECT SQL_NO_CACHE t1.name, t2.name
FROM t1
LEFT JOIN t2 ON t1.name = t2.name
WHERE t2.name IS NULL
LIMIT 0 , 30
MYSQL應用注意參加 SQL_NO_CACHE ,禁用mysql緩存.
MYSQL應用先看編碼一致的t2表,phpMyAdmin里執行成果:
MYSQL應用顯示行 0 - 29 ( 1,129 總計, 查詢花費 0.0010 秒)
平均耗時年夜概為0.0010秒
MYSQL應用
SELECT SQL_NO_CACHE t1.name, t3.name
FROM t1
LEFT JOIN t3 ON t1.name = t3.name
WHERE t2.name IS NULL
LIMIT 0 , 30
MYSQL應用phpMyAdmin執行成果:
MYSQL應用顯示行 0 - 29 ( 30 總計, 查詢消費 0.1871 秒)
差兩個數量級!
MYSQL利用查詢語句解釋:
MYSQL利用
《MYSQL數據庫MySQL中join語句的基本使用教程及其字段對性能的影響》是否對您有啟發,歡迎查看更多與《MYSQL數據庫MySQL中join語句的基本使用教程及其字段對性能的影響》相關教程,學精學透。維易PHP學院為您提供精彩教程。