whyyouhitme_
2018-07-20 07:59
采纳率: 65.7%
浏览 1.4k

Mysql这些语句是什么意思?

根据select的语法,select后跟“列”,那么select teacher_name,是从teacher_name列寻找记录,那么对于select concat(teacher_name,'x')
我的理解是从teacher_name和‘x’字符串拼接的这一列(即teacher_namex)寻找记录。能不能举个例子。不太理解。比如建表的时候,为什么要建teacher_namex这一列,既然有这一列,为什么不是直接select teacher_namex?
select teacher_id+5,这句是从teacher_id后的第五列寻找记录的意思吗?
select concat(teacher_id,teacher_name),这又是什么意思呢?从“teacher_idteacher_name”这里一列寻找记录吗?因为书上介绍说concat函数是拼接字符串的函数,所以teacher_idteacher_name”是一个拼接后的字符串作为列名?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

15条回答 默认 最新

  • yqangiao_will 2018-07-21 03:37
    已采纳
       楼主可能理解有偏差,concat(teacher_name,'x')  这里面的'x' 是带引号的,他并不能代表数据库中所谓的  'x' 这一列,他只是一个字符串;而teacher_name 
    

    这是数据空中的一列,所以 concat(teacher_name,'x') 这整个意思是 查出数据库中teacher_name 这一列的值后 在后面拼上'x' 这个字符串,而不是你
    理解的他查的是 teacher_namex 这列的值.
    同样的select teacher_id+5 并不是teacher_id 后的第五列寻找记录的意思,而是有几种情况,就目前来说你的 teacher_id 应该是数值类型,那么这种
    最好理解,就是查出teacher_id的值之后加上5 ,但如果假如你teacher_id的值是字符类型的,那么他没法相加,你查出的这列的值就是5,但是也有个列外
    就是如果查到的这个字符串前面是数字开头的,比如是: "2008年xxxx" ,那么 这个查到的值就是 2013;
    最后一个问题,concat(teacher_id,teacher_name) 和第一个问题是一样的, concat(teacher_id,teacher_name) 的意思不是说最后查的是
    teacher_idteacher_name 这个列,而是查出 teacher_id 这列和对应teacher_name列的值之后再拼接在一起.

    你要注意的是teacher_id 和teacher_name这两个并不是字符串,而是两个列名,他们没有加引号引起来,如果是字符串,他们应该是加引号的.
    第一次回答,写的有点乱,希望能解决楼主的疑惑,忘楼主采纳

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • SQL CONCAT函数实例代码教程 - SQL CONCAT函数用于将两个字符串连接起来,形成一个单一的字符串。

    SQL CONCAT函数用于将两个字符串连接起来,形成一个单一的字符串。试试下面的例子:

    SQL> SELECT CONCAT('FIRST ', 'SECOND');
    +----------------------------+
    | CONCAT('FIRST ', 'SECOND') |
    +----------------------------+
    | FIRST SECOND |
    +----------------------------+
    1 row in set (0.00 sec)
    想要更详细了解CONCAT函数,考虑EMPLOYEE_TBL的表具有以下记录:

    SQL> SELECT * FROM employee_tbl;
    +------+------+------------+--------------------+
    | id | name | work_date | daily_typing_pages |
    +------+------+------------+--------------------+
    | 1 | John | 2007-01-24 | 250 |
    | 2 | Ram | 2007-05-27 | 220 |
    | 3 | Jack | 2007-05-06 | 170 |
    | 3 | Jack | 2007-04-06 | 100 |
    | 4 | Jill | 2007-04-06 | 220 |
    | 5 | Zara | 2007-06-06 | 300 |
    | 5 | Zara | 2007-02-06 | 350 |
    +------+------+------------+--------------------+
    7 rows in set (0.00 sec)
    现在,假设根据上述表要连接名员工ID和work_date,那么你可以使用下面的命令:

    SQL> SELECT CONCAT(id, name, work_date)
    -> FROM employee_tbl;
    +-----------------------------+
    | CONCAT(id, name, work_date) |
    +-----------------------------+
    | 1John2007-01-24 |
    | 2Ram2007-05-27 |
    | 3Jack2007-05-06 |
    | 3Jack2007-04-06 |
    | 4Jill2007-04-06 |
    | 5Zara2007-06-06 |
    | 5Zara2007-02-06 |
    +-----------------------------+
    7 rows in set (0.00 sec)
    MySQL中concat_ws函数 使用方法: CONCAT_WS(separator,str1,str2,...)

    CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。 注意: 如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。

    如连接后以逗号分隔 mysql> select concat_ws(',','11','22','33');

    +-------------------------------+ | concat_ws(',','11','22','33') | +-------------------------------+ | 11,22,33 | +-------------------------------+ 1 row in set (0.00 sec)

    和MySQL中concat函数不同的是, concat_ws函数在执行的时候,不会因为NULL值而返回NULL mysql> select concat_ws(',','11','22',NULL); +-------------------------------+ | concat_ws(',','11','22',NULL) | +-------------------------------+ | 11,22 | +-------------------------------+ 1 row in set (0.00 sec)

    MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

    基本查询

    mysql> select * from aa; +------+------+ | id| name | +------+------+ |1 | 10| |1 | 20| |1 | 20| |2 | 20| |3 | 200 | |3 | 500 | +------+------+ 6 rows in set (0.00 sec)

    以id分组,把name字段的值打印在一行,逗号分隔(默认)

    mysql> select id,group_concat(name) from aa group by id; +------+--------------------+ | id| group_concat(name) | +------+--------------------+ |1 | 10,20,20| |2 | 20 | |3 | 200,500| +------+--------------------+ 3 rows in set (0.00 sec)

    以id分组,把name字段的值打印在一行,分号分隔

    mysql> select id,group_concat(name separator ';') from aa group by id; +------+----------------------------------+ | id| group_concat(name separator ';') | +------+----------------------------------+ |1 | 10;20;20 | |2 | 20| |3 | 200;500 | +------+----------------------------------+ 3 rows in set (0.00 sec)

    以id分组,把去冗余的name字段的值打印在一行,

    逗号分隔

    mysql> select id,group_concat(distinct name) from aa group by id; +------+-----------------------------+ | id| group_concat(distinct name) | +------+-----------------------------+ |1 | 10,20| |2 | 20 | |3 | 200,500 | +------+-----------------------------+ 3 rows in set (0.00 sec)

    以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序

    mysql> select id,group_concat(name order by name desc) from aa group by id; +------+---------------------------------------+ | id| group_concat(name order by name desc) | +------+---------------------------------------+ |1 | 20,20,10 | |2 | 20| |3 | 500,200| +------+---------------------------------------+ 3 rows in set (0.00 sec)

    repeat()函数

    用来复制字符串,如下'ab'表示要复制的字符串,2表示复制的份数
    
    mysql> select repeat('ab',2);
    
    +----------------+ | repeat('ab',2) | +----------------+ | abab           | +----------------+
    

    1 row in set (0.00 sec)

    又如 mysql> select repeat('a',2);

    +---------------+ | repeat('a',2) | +---------------+ | aa            | +---------------+ 1 row in set (0.00 sec)
    
    评论
    解决 无用
    打赏 举报
  • threenewbee 2018-07-20 08:25

    select的意思是投影。也就是说将原有的数据的每一行做一个转换,得到一行新的数据。
    也就是 原始数据 可以视作一个集合 SetA
    select 后得到的是一个新的集合 SetB,则select是一个将SetA 映射到 SetB 的函数。

    而max min avg等叫做聚合函数,它们将select得到的集合聚合起来。

    select concat(teacher_name,'x') 后面可以跟一个伪列名,比如 select concat(teacher_name,'x') as teacher_namex
    “列”这个名词在数据库的教材上叫做元组(tuple),比如说一条记录,有2列,id, name, score,那么可以看称是一个三元组。
    为什么是select concat(teacher_name,'x') as teacher_namex,而不是直接把teacher_namex存入数据库,这是因为后者导致teacher_name和teacher_namex两个字段出现重复,造成冗余。

    冗余的数据造成两个不好的后果,一个是浪费存储,一个是如果更改了其中一列,而没有更改另一列,造成数据不一致。

    避免冗余的概念在数据库教材上叫做数据库三大范式。

    select concat(teacher_id,teacher_name)
    假设id是123,name是张三,那么结果是 '123张三'

    评论
    解决 无用
    打赏 举报
  • threenewbee 2018-07-20 08:30

    我们可以用一个实际的业务来理解,id+name似乎没什么用
    但是我们经常将 省、市、区县、门牌 作为独立的字段来存储一个用户的地址。

    那么就有 Select CONCAT('省:',province,'市:',city,'街道',street) as address from 表
    这里province city street三个是数据库的列,而address就是伪列,也就是数据库中并没有叫做“address”的列,但是在查询的结果中有一列叫做address,它的内容就是 xx省xx市xx街道

    评论
    解决 无用
    打赏 举报
  • 海棠花开555 2018-07-20 08:35

    首先楼主需要知道select是什么?select是投影。
    select teacher_name from teacher; 表示的是就是查询teacher表的 teacher_name 属性。简单来说就是把教师表中每一个老师的名字投影出来。
    我这有一张student学生表,我就用它来作为例子吧,表的信息如下
    图片说明

    select concat(teacher_name,'x') from teacher 目的是 把teacher表中的老师的名字后加上一个‘x’投影出来。
    图片说明

    select teacher_id+5 from teacher 就是把teacher表中每一个老师的编号加上5,然后再投影出来
    图片说明

    select concat(teacher_id,teacher_name) from teacher 就是把老师的的编号和名字连成一个字符串 投影出来
    图片说明

    以上操作不会改变你teacher表的数据,列名的话需要你自己指定 关键字是 as
    select concat(teacher_id,teacher_name) as 老师编号和姓名 from teacher

    评论
    解决 无用
    打赏 举报
  • 红色高跟鞋echo 2018-07-20 09:15

    select concat() 拼接字符串

    select concat(teacher_id,teacher_name) 以这个为例,会把老师的id和老师的姓名拼接在一块

    评论
    解决 无用
    打赏 举报
  • qq_36096134 2018-07-20 09:26

    俩个字段拼接成一个字段来表达

    评论
    解决 无用
    打赏 举报
  • jasondyoung 2018-07-20 12:10

    劝退,你这句sql难道是捡来的?所见即理解的东西,还不明白的话,买本mysql从入门到劝退系列的书看看吧。

    评论
    解决 无用
    打赏 举报
  • lzwit666 2018-07-21 03:18

    将原有的数据的每一行做一个转换,得到一行新的数据

    评论
    解决 无用
    打赏 举报
  • MayBen 2018-07-21 03:53

    是为了方便查询
    select concat(teacher_name,'x')
    这里一次性查两个,显示结果会连接起来,且concat表只会显示这两列。

    评论
    解决 无用
    打赏 举报
  • C_stack 2018-07-21 04:36

    了解一下数据库函数的使用

    评论
    解决 无用
    打赏 举报
  • 外滩集市 2018-07-21 04:42

    数据库函数的使用是从teacher_name和‘x’字符串拼接的这一列(即teacher_namex)寻找记录

    评论
    解决 无用
    打赏 举报
  • lopalone 2018-07-21 05:44

    select的意思是投影

    评论
    解决 无用
    打赏 举报
  • huhongli99 2018-07-21 08:39

    数据库函数,concat

    评论
    解决 无用
    打赏 举报
  • sunny~ 2018-07-23 03:28

    这是数据空中的一列,所以 concat(teacher_name,'x') 这整个意思是 查出数据库中teacher_name 这一列的值后 在后面拼上'x' 这个字符串,而不是你
    理解的他查的是 teacher_namex 这列的值.
    同样的select teacher_id+5 并不是teacher_id 后的第五列寻找记录的意思,而是有几种情况,就目前来说你的 teacher_id 应该是数值类型,那么这种
    最好理解,就是查出teacher_id的值之后加上5 ,但如果假如你teacher_id的值是字符类型的,那么他没法相加,你查出的这列的值就是5,但是也有个列外
    就是如果查到的这个字符串前面是数字开头的,比如是: "2008年xxxx" ,那么 这个查到的值就是 2013;
    最后一个问题,concat(teacher_id,teacher_name) 和第一个问题是一样的, concat(teacher_id,teacher_name) 的意思不是说最后查的是
    teacher_idteacher_name 这个列,而是查出 teacher_id 这列和对应teacher_name列的值之后再拼接在一起.

    你要注意的是teacher_id 和teacher_name这两个并不是字符串,而是两个列名,他们没有加引号引起来,如果是字符串,他们应该是加引号的.

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题