下面先來看看例子:
idname1a
2b3c
4c5b
庫結構大概這樣,這只是乙個簡單的例子,實際情況會複雜得多。
比如我想用一條語句查詢得到name不重複的所有資料,那就必須使用distinct去掉多餘的重覆記錄。
得到的結果是:select
distinct name from
table
好像達到效果了,可是,我想要得到的是id值呢?改一下查詢語句吧:name
ac
結果會是:select
distinct name, id from
table
name
1 a 2 b
3 c4 c
5 bdistinct怎麼沒起作用?作用是起了的,不過他同時作用了兩個字段,也就是必須得id與name都相同的才會被排除
我們再改改查詢語句:
很遺憾,除了錯誤資訊你什麼也得不到,distinct必須放在開頭。難到不能把distinct放到where條件裡?能,照樣報錯。select id, distinct name from
table
下面方法可行:
結果:select *, count(distinct name) from
table
group
by name
name
count(distinct name)
1 a 1
2 b 1
3 c 1
最後一項是多餘的,不用管就行了,目的達到
sql distinct知多少
group by 必須放在 order by 和 limit之前,不然會報錯:
說明一下的group by, h**ing, where, order by幾個語句的執行順序。乙個sql語句往往會產生多個臨時檢視,那麼這些關鍵字的執行順序就非常重要了,因為你必須了解這個關鍵字是在對應檢視形成前的字段進行操作還是對形成的臨時檢視進行操作,這個問題在使用了別名的檢視尤其重要。以上列舉的關鍵字是按照如下順序進行執行的:where, group by, h**ing, order by。首先where將最原始記錄中不滿足條件的記錄刪除(所以應該在where語句中盡量的將不符合條件的記錄篩選掉,這樣可以減少分組的次數),然後通過group by關鍵字後面指定的分組條件將篩選得到的檢視進行分組,接著系統根據h**ing關鍵字後面指定的篩選條件,將分組檢視後不滿足條件的記錄篩選掉,然後按照order by語句對檢視進行排序,這樣最終的結果就產生了。在這四個關鍵字中,只有在order by語句中才可以使用最終檢視的列名,如:
這裡只有在order by語句中才可以使用ide,其他條件語句中如果需要引用列名則只能使用id,而不能使用ide。select fruitname,productplace,price,id as ide,discount
from t_test_fruitinfo
where (productplace=n'china')
order
by ide
group by 總結
sql中groupby的使用
left join on 和where條件的放置, left join 失效問題
資料庫學習3聯結
前面我們說的都是在乙個表中的查詢操作。而就算在子查詢,也並沒有把多個表關聯起來,也實際上是對乙個表的單獨操作。而聯結 在很多地方稱為連線,其實是一樣的 聯結是利用sql的select能執行的最重要的操作。簡單地說,聯結是一種機制,用來在一條select語句中關聯表,因此稱之為聯結。使用特殊的語法,可...
Mysql資料庫學習(3) 檢索資料
從資料庫中檢索資料,是大家最常用到的資料庫功能之一。在mysql中檢索資料的方法多種多樣,下面分別介紹mysql中幾種不同的資料檢索方法 1.select方法 該方法可以從資料庫的表中挑選出所需的列,不過缺點是資料量較大。假如我們想要從customers的表中選出cust id,cust name ...
資料庫(3)資料庫索引
這一段時間一直在學習關係型資料庫,準備寫乙個小專題來總結一下這一段時間的學習結果。1.2 從索引的底層資料結構來看 b 樹索引和hash索引 1.2 從索引的建立方式 主鍵索引,唯一索引,普通索引,組合索引和全文索引 二.查詢時會使用索引的情況 三.查詢時不會使用索引的情況 四.推薦建立索引的列 五...