亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SQL?Server?查詢設(shè)置??LIKE/DISTINCT/HAVING/排序詳解

 更新時間:2025年01月19日 10:36:04   作者:lu_rong_qq  
本文介紹了在SQLServer中使用LIKE、DISTINCT、HAVING等條件語句進行復(fù)雜查詢的方法,包括模糊查詢、去重查詢、分組過濾以及排序等技巧,感興趣的朋友跟隨小編一起看看吧

背景

本專欄文章以 SAP 實施顧問在實施項目中需要掌握的 sql 語句為偏向進行選題,用例使用的是 SAP B1 的數(shù)據(jù)庫,使用工具為 SQL Server。

本篇為復(fù)雜查詢中功能強大、使用邊界的條件語句 LIKE、DISTINCT、HAVING,與排序、子查詢等查詢設(shè)置。

不考慮表連接的基礎(chǔ)上,在查詢信息時,本文涉及到的各邏輯條件排列順序如下:

--()表示結(jié)構(gòu)可省略,[]表示該位置內(nèi)容
SELECT (DISTINCT) (TOP 獲取前幾條) [*/字段名] 
FROM [表名/子查詢]
(WHERE [字段名] LIKE [查詢模糊條件])
(GROUP BY [分組條件])
(HAVING [過濾條件])
(ORDER BY [排序字段] (ASC|DESC))

一、LIKE - 模糊查詢

模糊查詢 LIKE 用于字符搜索,通過對所需查找的信息進行條件設(shè)定,如某字開頭、某字結(jié)尾、包含某字、不含某字、第幾位是某字等,將所需信息篩出。與之功能對應(yīng)的還有 REGEXP(正則表達式) ,并且其功能更強大,表達更簡略。但是 SQL Server 不支持使用。

其基本語法如下:

SELECT [需要查詢的列名]
FROM [表名]
WHERE [條件列] LIKE '[條件內(nèi)容]'

1. 通配符 % 

使用模糊查詢 LIKE 時,對于所需核對的信息進行位置限定,需要根據(jù)條件使用 “%”,若需要以某字開頭則形式為 'X%' ,某字結(jié)尾則為 '%X' 。

:查找【業(yè)務(wù)伙伴主數(shù)據(jù)】表單中含有 “京” 字的公司。

此時需要在條件詞左右打上 “%”,對文本所在位置進行限制,即 “京” 字出現(xiàn)在的任何一個位置,都將被查找出來:

SELECT CardCode,CardName
FROM OCRD
WHERE CardName LIKE N'%京%' --查詢內(nèi)容為中文字符時需要增加前綴“N”才能被sql server識別

查詢結(jié)果為:

2. 占位符 _

如果對于查詢信息有嚴(yán)格的位數(shù)要求,如需要第幾位是某字,即可通過占位符 “_” 占出前面位數(shù),

例1:查找【業(yè)務(wù)伙伴主數(shù)據(jù)】表單中業(yè)務(wù)伙伴編碼第二位為 “1” 的公司。

使用占位符占用第一位,意思是無論第一位是什么都無所謂只要有東西就行,第二位是要求 “1”,其后一共幾位無所謂了所以用通配符 “%”。

SELECT CardCode,CardName
FROM OCRD
WHERE CardCode LIKE '_1%'

查詢結(jié)果:

例2:查找【業(yè)務(wù)伙伴主數(shù)據(jù)】表單中業(yè)務(wù)伙伴編碼為 6 位的公司。

SELECT CardCode,CardName
FROM OCRD
WHERE CardCode LIKE '______'--一共六條下劃線

查詢結(jié)果(結(jié)果行數(shù)較多,僅展示部分):

3. 指定集合 []

設(shè)定某一位,為在一定范圍內(nèi)任意一個值都可以,則使用 “[]” 框選集合,無論中括號內(nèi)放多少字符,中括號都只算一位。

例:查找【業(yè)務(wù)伙伴主數(shù)據(jù)】表單中業(yè)務(wù)伙伴編碼以 “C” 或 “V” 開頭的公司。

SELECT CardCode,CardName
FROM OCRD
WHERE CardCode LIKE '[CV]%'

查詢結(jié)果(結(jié)果行數(shù)較多,僅展示部分):

3.1 表示否定 ^

否定符 “^” 僅能在中括號內(nèi)使用,哪怕只有一位,要使用否定符 “^”,也需要加上 “[]”。

例:查找【業(yè)務(wù)伙伴主數(shù)據(jù)】表單中業(yè)務(wù)伙伴編碼不以 “C” 開頭的公司。

SELECT CardCode,CardName
FROM OCRD
WHERE CardCode LIKE '[^C]%' --不加[]的話數(shù)據(jù)庫會把^理解為判斷字符

查詢結(jié)果:

3.2 表示范圍 -

在 “[]” 內(nèi)設(shè)定內(nèi)容存在既定順序時,可以使用 “-”,主要包含:字母按照字母表順序和數(shù)字按照大小順序。

例:查找【業(yè)務(wù)伙伴主數(shù)據(jù)】表單中業(yè)務(wù)伙伴名稱含有數(shù)字的公司。

SELECT CardCode,CardName
FROM OCRD
WHERE CardName LIKE '%[0-9]%'

查詢結(jié)果:

4. 否定 NOT

對于 LIKE 級別的綜合否定,均可用 NOT LIKE 來實現(xiàn)。

例:查找【業(yè)務(wù)伙伴主數(shù)據(jù)】表單中業(yè)務(wù)伙伴名稱不含有數(shù)字的公司。

SELECT CardCode,CardName
FROM OCRD
WHERE CardName NOT LIKE '%[0-9]%'

則會查詢出上一節(jié) 3.2 案例的查詢結(jié)果的補集,即返回上一案例以外的內(nèi)容行。

二、DISTINCT - 去重查詢

在 SELECT 之后增加 DISTINCT,可以對查詢數(shù)據(jù)去重。 

使用場景:比如在查詢所有下過采購訂單的客戶時,可以使用得到去重后的客戶名單

SELECT DISTINCT CardCode,CardName
FROM ORDR

三、HAVING - 過濾查詢

對分組后的數(shù)據(jù)過濾,一般會先使用 GROUP BY;倘若沒有出現(xiàn) GROUP BY,則默認(rèn) HAVING 把整張表當(dāng)作一組進行過濾

HAVING 和 WHERE 的區(qū)別:

  • WHERE 在分組前過濾,HAVING 在分組后過濾。
  • WHERE 語句里不能包含聚合函數(shù),HAVING 語句可以,并且 HAVING 語句中的子句一般來說不是聚合函數(shù)就是分組列。

例:查找平均銷售額大于 1000 的客戶。

SELECT CardCode,CardName,AVG(DocTotal) AS '平均銷售額'
FROM ORDR
GROUP BY CardCode,CardName
HAVING AVG(DocTotal)>1000

查詢結(jié)果:

四、小的查詢設(shè)置

1. ASC|DESC - 排序

放在 ORDER BY 后面,起到一個對分組進行升序(ASC)或降序(DESC)續(xù)排列的作用。

例:按【銷售金額】對平均銷售額大于 1000 的客戶進行【倒序】排列

SELECT CardCode,CardName,AVG(DocTotal) AS '平均銷售額'
FROM ORDR
GROUP BY CardCode,CardName 
HAVING AVG(DocTotal)>1000
ORDER BY AVG(DocTotal) DESC

查詢結(jié)果:

2. TOP - 限制

放在 SELECT 之后,按照 TOP + [數(shù)量] 的格式,實現(xiàn)對前 [數(shù)量] 行信息的效果。

例:查詢【銷售金額】對平均銷售額前十的客戶名單

SELECT TOP 10 CardCode,CardName FROM ORDR
GROUP BY CardCode,CardName
ORDER BY AVG(DocTotal) DESC

查詢結(jié)果:

3. 子查詢

在 WHERE 后,除了可以接某張已經(jīng)存在的具體表,還可以接一個【子查詢】,即由一個新的查詢構(gòu)建的新表,將其嵌套進原有的查詢命令時,形成一個【子查詢】。

注意:子查詢返回的值能且僅能為一個。

例:查找銷售額最高的客戶在【業(yè)務(wù)伙伴主數(shù)據(jù)】中登記的業(yè)務(wù)伙伴代碼、業(yè)務(wù)伙伴名稱、業(yè)務(wù)伙伴類型、組代碼、電話 1、聯(lián)系人信息。

SELECT CardCode,CardName,CardType,GroupCode,Phone1,CntctPrsn
FROM OCRD
WHERE CardCode = (
SELECT TOP 1 CardCode FROM ORDR
GROUP BY CardCode
ORDER BY SUM(DocTotal) DESC
)

 查詢結(jié)果

4. not in - 取補集(LIMIT效果)

在 MySQL 中,可以利用 LIMIT 對查詢的信息條目進行限制,如查前 x 條數(shù)據(jù)、跳過前 y 條數(shù)據(jù)查找后面的 z 條數(shù)據(jù)。但是 SQL Server 中不支持 LIMIT,可以使用 TOP 聯(lián)合 not 和 子查詢完成以上功能的實現(xiàn)。

例:跳過銷售金額平均值前十的客戶,返回第 11-15 名的客戶名單

SELECT TOP 5 CardCode,CardName FROM OPOR
WHERE CardCode NOT IN(
SELECT TOP 10 CardCode FROM ORDR
GROUP BY CardCode
ORDER BY AVG(DocTotal) DESC
)

查詢結(jié)果:

到此這篇關(guān)于SQL Server 查詢設(shè)置 - LIKE/DISTINCT/HAVING/排序的文章就介紹到這了,更多相關(guān)SQL Server LIKE/DISTINCT/HAVING/排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論