前言

本文主要是select语句的使用

学习一下MySQL,一直没有系统的学习一下。最近有空,看了《MySQL基础教程西泽梦路》,简单的做一下笔记。

记录于此,方便自己回忆。

MySQL中对大小写没有区分,我这里习惯性用小些。

正文

我这以Window版的phpstudy软件验证。

需要进入这个目录,才可以使用mysql命令

  1. D:\phpstudy_pro\Extensions\MySQL5.7.26\bin
复制

进入正文

select命令

为了训练select命令,特意新增了一个salary表

  1. # 创建
  2. create table salary(empid varchar(10), sales int , month int);
  3. # 列结构
  4. mysql> desc salary;
  5. +-------+-------------+------+-----+---------+-------+
  6. | Field | Type       | Null | Key | Default | Extra |
  7. +-------+-------------+------+-----+---------+-------+
  8. | empid | varchar(10) | YES |     | NULL   |       |
  9. | sales | int(11)     | YES |     | NULL   |       |
  10. | month | int(11)     | YES |     | NULL   |       |
  11. +-------+-------------+------+-----+---------+-------+
  12. 3 rows in set (0.00 sec)
复制

插入数据略过哈

查询所有数据
  1. select * from salary
复制

*表示不限制,查询所有。

输出结果

  1. mysql> select * from salary
  2. +-------+-------+-------+
  3. | empid | sales | month |
  4. +-------+-------+-------+
  5. | A103 |   101 |     4 |
  6. | A102 |   54 |     5 |
  7. | A104 |   181 |     4 |
  8. | A101 |   184 |     4 |
  9. | A103 |   17 |     5 |
  10. +-------+-------+-------+
  11. 5 rows in set (0.00 sec)
复制
多个条件限制select
  1. select sales,empid from salary;
复制

限定列名查询,查询条件可以一个,也可以多个,多个用[,]分割。

查询sales,empid这两列的数据

  1. mysql> select sales,empid from salary;
  2. +-------+-------+
  3. | sales | empid |
  4. +-------+-------+
  5. |   101 | A103 |
  6. |   54 | A102 |
  7. |   181 | A104 |
  8. |   184 | A101 |
  9. |   17 | A103 |
  10. |   300 | A101 |
  11. |   205 | A102 |
  12. |   93 | A104 |
  13. |   12 | A103 |
  14. |   87 | A107 |
  15. +-------+-------+
  16. 10 rows in set (0.00 sec)
复制

当然,查询列也可以重复,下面

  1. mysql> select sales,empid,sales from salary;
  2. +-------+-------+-------+
  3. | sales | empid | sales |
  4. +-------+-------+-------+
  5. |   101 | A103 |   101 |
  6. |   54 | A102 |   54 |
  7. |   181 | A104 |   181 |
  8. |   184 | A101 |   184 |
  9. |   17 | A103 |   17 |
  10. |   300 | A101 |   300 |
  11. |   205 | A102 |   205 |
  12. |   93 | A104 |   93 |
  13. |   12 | A103 |   12 |
  14. |   87 | A107 |   87 |
  15. +-------+-------+-------+
  16. 10 rows in set (0.00 sec)
复制
使用别名

虽然查询出sales,empid数据,但还是有部分人不太理解,因此为了更多人认识,可以给列加上通俗易懂的名称,也叫别名(alias)。

  1. select 列名 as 别名 from 表名;
复制
  1. mysql> select sales as 销售 from salary;
  2. +--------+
  3. | 销售 |
  4. +--------+
  5. | 101 |
  6. | 54 |
  7. | 181 |
  8. | 184 |
  9. | 17 |
  10. | 300 |
  11. | 205 |
  12. | 93 |
  13. | 12 |
  14. | 87 |
  15. +--------+
  16. 10 rows in set (0.00 sec)
复制

算术运算符

mysql存在如下算术运算符

  1. 运算符 使用示例 含义
  2. + a+b a加上b
  3. - a-b a减去b
  4. * a*b a乘以b
  5. / a/b a除以b
  6. div a div b a除以b,结果取整
  7. %、mod a % b a除以b,取余数
复制

以表中的销售额为例,一般单位是万

因此,展示时乘上10000

  1. mysql> select sales*10000 as 销售 from salary;
  2. +---------+
  3. | 销售 |
  4. +---------+
  5. | 1010000 |
  6. | 540000 |
  7. | 1810000 |
  8. | 1840000 |
  9. | 170000 |
  10. | 3000000 |
  11. | 2050000 |
  12. | 930000 |
  13. | 120000 |
  14. | 870000 |
  15. +---------+
  16. 10 rows in set (0.00 sec)
复制

其他的算术运算符使用类似,这里不过多介绍。

常用函数

传入数据后,函数会执行指定的处理并返回结果

计算相关函数
  1. select 函数名(支持计算的列名) from 表名;
复制

比如,

  1. avg()计算平均值

  2. sum()计算总和等

  3. count()计算个数

  1. mysql> select avg(sales) from salary;
  2. +------------+
  3. | avg(sales) |
  4. +------------+
  5. | 123.4000 |
  6. +------------+
  7. 1 row in set (0.00 sec)
复制
select version()

显示MySQL服务器版本

  1. mysql> select version();
  2. +-----------+
  3. | version() |
  4. +-----------+
  5. | 5.7.26 |
  6. +-----------+
  7. 1 row in set (0.00 sec)
复制
select user()

显示当前用户

  1. mysql> select user();
  2. +----------------+
  3. | user() |
  4. +----------------+
  5. | root@localhost |
  6. +----------------+
  7. 1 row in set (0.00 sec)
复制
select database()

显示当前使用的数据库

  1. mysql> select database();
  2. +------------+
  3. | database() |
  4. +------------+
  5. | company |
  6. +------------+
  7. 1 row in set (0.00 sec)
复制
select charset(‘字符编码’)

显示由参数指定的字符的字符编码

  1. mysql> select charset('utf-8');
  2. +------------------+
  3. | charset('utf-8') |
  4. +------------------+
  5. | utf8 |
  6. +------------------+
  7. 1 row in set (0.00 sec)
复制

字符串函数

concat()
  1. select concat(字符串或列名1,字符串或列名2..) from 表名;
复制

concat就是拼接传入的参数,可以传入至少1个字符串或列名。

  1. mysql> select concat(empid,'销售',sales,'万') from salary;
  2. +------------------------------------+
  3. | concat(empid,'销售',sales,'万') |
  4. +------------------------------------+
  5. | A103销售101 |
  6. | A102销售54 |
  7. | A104销售181 |
  8. | A101销售184 |
  9. | A103销售17 |
  10. | A101销售300 |
  11. | A102销售205 |
  12. | A104销售93 |
  13. | A103销售12 |
  14. | A107销售87 |
  15. +------------------------------------+
  16. 10 rows in set (0.00 sec)
复制
right()

从右取出列名中数据的N个字符

如果N大于字符串长度,也不会报错,就是完整的列中数据信息。

  1. select right(列名,字符个数N) from 表名;
复制
  1. mysql> select right(empid,2) from salary;
  2. +----------------+
  3. | right(empid,2) |
  4. +----------------+
  5. | 03 |
  6. | 02 |
  7. | 04 |
  8. | 01 |
  9. | 03 |
  10. | 01 |
  11. | 02 |
  12. | 04 |
  13. | 03 |
  14. | 07 |
  15. +----------------+
  16. 10 rows in set (0.00 sec)
复制
left()

从左取出列名中数据的N个字符

如果N大于字符串长度,也不会报错,就是完整的列中数据信息。

  1. select left(列名,字符个数N) from 表名;
复制
  1. mysql> select left(empid,2) from salary;
  2. +---------------+
  3. | left(empid,2) |
  4. +---------------+
  5. | A1 |
  6. | A1 |
  7. | A1 |
  8. | A1 |
  9. | A1 |
  10. | A1 |
  11. | A1 |
  12. | A1 |
  13. | A1 |
  14. | A1 |
  15. +---------------+
  16. 10 rows in set (0.00 sec)
复制
repeat()

重复显示

  1. select repeat(替换的字符,数据类型的列名) from 表名;
复制

实用性一般,替换的字符个数与数据类型列名中的值有关系。

  1. mysql> select repeat('*',month) from salary;
  2. +-------------------+
  3. | repeat('*',month) |
  4. +-------------------+
  5. | **** |
  6. | ***** |
  7. | **** |
  8. | **** |
  9. | ***** |
  10. | ***** |
  11. | ****** |
  12. | ***** |
  13. | ****** |
  14. | ****** |
  15. +-------------------+
  16. 10 rows in set (0.00 sec)
复制
reverse()
  1. select reverse(列名) from 表名;
复制

任何数据都可以反转显示。

  1. mysql> select reverse(empid) from salary;
  2. +----------------+
  3. | reverse(empid) |
  4. +----------------+
  5. | 301A |
  6. | 201A |
  7. | 401A |
  8. | 101A |
  9. | 301A |
  10. | 101A |
  11. | 201A |
  12. | 401A |
  13. | 301A |
  14. | 701A |
  15. +----------------+
  16. 10 rows in set (0.00 sec)
复制

日期和时间函数

下面创建一个work表,列名只有自动增长型的主键id和time

  1. create table work (id int auto_increment primary key, time datetime );
复制
  1. # 显示列表结构
  2. mysql> desc work;
  3. +-------+----------+------+-----+---------+----------------+
  4. | Field | Type | Null | Key | Default | Extra |
  5. +-------+----------+------+-----+---------+----------------+
  6. | id | int(11) | NO | PRI | NULL | auto_increment |
  7. | time | datetime | YES | | NULL | |
  8. +-------+----------+------+-----+---------+----------------+
  9. 2 rows in set (0.00 sec)
  10. # 插入数据
  11. mysql> insert into work (time) values(now());
  12. Query OK, 1 row affected (0.00 sec)
  13. # 查询
  14. mysql> select * from work;
  15. +----+---------------------+
  16. | id | time |
  17. +----+---------------------+
  18. | 1 | 2023-11-27 11:57:11 |
  19. +----+---------------------+
  20. 1 row in set (0.00 sec)
复制

limit

如果数据过大,查询时会耗时很久,因此一般会设置一定条件显示。

我们可以用limit进行限制显示的个数

  1. select 列名 from 表名 limit 显示个数;
复制
  1. mysql> select name from info limit 4;
  2. +------------+
  3. | name |
  4. +------------+
  5. | 笔友城堡 |
  6. | 笔友城堡3 |
  7. | dushu |
  8. | shu |
  9. +------------+
  10. 4 rows in set (0.00 sec)
复制

只显示了4条。

参考文章

  1. 《MySQL基础教程-西泽梦路》

相关文章

暂无评论

none
暂无评论...