一、认识Mysql
1、Mysql数据库相关概念
- DB:数据库,保存一组有组织的数据的容器
- DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据
- SQL:结构化查询语言,用于和DBMS通信的语言
注:常用的数据库管理系统有Oracle、db2、MySQL、PostgreSQL、SQLite、Firebird、微软的SQL Server和Access
2、Mysql数据库存储数据特点
- 将数据放到表中,表再放到库中,将库持久化到本地磁盘中
- 一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性
- 表具有一些特性,这些特性定义了数据在表中如何存储,类似java中 “类”的设计
- 表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列类似java 中的”属性”
- 表中的数据是按行存储的,每一行类似于java中的“对象”
3、SQL的语言分类
- DML(Data Manipulate Language):数据操作语言
insert 、update、delete、select(增删改查)
- DDL(Data Define Languge):数据定义语言
create、drop、alter(创建、修改表结构、视图、存储过程等)
- TCL(Transaction Control Language):事务控制语言
commit、rollback(操作事务等方面)
- DCL:(Data Control Language)数据控制语言,包括分配数据库用户权限相关的sql语句
二、Mysql基础知识
1、SQL基础查询
语法:
select 查询列表 from 表名 where 筛选条件
或:
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)](条件过滤,紧随 FROM 子句)
[GROUP BY column|group_by_expression](根据一个或多个字段或某一表达式进行分组)
[HAVING group_condition](对分组的结果进行过滤)
[ORDER BY column1,column2... asc|desc](根据一个或多个字段进行排序,在SELECT语句的结尾(asc为默认值,为升序,desc为降序))
limit start,size(对查询的结果进行分页处理)
如:select * from tableName 、select '123'、select version()、select now()
查询可以是:表中的字段、常量值、表达式、函数等
注: mysql中的+号的作用:仅仅只有一个功能--》运算符
select 100+90; 两个操作数都为数值型,则做加法运算
select '123'+90;只要其中一方为字符型,试图将字符型数值转换成数值型 , 如果转换成功,则继续做加法运算
select 'john'+90; 如果转换失败,则将字符型数值转换成0
select null+10,只要其中一方为null,则结果肯定为null
2、常见的关键词查询
1、like模糊查询
特点:一般和通配符搭配使用 ,通配符有%: 表示任意多个字符,包含0个字符、_ :下划线表示任意单个字符(充当于占位符)
如:select * from tableName where id like '%a%' 或 select * from tableName where id like '%_a%'
2、between...and...在两者之间,包含临界值,从小到大,不能调换位置顺序
3、is null/is not null 判断字段是否为null值
(1)=或<>等运算符不能用于判断null值
(2)安全等于(<=>)运算符:既可以判断NULL值,又可以判断普通的数值,可读性较低
(3)IS NULL:仅仅可以判断NULL值,可读性较高,建议使用
3、常见的单行函数
1、字符函数
- length:获取字节个数(utf-8一个汉字代表3个字节,gbk为2个字节)
- concat:字符连接,将多个字符连接起来
- substr/subString:字符截取,截取位置从1开始算起
- instr:获取指定字符的下标
- trim:去空格(字符前后的空格)
- upper:字符转化成大写
- lower:字符转化成小写
- lpad:左填充
- rpad:右填充
- replace:替换字符
2、数字函数
- round(X,D):四舍五入,保留D位小数
- ceil(X):向上取整
- floor(X):向下取整
- truncate(X,D):截取数字函数
3、时间函数
- now():返回当前系统日期+时间
- curdate():返回当前系统日期,不包含时间
- curtime():返回当前时间,不包含日期
- STR_TO_DATE(str,format):将字符通过指定的格式转换成日期
- DATE_FORMAT(date,format):将日期转换成指定格式的字符型时间
- DATEDIFF(expr1,expr2):返回两个时间之间的差值
时间格式(format)如下所示:
4、流程控制函数case-when-then
语法(用法1):
java中
switch(变量或表达式){
case 常量1:语句1;break;
...
default:语句n;break;
}
mysql中
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end
语法(用法2):
java中:
if(条件1){
语句1;
}else if(条件2){
语句2;
}
...
else{
语句n;
}
mysql中:
case
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end
5、常见的聚合函数(分组函数)
分组函数作用于一组数据,并对一组数据返回一个值,常用于对查询的数据进行统计
(1)分类:
sum 求和、avg 平均值、max 最大值 、min 最小值 、count 计算个数
(2)特点:
- sum、avg一般用于处理数值型,max、min、count可以处理任何类型
- 以上分组函数都忽略null值
- 可以和distinct搭配实现去重的运算
- count函数的单独介绍,一般使用count(*)用作统计行数
- 和分组函数一同查询的字段要求是group by后的字段