本篇文章主要針對的是SQL server相關的基礎命令,也會記一下其他資料庫的命令如MySQL。
SQL Server常用查詢命令:
檢視當前時間
SQL server:select getdate()
MySQL:now()、current_date()
查詢所有資料庫名
SQL server:
select name from master.. sysdatabases order by name;
MySQL:
show database;
(顯示資料表也是相似: use 資料庫名; show tables;
)
查詢當前使用的資料庫名
--@@spid是當前使用者程式的會話 ID
--用此會話ID在Master..SysProcesses中查得當前使用者程式使用的資料庫ID
--再用此資料庫ID在查得Master..SysDataBases中查到對應的資料庫名稱
Select Name From Master..SysDataBases Where DbId=( Select Dbid From Master..SysProcesses Where Spid = @@spid)
MySQL:
select database();
查詢前幾條資料
SQL server:
/*查詢前10條資料 */
select top 10 * from table (表名);
Oracle:
select * from table where rownum =10;
MySQL:
select * from table limit 0,10; /*limit引數必須是整型,引數可以是一個也可以是兩個。第一個引數指定第一個返回記錄行的偏移量,第二個指定返回記錄行的最大數目。 該語句意思返回表的前10條記錄。
去重查詢
select distinct (欄位) from table(表名);
欄位換名
/**
*AS可以省略
*/
SELECT 欄位1,欄位2 AS '新名字' FROM TABLE(表名);
--------------------------------------------
select 欄位1,欄位2=(xxxx) from table; /*as 只換名,不計算;‘=’側重計算*/
查詢不等於
SELECT * FROM TABLE WHERE 欄位 !=值;
SELECT * FROM TABLE WHERE 欄位 <>值;
/*其他的>,<,=,=<等等就不說了*/
查詢在兩個值之間資料
SELECT * FROM TABLE(表名) WHERE 欄位>=值1 AND 欄位<=值2;
select * FROM TABLE(表名) WHERE 欄位 BETWEEN 值1 AND 值2;
查詢條件或
SELECT * FROM TABLE(表名) WHERE 欄位=值1 OR 欄位=值2;
SELECT * FROM TABLE(表名) WHERE 欄位 IN(值1,值2);
模糊匹配查詢
SELECT * FROM TABLE WHERE 欄位 LIKE '%值%';//包含 /* %代表容易長度的字元,可以為0*/
SELECT * FROM TABLE WHERE 欄位 LIKE '值%';//以某個字元開始匹配
SELECT * FROM TABLE WHERE 欄位 LIKE '_值%';//以第二個字元為開始匹配 /*‘_’下劃線代表任意單個字元*/
查詢為空
SELECT * FROM TABLE WHERE 欄位 IS NULL;//為空
SELECT * FROM TABLE WHERE 欄位 IS NOT NULL;//不為空
注:這裡的“is”不能用等於“=”代替
排序條件查詢
SELECT * FROM TABLE ORDER BY 欄位 ASC(預設);//升序
SELECT * FROM TABLE ORDER BY 欄位 DESC;//降序
SELECT * FROM TABLE ORDER BY 欄位1 DESC,欄位2 DESC;//多欄位排序
聚合查詢
SELECT COUNT(*) FROM TABLE;//總行數
SELECT COUNT(欄位) FROM TABLE;//欄位不為NULL的行數
SELECT SUM(價格欄位) FROM TABLE;//欄位值總和
SELECT AVG(價格欄位) FROM TABLE;//欄位值平均值
SELECT MAX(價格欄位) AS '最大價格' FROM TABLE;//欄位最大值
SELECT MIN (價格欄位) AS '最小价格' FROM TABLE;//欄位最小值
注:
1.當聚集函式遇到空值時,除了count(*)外,都跳過空值而只處理非空值。
2.聚集函式只能用於
select
子句和group by
中的having
子句。
分組查詢
SELECT 欄位1,COUNT(0) FROM TABLE WHERE 欄位2>值(條件) GROUP BY 欄位1;
SELECT 欄位1,欄位2... FROM TABLE GROUP BY 欄位1,欄位2... HAVING COUNT(欄位)條件;
連線查詢
內連線
等值連線,非等值連線,自然連線,因為技術上並無差別,所以無需贅述
inner join或者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 是相同的。
內連線只會返回符合條件的行,對於無法匹配的行則不返回;
外連線(外連線包括三種,下面分專案詳解)
外連線至少會返回一張表的全部內容
1.左外連線
left outer join
從左表(table1)返回所有的行,即使右表(table2)中沒有匹配。如果右表中沒有匹配,則結果為 NULL。
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
註釋:在某些資料庫中,LEFT OUTER JOIN 稱為 LEFT JOIN。
2.右外連線(大致同上)
right outer join
從右表(table2)返回所有的行,即使左表(table1)中沒有匹配。如果左表中沒有匹配,則結果為 NULL。
3.完全連線
full outer join
FULL OUTER JOIN 關鍵字只要左表(table1)和右表(table2)其中一個表中存在匹配,則返回行.
FULL OUTER JOIN 關鍵字結合了 LEFT JOIN 和 RIGHT JOIN 的結果。
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
集合查詢
集合操作主要包括:並操作Union、交操作intersect、差操作except
並操作Union
UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。
請注意,UNION 內部的每個 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每個 SELECT 語句中的列的順序必須相同。
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
注:
預設地,UNION 操作符選取不同的值。如果允許重複的值,請使用 UNION ALL。
UNION 結果集中的列名總是等於 UNION 中第一個 SELECT 語句中的列名。
交操作intersect
例子:查詢計算機系的學生與年齡不大於19歲的學生的交集
SELECT * from student where sdept='CS'
intersect
SELECT * FROM student where Sage<=19;
注:實際上就是查詢計算機系中年齡不大於19歲的學生
select * from Student where Sdept='CS' and Sage<=19;
差操作except
例子:查詢計算機系學生與年齡不大於19歲學生的差集
select * from Student where Sdept='CS'
except
select * from Student where Sage<=19;
注:也就是查詢計算機系中年齡大於19歲的學生
select * from Student where Sdept='CS' and Sage>19;