SQL總結

一、重要的SQL命令

  • SELECT - 從數據庫中提取數據
  • UPDATE - 更新數據庫中的數據
  • DELETE - 從數據庫中刪除數據
  • INSERT INTO - 向數據庫中插入新數據
  • CREATE DATABASE - 創建新數據庫
  • ALTER DATABASE - 修改數據庫
  • CREATE TABLE - 創建新表
  • ALTER TABLE - 變更(改變)數據庫表
  • DROP TABLE - 刪除表
  • CREATE INDEX - 創建索引(搜索鍵)
  • DROP INDEX - 刪除索引

二、基本SQL命令
1、DISTINCT 關鍵詞用於返回唯一不同的值:
SQL SELECT DISTINCT 語法:

select DISTINCT column_name,column_name from table_name;

2、SQL AND & OR 運算符
AND & OR 運算符用於基於一個以上的條件對記錄進行過濾。

  • 如果第一個條件和第二個條件都成立,則 AND 運算符顯示一條記錄。
  • 如果第一個條件和第二個條件中只要有一個成立,則 OR 運算符顯示一條記錄。

3、ORDER BY 注意事項
ORDER BY 多列的時候,eg:

order by A,B        這個時候都是默認按升序排列
order by A desc,B   這個時候 A 降序,B 升序排列
order by A ,B desc  這個時候 A 升序,B 降序排列

即 desc 或者 asc 只對它緊跟着的第一個列名有效,其他不受影響,仍然是默認的升序。

4、SQL INSERT INTO 語句
INSERT INTO 語句用於向表中插入新記錄。
INSERT INTO 語句可以有兩種編寫形式。

  • 第一種形式無需指定要插入數據的列名,只需提供被插入的值即可:
insert into table_name values(value1,value2,value3,...);
  • 第二種形式需要指定列名及被插入的值:
insert into table_name (column1,column2,column3,...) values(value1,value2,value3,...);

5、SQL UPDATE 語句
UPDATE 語句用於更新表中已存在的記錄。
SQL UPDATE 語法

update table_name set column1=value1,column2=value2,... where some_column=some_value;

6、SQL SELECT TOP 子句
SELECT TOP 子句用於規定要返回的記錄的數目。

select TOP number column_name(s) from table_name;

7、SQL 別名
通過使用 SQL,可以爲表名稱或列名稱指定別名。
基本上,創建別名是爲了讓列名稱的可讀性更強。
列的 SQL 別名語法:

select column_name as alias_name from table_name;

表的 SQL 別名語法:

select column_name(s) from table_name as alias_name;

在下面的情況下,使用別名很有用:

  • 在查詢中涉及超過一個表
  • 在查詢中使用了函數
  • 列名稱很長或者可讀性差
  • 需要把兩個列或者多個列結合在一起

8、SQL 連接(JOIN)
SQL join 用於把來自兩個或多個表的行結合起來。
下圖展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相關的 7 種用法。
SQL 連接(JOIN)7種用法

不同的 SQL JOIN:

  • inner join:如果表中有至少一個匹配,則返回行
  • left join:即使右表中沒有匹配,也從左表返回所有的行
  • right join:即使左表中沒有匹配,也從右表返回所有的行
  • full join:只要其中一個表中存在匹配,則返回行

(1)SQL INNER JOIN 關鍵字
INNER JOIN 關鍵字在表中存在至少一個匹配時返回行。

SQL INNER JOIN 語法:

select column_name(s) from table1 inner join table2 on table1.column_name=table2.column_name;

或:

select column_name(s) from table1 join table2 on table1.column_name=table2.column_name;

註釋: INNER JOIN 與 JOIN 是相同的。

(2)SQL LEFT JOIN 關鍵字
LEFT JOIN 關鍵字從左表(table1)返回所有的行,即使右表(table2)中沒有匹配。如果右表中沒有匹配,則結果爲 NULL。

SQL LEFT JOIN 語法:

select column_name(s) from table1 left join table2 on table1.column_name=table2.column_name;

或:

select column_name(s) from  table1 left outer join table2 on table1.column_name=table2.column_name;

(3)SQL RIGHT JOIN 關鍵字
RIGHT JOIN 關鍵字從右表(table2)返回所有的行,即使左表(table1)中沒有匹配。如果左表中沒有匹配,則結果爲 NULL。

SQL RIGHT JOIN 語法:

select column_name(s) from table1 right join table2 on table1.column_name=table2.column_name;

或:

select column_name(s) from table1 right outer join table2 on table1.column_name=table2.column_name;

(4)SQL FULL OUTER JOIN 關鍵字
FULL OUTER JOIN 關鍵字只要左表(table1)和右表(table2)其中一個表中存在匹配,則返回行.

full outer join 關鍵字結合了 left join 和 right join 的結果。

SQL FULL OUTER JOIN 語法:

select column_name(s) from table1 full outer join table2 on table1.column_name=table2.column_name;

補充:
關鍵字 on
數據庫在通過連接兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給用戶。

在使用 left jion 時,on 和 where 條件的區別如下:

  • on 條件是在生成臨時表時使用的條件,它不管 on 中的條件是否爲真,都會返回左邊表中的記錄。
  • where 條件是在臨時表生成好後,再對臨時表進行過濾的條件。這時已經沒有 left join 的含義(必須返回左邊表的記錄)了,條件不爲真的就全部過濾掉。

假設有兩張表:

表1:tab1

id size
1 10
2 20
3 30

表2:tab2

size name
10 AAA
20 BBB
20 CCC

兩條 SQL:

select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name='AAA'
select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name='AAA')

第一條SQL的過程:
1、中間表
on條件: tab1.size = tab2.size

tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA
2 20 20 BBB
2 20 20 CCC
3 30 (null) (null)

2、再對中間表過濾
where 條件:tab2.name=‘AAA’

tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA

第二條SQL的過程:
1、中間表
on條件:tab1.size = tab2.size and tab2.name=‘AAA’
(條件不爲真也會返回左表中的記錄)

tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA
2 20 (null) (null)
3 30 (null) (null)

其實以上結果的關鍵原因就是 left join、right join、full join 的特殊性,不管 on 上的條件是否爲真都會返回 left 或 right 表中的記錄,full 則具有 left 和 right 的特性的並集。 而 inner jion 沒這個特殊性,則條件放在 on 中和 where 中,返回的結果集是相同的。

三、SQL延伸命令
1、sqlserver中將所查詢的列上添加單引號:

  select quotename(column_name,char(39)) from table_name; 

2、sqlserver中將查詢出來的一個字段的所有值用逗號進行拼接:

select stuff((select ','+column_name from table_name for xml path('')),1,1,'');

3、sqlserver中將所查詢出的結果用逗號顯示在一行,並且添加單引號:

select stuff((select ','+quotename(column_name,char(39)) from table_name for xml path('')),1,1,'');
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章