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
第二步: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)
数据处理函数
数据处理函数又被称为单行处理函数
单行处理函数的特点:一个输入对应一个输出
和单行处理函数相对的是:多行处理函数(多行处理函数的特点:多个输入,对应一个输出!)
单行处理函数
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)
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)
#模糊查询课程号中第二位为零的行
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)
mysql> select concat('Hello','World') result;
+------------+
| result |
+------------+
| HelloWorld |
+------------+
1 row in set (0.00 sec)
mysql> select length('hhgjfgks') as result;
+--------+
| result |
+--------+
| 8 |
+--------+
1 row in set (0.00 sec)
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)
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)
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)
可以将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)
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 最小值
注意:
- 分组函数在使用的时候必须先进行分组,才能够使用
- 如果你没有对数据进行分组,那么整张表默认为一组
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 最小值
注意:
- 分组函数在使用的时候必须先进行分组,才能够使用
- 如果你没有对数据进行分组,那么整张表默认为一组