當前位置:首頁 » 編程語言 » sql中函數出現的意義
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql中函數出現的意義

發布時間: 2023-08-21 15:20:34

1. sql server 中的函數mid有什麼作用

MID() 函數

MID() 函數用於從文本欄位中提取字元。

具體語法參考:

2. SQL 系統函數都是什麼意思

sql中有用戶登錄,不同的用戶有不同的許可權!
一般有用戶sa 和系統自帶用戶 ,如果你自己新建了用戶那麼登錄的話
返回的就是你登陸資料庫的用戶名了!

3. sql中nullif函數什麼意思

功能
比較 expr1 和 expr2 的值,若二者相等,則返回 NULL,否則返回 expr1 的值。其中 expr1 不能為 NULL。
NULLIF 函數在邏輯上相當於下面的 CASE 語句:
CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

舉例

SQL> select nullif('yct','tyc') from al;

NUL
---
yct

SQL> select nullif('yct','yct') from al;

NUL
---

expr1 和 expr2 的類型必須一致,否則會提示錯誤,因為無法比較二者是否相等:

SQL> select nullif('yct',sysdate) from al;
select nullif('yct',sysdate) from al
*
ERROR 位於第 1 行:
ORA-00932: 不一致的數據類型: 要求 CHAR 得到的卻是 DATE

當 expr1 為 NULL 時,該函數提示錯誤:

SQL> select nullif(null,'adf') from al;
select nullif(null,'adf') from al
*
ERROR 位於第 1 行:
ORA-00932: 不一致的數據類型: 要求 - 得到的卻是 CHAR

這里沒有明確提示 expr1 不能為 NULL,而是說類型不一致。那麼換成一致的類型呢:

SQL> select nullif(null,null) from al;
select nullif(null,null) from al
*
ERROR 位於第 1 行:
ORA-00932: 不一致的數據類型: 要求 - 得到的卻是 CHAR

仍然會有這樣的提示,不太明確。總之,expr1 是不能為 NULL 的。
下面的這個例子中,將查詢哪個員工換了工作。表 job_history 中存儲員工的歷史工作記錄,表 employees 中存儲員工當前的工作記錄:

SELECT e.last_name, NULLIF(e.job_id, j.job_id) "Old Job ID"
FROM employees e, job_history j
WHERE e.employee_id = j.employee_id
ORDER BY last_name;

LAST_NAME Old Job ID
------------------------- ----------
De Haan AD_VP
Hartstein MK_MAN
Kaufling ST_MAN
Kochhar AD_VP
Kochhar AD_VP
Raphaely PU_MAN
Taylor SA_REP
Taylor
Whalen AD_ASST
Whalen

4. 什麼是SQL標量函數

標量函數:標量函數用於對傳遞給它的一個或者多個參數值進行處理和計算,並返回一個單一的值。
標量值函數示例:
CREATE FUNCTION dbo.Foo()
RETURNS int
AS
BEGIN
declare @n int
select @n=3
return @n
END

SQL中的函數

在Transact-SQL語言中,函數被用來執行一些特殊的運算以支持SQL Server的標准命令。Transact-SQL 編程語言提供了三種函數:
一行集函數:行集函數可以在Transact-SQL語句中當作表引用。
二聚合函數:聚合函數用於對一組值執行計算並返回一個單一的值。
三標量函數:標量函數用於對傳遞給它的一個或者多個參數值進行處理和計算,並返回一個單一的值。

另外:
SQL Server 2000 允許用戶創建自定義函數,自定義函數可以有返回值。

自定義函數分為:標量值函數或表值函數

•如果 RETURNS 子句指定一種標量數據類型,則函數為標量值函數。可以使用多條 Transact-SQL 語句定義標量值函數。
•如果 RETURNS 子句指定 TABLE,則函數為表值函數。

5. 什麼SQL函數,作用有哪些

SQL 擁有很多可用於計數和計算的內建函數。
[編輯本段]函數的語法
內建 SQL 函數的語法是: SELECT function(列) FROM 表
[編輯本段]函數的類型
在 SQL 中,基本的函數類型和種類有若干種。函數的基本類型是: Aggregate 函數 Scalar 函數
[編輯本段]合計函數(Aggregate functions)
Aggregate 函數的操作面向一系列的值,並返回一個單一的值。 注釋:如果在 SELECT 語句的項目列表中的眾多其它表達式中使用 SELECT 語句,則這個 SELECT 必須使用 GROUP BY 語句!"Persons" table (在大部分的例子中使用過) Name Age
Adams, John 38
Bush, George 33
Carter, Thomas 28

MS Access 中的合計函數
函數 描述
AVG(column) 返回某列的平均值
COUNT(column) 返回某列的行數(不包括 NULL 值)
COUNT(*) 返回被選行數
FIRST(column) 返回在指定的域中第一個記錄的值
LAST(column) 返回在指定的域中最後一個記錄的值
MAX(column) 返回某列的最高值
MIN(column) 返回某列的最低值
STDEV(column)
STDEVP(column)
SUM(column) 返回某列的總和
VAR(column)
VARP(column)

在 SQL Server 中的合計函數
函數 描述
AVG(column) 返回某列的平均值
BINARY_CHECKSUM
CHECKSUM
CHECKSUM_AGG
COUNT(column) 返回某列的行數(不包括NULL值)
COUNT(*) 返回被選行數
COUNT(DISTINCT column) 返回相異結果的數目
FIRST(column) 返回在指定的域中第一個記錄的值(SQLServer2000 不支持)
LAST(column) 返回在指定的域中最後一個記錄的值(SQLServer2000 不支持)
MAX(column) 返回某列的最高值
MIN(column) 返回某列的最低值
STDEV(column)
STDEVP(column)
SUM(column) 返回某列的總和
VAR(column)
VARP(column)

[編輯本段]Scalar 函數
Scalar 函數的操作面向某個單一的值,並返回基於輸入值的一個單一的值。
MS Access 中的 Scalar 函數
函數 描述
UCASE(c) 將某個域轉換為大寫
LCASE(c) 將某個域轉換為小寫
MID(c,start[,end]) 從某個文本域提取字元
LEN(c) 返回某個文本域的長度
INSTR(c,char) 返回在某個文本域中指定字元的數值位置
LEFT(c,number_of_char) 返回某個被請求的文本域的左側部分
RIGHT(c,number_of_char) 返回某個被請求的文本域的右側部分
ROUND(c,decimals) 對某個數值域進行指定小數位數的四捨五入
MOD(x,y) 返回除法操作的余數
NOW() 返回當前的系統日期
FORMAT(c,format) 改變某個域的顯示方式
DATEDIFF(d,date1,date2) 用於執行日期計算

[編輯本段]AVG 函數

[編輯本段]定義和用法
AVG 函數返回數值列的平均值。NULL 值不包括在計算中。
SQL AVG() 語法
SELECT AVG(column_name) FROM table_name
[編輯本段]SQL AVG() 實例
我們擁有下面這個 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

例子 1
現在,我們希望計算 "OrderPrice" 欄位的平均值。 我們使用如下 SQL 語句: SELECT AVG(OrderPrice) AS OrderAverage FROM Orders結果集類似這樣: OrderAverage
950

例子 2
現在,我們希望找到 OrderPrice 值高於 OrderPrice 平均值的客戶。 我們使用如下 SQL 語句: SELECT Customer FROM OrdersWHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)結果集類似這樣: Customer
Bush
Carter
Adams
COUNT() 函數COUNT() 函數返回匹配指定條件的行數。
[編輯本段]SQL COUNT() 語法
SQL COUNT(column_name) 語法
COUNT(column_name) 函數返回指定列的值的數目(NULL 不計入): SELECT COUNT(column_name) FROM table_name
SQL COUNT(*) 語法
COUNT(*) 函數返回表中的記錄數: SELECT COUNT(*) FROM table_name
SQL COUNT(DISTINCT column_name) 語法
COUNT(DISTINCT column_name) 函數返回指定列的不同值的數目: SELECT COUNT(DISTINCT column_name) FROM table_name注釋:COUNT(DISTINCT) 適用於 ORACLE 和 Microsoft SQL Server,但是無法用於 Microsoft Access。
[編輯本段]SQL COUNT(column_name) 實例
我們擁有下列 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
現在,我們希望計算客戶 "Carter" 的訂單數。 我們使用如下 SQL 語句: SELECT COUNT(Customer) AS CustomerNilsen FROM OrdersWHERE Customer='Carter'以上 SQL 語句的結果是 2,因為客戶 Carter 共有 2 個訂單:CustomerNilsen
2
SQL COUNT(*) 實例 如果我們省略 WHERE 子句,比如這樣: SELECT COUNT(*) AS NumberOfOrders FROM Orders結果集類似這樣:NumberOfOrders
6
這是表中的總行數。
[編輯本段]SQL COUNT(DISTINCT column_name) 實例
現在,我們希望計算 "Orders" 表中不同客戶的數目。 我們使用如下 SQL 語句: SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders結果集類似這樣: NumberOfCustomers
3
這是 "Orders" 表中不同客戶(Bush, Carter 和 Adams)的數目。 FIRST() 函數FIRST() 函數返回指定的欄位中第一個記錄的值。 提示:可使用 ORDER BY 語句對記錄進行排序。
SQL FIRST() 語法
SELECT FIRST(column_name) FROM table_name
[編輯本段]SQL FIRST() 實例
我們擁有下面這個 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
現在,我們希望查找 "OrderPrice" 列的第一個值。 我們使用如下 SQL 語句: SELECT FIRST(OrderPrice) AS FirstOrderPrice FROM Orders結果集類似這樣: FirstOrderPrice
1000

[編輯本段]LAST() 函數
LAST() 函數返回指定的欄位中最後一個記錄的值。 提示:可使用 ORDER BY 語句對記錄進行排序。
SQL LAST() 語法
SELECT LAST(column_name) FROM table_name
[編輯本段]SQL LAST() 實例
我們擁有下面這個 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
現在,我們希望查找 "OrderPrice" 列的最後一個值。 我們使用如下 SQL 語句: SELECT LAST(OrderPrice) AS LastOrderPrice FROM Orders結果集類似這樣: LastOrderPrice
100

[編輯本段]MAX() 函數
MAX 函數返回一列中的最大值。NULL 值不包括在計算中。
SQL MAX() 語法
SELECT MAX(column_name) FROM table_name注釋:MIN 和 MAX 也可用於文本列,以獲得按字母順序排列的最高或最低值。
[編輯本段]SQL MAX() 實例
我們擁有下面這個 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
現在,我們希望查找 "OrderPrice" 列的最大值。 我們使用如下 SQL 語句: SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders結果集類似這樣: LargestOrderPrice
2000

[編輯本段]MIN() 函數
MIN 函數返回一列中的最小值。NULL 值不包括在計算中。
SQL MIN() 語法
SELECT MIN(column_name) FROM table_name注釋:MIN 和 MAX 也可用於文本列,以獲得按字母順序排列的最高或最低值。
[編輯本段]SQL MIN() 實例
我們擁有下面這個 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
現在,我們希望查找 "OrderPrice" 列的最小值。 我們使用如下 SQL 語句: SELECT MIN(OrderPrice) AS SmallestOrderPrice FROM Orders結果集類似這樣: SmallestOrderPrice
100

[編輯本段]SUM() 函數
SUM 函數返回數值列的總數(總額)。
SQL SUM() 語法
SELECT SUM(column_name) FROM table_name
[編輯本段]SQL SUM() 實例
我們擁有下面這個 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
現在,我們希望查找 "OrderPrice" 欄位的總數。 我們使用如下 SQL 語句: SELECT SUM(OrderPrice) AS OrderTotal FROM Orders結果集類似這樣: OrderTotal
5700
GROUP BY 語句合計函數 (比如 SUM) 常常需要添加 GROUP BY 語句。
[編輯本段]GROUP BY 語句
GROUP BY 語句用於結合合計函數,根據一個或多個列對結果集進行分組。
SQL GROUP BY 語法
SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_name
[編輯本段]SQL GROUP BY 實例
我們擁有下面這個 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
現在,我們希望查找每個客戶的總金額(總訂單)。 我們想要使用 GROUP BY 語句對客戶進行組合。 我們使用下列 SQL 語句: SELECT Customer,SUM(OrderPrice) FROM OrdersGROUP BY Customer結果集類似這樣: Customer SUM(OrderPrice)
Bush 2000
Carter 1700
Adams 2000
很棒吧,對不對? 讓我們看一下如果省略 GROUP BY 會出現什麼情況: SELECT Customer,SUM(OrderPrice) FROM Orders結果集類似這樣: Customer SUM(OrderPrice)
Bush 5700
Carter 5700
Bush 5700
Bush 5700
Adams 5700
Carter 5700
上面的結果集不是我們需要的。 那麼為什麼不能使用上面這條 SELECT 語句呢?解釋如下:上面的 SELECT 語句指定了兩列(Customer 和 SUM(OrderPrice))。"SUM(OrderPrice)" 返回一個單獨的值("OrderPrice" 列的總計),而 "Customer" 返回 6 個值(每個值對應 "Orders" 表中的每一行)。因此,我們得不到正確的結果。不過,您已經看到了,GROUP BY 語句解決了這個問題。
[編輯本段]GROUP BY 一個以上的列
我們也可以對一個以上的列應用 GROUP BY 語句,就像這樣: SELECT Customer,OrderDate,SUM(OrderPrice) FROM OrdersGROUP BY Customer,OrderDate
[編輯本段]HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與合計函數一起使用。
SQL HAVING 語法
SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_nameHAVING aggregate_function(column_name) operator value
[編輯本段]SQL HAVING 實例
我們擁有下面這個 "Orders" 表: O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
現在,我們希望查找訂單總金額少於 2000 的客戶。 我們使用如下 SQL 語句: SELECT Customer,SUM(OrderPrice) FROM OrdersGROUP BY CustomerHAVING SUM(OrderPrice)<2000結果集類似: Customer SUM(OrderPrice)
Carter 1700
現在我們希望查找客戶 "Bush" 或 "Adams" 擁有超過 1500 的訂單總金額。 我們在 SQL 語句中增加了一個普通的 WHERE 子句: SELECT Customer,SUM(OrderPrice) FROM OrdersWHERE Customer='Bush' OR Customer='Adams'GROUP BY CustomerHAVING SUM(OrderPrice)>1500結果集: Customer SUM(OrderPrice)
Bush 2000
Adams 2000

[編輯本段]UCASE() 函數
UCASE 函數把欄位的值轉換為大寫。
SQL UCASE() 語法
SELECT UCASE(column_name) FROM table_name
[編輯本段]SQL UCASE() 實例
我們擁有下面這個 "Persons" 表: Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
現在,我們希望選取 "LastName" 和 "FirstName" 列的內容,然後把 "LastName" 列轉換為大寫。 我們使用如下 SQL 語句: SELECT UCASE(LastName) as LastName,FirstName FROM Persons結果集類似這樣: LastName FirstName
ADAMS John
BUSH George
CARTER Thomas

[編輯本段]LCASE() 函數
LCASE 函數把欄位的值轉換為小寫。
SQL LCASE() 語法
SELECT LCASE(column_name) FROM table_name
[編輯本段]SQL LCASE() 實例
我們擁有下面這個 "Persons" 表: Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
現在,我們希望選取 "LastName" 和 "FirstName" 列的內容,然後把 "LastName" 列轉換為小寫。 我們使用如下 SQL 語句: SELECT LCASE(LastName) as LastName,FirstName FROM Persons結果集類似這樣: LastName FirstName
adams John
bush George
carter Thomas

[編輯本段]MID() 函數
MID 函數用於從文本欄位中提取字元。
SQL MID() 語法
SELECT MID(column_name,start[,length]) FROM table_name參數 描述
column_name 必需。要提取字元的欄位。
start 必需。規定開始位置(起始值是 1)。
length 可選。要返回的字元數。如果省略,則 MID() 函數返回剩餘文本。

[編輯本段]SQL MID() 實例
我們擁有下面這個 "Persons" 表: Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
現在,我們希望從 "City" 列中提取前 3 個字元。 我們使用如下 SQL 語句: SELECT MID(City,1,3) as SmallCity FROM Persons結果集類似這樣: SmallCity
Lon
New
Bei

[編輯本段]LEN() 函數
LEN 函數返迴文本欄位中值的長度。
SQL LEN() 語法
SELECT LEN(column_name) FROM table_name
[編輯本段]SQL LEN() 實例
我們擁有下面這個 "Persons" 表: Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
現在,我們希望取得 "City" 列中值的長度。 我們使用如下 SQL 語句: SELECT LEN(City) as LengthOfAddress FROM Persons結果集類似這樣: LengthOfCity
6
8
7

[編輯本段]ROUND() 函數
ROUND 函數用於把數值欄位舍入為指定的小數位數。
SQL ROUND() 語法
SELECT ROUND(column_name,decimals) FROM table_name參數 描述
column_name 必需。要舍入的欄位。
decimals 必需。規定要返回的小數位數。

[編輯本段]SQL ROUND() 實例
我們擁有下面這個 "Procts" 表: Prod_Id ProctName Unit UnitPrice
1 gold 1000 g 32.35
2 silver 1000 g 11.56
3 copper 1000 g 6.85
現在,我們希望把名稱和價格舍入為最接近的整數。 我們使用如下 SQL 語句: SELECT ProctName, ROUND(UnitPrice,0) as UnitPrice FROM Procts結果集類似這樣: ProctName UnitPrice
gold 32
silver 12
copper 7

[編輯本段]NOW() 函數
NOW 函數返回當前的日期和時間。
SQL NOW() 語法
SELECT NOW() FROM table_name
[編輯本段]SQL NOW() 實例
我們擁有下面這個 "Procts" 表: Prod_Id ProctName Unit UnitPrice
1 gold 1000 g 32.35
2 silver 1000 g 11.56
3 copper 1000 g 6.85
現在,我們希望顯示當天的日期所對應的名稱和價格。 我們使用如下 SQL 語句: SELECT ProctName, UnitPrice, Now() as PerDate FROM Procts結果集類似這樣: ProctName UnitPrice PerDate
gold 32.35 12/29/2008 11:36:05 AM
silver 11.56 12/29/2008 11:36:05 AM
copper 6.85 12/29/2008 11:36:05 AM

[編輯本段]FORMAT() 函數
FORMAT 函數用於對欄位的顯示進行格式化。
SQL FORMAT() 語法
SELECT FORMAT(column_name,format) FROM table_name參數 描述
column_name 必需。要格式化的欄位。
format 必需。規定格式。

[編輯本段]SQL FORMAT() 實例
我們擁有下面這個 "Procts" 表: Prod_Id ProctName Unit UnitPrice
1 gold 1000 g 32.35
2 silver 1000 g 11.56
3 copper 1000 g 6.85
現在,我們希望顯示每天日期所對應的名稱和價格(日期的顯示格式是 "YYYY-MM-DD")。 我們使用如下 SQL 語句: SELECT ProctName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD') as PerDateFROM Procts結果集類似這樣: ProctName UnitPrice PerDate
gold 32.35 12/29/2008
silver 11.56 12/29/2008
copper 6.85 12/29/2008

6. 求詳解SQL的CASE函數語句含義

select 課程,
sum(case when 姓名='李四' then 成績 end)as '李四',
sum(case when 姓名='張三' then 成績 end)as '張三'
from table_2
group by 課程

--意思是:
查詢結果按照「課程」、「李四的成績」、「張三的成績」顯示出來,
其中「李四的成績」計算方法是:
當姓名=李四,那麼就計算將該行的成績按照課程進行分類加總
「張三的成績」計算方法是:
當姓名=張三,那麼就計算將該行的成績按照課程進行分類加總

select 姓名,
sum(case when 課程='語文' then 成績 end)as '語文',
sum(case when 課程='數學' then 成績 end)as '數學',
sum(case when 課程='英語' then 成績 end)as '英語'
from table_2
group by 姓名

--類似的意思是:
查詢結果按照「姓名」、「語文」、「數學」、「英語」按照姓名進行加總各科成績顯示出來,
其中「語文」成績計算方法是:
當科目=語文,那麼就計算將該行的成績按照姓名進行分類加總
「數學」成績計算方法是:
當科目=數學,那麼就計算將該行的成績按照姓名進行分類加總
「英語」成績計算方法是:
當科目=英語,那麼就計算將該行的成績按照姓名進行分類加總

case when 條件 then 表達式1 else 表達式2 end
表示:當條件成立,則返回表達式1,否則返回表達式2.
因此:sum(case when 姓名='李四' then 成績 end)as '李四', 表示如果姓名為李四,則加總計算成績,列名為『李四』

類似的樓主可以自己理解了。