一、重要的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:
- 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,'');