目录
- 1、简介
- 2、正文
- 2.1 字段拼接
- 2.2 字段执行算术计算
1、简介
mysql
是关系型数据库,我们在使用的时候往往会将对象的属性映射成列存储在表中,因此查询的到的结果在不做任何处理的情况下,也是一个个单独的属性;如果我们希望在mysql
中查询返回的结果集,能够将多个字段(列)的值组合起来返回、或者经过特定的计算后再返回,就可以使用mysql
提供的字段计算功能。
字段计算经常会用到如下两种:
- 字段拼接
- 字段执行算术计算
2、正文
mysql
中实现的字段组合都可以在客户机中完成,但是直接在mysql
服务器中实现字段组合会比客户机速度更快。
2.1 字段拼接
准备一张user表,插入几条数据,如下所示:
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;
需求:
获取用户的姓名和民族组合信息
语句:
mysql> select concat(name, '(',nation, ')') from user; +---------------------------------+ | concat(name, '(',nation, ')') | +---------------------------------+ | 李子捌(汉族) | | 张三(回族) | | 李四(维吾尔族) | | 王五(蒙古族) | +---------------------------------+
解析:
这里使用了concat()
函数,函数中可以组合任意多个元素,这些元素可以是表字段、固定字符等,元素之间使用,分隔,组合的顺序和concat()
函数中字符的顺序一致。
关于组合之后的字段名问题?
细心的小伙伴发现组合之后的字段名使用的是concat()
函数的整个函数体,显然这种显示不是我们想要的呀!如果想要指定自己想要的字段名,只需要使用别名即可!
mysql> select concat(name, '(',nation, ')') as user_message from user; +------------------+ | user_message | +------------------+ | 李子捌(汉族) | | 张三(回族) | | 李四(维吾尔族) | | 王五(蒙古族) | +------------------+
别名的用法就是使用as
,后面紧跟着的就是你想要指定的字段名。
2.2 字段执行算术计算
组合字段我们往往不只是简单的字符串拼接,可能会涉及到字段与字段之间的算术预算,此时我们就需要使用到mysql
中的算术操作符。
mysql提供了加减乘除操作符如下所示:
操作符 | 说明 |
---|---|
+ | 加 |
– | 减 |
* | 乘 |
/ |
准备一张product表,插入几条数据,如下所示:
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 '产品名称', `price` decimal(10, 2) unsigned not null comment '产品价格', `number` int(11) not null comment '产品数量', 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;
需求:
查询目前库存产品总值
语句:
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 | +-------------------------+-------------+
运算符顺序问题:
mysql
中运算符也是有顺序的,和普通运算符运算顺序一样, (* / ) > (+ -)
,如果在使用组合运算符时一定要注意运算符的顺序,合理使用()可以约束运算符的执行顺序。
示例:
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
中,被除数为0,并不会抛出异常,但是会返回null
,这是mysql
内部对运算做了异常处理。
mysql> select concat(12 / 0); +----------------+ | concat(12 / 0) | +----------------+ | null | +----------------+ 1 row in set, 1 warning (0.00 sec)
到此这篇关于mysql中组合字段之concat()
的文章就介绍到这了,更多相关mysql中组合字段concat()
内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!