Mysql筆記(三)

  1. GROUP BY 分組允許把數(shù)據(jù)分為多個(gè)分組,以便能夠?qū)γ總€(gè)分組進(jìn)行聚集計(jì)算。(獲取每個(gè)供應(yīng)商所提供的商品數(shù)量)

SELECT vend_id , count(*) as vend_num FROM products GROUP BY vend_id

  1. HAVING 過(guò)濾分組,(獲取訂單表中,訂單次數(shù)大于等于2次的)

SELECT cust_id,count(*) AS count_num FROM orders GROUP BY cust_id HAVING count_num>=2

  1. 子查詢 Mysql在4.1中引入了對(duì)子查詢的支持,所以需要進(jìn)行子查詢的話,Mysql版本必須高于4.1。(獲取訂單表中購(gòu)買物品是TNT2的客戶信息)

SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id ='TNT2')

  1. 相關(guān)子查詢 (獲取每個(gè)客戶的下單次數(shù)和客戶信息)

SELECT cust_name,cust_address,(SELECT COUNT(*) FROM orders WHERE orders.cust_id=customers.cust_id )AS user_orders FROM customers

  1. 聯(lián)表查詢(在一條SELECT語(yǔ)句中聯(lián)結(jié)幾個(gè)表時(shí),相應(yīng)的關(guān)系是在運(yùn)行時(shí)構(gòu)造的。在數(shù)據(jù)庫(kù)的定義中不存在能指示MYSQL對(duì)表進(jìn)行聯(lián)結(jié)的東西。在聯(lián)結(jié)兩個(gè)表的時(shí)候,你實(shí)際上做的是,將第一個(gè)表中的每一行數(shù)據(jù)和第二個(gè)表中的每一行數(shù)據(jù)進(jìn)行匹配,WHERE子句作為過(guò)濾的條件。倘若沒(méi)有聯(lián)結(jié)條件的話,就是返回笛卡爾積 (第一個(gè)行數(shù)*第二表的行數(shù)))。

SELECT * FROM products,vendors WHERE products.vend_id=vendors.vend_id
SELECT * FROM products INNER JOIN vendors ON products.vend_id=vendors.vend_id

  1. 自聯(lián)結(jié) (自聯(lián)結(jié)通常作為外部語(yǔ)句來(lái)替代相同表中檢索數(shù)據(jù)時(shí)使用的子查詢。有的時(shí)候處理聯(lián)結(jié)遠(yuǎn)比子查詢的速度快,所以需要多嘗試一下,確定哪種的性能更好點(diǎn))

SELECT COUNT(*) FROM products WHERE vend_id = (SELECT vend_id FROM products WHERE prod_id='DTNTR')
SELECT p1.prod_id,p1.prod_price FROM products as p1,products as p2 WHERE p1.vend_id=p2.vend_id AND p2.prod_id='DTNTR'

  1. 外部聯(lián)結(jié) (在使用 OUTER JOIN 語(yǔ)法的時(shí)候,必須使用LEFT 或者RIGHT關(guān)鍵字來(lái)指定所有的行。RIGHT是指OUTER JOIN右邊的表)

SELECT orders.cust_id,orders.order_num AS 訂單總數(shù) FROM orders,customers WHERE orders.cust_id=customers.cust_id GROUP BY orders.cust_id
SELECT customers.cust_id,orders.order_num FROM customers LEFT OUTER JOIN orders ON customers.cust_id=orders.cust_id
SELECT customers.cust_id,orders.order_num FROM orders RIGHT OUTER JOIN customers ON customers.cust_id=orders.cust_id

  1. 組合查詢 (UNION必須有兩條或者兩條以上的SELECT語(yǔ)句組合成的。UNION在查詢結(jié)果集中會(huì)自動(dòng)去除重復(fù)行,假設(shè)不想去除重復(fù)行的話可以使用UNION ALL)

SELECT prod_id, prod_name, prod_price FROM products WHERE vend_id in (1001,1002) #5
SELECT prod_id, prod_name, prod_price FROM products WHERE prod_price<=5 #4
SELECT prod_id, prod_name, prod_price FROM products WHERE vend_id in (1001,1002) UNION SELECT prod_id, prod_name, prod_price FROM products WHERE prod_price<=5

注意HAVING和WHERE之間的區(qū)別:

WHERE在數(shù)據(jù)分組前進(jìn)行過(guò)濾,HAVING在數(shù)據(jù)分組后進(jìn)行過(guò)濾。WHERE排除的行不包括在分組中,這可能會(huì)影響結(jié)果值。(綜合WHERE和HAVING的查詢,產(chǎn)品表中,價(jià)格大于等于10且產(chǎn)品數(shù)量大于2)

SELECT vend_id, COUNT(*) AS num FROM products WHERE prod_price>=10 GROUP BY vend_id HAVING num >=2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這一篇最主要是記錄下命令,方便以后查找 使用Mysql 創(chuàng)建數(shù)據(jù)庫(kù) create database mysql_t...
    Treehl閱讀 663評(píng)論 0 0
  • (一)幾個(gè)數(shù)據(jù)庫(kù)相關(guān)的概念 1.數(shù)據(jù)庫(kù) 數(shù)據(jù)庫(kù): 保存有組織數(shù)據(jù)的容器。 數(shù)據(jù)的所有存儲(chǔ)、檢索、管理和處理實(shí)際上是...
    快樂(lè)的小飛熊閱讀 627評(píng)論 0 1
  • 表 存儲(chǔ)在表中的數(shù)據(jù)是同一種類型的數(shù)據(jù)或清單。 數(shù)據(jù)庫(kù)中的表有為一個(gè)名字來(lái)標(biāo)識(shí)自己。 表具有一些特性,這些特性定義...
    蛐蛐囍閱讀 1,470評(píng)論 0 7
  • Mysql 必知必會(huì) 查詢 檢索多個(gè)列SELECT prod_id, prod_name, prod_pri...
    yoomaz閱讀 692評(píng)論 0 1
  • 定義及結(jié)構(gòu) OC中對(duì)方法的定義為: 其是一個(gè)指向objc_method的結(jié)構(gòu)體指針,objc_method中存放著...
    百客閱讀 2,048評(píng)論 0 2

友情鏈接更多精彩內(nèi)容