mysql笔记 && SQL语句简单的增删改查

mysql来源

mysql是mysqlAB公司的。

mysqlAB公司被sun公司收购了。

sun公司又被Oracle公式收购了。

mysql现在是由oracle公司负责维护。

Oracle是收费的,mysql是免费的

navicat快捷键

在行尾:Shift+Home键选中当前行。

在行尾:Ctrl+Shift+Home键 从光标处一直选中文本开头

在行首:Shift+End键选中当前行。

在行首:Shift+End键 从光标处一直选中文本末尾

运行已选择的:Ctrl+Shift+R。

复制当前行:Ctrl+D。


Ctrl+q    打开查询窗口

Ctrl+/   注释MySQL语句

ctrl+shift +/  解除注释

ctrl+r           运行查询窗口的sql语句

ctrl+shift+r   只运行选中的sql语句

F6               打开一个mysql命令行窗口

ctrl+l            删除一行

ctrl+n           打开一个新的查询窗口

ctrl+w          关闭一个查询窗口

mysql数据库语言分类

DQL

数据查询语言,凡是带select关键字的都是查询语句都是DLQ

简单查询

select 字段名 from 表名

#查看kc表中的所有数据
mysql> select * from kc;
+--------+--------------+----------+------+
| 课程号 | 课程名       | 开课学期 | 学分 |
+--------+--------------+----------+------+
| 101    | 计算机基础   |        1 |    3 |
| 102    | c语言        |        1 |    3 |
| 206    | 高等数学     |        3 |    3 |
| 208    | 数据结构     |        5 |    6 |
| 209    | 操作系统     |        6 |    3 |
| 210    | 计算机组装   |        4 |    4 |
| 212    | ORACLE数据库 |        2 |    5 |
| 301    | 计算机网络   |        1 |    4 |
| 302    | 软件工程     |        7 |    2 |
+--------+--------------+----------+------+
9 rows in set (0.01 sec)

#distinct消除重复数据
mysql> select distinct(学分) from kc;
+------+
| 学分 |
+------+
|    3 |
|    6 |
|    4 |
|    5 |
|    2 |
+------+
5 rows in set (0.00 sec)

# 查询多个字段
mysql> select 课程号,课程名 from kc;
+--------+--------------+
| 课程号 | 课程名       |
+--------+--------------+
| 102    | c语言        |
| 212    | ORACLE数据库 |
| 209    | 操作系统     |
| 208    | 数据结构     |
| 101    | 计算机基础   |
| 210    | 计算机组装   |
| 301    | 计算机网络   |
| 302    | 软件工程     |
| 206    | 高等数学     |
+--------+--------------+
9 rows in set (0.00 sec)

#列起别名
mysql> select 课程号 as jkj from kc;
+-----+
| jkj |
+-----+
| 102 |
| 212 |
| 209 |
| 208 |
| 101 |
| 210 |
| 301 |
| 302 |
| 206 |
+-----+
9 rows in set (0.00 sec)

mysql> select 课程号 as 'jkj hkh' from kc;
+---------+
| jkj hkh |
+---------+
| 102     |
| 212     |
| 209     |
| 208     |
| 101     |
| 210     |
| 301     |
| 302     |
| 206     |
+---------+
9 rows in set (0.00 sec)
#注意:
#as可省略
#双引号不标准,在mysql中可用,在Oracle中不可用
#单引号标准,都可用

#列参与数学运算
mysql> select 课程名 课程,学分*18 分数 from kc;
+--------------+------+
| 课程         | 分数 |
+--------------+------+
| 计算机基础   |   54 |
| c语言        |   54 |
| 高等数学     |   54 |
| 数据结构     |  108 |
| 操作系统     |   54 |
| 计算机组装   |   72 |
| ORACLE数据库 |   90 |
| 计算机网络   |   72 |
| 软件工程     |   36 |
+--------------+------+
9 rows in set (0.00 sec)

#根据生日求年龄
select 姓名,year(now())-year(出生日期) as 年龄 from 信息管理学生表;
条件查询
=         等于
><或!=    不等于
<         小于
<=	      小于等于
>         大于
>=        大于等于
between……and……两个值之间,等同于   >= and <=
is null   为null(is not null 不为空)
and或&&      并且
or或||        或
in          包含,相当于多个or(not in 不在这个范围中)
not         取非,(主要用在is或in中)
any			满足子条件查询的任意一条件
all			满足子条件查询的所有条件
#eg:
mysql> select * from kc;
+--------+--------------+----------+------+
| 课程号 | 课程名       | 开课学期 | 学分 |
+--------+--------------+----------+------+
| 101    | 计算机基础   |        1 |    3 |
| 102    | c语言        |        1 |    3 |
| 206    | 高等数学     |        3 |    3 |
| 208    | 数据结构     |        5 |    6 |
| 209    | 操作系统     |        6 |    3 |
| 210    | 计算机组装   |        4 |    4 |
| 212    | ORACLE数据库 |        2 |    5 |
| 301    | 计算机网络   |        1 |    4 |
| 302    | 软件工程     |        7 |    2 |
+--------+--------------+----------+------+
9 rows in set (0.00 sec)

mysql> select * from kc where 学分 != 3;
+--------+--------------+----------+------+
| 课程号 | 课程名       | 开课学期 | 学分 |
+--------+--------------+----------+------+
| 208    | 数据结构     |        5 |    6 |
| 210    | 计算机组装   |        4 |    4 |
| 212    | ORACLE数据库 |        2 |    5 |
| 301    | 计算机网络   |        1 |    4 |
| 302    | 软件工程     |        7 |    2 |
+--------+--------------+----------+------+
5 rows in set (0.00 sec)
模糊查询
like        模糊查询,支持%或下划线匹配
          %匹配任意个字符
       一个_只能匹配一个字符
#找出课程号中含有1的
mysql> select * from kc where 课程号 like '%1%';
+--------+--------------+----------+------+
| 课程号 | 课程名       | 开课学期 | 学分 |
+--------+--------------+----------+------+
| 101    | 计算机基础   |        1 |    3 |
| 102    | c语言        |        1 |    3 |
| 210    | 计算机组装   |        4 |    4 |
| 212    | ORACLE数据库 |        2 |    5 |
| 301    | 计算机网络   |        1 |    4 |
+--------+--------------+----------+------+
5 rows in set (0.00 sec)
#找出课程号开头为1的
mysql> select * from kc where 课程号 like '1%';
+--------+------------+----------+------+
| 课程号 | 课程名     | 开课学期 | 学分 |
+--------+------------+----------+------+
| 101    | 计算机基础 |        1 |    3 |
| 102    | c语言      |        1 |    3 |
+--------+------------+----------+------+
2 rows in set (0.01 sec)
#找出课程号结尾为1的
mysql> select * from kc where 课程号 like '%1';
+--------+------------+----------+------+
| 课程号 | 课程名     | 开课学期 | 学分 |
+--------+------------+----------+------+
| 101    | 计算机基础 |        1 |    3 |
| 301    | 计算机网络 |        1 |    4 |
+--------+------------+----------+------+
2 rows in set (0.00 sec)
#找出课程名第三个为机的
mysql> select * from kc where 课程名 like '__机%';
+--------+------------+----------+------+
| 课程号 | 课程名     | 开课学期 | 学分 |
+--------+------------+----------+------+
| 101    | 计算机基础 |        1 |    3 |
| 210    | 计算机组装 |        4 |    4 |
| 301    | 计算机网络 |        1 |    4 |
+--------+------------+----------+------+
3 rows in set (0.00 sec)

分组查询

group by

#查找xs表中各专业男生的人数
mysql> select 专业名,count(性别) as 男生人数 from xs where 性别='男' group by 专业名 ;
+----------+----------+
| 专业名   | 男生人数 |
+----------+----------+
| 软件技术 |        8 |
| 网络技术 |        3 |
| 信息管理 |        1 |
| 建筑智能 |        1 |
+----------+----------+
4 rows in set (0.00 sec)
#为什么分组函数不能直接使用在where后面?
mysql> select 分数 from cj where 分数>max(分数);
ERROR 1054 (42S22): Unknown column '分数' in 'field list'  //报错
因为分组函数在使用时必须分组之后才能使用,where执行的时候还没有分组,所以where之后不能用分组函数
使用limit字句
#查询前三条数据记录
mysql> select * from xs limit 3;
+--------+--------+----------+------+------------+--------+------+
| 学号   | 姓名   | 专业名   | 性别 | 出生日期   | 总学分 | 备注 |
+--------+--------+----------+------+------------+--------+------+
| 001101 | 王金华 | 软件技术 | 男   | 1990-02-10 |   NULL | NULL |
| 001102 | 程周杰 | 软件技术 | 男   | 1991-02-01 |   NULL | NULL |
| 001103 | 王元   | 软件技术 | 男   | 1989-10-06 |   NULL | NULL |
+--------+--------+----------+------+------------+--------+------+
3 rows in set (0.01 sec)
#查询第四条数据记录
mysql> select * from xs limit 3,1;
+--------+--------+----------+------+------------+--------+------+
| 学号   | 姓名   | 专业名   | 性别 | 出生日期   | 总学分 | 备注 |
+--------+--------+----------+------+------------+--------+------+
| 001104 | 严蔚敏 | 信息管理 | 女   | 1990-08-26 |   NULL | NULL |
+--------+--------+----------+------+------------+--------+------+
1 row in set (0.00 sec)
多表查询
#查询最高分学生的详细信息
mysql> select distinct cj.学号,姓名,成绩 from xs,cj where cj.学号=xs.学号 and 成绩 = (select max(成绩) from cj) order by 成绩 desc;
+--------+--------+------+
| 学号   | 姓名   | 成绩 |
+--------+--------+------+
| 001110 | 张晓晖 | 95.0 |
+--------+--------+------+
1 row in set (0.00 sec)
#查询及格学生的详细信息
mysql> select distinct 姓名 as 及格学生的姓名,课程号,成绩 from xs,cj  where cj.学号=xs.学号 && 成绩 in (select 成绩 from cj where 成绩 >= 60) order by 成绩 desc;
+----------------+--------+------+
| 及格学生的姓名 | 课程号 | 成绩 |
+----------------+--------+------+
| 张晓晖         | 101    | 95.0 |
| 张晓晖         | 102    | 95.0 |
| 李明           | 101    | 85.0 |
| 严蔚敏         | 102    | 84.0 |
| 张飞           | 102    | 83.0 |
| 王元           | 206    | 81.0 |
| 李伟           | 206    | 80.0 |
| 刘超           | 102    | 80.0 |
| 马妮啦         | 102    | 79.0 |
| 王金华         | 102    | 78.0 |
| 程周杰         | 102    | 78.0 |
| 程周杰         | 206    | 78.0 |
| 刘超           | 101    | 78.0 |
| 王金华         | 206    | 76.0 |
| 李长江         | 206    | 76.0 |
| 李伟           | 102    | 71.0 |
| 王元           | 102    | 70.0 |
| 张飞           | 206    | 70.0 |
| 刘超           | 206    | 68.0 |
| 张飞           | 101    | 66.0 |
| 严蔚敏         | 101    | 65.0 |
| 严蔚敏         | 206    | 65.0 |
| 李伟           | 101    | 65.0 |
| 李明           | 102    | 64.0 |
| 刘敏           | 101    | 63.0 |
| 王元           | 101    | 62.0 |
| 王金华         | 101    | 61.0 |
| 李天飞         | 206    | 60.0 |
+----------------+--------+------+
28 rows in set, 1 warning (0.00 sec)
在增删改句子中使用子查询
  • insert语句中使用子查询
mysql> create table rom414  like xs;
Query OK, 0 rows affected (0.03 sec)

mysql> insert into rom414 select * from xs limit 20,4;
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from rom414;
+--------+--------+--------+------+------------+--------+------+
| 学号   | 姓名   | 专业名 | 性别 | 出生日期   | 总学分 | 备注 |
+--------+--------+--------+------+------------+--------+------+
| 200308 | 郑明鑫 | NULL   | 男   | 2003-04-05 |   NULL | NULL |
| 200326 | 唐辉阳 | NULL   | 男   | 2003-02-06 |   NULL | NULL |
| 200327 | 徐斌   | NULL   | 男   | 2003-03-05 |   NULL | NULL |
| 200336 | 李昌城 | NULL   | 男   | 2003-06-03 |   NULL | NULL |
+--------+--------+--------+------+------------+--------+------+
4 rows in set (0.00 sec)
  • update语句中使用子查询
#在成绩表中把学C语言的学生成绩全部加5
mysql> update cj set 成绩=成绩+5 where 课程号 = (select 课程号 from kc where 课程名 = 'c语言');
Query OK, 10 rows affected (0.01 sec)
Rows matched: 10  Changed: 10  Warnings: 0

#根据生日求年龄并写入到表格
update 信息管理学生表 set 年龄 = year(now())-year(出生日期);
  • 在delete语句中使用子查询
#在成绩表中删除张飞c语言的成绩
mysql> delete from cj where 学号 = (select 学号 from xs where 姓名='张飞') && 课程号 = (select 课程号 from kc where 课程名 = 'c语言');
Query OK, 1 row affected, 1 warning (0.01 sec)
排序
#查询kc表,以学分为升序排序
mysql> select * from kc order by 学分 asc;  //默认是升序
+--------+--------------+----------+------+
| 课程号 | 课程名       | 开课学期 | 学分 |
+--------+--------------+----------+------+
| 302    | 软件工程     |        7 |    2 |
| 101    | 计算机基础   |        1 |    3 |
| 102    | c语言        |        1 |    3 |
| 206    | 高等数学     |        3 |    3 |
| 209    | 操作系统     |        6 |    3 |
| 210    | 计算机组装   |        4 |    4 |
| 301    | 计算机网络   |        1 |    4 |
| 212    | ORACLE数据库 |        2 |    5 |
| 208    | 数据结构     |        5 |    6 |
+--------+--------------+----------+------+
9 rows in set (0.00 sec)
#查询kc表,以学分为降序排序
mysql> select * from kc order by 学分 desc;
+--------+--------------+----------+------+
| 课程号 | 课程名       | 开课学期 | 学分 |
+--------+--------------+----------+------+
| 208    | 数据结构     |        5 |    6 |
| 212    | ORACLE数据库 |        2 |    5 |
| 210    | 计算机组装   |        4 |    4 |
| 301    | 计算机网络   |        1 |    4 |
| 101    | 计算机基础   |        1 |    3 |
| 102    | c语言        |        1 |    3 |
| 206    | 高等数学     |        3 |    3 |
| 209    | 操作系统     |        6 |    3 |
| 302    | 软件工程     |        7 |    2 |
+--------+--------------+----------+------+
9 rows in set (0.00 sec)

#多个字段排序
要求查询课程名和学分,学分按升序排序,如果学分相同,就按课程名以升序排序
mysql> select 课程名,学分 from kc order by 学分,课程名;
+--------------+------+
| 课程名       | 学分 |
+--------------+------+
| 软件工程     |    2 |
| c语言        |    3 |
| 操作系统     |    3 |
| 计算机基础   |    3 |
| 高等数学     |    3 |
| 计算机组装   |    4 |
| 计算机网络   |    4 |
| ORACLE数据库 |    5 |
| 数据结构     |    6 |
+--------------+------+
9 rows in set (0.00 sec)

mysql> select 课程名,学分 from kc order by 2;//这里的2表示第二列,不建议这样写
+--------------+------+
| 课程名       | 学分 |
+--------------+------+
| 软件工程     |    2 |
| 计算机基础   |    3 |
| c语言        |    3 |
| 高等数学     |    3 |
| 操作系统     |    3 |
| 计算机组装   |    4 |
| 计算机网络   |    4 |
| ORACLE数据库 |    5 |
| 数据结构     |    6 |
+--------------+------+
9 rows in set (0.00 sec)
#找出学分在3到5之间的数据按学分降序进行排列
mysql> select * from kc where 学分 between 3 and 5 order by 学分 desc;
+--------+--------------+----------+------+
| 课程号 | 课程名       | 开课学期 | 学分 |
+--------+--------------+----------+------+
| 212    | ORACLE数据库 |        2 |    5 |
| 210    | 计算机组装   |        4 |    4 |
| 301    | 计算机网络   |        1 |    4 |
| 101    | 计算机基础   |        1 |    3 |
| 102    | c语言        |        1 |    3 |
| 206    | 高等数学     |        3 |    3 |
| 209    | 操作系统     |        6 |    3 |
+--------+--------------+----------+------+
7 rows in set (0.00 sec)
显示当前使用数据库
mysql> select database();
+------------+
| database() |
+------------+
| cjgl1      |
+------------+
1 row in set (0.00 sec)
语句执行顺序:

第一步:from

扫描二维码关注公众号,回复: 16835382 查看本文章

第二步:where

第三步:group by

第四步:select

第五步:order by(排序总是最后执行)

desc 表名;
#不查看表中的数据,只查看结构
mysql> desc kc;
+----------+------------------+------+-----+---------+-------+
| Field    | Type             | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| 课程号   | char(3)          | NO   | PRI | NULL    |       |
| 课程名   | varchar(20)      | NO   | UNI | NULL    |       |
| 开课学期 | tinyint unsigned | NO   |     | 1       |       |
| 学分     | tinyint unsigned | YES  |     | NULL    |       |
+----------+------------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

DML

**数据操作语言,**凡是对数据进行增删改操作的语句都是DML

insert delete update

insert 增

delete 删

update 改

这个主要操作表中的data

数据表记录的插入
  • 插入完整记录
mysql> desc xs;
+----------+------------------+------+-----+---------+-------+
| Field    | Type             | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| 学号     | char(6)          | NO   | PRI | NULL    |       |
| 姓名     | char(8)          | NO   |     | NULL    |       |
| 专业名   | varchar(20)      | YES  |     | NULL    |       |
| 性别     | char(2)          | NO   |     | 男      |       |
| 出生日期 | date             | NO   |     | NULL    |       |
| 总学分   | tinyint unsigned | YES  |     | NULL    |       |
| 备注     | text             | YES  |     | NULL    |       |
+----------+------------------+------+-----+---------+-------+
7 rows in set (0.01 sec)

mysql> insert into xs values('200201','张明','计算机应用技术','男','1998-8-5','9','学习委员');
Query OK, 1 row affected (0.01 sec)

  • 插入数据就录的一部分
mysql> insert into xs(学号,姓名,性别,出生日期) values('200326','唐辉阳','男','2003-2-6');
Query OK, 1 row affected (0.01 sec)
  • 插入多行数据

    mysql> insert into xs(学号,姓名,性别,出生日期)
        -> values
        -> ('200336','李昌城','男','2003-6-3'),
        -> ('200327','徐斌','男','2003-3-5'),
        -> ('200308','郑明鑫','男','2003-4-5');
    Query OK, 3 rows affected (0.01 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
数据表记录的修改
mysql> update xs
    -> set 姓名='魏硕' where 学号='200201';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
数据表记录的删除
  • 使用delete语句删除数据
mysql> delete from xs
    -> where 姓名='高远';
Query OK, 1 row affected (0.01 sec)
  • 使用truncate语句删除数据

    (清空数据记录)

mysql> select * from sss;
+-------+-------+---------+------+--------+
| uid   | uname | ugender | uedu | upor   |
+-------+-------+---------+------+--------+
| 11111 | tang  | n       | bk   |        |
| 22222 | zhang | n       | bk   | 副教授 |
+-------+-------+---------+------+--------+
2 rows in set (0.00 sec)

mysql> truncate sss;
Query OK, 0 rows affected (0.04 sec)

mysql> select * from sss;
Empty set (0.01 sec)

DDL

数据定义语言,凡是带create,drop,alter的都是DDL

DDL主要操作的是表的结构,不是表中的数据

create 增

drop 删

alter 改

这个增删改和DML不同,主要是对表的结构进行操作

alter 改
  • 修改数据表名
alter table cj rename 成绩表;
  • 修改字段名和数据类型

语法格式:

​ alter table 表名 change 旧字段名 新字段名 新数据类型;

alter table 信息管理学生表 change 专业名 zym varchar(15);
  • 修改字段的数据类型

语法格式:

​ alter table 表名 modify 字段名 新数据类型;

alter table 信息管理学生表 modify zy varchar(20);
  • 添加字段

语法格式:

​ alter table 表名 add 新字段名 新数据类型 [约束条件] [first | after 已经存在的字段名];

alter table 信息管理学生表 add 年龄 varchar(3);
  • 删除字段

语法格式:

​ alter table 表名 drop 字段名;

alter  table  xs  drop  备注;
create 增
  • 根据查询创建数据表
create table 软件技术 select 学号,姓名,性别,出生日期,总学分,备注 from xs where 专业名='软件技术';
drop 删
  • 删除表
create table zyrs like xs;
drop table zyrs;

TCL

事务控制语言

包括:

​ 事务提交:commit;

​ 事务回滚:rollback;

DCL

数据控制语言

例如:授权grant、撤销权限revoke……

导入数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| cjgl               |
| cjgl1              |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| tang               |
+--------------------+
7 rows in set (0.00 sec)

mysql> use cjgl1;
Database changed
mysql> source D:\Program Files\QQ files\cjgl-bak.sql
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.04 sec)

Query OK, 0 rows affected (0.04 sec)

Query OK, 0 rows affected (0.05 sec)

Query OK, 0 rows affected (0.05 sec)

Query OK, 29 rows affected (0.05 sec)
Records: 29  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.06 sec)

Query OK, 0 rows affected (0.06 sec)

Query OK, 0 rows affected (0.06 sec)

Query OK, 0 rows affected (0.06 sec)

Query OK, 0 rows affected (0.06 sec)

数据处理函数

数据处理函数又被称为单行处理函数

单行处理函数的特点:一个输入对应一个输出

和单行处理函数相对的是:多行处理函数(多行处理函数的特点:多个输入,对应一个输出!)

单行处理函数

  • lower 转换小写
mysql> select lower(课程名) 课程名,开课学期 from kc where 课程号=212;
+--------------+----------+
| 课程名       | 开课学期 |
+--------------+----------+
| oracle数据库 |        2 |
+--------------+----------+
1 row in set (0.01 sec)

mysql> select 课程名,开课学期 from kc where 课程号=212;
+--------------+----------+
| 课程名       | 开课学期 |
+--------------+----------+
| ORACLE数据库 |        2 |
+--------------+----------+
1 row in set (0.00 sec)
  • upper 转换大写
mysql> select upper(课程名) 课程名,开课学期 from kc;
+--------------+----------+
| 课程名       | 开课学期 |
+--------------+----------+
| 计算机基础   |        1 |
| C语言        |        1 |
| 高等数学     |        3 |
| 数据结构     |        5 |
| 操作系统     |        6 |
| 计算机组装   |        4 |
| ORACLE数据库 |        2 |
| 计算机网络   |        1 |
| 软件工程     |        7 |
+--------------+----------+
9 rows in set (0.01 sec)

mysql> select 课程名,开课学期 from kc;
+--------------+----------+
| 课程名       | 开课学期 |
+--------------+----------+
| 计算机基础   |        1 |
| c语言        |        1 |
| 高等数学     |        3 |
| 数据结构     |        5 |
| 操作系统     |        6 |
| 计算机组装   |        4 |
| ORACLE数据库 |        2 |
| 计算机网络   |        1 |
| 软件工程     |        7 |
+--------------+----------+
9 rows in set (0.00 sec)
  • substr取子串
#模糊查询课程号中第二位为零的行
mysql> select 课程号 from kc where substr(课程号,2,1)='0';
+--------+                           从课程号中第2位开始,取1位
| 课程号 |
+--------+
| 102    |
| 209    |
| 208    |
| 101    |
| 301    |
| 302    |
| 206    |
+--------+
7 rows in set (0.00 sec)
  • concat字符串拼接
mysql> select concat('Hello','World') result;
+------------+
| result     |
+------------+
| HelloWorld |
+------------+
1 row in set (0.00 sec)
  • length取长度
mysql> select length('hhgjfgks') as result;
+--------+
| result |
+--------+
|      8 |
+--------+
1 row in set (0.00 sec)
  • trim去空格
mysql> select trim('   hkhhukhhyiyy  ') result;
+--------------+
| result       |
+--------------+
| hkhhukhhyiyy |
+--------------+
1 row in set (0.00 sec)
  • 首字母小写
mysql> select concat(lower(substr(课程名,1,1)),substr(课程名,2,length(课程名)-1)) as result from kc where 课程号='212';
+--------------+
| result       |
+--------------+
| oRACLE数据库 |
+--------------+
1 row in set (0.00 sec)

mysql> select 课程名 from kc where 课程号='212';
+--------------+
| 课程名       |
+--------------+
| ORACLE数据库 |
+--------------+
1 row in set (0.00 sec)
  • str_to_date将字符串转化成日期
  • date_format格式化日期
  • format设置千分位
  • round四舍五入
mysql> select round(3.6) as result;
+--------+
| result |
+--------+
|      4 |
+--------+
1 row in set (0.00 sec)
mysql> select round(3.764,2) as result;  //四舍五入保留两位小数
+--------+
| result |
+--------+
|   3.76 |
+--------+
1 row in set (0.00 sec)
  • rand()生成随机数
mysql> select round(rand(),1) 随机数 from kc;//生成0到1之间的随机数,保留一位小数
+--------+
| 随机数 |
+--------+
|    0.9 |
|      0 |
|    0.4 |
|    0.8 |
|    0.8 |
|    0.6 |
|    0.5 |
|    0.8 |
|    0.6 |
+--------+
9 rows in set (0.00 sec)
mysql> select round(rand()*100,0) result from kc;  //100以内随机数
+--------+
| result |
+--------+
|      6 |
|     76 |
|     60 |
|     76 |
|     97 |
|     58 |
|     98 |
|     19 |
|     98 |
+--------+
9 rows in set (0.00 sec)
  • ifnull函数

可以将null转化成一个具体的值

注意:

null如果参与运算,最终结果一定是null。为了避免这一现象,需要ifnull函数。

ifnull函数用法:

ifnull(数据,被当做那个值)

如果“数据”为null是,那么这个数据结构当做那个值

mysql> select 6 + ifnull(备注,8)  result from xs;
+--------+
| result |
+--------+
|     14 |
|     14 |
|     14 |
|     14 |
|     14 |
|     14 |
|     14 |
|     14 |
|      6 |
|     14 |
|      6 |
|     14 |
|      6 |
|     14 |
|     14 |
|     14 |
|     14 |
|     14 |
|     14 |
|     14 |
+--------+
20 rows in set (0.00 sec)
  • case…when…then…when…then…else…end
mysql> select 开课学期,学分 from kc;
+----------+------+
| 开课学期 | 学分 |
+----------+------+
|        1 |    3 |
|        1 |    3 |
|        3 |    3 |
|        5 |    6 |
|        6 |    3 |
|        4 |    4 |
|        2 |    5 |
|        1 |    4 |
|        7 |    2 |
+----------+------+
9 rows in set (0.00 sec)
mysql> select  开课学期,(case 开课学期 when '1' then 学分+1 when '2' then 学分+2 else 学分 end) new from kc;
+----------+------+
| 开课学期 | new  |
+----------+------+
|        1 |    4 |
|        1 |    4 |
|        3 |    3 |
|        5 |    6 |
|        6 |    3 |
|        4 |    4 |
|        2 |    7 |
|        1 |    5 |
|        7 |    2 |
+----------+------+
9 rows in set (0.00 sec)

分组函数(多行处理函数)

多行处理函数的特点:输入多行,最终输出一行

count 计数

sum 求和

avg 平均值

max 最大值

min 最小值

注意:

  1. 分组函数在使用的时候必须先进行分组,才能够使用
  2. 如果你没有对数据进行分组,那么整张表默认为一组

14 |
| 14 |
| 14 |
| 14 |
| 14 |
| 14 |
| 14 |
±-------+
20 rows in set (0.00 sec)


- #### case..when..then..when..then..else..end


```mysql
mysql> select 开课学期,学分 from kc;
+----------+------+
| 开课学期 | 学分 |
+----------+------+
|        1 |    3 |
|        1 |    3 |
|        3 |    3 |
|        5 |    6 |
|        6 |    3 |
|        4 |    4 |
|        2 |    5 |
|        1 |    4 |
|        7 |    2 |
+----------+------+
9 rows in set (0.00 sec)
mysql> select  开课学期,(case 开课学期 when '1' then 学分+1 when '2' then 学分+2 else 学分 end) new from kc;
+----------+------+
| 开课学期 | new  |
+----------+------+
|        1 |    4 |
|        1 |    4 |
|        3 |    3 |
|        5 |    6 |
|        6 |    3 |
|        4 |    4 |
|        2 |    7 |
|        1 |    5 |
|        7 |    2 |
+----------+------+
9 rows in set (0.00 sec)

分组函数(多行处理函数)

多行处理函数的特点:输入多行,最终输出一行

count 计数

sum 求和

avg 平均值

max 最大值

min 最小值

注意:

  1. 分组函数在使用的时候必须先进行分组,才能够使用
  2. 如果你没有对数据进行分组,那么整张表默认为一组

猜你喜欢

转载自blog.csdn.net/qq_62761962/article/details/126915180