日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql round 0.1111_听说Mysql你很豪横?-------------分分钟带你玩转SQL高级查询语句(库函数,存储过程)...

發(fā)布時間:2025/3/15 数据库 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql round 0.1111_听说Mysql你很豪横?-------------分分钟带你玩转SQL高级查询语句(库函数,存储过程)... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一 、數(shù)據(jù)庫函數(shù)

MySQL 數(shù)據(jù)庫函數(shù)提供了能夠?qū)崿F(xiàn)各種功能的方法,使我們在查詢記錄時能夠更高效的輸出。MySQL 內(nèi)建了很多函數(shù),常用的包括數(shù)學(xué)函數(shù)、聚合函數(shù)、字符串函數(shù)和日期時間函數(shù)。

1 數(shù)學(xué)函數(shù)

數(shù)據(jù)庫內(nèi)存儲的記錄,經(jīng)常要進行一系列的算術(shù)操作,所以 MySQL 支持很多數(shù)學(xué)函數(shù)。常用的數(shù)學(xué)函數(shù)如表 所示。

表 MySQL 數(shù)學(xué)函數(shù)

(2) Abs(x) 返回x 的絕對值

mysql> select abs(-3),(3.23),(0);

+---------+------+---+

| abs(-3) | 3.23 | 0 |

+---------+------+---+

| 3 | 3.23 | 0 |

+---------+------+---+

1 row in set (0.00 sec)

(2)Rand() 返回 0 到 1 的隨機數(shù)

mysql> select rand();

+--------------------+

| rand() |

+--------------------+

| 0.5349133028973949 |

+--------------------+

1 row in set (0.01 sec)

mysql> select rand();

+--------------------+

| rand() |

+--------------------+

| 0.7889129741014103 |

+--------------------+

1 row in set (0.00 sec)

(3)、取余 mod (x,y)

mysql> select mod(23,3);

+-----------+

| mod(23,3) |

+-----------+

| 2 |

+-----------+

1 row in set (0.00 sec)

mysql> select mod(24,3);

+-----------+

| mod(24,3) |

+-----------+

| 0 |

+-----------+

1 row in set (0.00 sec)

(4) 、指數(shù)冪 power(x,y)( 基數(shù),指數(shù)) 返回 x 的 y 次方

mysql> select power(3,2);

+------------+

| power(3,2) |

+------------+

| 9 |

+------------+

1 row in set (0.00 sec)

mysql> select power(3,0);

+------------+

| power(3,0) |

+------------+

| 1 |

+------------+

1 row in set (0.00 sec)

mysql> select power(3,-2);

+--------------------+

| power(3,-2) |

+--------------------+

| 0.1111111111111111 |

+--------------------+

1 row in set (0.00 sec)

(5) round (x,y) 保留x 的y 位小數(shù)四舍五入后的值

mysql> select round(4.356,2); '保留兩位 四舍五入看第三位'

+----------------+

| round(4.356,2) |

+----------------+

| 4.36 |

+----------------+

1 row in set (0.00 sec)

(6)Sqrt(x) 返回x 的平方根

mysql> select sqrt(9);

+---------+

| sqrt(9) |

+---------+

| 3 |

+---------+

1 row in set (0.00 sec)

mysql> select sqrt(3);

+--------------------+

| sqrt(3) |

+--------------------+

| 1.7320508075688772 |

+--------------------+

1 row in set (0.00 sec)

mysql> select sqrt(-3);

+----------+

| sqrt(-3) |

+----------+

| NULL |

+----------+

1 row in set (0.00 sec)

(7)Truncate(x,y)返回數(shù)字x截斷為y位小數(shù)的值

mysql> select truncate(3.1415926,3);

+-----------------------+

| truncate(3.1415926,3) |

+-----------------------+

| 3.141 |

+-----------------------+

1 row in set (0.00 sec)

mysql> select truncate(3.1415926,0);

+-----------------------+

| truncate(3.1415926,0) |

+-----------------------+

| 3 |

+-----------------------+

1 row in set (0.00 sec)

mysql> select truncate(3.1415926,-1);

+------------------------+

| truncate(3.1415926,-1) |

+------------------------+

| 0 |

+------------------------+

1 row in set (0.00 sec)

(8)取整 Ceil(x) 返回大于或等于x的最小整數(shù)

Ceil(x)返回大于或等于x的最小整數(shù)

Ceil 向上取整

mysql> select ceil(1.4);

+-----------+

| ceil(1.4) |

+-----------+

| 2 |

+-----------+

1 row in set (0.00 sec)

mysql> select ceil(-1);

+----------+

| ceil(-1) |

+----------+

| -1 |

+----------+

1 row in set (0.00 sec)

mysql> select ceil(-2.1);

+------------+

| ceil(-2.1) |

+------------+

| -2 |

+------------+

1 row in set (0.00 sec)

(9)Floor(x)返回小于或等于x的最小整數(shù)

Floor 向下取整

mysql> select floor(1.09);

+-------------+

| floor(1.09) |

+-------------+

| 1 |

+-------------+

1 row in set (0.00 sec)

mysql> select floor(-2.1);

+-------------+

| floor(-2.1) |

+-------------+

| -3 |

+-------------+

1 row in set (0.00 sec)

(10)返回集合中取最大值 greatest()

mysql> select greatest (10,20,30);

+---------------------+

| greatest (10,20,30) |

+---------------------+

| 30 |

+---------------------+

1 row in set (0.00 sec)

(11)返回集合中取最小值least()

mysql> select least(10,20,30);

+-----------------+

| least(10,20,30) |

+-----------------+

| 10 |

+-----------------+

1 row in set (0.00 sec)

2、聚合函數(shù)

MySQL 數(shù)據(jù)庫函數(shù)中專門有一組函數(shù)是特意為庫內(nèi)記錄求和或者對表中的數(shù)據(jù)進行集中概括而設(shè)計的,這些函數(shù)被稱作聚合函數(shù)。常見的聚合函數(shù)如表 5-8 所示。

表 MySQL 聚合函數(shù)

例如,MySQL 聚合函數(shù)的使用方法,具體操作如下所示。

(1) count()統(tǒng)計相同字段個數(shù)

聚合函數(shù)中最常用到的是 count()函數(shù),用于統(tǒng)計表中的總記錄數(shù)。、

統(tǒng)計年齡大于23的人數(shù)

mysql> select count(name) from zhu where age>23;

+-------------+

| count(name) |

+-------------+

| 5 |

+-------------+

1 row in set (0.00 sec)

(2) 選出age字段的最小值min

查詢表中最小年紀的

mysql> select min(age) from zhu;

+----------+

| min(age) |

+----------+

| 20 |

+----------+

1 row in set (0.00 sec)

(3)選出age字段的最大值max

mysql> select max(age) from zhu;

+----------+

| max(age) |

+----------+

| 28 |

+----------+

1 row in set (0.00 sec)

(4)求age平均值avg

mysql> select avg(age) from zhu;

+----------+

| avg(age) |

+----------+

| 24.2857 |

+----------+

1 row in set (0.00 sec)

(5)統(tǒng)計age 字段的所有記錄的和sum

mysql> select sum(age) from zhu;

±---------+

| sum(age) |

±---------+

| 170 |

±---------+

1 row in set (0.00 sec)

3、 字符串函數(shù)

常用函數(shù)不僅包括數(shù)學(xué)函數(shù)和聚合函數(shù),還包含字符串函數(shù),MySQL 為字符串的相關(guān)操作設(shè)計了豐富的字符串函數(shù)。常用的字符串函數(shù)如表 5-9 所示。

表 MySQL 字符串函數(shù)

MySQL 字符串函數(shù)的使用方法,具體操作如下所示。

length(x)返回字符串x的長度

中文占用三個字節(jié)長度

(1)統(tǒng)計字符串的長度,空格也算 lengh

mysql> select length('ab c');

+----------------+

| length('ab c') |

+----------------+

| 4 |

+----------------+

1 row in set (0.00 sec)

mysql> select length('尚');

+---------------+

| length('尚') |

+---------------+

| 3 |

+---------------+

1 row in set (0.00 sec)

(2) 過濾兩邊空格,不能過濾中間空格 trim

mysql> select trim( 'addf' );

+-------------------+

| trim( 'addf' ) |

+-------------------+

| addf |

+-------------------+

1 row in set (0.00 sec)

mysql> select trim( 'ad df' );

+------------------------+

| trim( 'ad df' ) |

+------------------------+

| ad df |

+------------------------+

1 row in set (0.00 sec)

(3) Concat (x,y)將提供參數(shù)的 x,y 拼成一個字符串

mysql> select concat('abc',' def');

+----------------------+

| concat('abc',' def') |

+----------------------+

| abc def |

+----------------------+

1 row in set (0.00 sec)

mysql> select concat('abc',trim(' bdqn'));

+-----------------------------+

| concat('abc',trim(' bdqn')) |

+-----------------------------+

| abcbdqn |

+-----------------------------+

(4)upper(x)將字符串x的所有字母變成大寫字母

mysql> select upper('abc');

+--------------+

| upper('abc') |

+--------------+

| ABC |

+--------------+

1 row in set (0.00 sec)

(5)lower(x)將字符串x的所有字母變成小寫字母

mysql> select lower('ABC');

+--------------+

| lower('ABC') |

+--------------+

| abc |

+--------------+

1 row in set (0.00 sec)

(6) right(x,y)返回字符串x的后y個字符

mysql> select right('abcdefg',3);

+--------------------+

| right('abcdefg',3) |

+--------------------+

| efg |

+--------------------+

1 row in set (0.00 sec)

(7)left(x,y)返回字符串x的前y個字符

mysql> select left('abcdefg',3);

+-------------------+

| left('abcdefg',3) |

+-------------------+

| abc |

+-------------------+

1 row in set (0.00 sec)

4、 日期時間函數(shù)

MySQL 也支持日期時間處理,提供了很多處理日期和時間的函數(shù)。一些常用的日期時間函數(shù)如表 5-10 所示。

表 日期時間函數(shù)

例如,MySQL 日期時間函數(shù)的使用方法,具體操作如下所示。

(1)日期

Database changed

mysql> select curdate();

+------------+

| curdate() |

+------------+

| 2020-08-30 |

+------------+

1 row in set (0.00 sec)

(2)分時秒

mysql> select curtime();

+-----------+

| curtime() |

+-----------+

| 08:43:21 |

+-----------+

1 row in set (0.00 sec)

)

(3) 全顯示

mysql> select now();

+---------------------+

| now() |

+---------------------+

| 2020-08-30 08:44:58 |

+---------------------+

1 row in set (0.01 sec)

(4) 顯示月份

mysql> select month('2020-08-25');

+---------------------+

| month('2020-08-25') |

+---------------------+

| 8 |

+---------------------+

1 row in set (0.00 sec)

(5)一年中第幾個星期

mysql> select week('2020-08-25') ;

+--------------------+

| week('2020-08-25') |

+--------------------+

| 34 |

+--------------------+

1 row in set (0.00 sec)

(6)返回小時值

mysql> select hour(curtime()) ;

+-----------------+

| hour(curtime()) |

+-----------------+

| 8 |

+-----------------+

1 row in set (0.00 sec)

(7)獲取里面的時間

mysql> select hour(now()) ;

+-------------+

| hour(now()) |

+-------------+

| 8 |

+-------------+

1 row in set (0.00 sec)

(8)獲取里面的分鐘

mysql> select minute(now()) ;

+---------------+

| minute(now()) |

+---------------+

| 49 |

+---------------+

1 row in set (0.00 sec)

(9) 獲取里面的返回秒值

mysql> select second(now()) ;

+---------------+

| second(now()) |

+---------------+

| 23 |

+---------------+

1 row in set (0.00 sec)

(10)一星期的第幾天 周日是第一天

mysql> select dayofweek(now());

+------------------+

| dayofweek(now()) |

+------------------+

| 1 |

+------------------+

1 row in set (0.00 sec)

(11)計算日期是一年的第幾天

mysql> select dayofyear(now());

+------------------+

| dayofyear(now()) |

+------------------+

| 243 |

+------------------+

1 row in set (0.00 sec)

(12)計算日期是本月的第幾天

mysql> select dayofmonth(now());

+-------------------+

| dayofmonth(now()) |

+-------------------+

| 30 |

+-------------------+

1 row in set (0.00 sec)

因為 MySQL 函數(shù)的數(shù)量比較多,存在很多使用頻率不是很高的函數(shù),所以本章僅列舉了一些具有代表性、比較常用的函數(shù)。在實際的工作中,需要什么類型和功能的函數(shù)可以通 過手冊去查找,了解實際功能后再使用。

二、存儲過程

1、簡介

MySQL 5.0 版本開始支持存儲過程。

存儲過程(Stored Procedure)是一種在數(shù)據(jù)庫中存儲復(fù)雜程序,以便外部程序調(diào)用的一種數(shù)據(jù)庫對象。

存儲過程是為了完成特定功能的SQL語句集,經(jīng)編譯創(chuàng)建并保存在數(shù)據(jù)庫中,用戶可通過指定存儲過程的名字并給定參數(shù)(需要時)來調(diào)用執(zhí)行。

存儲過程思想上很簡單,就是數(shù)據(jù)庫 SQL 語言層面的代碼封裝與重用。

(1)優(yōu)點

存儲過程可封裝,并隱藏復(fù)雜的商業(yè)邏輯。

存儲過程可以回傳值,并可以接受參數(shù)。

存儲過程無法使用 SELECT 指令來運行,因為它是子程序,與查看表,數(shù)據(jù)表或用戶定義函數(shù)不同。

存儲過程可以用在數(shù)據(jù)檢驗,強制實行商業(yè)邏輯等。

(2)缺點

存儲過程,往往定制化于特定的數(shù)據(jù)庫上,因為支持的編程語言不同。當(dāng)切換到其他廠商的數(shù)據(jù)庫系統(tǒng)時,需要重寫原有的存儲過程。

存儲過程的性能調(diào)校與撰寫,受限于各種數(shù)據(jù)庫系統(tǒng)。

2、具體操作

(1)具體格式如下

(2)創(chuàng)建一個存儲過程

mysql> delimiter $$

mysql> create procedure MYSQL()

-> begin

-> select name,age from zhu;

-> end $$

Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ; '結(jié)束的時候加空格'

(2)查詢

通過存儲過程查詢 info 表中某一條記錄,存儲過程是帶參數(shù)的,具體操作如下所示。

mysql> show procedure status where db='dog'; '這里要指向庫的名字 而不是表的名字'

+-----+-------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+

| Db | Name | Type | Definer | Modified | Created | Security_type | Comment | character_set_client | collation_connection | Database Collation |

+-----+-------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+

| dog | MYSQL | PROCEDURE | root@localhost | 2020-08-30 09:14:55 | 2020-08-30 09:14:55 | DEFINER | | utf8 | utf8_general_ci | utf8_general_ci |

+-----+-------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+

1 row in set (0.00 sec)

(3)使用

mysql> call MYSQL();

+----------+-----+

| name | age |

+----------+-----+

| gousehng | 24 |

| goupeng | 28 |

| ergouzi | 27 |

| gouyan | 23 |

| goushi | 24 |

| gougou | 24 |

| gouduzi | 20 |

+----------+-----+

7 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

(4) 創(chuàng)建查看指定用戶信息(傳參)

mysql> delimiter $$

mysql> create procedure mytest(in my_name varchar(10))

-> begin

-> select name,score from info where name=my_name;

-> end$$

Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql> show procedure status where db='school';

+--------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+

| Db | Name | Type | Definer | Modified | Created | Security_type | Comment | character_set_client | collation_connection | DatabaseCollation |

+--------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+

| school | MyRole | PROCEDURE | root@localhost | 2020-08-25 05:30:12 | 2020-08-25 05:30:12 | DEFINER | | utf8 | utf8_general_ci | utf8_general_ci |

| school | mytest | PROCEDURE | root@localhost | 2020-08-25 08:00:30 | 2020-08-25 08:00:30 | DEFINER | | utf8 | utf8_general_ci | utf8_general_ci |

+--------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+

2 rows in set (0.00 sec)

傳參數(shù)進去,進行查詢

mysql> call mytest('zhangsan');

Empty set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> call mytest('lisi');

+------+-------+

| name | score |

+------+-------+

| lisi | 98.00 |

+------+-------+

1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

(5) 修改存儲過程

存儲過程在創(chuàng)建之后,隨著開發(fā)業(yè)務(wù)的不斷推進,業(yè)務(wù)需求難免有所調(diào)整,相應(yīng)的存儲 過程也會發(fā)生變動,這個時候就需要修改存儲過程。存儲過程的修改分為特征的修改和業(yè)務(wù) 內(nèi)容的修改。特征的修改可以使用 ALTER PROCEDURE 來實現(xiàn),其語法結(jié)構(gòu)如下所示。

語法格式

ALTER {PROCEDURE | FUNCTION} sp_name [characteristic……]

參數(shù)說明

Sp_name,表示存儲過程或函數(shù)的名稱

characteristic,表示要修改存儲過程的哪個部分

Characteristic的取值如下

CONTAINS SQL,表示子程序包含SQL語句,但是,不包含讀或?qū)憯?shù)據(jù)的語句

NO SQL,表示子程序中,不包含SQL語句

READS SQL DATA,表示子程序中,包含讀數(shù)據(jù)的語句

MODIFIES DATA,表示子程序中,包含寫數(shù)據(jù)的語句

SQL SECURITY {DEFINER | INVOKER},指明誰有權(quán)限來執(zhí)行

DEFINER,表示只有定義者,自己才能夠執(zhí)行

INVOKER,表示調(diào)用者可以執(zhí)行

COMMENT’string’,表示注釋信息

ALTER PROCEDURE [ …]

修改存儲過程 mytest 的定義

將讀寫權(quán)限,改為MODIFIES SQL DATA,并指明調(diào)用者可以執(zhí)行

mysql> alter procedure mytest

-> modifies sql data

-> sql security INVOKER;

Query OK, 0 rows affected (0.00 sec)

存儲過程內(nèi)容的修改方法是通過刪除原有存儲過程,之后再以相同的名稱創(chuàng)建新的存儲 過程。

(6) 刪除存儲過程

存儲過程創(chuàng)建之時是存儲到 MySQL 數(shù)據(jù)庫中的,當(dāng)程序不在調(diào)用這個存儲過程時,也就意味這個存儲過程被廢棄了,廢棄的存儲過程需要從數(shù)據(jù)庫中將其刪除。使用 DROP PROCEDURE 語句即可刪除存儲過程,其語法格式具體如下。

DROP { PROCEDURE | FUNCTION } [IF EXISTS]

從以上語法結(jié)構(gòu)可以看出,在刪除時存儲過程的名字是放到最后的,前面可以添加 IF EXISTS 這個關(guān)鍵字,其主要作用是防止因刪除不存在的存儲過程而引發(fā)的錯誤。刪除存儲過程的具體操作如下所示。

mysql> drop procedure MyRole;

Query OK, 0 rows affected (0.00 sec)

需要注意的是:存儲過程名稱后面沒有參數(shù)列表,也沒有括號。在刪除之前,必須確認 該存儲過程沒有任何依賴關(guān)系,否則會導(dǎo)致與之關(guān)聯(lián)的存儲過程無法運行。

總結(jié)

以上是生活随笔為你收集整理的mysql round 0.1111_听说Mysql你很豪横?-------------分分钟带你玩转SQL高级查询语句(库函数,存储过程)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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