mysql rand() 子查询_MySQL ------ 子查询(十三)
查詢(query):任何SQL 都是查詢,但此術(shù)語一般指select 語句
子查詢(subquery):嵌套在查詢中的查詢,MySQL4.1 引入對(duì)子查詢的支持。
接下來得就比較有意思了,需要你對(duì)于表與表之間的關(guān)系有所了解,子查詢一般用于跨表查詢
一、基本使用
-- 多表查詢,返回的訂單編碼,用于下一次查詢 select cust_id,order_num from orders where order_num in( select order_num from orderitems where prod_id='fb');順序的就是從里到外,主要就是查詢里面套查詢
注意:
1、在select 語句中,子查詢總是從內(nèi)向外處理的,先執(zhí)行的使括號(hào)內(nèi)的查詢語句,根據(jù)此查詢返回的以IN 操作符要求格式傳遞到外部查詢
2、包含子查詢的select 語句難以閱讀和調(diào)試,可以 在書寫的時(shí)候,分為多行并適當(dāng)縮進(jìn)
-- 三個(gè)表查,這其中用到了外鍵的概念 主要就是 prod_id order_num cust_id select cust_id,cust_name,cust_contact from customers where cust_id in( select cust_id from orders where order_num in( select order_num from orderitems where prod_id='tnt2'));上述,三條主要就是根據(jù)商品id 找到對(duì)應(yīng)訂單編碼,根據(jù)訂單編碼找到客戶id ,根據(jù)客戶id 找到客戶信息
注意:
1、where 子句中使用子查詢能夠編寫出功能很強(qiáng)并且很靈活的sql語句,而且對(duì)嵌套的子查詢數(shù)目也沒有限制,不過在實(shí)際中語句性能的限制,不能嵌套太多(雖然對(duì)子查詢數(shù)目沒有限制,但是由于性能原因,不要嵌套太多)
2、where 子句中使用子查詢,應(yīng)保證select 語句具有與where子句相同數(shù)目的列(通常子查詢返回單個(gè)列并與單個(gè)列匹配,若有需要也可以使用多個(gè)列),從里到外一層一層
3、雖然子查詢一般與IN 操作符結(jié)合使用,但也可以與其他操作符結(jié)合使用
4、使用子查詢并不總是執(zhí)行這種類型的數(shù)據(jù)檢索的最有效方法
二、作為計(jì)算字段使用子查詢
使用子查詢的另一種方法就是創(chuàng)建計(jì)算字段,就是查詢語句放在select 與from 之間
-- 顯示customers 表中每個(gè)客戶的訂單總數(shù),訂單與相應(yīng)的客戶id 存儲(chǔ)在order 表中select cust_name,cust_state,( select count(*) from orders where orders.cust_id = customers.cust_id) as orders from customers order by cust_name;此語句中 orders.cust_id = customers.cust_id 使用了完全限定,這個(gè)可以理解為 根據(jù) orders表中的 cust_id 這個(gè)字段進(jìn)行查詢,值為 customers表中的cust_id 的有幾個(gè),
如下所示:
相關(guān)子查詢(correlated subquery): 涉及外部查詢的子查詢。任何時(shí)候只要列名可能有多異性,就要使用這種語法(表名點(diǎn) 表中相關(guān)列名)。
如果不使用,就是沒有完全限定
兩個(gè)cust_id 在不同的表中,如果不用完全限定,mysql 假定你是對(duì) order 表中的cust_id 進(jìn)行自身比較,
返回的是order 表中的總數(shù),所以必須限制有歧義性的列名。
注意:
1、多表查詢時(shí)要使用完全限定
2、子查詢并不是解決這種數(shù)據(jù)檢索的最有效方法,有多種解決方案
3、用子查詢建立查詢的最可靠的方法是逐漸 進(jìn)行,與mysql 的處理方式相同,建議先測(cè)試內(nèi)層查詢,在根據(jù)返回的數(shù)據(jù)測(cè)試外層,確人正常后在嵌入到子查詢,隨犧牲了一點(diǎn)時(shí)間但保證了正確。
4、子查詢可以用在 select 與from 之間,也可以用在where 子句后
5、查詢順序從內(nèi)到外
總結(jié)
以上是生活随笔為你收集整理的mysql rand() 子查询_MySQL ------ 子查询(十三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flashksk.exe进程是什么文件
- 下一篇: 计算机应用类专业综合冲刺卷,2009年计