日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

dosbox 伪指令dd为什么会报错_什么是SQL函数?为什么使用SQL函数可能会带来问题?...

發(fā)布時間:2023/11/30 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dosbox 伪指令dd为什么会报错_什么是SQL函数?为什么使用SQL函数可能会带来问题?... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文已收錄GitHub,更有互聯(lián)網(wǎng)大廠面試真題,面試攻略,高效學(xué)習(xí)資料等

函數(shù)在計算機語言的使用中貫穿始終,在 SQL 中我們也可以使用函數(shù)對檢索出來的數(shù)據(jù)進行函數(shù)操作,比如求某列數(shù)據(jù)的平均值,或者求字符串的長度等。從函數(shù)定義的角度出發(fā),我們可以將函數(shù)分成內(nèi)置函數(shù)和自定義函數(shù)。在 SQL 語言中,同樣也包括了內(nèi)置函數(shù)和自定義函數(shù)。內(nèi)置函數(shù)是系統(tǒng)內(nèi)置的通用函數(shù),而自定義函數(shù)是我們根據(jù)自己的需要編寫的,下面講解的是 SQL 的內(nèi)置函數(shù)。

你需要從以下幾個方面掌握 SQL 函數(shù):

  • 什么是 SQL 函數(shù)?
  • 內(nèi)置的 SQL 函數(shù)都包括哪些?
  • 如何使用 SQL 函數(shù)對一個數(shù)據(jù)表進行操作,比如針對一個王者榮耀的英雄數(shù)據(jù)庫,我們可以使用這些函數(shù)完成哪些操作? 4.什么情況下使用 SQL 函數(shù)?為什么使用 SQL 函數(shù)有時候會帶來問題?
  • 一、什么是SQL函數(shù)

    當我們學(xué)習(xí)編程語言的時候,也會遇到函數(shù)。函數(shù)的作用是什么呢?它可以把我們經(jīng)常使用的代碼封裝起來,需要的時候直接調(diào)用即可。這樣既提高了代碼效率,又提高了可維護性。

    SQL 中的函數(shù)一般是在數(shù)據(jù)上執(zhí)行的,可以很方便地轉(zhuǎn)換和處理數(shù)據(jù)。一般來說,當我們從數(shù)據(jù)表中檢索出數(shù)據(jù)之后,就可以進一步對這些數(shù)據(jù)進行操作,得到更有意義的結(jié)果,比如返回指定條件的函數(shù),或者求某個字段的平均值等。

    二、常用的SQL函數(shù)有哪些

    SQL 提供了一些常用的內(nèi)置函數(shù),當然你也可以自己定義 SQL 函數(shù)。SQL 的內(nèi)置函數(shù)對于不同的數(shù)據(jù)庫軟件來說具有一定的通用性,我們可以把內(nèi)置函數(shù)分成四類:

  • 算術(shù)函數(shù)
  • 字符串函數(shù)
  • 日期函數(shù)
  • 轉(zhuǎn)換函數(shù)
  • 這 4 類函數(shù)分別代表了算術(shù)處理、字符串處理、日期處理、數(shù)據(jù)類型轉(zhuǎn)換,它們是 SQL 函數(shù)常用的劃分形式,你可以思考下,為什么是這 4 個維度?

    函數(shù)是對提取出來的數(shù)據(jù)進行操作,那么數(shù)據(jù)表中字段類型的定義有哪幾種呢?

    我們經(jīng)常會保存一些數(shù)值,不論是整數(shù)類型,還是浮點類型,實際上對應(yīng)的就是數(shù)值類型。同樣我們也會保存一些文本內(nèi)容,可能是人名,也可能是某個說明,對應(yīng)的就是字符串類型。此外我們還需要保存時間,也就是日期類型。那么針對數(shù)值、字符串和日期類型的數(shù)據(jù),我們可以對它們分別進行算術(shù)函數(shù)、字符串函數(shù)以及日期函數(shù)的操作。如果想要完成不同類型數(shù)據(jù)之間的轉(zhuǎn)換,就可以使用轉(zhuǎn)換函數(shù)。

    三、算術(shù)函數(shù)

    算術(shù)函數(shù),顧名思義就是對數(shù)值類型的字段進行算術(shù)運算。常用的算術(shù)函數(shù)及含義如下表所示:

    這里我舉一些簡單的例子,你來體會下:

    SELECT ABS(-2),運行結(jié)果為 2。 SELECT MOD(101,3),運行結(jié)果 2。 SELECT ROUND(37.25,1),運行結(jié)果 37.3。

    四、字符串函數(shù)

    常用的字符串函數(shù)操作包括了字符串拼接,大小寫轉(zhuǎn)換,求長度以及字符串替換和截取等。具體的函數(shù)名稱及含義如下表所示:

    這里同樣有一些簡單的例子,你可以自己運行下:

    SELECT CONCAT('abc', 123),運行結(jié)果為 abc123。 SELECT LENGTH('你好'),運行結(jié)果為 6。 SELECT CHAR_LENGTH('你好'),運行結(jié)果為 2。 SELECT LOWER('ABC'),運行結(jié)果為 abc。 SELECT UPPER('abc'),運行結(jié)果 ABC。 SELECT REPLACE('fabcd', 'abc', 123),運行結(jié)果為 f123d。 SELECT SUBSTRING('fabcd', 1,3),運行結(jié)果為 fab。

    五、日期函數(shù)

    日期函數(shù)是對數(shù)據(jù)表中的日期進行處理,常用的函數(shù)包括:

    下面是一些簡單的例子,你可自己運行下:

    SELECT CURRENT_DATE(),運行結(jié)果為 2019-04-03。 SELECT CURRENT_TIME(),運行結(jié)果為 21:26:34。 SELECT CURRENT_TIMESTAMP(),運行結(jié)果為 2019-04-03 21:26:34。 SELECT EXTRACT(YEAR FROM '2019-04-03'),運行結(jié)果為 2019。 SELECT DATE('2019-04-01 12:00:05'),運行結(jié)果為 2019-04-01。

    這里需要注意的是,DATE 日期格式必須是 yyyy-mm-dd 的形式。如果要進行日期比較,就要使用 DATE 函數(shù),不要直接使用日期與字符串進行比較,我會在后面的例子中講具體的原因。

    六、轉(zhuǎn)換函數(shù)

    轉(zhuǎn)換函數(shù)可以轉(zhuǎn)換數(shù)據(jù)之間的類型,常用的函數(shù)如下表所示:

    這兩個函數(shù)不像其他函數(shù),看一眼函數(shù)名就知道代表什么、如何使用。下面舉了這兩個函數(shù)的例子,你需要自己運行下:

    SELECT CAST(123.123 AS INT),運行結(jié)果會報錯。 SELECT CAST(123.123 AS DECIMAL(8,2)),運行結(jié)果為 123.12。 SELECT COALESCE(null,1,2),運行結(jié)果為 1。

    CAST 函數(shù)在轉(zhuǎn)換數(shù)據(jù)類型的時候,不會四舍五入,如果原數(shù)值有小數(shù),那么轉(zhuǎn)換為整數(shù)類型的時候就會報錯。不過你可以指定轉(zhuǎn)化的小數(shù)類型,在 MySQL 和 SQL Server 中,你可以用DECIMAL(a,b)來指定,其中 a 代表整數(shù)部分和小數(shù)部分加起來最大的位數(shù),b 代表小數(shù)位數(shù),比如DECIMAL(8,2)代表的是精度為 8 位(整數(shù)加小數(shù)位數(shù)最多為 8 位),小數(shù)位數(shù)為 2 位的數(shù)據(jù)類型。所以SELECT CAST(123.123 AS DECIMAL(8,2))的轉(zhuǎn)換結(jié)果為 123.12。

    七、用SQL函數(shù)對王者榮耀英雄數(shù)據(jù)做處理

    我創(chuàng)建了一個王者榮耀英雄數(shù)據(jù)庫,一共有 69 個英雄,23 個屬性值。

    我們現(xiàn)在把這個文件導(dǎo)入到 MySQL 中,你可以使用 Navicat 可視化數(shù)據(jù)庫管理工具將.sql文件導(dǎo)入到數(shù)據(jù)庫中。數(shù)據(jù)表為 heros,然后使用今天學(xué)習(xí)的 SQL 函數(shù),對這個英雄數(shù)據(jù)表進行處理。

    首先顯示英雄以及他的物攻成長,對應(yīng)字段為attack_growth。我們讓這個字段精確到小數(shù)點后一位,需要使用的是算術(shù)函數(shù)里的 ROUND 函數(shù)。

    SQL:SELECT name, ROUND(attack_growth,1) FROM heros

    代碼中,ROUND(attack_growth,1)中的attack_growth代表想要處理的數(shù)據(jù),“1”代表四舍五入的位數(shù),也就是我們這里需要精確到的位數(shù)。

    運行結(jié)果為:

    假設(shè)我們想顯示英雄最大生命值的最大值,就需要用到 MAX 函數(shù)。在數(shù)據(jù)中,“最大生命值”對應(yīng)的列數(shù)為hp_max,在代碼中的格式為MAX(hp_max)。

    SQL:SELECT MAX(hp_max) FROM heros

    運行結(jié)果為 9328。

    假如我們想要知道最大生命值最大的是哪個英雄,以及對應(yīng)的數(shù)值,就需要分成兩個步驟來處理:首先找到英雄的最大生命值的最大值,即SELECT MAX(hp_max) FROM heros,然后再篩選最大生命值等于這個最大值的英雄,如下所示。

    SQL:SELECT name, hp_max FROM heros WHERE hp_max = (SELECT MAX(hp_max) FROM heros)

    運行結(jié)果:

    假如我們想顯示英雄的名字,以及他們的名字字數(shù),需要用到CHAR_LENGTH函數(shù)。

    SQL:SELECT CHAR_LENGTH(name), name FROM heros

    運行結(jié)果為:

    假如想要提取英雄上線日期(對應(yīng)字段 birthdate)的年份,只顯示有上線日期的英雄即可(有些英雄沒有上線日期的數(shù)據(jù),不需要顯示),這里我們需要使用 EXTRACT 函數(shù),提取某一個時間元素。所以我們需要篩選上線日期不為空的英雄,即WHERE birthdate isnot null,然后再顯示他們的名字和上線日期的年份,即:

    SQL:SELECT name, EXTRACT(YEAR FROM birthdate) AS birthdate FROM heros WHERE birthdate

    或者使用如下形式:

    SQL: SELECT name, YEAR(birthdate) AS birthdate FROM heros WHERE birthdate is NOT NULL

    運行結(jié)果為:

    假設(shè)我們需要找出在 2016 年 10 月 1 日之后上線的所有英雄。這里我們可以采用 DATE函數(shù)來判斷 birthdate 的日期是否大于 2016-10-01,即WHEREDATE(birthdate)>'2016-10-01',然后再顯示符合要求的全部字段信息,即:

    SQL:SELECT * FROM heros WHERE DATE(birthdate)>'2016-10-01'

    需要注意的是下面這種寫法是不安全的:

    SELECT * FROM heros WHERE birthdate>'2016-10-01'

    因為很多時候你無法確認 birthdate 的數(shù)據(jù)類型是字符串,還是 datetime 類型,如果你想對日期部分進行比較,那么使用DATE(birthdate)來進行比較是更安全的。

    運行結(jié)果為:

    假設(shè)我們需要知道在 2016 年 10 月 1 日之后上線英雄的平均最大生命值、平均最大法力和最高物攻最大值。同樣我們需要先篩選日期條件,即WHERE DATE(birthdate)>'2016-10-01',然后再選擇AVG(hp_max), AVG(mp_max), MAX(attack_max)字段進行顯示。

    SQL:SELECT AVG(hp_max), AVG(mp_max), MAX(attack_max) FROM heros WHERE DATE(birthdate)>

    運行結(jié)果為:

    八、為什么使用SQL函數(shù)會帶來問題

    盡管 SQL 函數(shù)使用起來會很方便,但我們使用的時候還是要謹慎,因為你使用的函數(shù)很可能在運行環(huán)境中無法工作,這是為什么呢?

    如果你學(xué)習(xí)過編程語言,就會知道語言是有不同版本的。我們在使用 SQL 語言的時候,不是直接和這門語言打交道,而是通過它使用不同的數(shù)據(jù)庫軟件,即 DBMS。DBMS之間的差異性很大,遠大于同一個語言不同版本之間的差異。實際上,只有很少的函數(shù)是被DBMS 同時支持的。比如,大多數(shù) DBMS 使用(||)或者(+)來做拼接符,而在 MySQL中的字符串拼接函數(shù)為Concat()。大部分 DBMS 會有自己特定的函數(shù),這就意味著采用SQL 函數(shù)的代碼可移植性是很差的,因此在使用函數(shù)的時候需要特別注意。

    九、關(guān)于大小寫的規(guī)范

    細心的人可能會發(fā)現(xiàn),我在寫 SELECT 語句的時候用的是大寫,而你在網(wǎng)上很多地方,包括你自己寫的時候可能用的是小寫。實際上在 SQL 中,關(guān)鍵字和函數(shù)名是不用區(qū)分字母大小寫的,比如 SELECT、WHERE、ORDER、GROUP BY 等關(guān)鍵字,以及 ABS、MOD、ROUND、MAX 等函數(shù)名。

    不過在 SQL 中,你還是要確定大小寫的規(guī)范,因為在 Linux 和 Windows 環(huán)境下,你可能會遇到不同的大小寫問題。

    比如 MySQL 在 Linux 的環(huán)境下,數(shù)據(jù)庫名、表名、變量名是嚴格區(qū)分大小寫的,而字段名是忽略大小寫的。

    而 MySQL 在 Windows 的環(huán)境下全部不區(qū)分大小寫。

    這就意味著如果你的變量名命名規(guī)范沒有統(tǒng)一,就可能產(chǎn)生錯誤。這里有一個有關(guān)命名規(guī)范的建議:

  • 關(guān)鍵字和函數(shù)名稱全部大寫;
  • 數(shù)據(jù)庫名、表名、字段名稱全部小寫;
  • SQL 語句必須以分號結(jié)尾。
  • 雖然關(guān)鍵字和函數(shù)名稱在 SQL 中不區(qū)分大小寫,也就是如果小寫的話同樣可以執(zhí)行,但是數(shù)據(jù)庫名、表名和字段名在 Linux MySQL 環(huán)境下是區(qū)分大小寫的,因此建議你統(tǒng)一這些字段的命名規(guī)則,比如全部采用小寫的方式。同時將關(guān)鍵詞和函數(shù)名稱全部大寫,以便于區(qū)分數(shù)據(jù)庫名、表名、字段名。

    十、總結(jié)

    函數(shù)對于一門語言的重要性毋庸置疑,我們在寫Java代碼的時候,會自己編寫函數(shù),也會使用Java內(nèi)置的函數(shù)。在 SQL 中,使用函數(shù)的時候需要格外留意。不過如果工程量不大,使用的是同一個 DBMS 的話,還是可以使用函數(shù)簡化操作的,這樣也能提高代碼效率。只是在系統(tǒng)集成,或者在多個 DBMS 同時存在的情況下,使用函數(shù)的時候就需要慎重一些。

    比如CONCAT()是字符串拼接函數(shù),在 MySQL 和 Oracle 中都有這個函數(shù),但是在這兩個DBMS 中作用卻不一樣,CONCAT函數(shù)在 MySQL 中可以連接多個字符串,而在 Oracle 中CONCAT函數(shù)只能連接兩個字符串,如果要連接多個字符串就需要用(||)連字符來解決。

    講完了 SQL 函數(shù)的使用,我們來做一道練習(xí)題。還是根據(jù)王者榮耀英雄數(shù)據(jù)表,請你使用SQL 函數(shù)作如下的練習(xí):計算英雄的最大生命平均值;顯示出所有在 2017 年之前上線的英雄,如果英雄沒有統(tǒng)計上線日期則不顯示。

    總結(jié)

    以上是生活随笔為你收集整理的dosbox 伪指令dd为什么会报错_什么是SQL函数?为什么使用SQL函数可能会带来问题?...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。