1. 程式人生 > >mysql常用的一些查詢語句

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將一列的多行內容拼接成一行的問題討論

九、