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