MySQL常用命令
命令 | 描述 |
---|---|
show databases | 查看有哪些数据库 |
use dbname | 使用哪个数据库 |
create database dbname | 创建数据库 |
show tables | 查看有哪些表 |
source 绝对路径(不要有中文!) | 导入数据 |
desc tablename | 查看表结构 |
select * from tablename | 查看表中的所有数据 |
select version() | 查看mysql数据库当前版本号 |
select database() | 查看当前数据库 |
\c | 终止一条命令的输入 |
关于SQL语句的分类
1、DQL:数据查询语言(凡是带有select关键字的都是查询语句)
select……
2、DML:数据操作语言(凡是对表当中的数据进行增删改的都是DML)
insert:增
delete:删
update:改
3、DDL:
数据定义语言
凡是带有create、drop、alter的都是DDL。
DDL主要操作的是表的结构,不是表中的数据。
create:新建,等同于增
drop:删除
alter:修改
这个增删改和DML不同,这个主要是对表结构进行操作。
4、TCL:
事务控制语言
包括:
事务提交:commit
事务回滚:rollback
5、DCL:
数据控制语言
例如:授权grant、撤销权限:revoke……
查询
简单查询
1、查询一个字段
select 字段名 from 表名;
如:查询部门名字
2、查询两个字段,或者多个字段
使用逗号“,”隔开
如:查询部门编号和部门名称
3、查询所有字段
第一种方式:把每个字段都写上
第二种方式:可以使用*,因为他会先将*转化为字段所以这种方式存在缺点(效率低、可读性差),在实际开发中不建议。
如:
4、给查询字段起别名
注意:只是将显示的查询结构列名显示为deptname,原表列名不会变,“select语句是永远都不会进行修改操作的,只负责查询”
as关键字可以省略掉
如果起别名时,别名中有空格,需要加引号
注意:单双引号都可以,但标准一般都是单引号
在所有数据库当中,字符串统一采用单引号括起来,单引号是标准,双引号在oracle数据库中用不了,但在mysql中都可以用
5、进行数学运算
如:计算员工年薪
如果别名为中文,用单引号括起来
条件查询
1、什么是条件查询
将符合条件的数据查询出来
语法格式:
select
字段1,字段2,字段3……
from
表名
where
条件;
2、都有哪些条件
= : 等于
如:查询薪资等于5000的员工姓名和编号
<> 或 != : 不等于
如:查询薪资不等于800的员工
<: 小于
如:查询薪资小于两千的员工
<= : 小于等于
如:查询薪资小于等于3000的员工
>: 大于
如:查询薪资大于3000的员工信息
>= : 大于等于
如:查询薪资大于等于3000的员工信息
between…and… : 两个值之间等同于 >= and <=
如:查询薪资在2450到3000的员工信息
第一种:>= and <=
第二种:between…and…
注意:使用between…and…时,必须遵循左小右大,而且是闭区间,包括两端的值
is null 为 null (is not null 不为空)
如:查询哪些员工的津贴/补助为null?
注意:在数据库中null不能使用等号进行衡量,需要使用is null,因为数据库当中的null代表什么也没有,它不是一个值,所以不能使用等号
如:查询哪些员工的津贴/补助不为null?
and:并且
如:查询工作岗位是MANAGER并且工资大于2500的员工信息?
or:或者
如:查询工作岗位是MANAGER和SALESMAN的员工
注意:
and和or同时出现的话,存在优先级问题,and优先级比or高,如果想让or先执行,需要加小括号
in:包含,相当于多个or(not in 不在这个范围中)
如:查询工作岗位是MANAGER和SALESMAN的员工
注意:
in不是一个区间,in后面跟的是具体的值
如:查询薪资是800和5000的员工信息
如:查询薪资不是800和5000的员工信息
like:模糊查询,支持%或_匹配
%:匹配任意个字符
_:任意一个字符
(%和_都是一个特殊字符)
如:找出名字中含有O的
如:找出名字以K开始的
如:找出第二个字母是A的
如:找出第三个字母是R的
如:找出学生表中名字中有‘_’的
注意:
查询带有特殊字符时需要转义
排序
1、查询所有员工薪资,排序(默认是升序)
2、薪资降序排序,指定升序:asc
3、按照两个或者字段排序
如:查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,再按照名字升序排列
4、根据字段位置也可以排序
如:按照查询结果的第二列排序
注意:
了解即可,不建议在开发中这样写,因为不健壮,列的顺序很容易发生改变。
综合案例
找出工资在1250到3000之间的员工信息,要求按照薪资降序排列
执行顺序:
第一步:from
第二步:where
第三步:select
第四步:order by (排序总是在最后执行!)
数据处理函数
1、数据处理函数又被称为单行处理函数
单行处理函数的特点:一个输入对应一个输出
和单行处理函数相对的是多行处理函数(特点:多个输入,对应1个输出)
2、常见的单行处理函数
lower:转换小写
upper:转换大写
substr:取子串(substr(被截取的字符串,起始下标,截取的长度))
select substr(ename,1,1) from emp;
注意:起始下标从1开始,没有0
如:找出员工名字第一个字母是A的员工信息
第一种方式:模糊查询
第二种方式:substr函数
concat:字符串拼接
案例:首字母大写
length:取长度
trim:去空格
round:四舍五入
select ‘abc’ from emp; select后面直接跟"字面量/字面值",就会根据表的结构生成相对的字面值。
select后面可以跟某个表的字段名(等同看做变量名),也可以跟字面量/字面值(数据)。
如:
round用法:round(数字,保留小数位)
如:不保留小数
保留一位1位和2位小数
保留到十位和百位
rand():生成随机数
生成100以内的随机数
ifnull:可以将null转换成一个具体值
注意: ifnull是空处理函数,专门处理空的,在所有的数据库当中,只要有NULL参与的数学运算,最终结果就是NULL
如:
ifnull用法:ifnull(数据,数据为null要替换的值)
如:计算每个员工的年薪?
年薪 = (月薪 + 月补助) * 12
case … when …than … when … than … else … end:当…如何…当…如何…否则…结束
如:当员工的工作岗位是MANAGER时,工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%(注意:不修改数据库,只是将查询结果显示为工资上调)
分组函数(多行处理函数)
多行处理函数的特点:输入多行,最终输出一行
函数 | 描述 |
---|---|
count | 计数 |
sum | 求和 |
avg | 平均值 |
max | 最大值 |
min | 最小值 |
注意:分组函数在使用的时候必须先进行分组,然后才能用,如果你没有对数据进行分组,整张表默认为一组
如:找出最高工资
找出最低工资
求工资总和
求平均薪资
计算员工数量
注意事项:
第一点:
分组函数自动忽略null,不需要提前对null进行处理
第二点:
count(具体字段):表示统计字段下所有不为NULL的元素的综述
count(*):统计表当中的总行数。(只要这一行任意列有数据count就+1),因为每一行记录不可能都为NULL,一行数据中有一列不为NULL,则这行数据就是有效的。
第三点:分组函数不能直接使用在where子句中。
第四点:所有的分组函数可以组合起来一起用
如:
分组查询(非常重要)
1、什么是分组查询
在实际的应用中,可能有这样的需求,需要先进行分组,然后对每一组的数据进行操作。这个时候我们需要使用分组查询,如何进行分组查询
select
……
from
……
group by
……
2、将之间的关键字全部组合起来,找出执行顺序
select
…
from
…
where
…
group by
…
order by
…
以上关键字的顺序不能颠倒,需要记忆。
执行的顺序:
1、from
2、where
3、group by
4、select
5、order by
注意:
为什么分组函数不能直接在where后面使用呢?
因为分组函数在使用的时候必须先分组之后才能使用,where执行的时候还没有分组,所以where后面不能出现分组函数,select后面可以用分组函数,因为group by的执行顺序在select之前,如果没有写分组,默认将整张表分为一组。
3、案例
找出每个工作岗位的工资和
找出每个部门的最高薪资
找出每个部门,不同工作岗位的最高薪资
找出每个部门最高薪资,要求显示最高薪资大于3000的
having: 使用having可以对分完组之后的数据进一步过滤,having不能单独使用,having不能代替where,having必须和group by联合使用
方法一:where
方法二:having
优化策略: where和having,优先选择where,where实在完成不了,再选择having
比如:
找出每个部门平均薪资,要求显示平均薪资高于2500的
因为要求显示的是平均薪资高于2500,所以 需要在运算完后进行筛选,所以where完成不了,只能选择having
综上总结:
单表查询
select
…
from
…
where
…
group by
…
having
…
order by
…
以上关键字只能按照这个顺序来!不能颠倒!
执行顺序
1、from
2、where
3、group by
4、having
5、select
6、order by
案例: 找出每个岗位的平均薪资,要求显示平均薪资大于1500的,除MANAGER之外,要求按照平均薪资降序排序
重点结论:
在一条select语句当中,如果有group by语句的话,select后面只能跟:参加分组的字段,以及分组函数,其他的一律不能跟。
注意
数据库当中是以表格的形式表示数据的,因为表比较直观。