mysql常用的一些查詢語句
一、 Like欄位模糊搜尋:
SELECT * FROM fs_performance_details WHERE dimension_name LIKE 'UI%’; (或者%UI%,%UI來表示前後,前,有引數內容)
二、 order by和desc結合使用:
SELECT * FROM fs_performance_details WHERE dimension_name LIKE 'UI%' ORDER BY id DESC;
三、LEFT JOIN :
SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
LEFT JOIN,左聯表(以左邊表為依照,右邊表沒有的空顯示) ,RIGHT JOIN, 右聯表(以右邊表為依照,左邊表對應內容不全空顯示) ,Inner Join,(兩者內容都有匹配才顯示,一方沒有匹配,另一方也不顯示) ,Full Join, (只要有一方有內容匹配就顯示)
知識點:
UNION返回兩個結果集的並集。還有一個union all的用法(union沒有包含重複列,union all 包含重複列)
EXCEPT 返回兩個結果集的差(即從左查詢中返回右查詢沒有找到的所有非重複值(第一個表有,第二個表無))。
INTERSECT 返回 兩個結果集的交集(即兩個查詢都返回的所有非重複值)。
四、求合集
1.union 的用法
語法: UNION 子句的基本語法如下所示: SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition] UNION SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition] 例: select test1_num,test1_address from test1 union select test2_num,test2_address from test2; 解析: 在使用 UNION 的時候,每個 SELECT 語句必須有相同數量的選中列、相同數量的列表達式、相同的資料型別,並且它們出現的次序要一致,不過長度不一定要相同。 如:兩個表查詢的都是兩列,即select語句有相同的數量的選中列;test1_num和test2_num都是相同的資料型別,且都是在查詢的結果中第一個出現,即出現的次序要一致。
2.union all 的用法
UNION ALL 運算子用於將兩個 SELECT 語句的結果組合在一起,重複行也包含在內。 UNION ALL 運算子所遵從的規則與 UNION 一致。 語法: UNION ALL的基本語法如下: SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition] UNION ALL SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition]
五、求差集。
使用not in 求差集,但效率低
SELECT t1.* FROM t1 WHERE name NOT IN (SELECT name FROM t2)
(except 的用法,mysql裡面沒有這個內容
語法: EXCEPT 子句的基本語法如下所示: SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition] EXCEPT SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition] )
六、求交集。
(intersect 的用法 mysql內部沒有這個欄位內容使用
語法: EXCEPT 子句的基本語法如下所示: SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition] intersect SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition]
例如:
select t1_num,t1_name from t1
intersect
select t2_num,t2_name from t2;
)
此時只有id name age 所有都一樣才是符合要求的
SELECT id, NAME, age FROM (SELECT id, NAME, age FROM t1 UNION ALL SELECT id, NAME, age FROM t2) a GROUP BY id, NAME, age HAVING COUNT(*) > 1 (最後的count>1要根據有多少個聯合陣列size-1使用,他表示的是重複的次數)
七、sql IN
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)對應求一個欄位對應多個值所對應的資料內容
在表中,可能會包含重複值。這並不成問題,不過,有時您也許希望僅僅列出不同(distinct)的值。關鍵詞 distinct用於返回唯一不同的值。
表A:
表B:
1.作用於單列
select distinct name from A
執行後結果如下:
2.作用於多列
示例2.1
select distinct name, id from A
執行後結果如下:
實際上是根據name和id兩個欄位來去重的,這種方式Access和SQL Server同時支援。
示例2.2
select distinct xing, ming from B
返回如下結果:
返回的結果為兩行,這說明distinct並非是對xing和ming兩列“字串拼接”後再去重的,而是分別作用於了xing和ming列。
3.COUNT統計
select count(distinct name) from A; --表中name去重後的數目, SQL Server支援,而Access不支援
count是不能統計多個欄位的,下面的SQL在SQL Server和Access中都無法執行。
select count(distinct name, id) from A;
若想使用,請使用巢狀查詢,如下:
select count(*) from (select distinct xing, name from B) AS M;
4.distinct必須放在開頭
select id, distinct name from A; --會提示錯誤,因為distinct必須放在開頭
5.其他
distinct語句中select顯示的欄位只能是distinct指定的欄位,其他欄位是不可能出現的。例如,假如表A有“備註”列,如果想獲取distinc name,以及對應的“備註”欄位,想直接通過distinct是不可能實現的。但可以通過其他方法實現關於SQL Server將一列的多行內容拼接成一行的問題討論