MySQL中組合字段之concat()
1、簡(jiǎn)介
MySQL
是關(guān)系型數(shù)據(jù)庫(kù),我們?cè)谑褂玫臅r(shí)候往往會(huì)將對(duì)象的屬性映射成列存儲(chǔ)在表中,因此查詢的到的結(jié)果在不做任何處理的情況下,也是一個(gè)個(gè)單獨(dú)的屬性;如果我們希望在MySQL
中查詢返回的結(jié)果集,能夠?qū)⒍鄠€(gè)字段(列)的值組合起來(lái)返回、或者經(jīng)過(guò)特定的計(jì)算后再返回,就可以使用MySQL
提供的字段計(jì)算功能。
字段計(jì)算經(jīng)常會(huì)用到如下兩種:
- 字段拼接
- 字段執(zhí)行算術(shù)計(jì)算
2、正文
MySQL
中實(shí)現(xiàn)的字段組合都可以在客戶機(jī)中完成,但是直接在MySQL
服務(wù)器中實(shí)現(xiàn)字段組合會(huì)比客戶機(jī)速度更快。
2.1 字段拼接
準(zhǔn)備一張user表,插入幾條數(shù)據(jù),如下所示:
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵', `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用戶名', `nation` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '民族', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES (1, '李子捌', '漢族'); INSERT INTO `user` VALUES (2, '張三', '回族'); INSERT INTO `user` VALUES (3, '李四', '維吾爾族'); INSERT INTO `user` VALUES (4, '王五', '蒙古族'); SET FOREIGN_KEY_CHECKS = 1;
需求:
獲取用戶的姓名和民族組合信息
語(yǔ)句:
mysql> select concat(name, '(',nation, ')') from user; +---------------------------------+ | concat(name, '(',nation, ')') | +---------------------------------+ | 李子捌(漢族) | | 張三(回族) | | 李四(維吾爾族) | | 王五(蒙古族) | +---------------------------------+
解析:
這里使用了concat()
函數(shù),函數(shù)中可以組合任意多個(gè)元素,這些元素可以是表字段、固定字符等,元素之間使用,分隔,組合的順序和concat()
函數(shù)中字符的順序一致。
關(guān)于組合之后的字段名問(wèn)題?
細(xì)心的小伙伴發(fā)現(xiàn)組合之后的字段名使用的是concat()
函數(shù)的整個(gè)函數(shù)體,顯然這種顯示不是我們想要的呀!如果想要指定自己想要的字段名,只需要使用別名即可!
mysql> select concat(name, '(',nation, ')') as user_message from user; +------------------+ | user_message | +------------------+ | 李子捌(漢族) | | 張三(回族) | | 李四(維吾爾族) | | 王五(蒙古族) | +------------------+
別名的用法就是使用as
,后面緊跟著的就是你想要指定的字段名。
2.2 字段執(zhí)行算術(shù)計(jì)算
組合字段我們往往不只是簡(jiǎn)單的字符串拼接,可能會(huì)涉及到字段與字段之間的算術(shù)預(yù)算,此時(shí)我們就需要使用到MySQL
中的算術(shù)操作符。
MySQL提供了加減乘除操作符如下所示:
操作符 | 說(shuō)明 |
---|---|
+ | 加 |
- | 減 |
* | 乘 |
/ |
準(zhǔn)備一張product表,插入幾條數(shù)據(jù),如下所示:
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for product -- ---------------------------- DROP TABLE IF EXISTS `product`; CREATE TABLE `product` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵', `product_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '產(chǎn)品名稱', `price` decimal(10, 2) UNSIGNED NOT NULL COMMENT '產(chǎn)品價(jià)格', `number` int(11) NOT NULL COMMENT '產(chǎn)品數(shù)量', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of product -- ---------------------------- INSERT INTO `product` VALUES (1, 'Apple iPhone 13 (A2634)', 6799.00, 22); INSERT INTO `product` VALUES (2, 'HUAWEI P50 Pro', 6488.00, 88); INSERT INTO `product` VALUES (3, 'MIX4', 4999.00, 30); INSERT INTO `product` VALUES (4, 'OPPO Find X3', 3999.00, 15); INSERT INTO `product` VALUES (5, 'vivo X70 Pro+', 5999.00, 27); SET FOREIGN_KEY_CHECKS = 1;
需求:
查詢目前庫(kù)存產(chǎn)品總值
語(yǔ)句:
mysql> select product_name, concat(price * number) as gross_value from product; +-------------------------+-------------+ | product_name | gross_value | +-------------------------+-------------+ | Apple iPhone 13 (A2634) | 149578.00 | | HUAWEI P50 Pro | 570944.00 | | MIX4 | 149970.00 | | OPPO Find X3 | 59985.00 | | vivo X70 Pro+ | 161973.00 | +-------------------------+-------------+
運(yùn)算符順序問(wèn)題:
MySQL
中運(yùn)算符也是有順序的,和普通運(yùn)算符運(yùn)算順序一樣, (* / ) > (+ -)
,如果在使用組合運(yùn)算符時(shí)一定要注意運(yùn)算符的順序,合理使用()可以約束運(yùn)算符的執(zhí)行順序。
示例:
mysql> select concat(12 - 3 * 4); +--------------------+ | concat(12 - 3 * 4) | +--------------------+ | 0 | +--------------------+ 1 row in set (0.00 sec) mysql> select concat((12 - 3) * 4); +----------------------+ | concat((12 - 3) * 4) | +----------------------+ | 36 | +----------------------+ 1 row in set (0.00 sec)
值得注意的是MySQL
中,被除數(shù)為0,并不會(huì)拋出異常,但是會(huì)返回NULL
,這是MySQL
內(nèi)部對(duì)運(yùn)算做了異常處理。
mysql> select concat(12 / 0); +----------------+ | concat(12 / 0) | +----------------+ | NULL | +----------------+ 1 row in set, 1 warning (0.00 sec)
到此這篇關(guān)于MySQL中組合字段之concat()
的文章就介紹到這了,更多相關(guān)MySQL中組合字段concat()
內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
CentOS 7下MySQL服務(wù)啟動(dòng)失敗的快速解決方法
CentOS 7下MySQL服務(wù)啟動(dòng)失敗怎么辦?下面小編就為大家?guī)?lái)一篇CentOS 7下MySQL服務(wù)啟動(dòng)失敗的快速解決方法?,F(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-03-03MySQL外鍵級(jí)聯(lián)的實(shí)現(xiàn)
本文主要介紹了MySQL外鍵級(jí)聯(lián)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07MySQL8.0/8.x忘記密碼更改root密碼的實(shí)戰(zhàn)步驟(親測(cè)有效!)
忘記root密碼的場(chǎng)景還是比較常見(jiàn)的,特別是自己搭的測(cè)試環(huán)境經(jīng)過(guò)好久沒(méi)用過(guò)時(shí),很容易記不得當(dāng)時(shí)設(shè)置的密碼,下面這篇文章主要給大家介紹了關(guān)于MySQL8.0/8.x忘記密碼更改root密碼的實(shí)戰(zhàn)步驟,親測(cè)有效!需要的朋友可以參考下2023-04-04SQL Server 數(shù)據(jù)庫(kù)的備份詳細(xì)介紹及注意事項(xiàng)
這篇文章主要介紹了SQL Server 備份詳細(xì)介紹及注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下2016-12-12Mysql性能優(yōu)化案例研究-覆蓋索引和SQL_NO_CACHE
這篇文章主要介紹了Mysql性能優(yōu)化案例研究-覆蓋索引和SQL_NO_CACHE,需要的朋友可以參考下2016-03-03MySQL字符集 GBK、GB2312、UTF8區(qū)別 解決MYSQL中文亂碼問(wèn)題
MYSQL中文亂碼問(wèn)題原因有很多,腳本之家以前發(fā)布過(guò)很多相關(guān)文章,這篇文章介紹mysql相關(guān)的一些知識(shí)更詳細(xì)2012-08-08window10系統(tǒng)下mysql5.7安裝審計(jì)插件(親測(cè)有用)
mysql有沒(méi)oracle這樣的審計(jì)功能,突然想在mysql做審計(jì)怎么辦,下面帶大家從零開(kāi)始給mysql安裝審計(jì)插件,親測(cè)絕對(duì)可用哦,需要的朋友可以參考下2022-09-09MySQL count(1)、count(*)、count(字段)的區(qū)別
COUNT在數(shù)據(jù)庫(kù)行數(shù)統(tǒng)計(jì)中被廣泛使用,那么你知道MySQL count(1)、count(*)、count(字段)的區(qū)別嗎,本文就想的介紹一下,感興趣的可以了解一下2021-12-12