sql常用查詢命令


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM