本篇文章主要針對的是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;