《MYSQL教程mysql子查詢的實例總結》要點:
本文介紹了MYSQL教程mysql子查詢的實例總結,希望對您有用。如果有疑問,可以聯系我們。
導讀:本節內容:mysql子查詢一、有 = <> > < >= <= 的子查詢格局:SELECT col1 , col2 , col3 FROM tbWHERE col = [ANY | SO...
MYSQL數據庫本節內容:
mysql子查詢
MYSQL數據庫一、有 = <> > < >= <= 的子查詢
格局:
?
SELECT col1 , col2 , col3
FROM tb
WHERE col = [ANY | SOME | ALL](
SELECT coln FROM tb WHERE ...
)?
MYSQL數據庫例子:
?
SELECT `ID`, `classname`
FROM `ydfzx_software_class`
WHERE `fatherid` = ANY(
SELECT `id`
FROM `ydfzx_software_class`
WHERE `fatherid`=13
)
MYSQL數據庫子查詢返回一個離散值(一列一行),假如有ANY或ALL的修飾,可以返回一個離散值列表(一列多行) ,其實 col = ANY 就相當于col IN.
MYSQL數據庫二、IN 子查詢
格局:
?
SELECT col1 , col2 , col3
FROM tb
WHERE col [NOT] IN(
SELECT coln FROM tb WHERE ...
)?
MYSQL數據庫在有IN謂詞的這個子查詢中,返回一個離散值列表(一列多行).
MYSQL數據庫三、SELECT ROW 字查詢,注意返回值是0或1
格局:
?
SELECT ROW(value1,value2,value3 ...) = [ANY | SOME] SELECT col1,col2,col3
MYSQL數據庫如果第2條查詢必需返回一組離散值(多列單行),如果有ANY和SOME謂詞的修飾,返回一組離散值列表
MYSQL數據庫例子:
?
SELECT ROW(1,'操作系統',1) = ANY (SELECT `ID`,`caption`,`status` FROM `ydfzx_software_class`)
?
MYSQL數據庫在`ydfzx_software_class`里查找有沒有`ID`=1,`caption`='操作系統',`status`=1的記載,有就返回1,沒有就返回NULL 或 0.
MYSQL數據庫四、EXISTS 子查詢
格局:
?
SELECT col1,col2 FROM a WHERE EXISTS(SELECT ...)
?
MYSQL數據庫解釋:
主查詢先查詢出數據,再逐條通過EXISTS子查詢驗證,只有子查詢返回的記錄數不為0時,主查詢中的記錄有效.
這個查詢開銷比擬大.
MYSQL數據庫例子:
?
users表
┏━━━┯━━━┯━━━━┓
┃ uid │ name?│address ┃
┃ 1?│張榮?│中光 ┃
┃ 2?│晨光?│fuyang ┃
┃ 3?│川湘?│中光 ┃
┃ 4?│張榮?│浙江 ┃
┗━━━┷━━━┷━━━━┛
xl表
┏━━━┯━━━┯━━━━┓
┃ uid │ xl?│year? ┃
┃ 1?│大專?│2007? ┃
┃ 1?│大本?│2008? ┃
┃ 1?│碩士?│2009? ┃
┃ 2?│小學?│2012? ┃
┃ 2?│初中?│2018? ┃
┃ 2?│高中?│2021? ┃
┃ 2?│大本?│2025? ┃
┃ 4?│大本?│2025? ┃
┃ 5?│大本?│2025? ┃
┃ 3?│大專?│1995? ┃
┃ 3?│大本?│2001? ┃
┗━━━┷━━━┷━━━━┛
MYSQL數據庫例子:找出users表中那些在xl表中有xl=小學的記錄,他們的共同鍵為id
?
SELECT *
FROM `users`
WHERE EXISTS (
SELECT *
FROM `xl`
WHERE `xl`.`uid` = `users`.`uid` AND xl = '小學'
)
?
MYSQL數據庫等效于:
?
SELECT `users`. *
FROM `users` , `xl`
WHERE `xl`.`xl` = '小學' AND `users`.`uid` = `xl`.`uid`
MYSQL數據庫結果為:
┏━━━┯━━━┯━━━━┓
┃ uid │name │address ┃
┃ 2 │晨光 │fuyang ┃
┗━━━┷━━━┷━━━━┛
MYSQL數據庫五、衍生數據表子查詢
格局: SELECT ... FROM (SELECT ...) AS name WHERE .
首先執行子查詢生成臨時表,外層查詢再到此臨時表中獲取數據.
例子:
?
SELECT `users`.`uid` , `users`.`name` , count( `xl`.`uid` ) AS lcount
FROM `users` , `xl`
WHERE `users`.`uid` = `xl`.`uid`
GROUP BY `users`.`uid`
ORDER BY `lcount` DESC
MYSQL數據庫等效于:
?
SELECT *
FROM(
SELECT `users`.`uid` , `users`.`name` , count( `xl`.`uid` ) AS lcount
FROM `users` , `xl`
WHERE `users`.`uid` = `xl`.`uid`
GROUP BY `users`.`uid`
) AS `temp`
ORDER BY `lcount` DESC
MYSQL數據庫實用例子:
有一存儲樹形目錄的表tb, 共有3個字段,ID,classname,fatherid,每個節點一條記錄.ID字段為非重復字段,classname為此節點的名稱,每個子節點的fatherid等于其父節點的ID,如果fatherid為0,表現它為頂層節點,如何能一次就查詢出各頂層節點有沒有子節點呢,經過調試,以下語句執行成功.
?
MYSQL數據庫SELECT `ID` , `classname` , `fatherid` ,
MYSQL數據庫IF(
(SELECT COUNT(`ID` )
FROM `tb`
WHERE `fatherid` = `main`.`ID`
) >0, 1, 0) AS `haveson`
MYSQL數據庫FROM `tb` AS `main`
WHERE `fatherid` =0
二、一次性查詢出某節點的兄弟節點
SELECT *
FROM `tb`
WHERE `fatherid`=(SELECT `fatherid` FROM `tb` WHERE `ID`=6)
3、一次性查詢出某節點的父輩節點
SELECT *
FROM `tb`
WHERE `fatherid`=(
SELECT `fatherid`
FROM `tb`
WHERE `ID`=(SELECT `fatherid` FROM `tb` WHERE `ID`=13)
)
維易PHP培訓學院每天發布《MYSQL教程mysql子查詢的實例總結》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。
轉載請注明本頁網址:
http://www.fzlkiss.com/jiaocheng/14342.html