目录
前言
本文主要是select语句的使用
学习一下MySQL,一直没有系统的学习一下。最近有空,看了《MySQL基础教程–西泽梦路》,简单的做一下笔记。
MySQL中对大小写没有区分,我这里习惯性用小些。
正文
我这以Window版的phpstudy软件验证。
需要进入这个目录,才可以使用mysql命令
- D:\phpstudy_pro\Extensions\MySQL5.7.26\bin
进入正文
select命令
为了训练select命令,特意新增了一个salary表
- # 创建
- create table salary(empid varchar(10), sales int , month int);
- # 列结构
- mysql> desc salary;
- +-------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------+-------------+------+-----+---------+-------+
- | empid | varchar(10) | YES | | NULL | |
- | sales | int(11) | YES | | NULL | |
- | month | int(11) | YES | | NULL | |
- +-------+-------------+------+-----+---------+-------+
- 3 rows in set (0.00 sec)
插入数据略过哈
查询所有数据
- select * from salary
*表示不限制,查询所有。
输出结果
- mysql> select * from salary
- +-------+-------+-------+
- | empid | sales | month |
- +-------+-------+-------+
- | A103 | 101 | 4 |
- | A102 | 54 | 5 |
- | A104 | 181 | 4 |
- | A101 | 184 | 4 |
- | A103 | 17 | 5 |
- +-------+-------+-------+
- 5 rows in set (0.00 sec)
多个条件限制select
- select sales,empid from salary;
限定列名查询,查询条件可以一个,也可以多个,多个用[,]分割。
查询sales,empid这两列的数据
- mysql> select sales,empid from salary;
- +-------+-------+
- | sales | empid |
- +-------+-------+
- | 101 | A103 |
- | 54 | A102 |
- | 181 | A104 |
- | 184 | A101 |
- | 17 | A103 |
- | 300 | A101 |
- | 205 | A102 |
- | 93 | A104 |
- | 12 | A103 |
- | 87 | A107 |
- +-------+-------+
- 10 rows in set (0.00 sec)
当然,查询列也可以重复,下面
- mysql> select sales,empid,sales from salary;
- +-------+-------+-------+
- | sales | empid | sales |
- +-------+-------+-------+
- | 101 | A103 | 101 |
- | 54 | A102 | 54 |
- | 181 | A104 | 181 |
- | 184 | A101 | 184 |
- | 17 | A103 | 17 |
- | 300 | A101 | 300 |
- | 205 | A102 | 205 |
- | 93 | A104 | 93 |
- | 12 | A103 | 12 |
- | 87 | A107 | 87 |
- +-------+-------+-------+
- 10 rows in set (0.00 sec)
使用别名
虽然查询出sales,empid数据,但还是有部分人不太理解,因此为了更多人认识,可以给列加上通俗易懂的名称,也叫别名(alias)。
- select 列名 as 别名 from 表名;
- mysql> select sales as 销售 from salary;
- +--------+
- | 销售 |
- +--------+
- | 101 |
- | 54 |
- | 181 |
- | 184 |
- | 17 |
- | 300 |
- | 205 |
- | 93 |
- | 12 |
- | 87 |
- +--------+
- 10 rows in set (0.00 sec)
算术运算符
mysql存在如下算术运算符
- 运算符 使用示例 含义
- + a+b a加上b
- - a-b a减去b
- * a*b a乘以b
- / a/b a除以b
- div a div b a除以b,结果取整
- %、mod a % b a除以b,取余数
以表中的销售额为例,一般单位是万
因此,展示时乘上10000
- mysql> select sales*10000 as 销售 from salary;
- +---------+
- | 销售 |
- +---------+
- | 1010000 |
- | 540000 |
- | 1810000 |
- | 1840000 |
- | 170000 |
- | 3000000 |
- | 2050000 |
- | 930000 |
- | 120000 |
- | 870000 |
- +---------+
- 10 rows in set (0.00 sec)
其他的算术运算符使用类似,这里不过多介绍。
常用函数
传入数据后,函数会执行指定的处理并返回结果
计算相关函数
- select 函数名(支持计算的列名) from 表名;
比如,
avg()计算平均值
sum()计算总和等
count()计算个数
- mysql> select avg(sales) from salary;
- +------------+
- | avg(sales) |
- +------------+
- | 123.4000 |
- +------------+
- 1 row in set (0.00 sec)
select version()
显示MySQL服务器版本
- mysql> select version();
- +-----------+
- | version() |
- +-----------+
- | 5.7.26 |
- +-----------+
- 1 row in set (0.00 sec)
select user()
显示当前用户
- mysql> select user();
- +----------------+
- | user() |
- +----------------+
- | root@localhost |
- +----------------+
- 1 row in set (0.00 sec)
select database()
显示当前使用的数据库
- mysql> select database();
- +------------+
- | database() |
- +------------+
- | company |
- +------------+
- 1 row in set (0.00 sec)
select charset(‘字符编码’)
显示由参数指定的字符的字符编码
- mysql> select charset('utf-8');
- +------------------+
- | charset('utf-8') |
- +------------------+
- | utf8 |
- +------------------+
- 1 row in set (0.00 sec)
字符串函数
concat()
- select concat(字符串或列名1,字符串或列名2..) from 表名;
concat就是拼接传入的参数,可以传入至少1个字符串或列名。
- mysql> select concat(empid,'销售',sales,'万') from salary;
- +------------------------------------+
- | concat(empid,'销售',sales,'万') |
- +------------------------------------+
- | A103销售101万 |
- | A102销售54万 |
- | A104销售181万 |
- | A101销售184万 |
- | A103销售17万 |
- | A101销售300万 |
- | A102销售205万 |
- | A104销售93万 |
- | A103销售12万 |
- | A107销售87万 |
- +------------------------------------+
- 10 rows in set (0.00 sec)
right()
从右取出列名中数据的N个字符
如果N大于字符串长度,也不会报错,就是完整的列中数据信息。
- select right(列名,字符个数N) from 表名;
- mysql> select right(empid,2) from salary;
- +----------------+
- | right(empid,2) |
- +----------------+
- | 03 |
- | 02 |
- | 04 |
- | 01 |
- | 03 |
- | 01 |
- | 02 |
- | 04 |
- | 03 |
- | 07 |
- +----------------+
- 10 rows in set (0.00 sec)
left()
从左取出列名中数据的N个字符
如果N大于字符串长度,也不会报错,就是完整的列中数据信息。
- select left(列名,字符个数N) from 表名;
- mysql> select left(empid,2) from salary;
- +---------------+
- | left(empid,2) |
- +---------------+
- | A1 |
- | A1 |
- | A1 |
- | A1 |
- | A1 |
- | A1 |
- | A1 |
- | A1 |
- | A1 |
- | A1 |
- +---------------+
- 10 rows in set (0.00 sec)
repeat()
重复显示
- select repeat(替换的字符,数据类型的列名) from 表名;
实用性一般,替换的字符个数与数据类型列名中的值有关系。
- mysql> select repeat('*',month) from salary;
- +-------------------+
- | repeat('*',month) |
- +-------------------+
- | **** |
- | ***** |
- | **** |
- | **** |
- | ***** |
- | ***** |
- | ****** |
- | ***** |
- | ****** |
- | ****** |
- +-------------------+
- 10 rows in set (0.00 sec)
reverse()
- select reverse(列名) from 表名;
任何数据都可以反转显示。
- mysql> select reverse(empid) from salary;
- +----------------+
- | reverse(empid) |
- +----------------+
- | 301A |
- | 201A |
- | 401A |
- | 101A |
- | 301A |
- | 101A |
- | 201A |
- | 401A |
- | 301A |
- | 701A |
- +----------------+
- 10 rows in set (0.00 sec)
日期和时间函数
下面创建一个work表,列名只有自动增长型的主键id和time
- create table work (id int auto_increment primary key, time datetime );
- # 显示列表结构
- mysql> desc work;
- +-------+----------+------+-----+---------+----------------+
- | Field | Type | Null | Key | Default | Extra |
- +-------+----------+------+-----+---------+----------------+
- | id | int(11) | NO | PRI | NULL | auto_increment |
- | time | datetime | YES | | NULL | |
- +-------+----------+------+-----+---------+----------------+
- 2 rows in set (0.00 sec)
- # 插入数据
- mysql> insert into work (time) values(now());
- Query OK, 1 row affected (0.00 sec)
- # 查询
- mysql> select * from work;
- +----+---------------------+
- | id | time |
- +----+---------------------+
- | 1 | 2023-11-27 11:57:11 |
- +----+---------------------+
- 1 row in set (0.00 sec)
limit
如果数据过大,查询时会耗时很久,因此一般会设置一定条件显示。
我们可以用limit进行限制显示的个数
- select 列名 from 表名 limit 显示个数;
- mysql> select name from info limit 4;
- +------------+
- | name |
- +------------+
- | 笔友城堡 |
- | 笔友城堡3 |
- | dushu |
- | shu |
- +------------+
- 4 rows in set (0.00 sec)
只显示了4条。
参考文章
《MySQL基础教程-西泽梦路》