sql常用查詢命令

貝貝子發表於2021-09-11

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

內連線只會返回符合條件的行,對於無法匹配的行則不返回;

sql常用查詢命令

外連線(外連線包括三種,下面分專案詳解)

外連線至少會返回一張表的全部內容

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。

sql常用查詢命令

2.右外連線(大致同上)

right outer join

從右表(table2)返回所有的行,即使左表(table1)中沒有匹配。如果左表中沒有匹配,則結果為 NULL。

sql常用查詢命令

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;

sql常用查詢命令

集合查詢

集合操作主要包括:並操作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;

相關文章