MySQL

概念:一种关联数据库,可以存储并且操作应用程序中的所有数据

DB(Database):数据库软件

DBMS( Database Management System ):数据库操作系统

SQL( Structured Query Language ):结构化查询语言,数据库的操作语言,包含一套标准的SQL,可以用于操作所有数据库。每个数据库都有自己的方言,只能在自己数据库使用,不能在别的数据库使用

DBA:数据库管理员,专门操作数据库软件的人员

学习方式:会用就行,不需要理解原理

版本:5.5 8.4等

端口号:3306


-u 用户名 -p 密码

基本命令

mysql软件有4个自带的数据库,不能动,库里面存的是一张张的表

表里面存的就是数据

数据查询语言:select

数据操纵语言:insert,delete,update

数据定义语言:create,drop,alter

事务控制语言:commit,rollback

数据控制语言:grant,revoke

特殊字段empno(组件),不能重复,不能为空


库操作:

show databases; 查看所有的库

create database 库名; 创建一个库

drop database 库名; 删除一个库

use 库名; 使用(选中)一个库

show tables; 查看所有的表


表操作:

操作之前要选中一个数据库

字段:每一列

记录:每一行

导入外部的sql文件:source+文件路径select*from 表名; 查询表

一、简单查询

select 字段名称 from 表名 控制的是字段数

(1)查询单个字段 select ename(字段名称) from emp(表名);

(2)查询多个字段 select ename,sal(用逗号隔开字段) from emp;

(3)所有字段 select*from emp;也可以把所有字段都写出来

(4)为字段添加别名 as 关键字 可以省略select ename(字段名) as '姓名' from emp;select ename '姓名' from emp;

二、条件查询

where关键字 位置在from之后

select*from emp where ename='SMITH'; =表示相等不是赋值

!=或<> 表示不等

区间表示:between...and... between之后的数值小于等于and之后的数值 必须做小右大

is null 某个字段的数值为null值

is not null 某个字段的数值不为null值

and 并且,等于&& 满足所有条件

select * from emp where deptno=30 and sal>2000;

or 或者,等于|| 满足一个条件

连接符存在and和or一起使用,需要添加()

in 用于条件中的一些常量的比较,可以被多个or替换

select * from emp where sal in(800,1000,1500,2000) 类似swtch

not in 多个and替换

like 模糊查询(关键字查询),条件中匹配一部分内容即可,不可是常量

例如,搜索姓张的人

_ 表示一个位置上的任意内容

% 表示任意位置上的任意内容

select*from emp where ename like 'A%';

包含查询:%A%

三、排序查询

关键字:order by 位置暂时是在where之后

升序排序:默认排序 关键字是asc,可以省略

降序排序:关键字是desc,不能省略

select*from emp where sal>2000 order by sal asc;

如果两个字段值相同,就引入下一个排序,语法:

select*from emp where sal>2000 order by sal asc,ename asc;用逗号隔开

四、聚合函数/多行处理函数

sum()求和 avg()平均数 max()最大值 min()最下值 count()计数

位置:关键字select 之后 关键字heving之后

语法:

select sum(sal) from emp; //计算字段sal的和,一般不会在使用聚合函数的时候加别的字段

count() 用来统计一张表的记录大小,不计数字段值为null的字段;

语法:select count(*) from emp; //执行效率低

或者 select count(empno) from emp;

聚合函数可以一起使用,语法:

select sum(sal) '和',avg(sal) '平均数',max(sal) '最大值',min(sal) '最小值',count(empno) '个数' from emp;

五、单行处理函数

可以出现在sql中的任意位置,但是尽量少使用,执行效率会降低

lower() 转换小写 upper()准换大写 参数是字段

substr() 取子串(输入3个参数,一个字段,一个起始下标,一个截取长度)

 mysql中的索引值是从1开始的

length() 字段的长度 参数是字段,字段下面每个值都可能不一样

trim() 去空格 输入字段

str_to_date 将字符串转换成日期 data_formt 格式化日期

mysql中的时间类型,字符串类型,整数类型,浮点数类型都可以自动转换

format() 设置千分位,每三位加一个逗号,参数(字段,保留的小数数位)

round() 四舍五入,参数(字段,保留的小数位)

round(字段,0)保留整数,round(字段,-1)保留小数点前1位

rand() 生成随机数不加参数 在0到1之间 参数随机数种子rand(10)是固定的

ifnull 将一个null转换成一个具体的值,例子:统计工资,有些人员的工资为null值,需要转换为0才能统计

语法:select sal,ifnull(字段,0) from emp;

六、分组查询

关键字:group by 位置是在where之后,order by之前

原则上可以使用任何的字段进行分组

select ename,sal,deptno from emp group by deptno

注意:分组了每个组只能显示一个,也可以显示函数处理之后的数值

例如求每个组的和:

selec sum(工资),deptno from emp group by deptno;

七、having语句

必须跟随在group by之后,没有分组不能出现having语句

功能:having语句是对分组后的小组数据进行条件处理的,在where关键之后的14个条件可以直接出现在having语句,包括聚合函数

例子:以部门编号分组,排除小组中最高工资低于3千的小组

select deptno,max(sal) from emp group by deptno having max(sal)>=3000; //根据deptno字段分组,显示大于3千的分组

一般也不推荐用,执行效率低

使用where也能都代替having语句,当where语句不能完成的就用having

什么情况下考虑使用where替换 having?

当条件使用的是表中的直接数据时,可以使用where

当条件使用的是经过分组后的数据,或者聚合函数处理过的数据,只能使用having

where是针对整个表的整个字段的数据,having是对分组后的字段进行的

面试题

where和having有什么区别

都是对条件的筛选

1.where语句是对表中的数据进行条件筛选,having是对分组后的小组数据进行条件筛选的

2.where之后是不能有聚合函数的,having可以有

3.where是在分组之前执行,having是在分组之后执行

单表查询关键字顺序

select from where group by having odder by

select之后可以写(目前):字段名,*,单行处理函数(任何位置),聚合函数

from之后只能写表名

where之后可以写各种条件 and,or ,小括号连接

group by 分组字段名

having 各种条件,聚合函数

order by 排序字段名,升序asc或者desc 聚合函数分组之后只能用分组的表的字段来排序

关键字执行顺序

执行from 找到表,执行where 排除数据,再执行group by分组 ,分完组执行having排除组内的顺序,执行select 找出数据,最后order by 排序