mysql启动命令和停止命令
net start mysql:代表启动mysql
net stop mysql:代表关闭mysql
右键计算机 点击更多选项 点击管理 点击服务 可以查看mysql的状态以及启动方式
命令行登录数据库
win+R 输入cmd
在命令行中输入 mysql -uroot -p(隐藏密码形式)
在输入密码
MySQL常用命令(不区分大小写)
退出MySQL:exit;
查看MySQL中有哪些数据库? show databases;
怎么选择使用哪个数据库? use 数据库名字;
怎么样创建数据库:create database 数据库名;
查看数据库下有哪些表? show tables;
查看数据库版本号 select version();
查看当前使用哪个数据库 select database();
输入错误命令想要终止用\c
数据库中最基本的单元是表table
什么是表table?为什么用表存储数据呢?
关于SQL语句的分类
导入sql语句(命令行)
在数据库中 source 路径名 (注意:路径名中不能有中文)\
dept:部门表
emp:员工表
salgrade:工资等级表
查询表用dql语句:select * from 表名:
不看表数据 看表结构 : desc 表名:
给查询列起别名
起别名用as,只是将查询结果起名为deptname 原表列名还是dname select是不会进行修改操作的,因为只负责查询
as 可以省略
如果想起的别名有空格 加''单引号即可,双引号""也可以,但是单引号是标准
在所有的数据库中,单引号是标准,双引号周期oracle数据库用不了,但是在MySQL中可以使用
条件查询
等于(=)操作符
查询薪资等于 800 的员工姓名和编号:
select empno,ename from emp where sal = 800;
查询 SMITH 的编号和薪资:
select empno,sal from emp where ename = 'SMITH';
不等于(<> 或!=)操作符
查询薪资不等于 800 的员工姓名和编号:
select empno,ename from emp where sal!= 800;
select empno,ename from emp where sal <> 800;
小于(<)操作符
查询薪资小于 2000 的员工姓名和编号:
select empno,ename,sal from emp where sal < 2000;
大于(>)操作符
查询薪资大于 3000 的员工姓名和编号:
select empno,ename,sal from emp where sal > 3000;
小于等于(<=)操作符
查询薪资小于等于 3000 的员工姓名和编号:
select empno,ename,sal from emp where sal <= 3000;
大于等于(>=)操作符
查询薪资大于等于 3000 的员工姓名和编号:
select empno,ename,sal from emp where sal >= 3000;
between … and … 操作符(等同于 >= and <=)
查询薪资在 2450 和 3000 之间的员工信息(包括 2450 和 3000):
第一种方式(>= and <=):
select empno,ename,sal from emp where sal >= 2450 and sal <= 3000;
第二种方式(between … and …):
select
empno,ename,sal
from
emp
where
sal between 2450 and 3000;
注意:
使用 between and 的时候,必须遵循左小右大。
between and 是闭区间,包括两端的值。
is null 和 is not null 操作符
查询哪些员工的津贴 / 补助为 null:
select empno,ename,sal,comm from emp where comm is null;
注意:在数据库当中 null 不能使用等号进行衡量,需使用 is null,因为 null 代表什么也没有,不是一个值,不能用等号衡量。
查询哪些员工的津贴 / 补助不为 null:
select empno,ename,sal,comm from emp where comm is not null;
and(并且)操作符
查询工作岗位是 MANAGER 并且工资大于 2500 的员工信息:
select
empno,ename,job,sal
from
emp
where
job = 'MANAGER' and sal > 2500;
or(或者)操作符
查询工作岗位是 MANAGER 和 SALESMAN 的员工:
select empno,ename,job from emp where job = 'MANAGER';
select empno,ename,job from emp where job = 'SALESMAN';
select
empno,ename,job
from
emp
where
job = 'MANAGER' or job = 'SALESMAN';
and 和 or 同时出现的优先级问题
查询工资大于 2500,并且部门编号为 10 或 20 部门的员工:
select
*
from
emp
where
sal > 2500 and deptno = 10 or deptno = 20;
分析:
and 优先级比 or 高,此语句先执行 and,再执行 or。
表示找出工资大于 2500 并且部门编号为 10 的员工,或者 20 部门所有员工。
正确写法(让 or 先执行,加小括号):
select
*
from
emp
where
sal > 2500 and (deptno = 10 or deptno = 20);
注意:and 和 or 同时出现,and 优先级较高,若想让 or 先执行,需加小括号,开发中不确定优先级时就加小括号。
in(包含)和 not in(不在这个范围中)操作符
查询工作岗位是 MANAGER 和 SALESMAN 的员工:
select empno,ename,job from emp where job in('MANAGER', 'SALESMAN');
注意:in 后跟具体的值,不是区间。
查询薪资是 800 和 5000 的员工信息:
select ename,sal from emp where sal in(800, 5000);
select ename,sal from emp where sal not in(800, 5000, 3000);
not(取非)操作符
主要用于 is
或 in
相关情况,如 is null
、is not null
、in
、not in
等配合使用。
like(模糊查询)操作符
支持 %
或下划线(_
)匹配。
%
匹配任意多个字符。下划线(
_
)匹配任意一个字符。(%
和_
为特殊符号)
找出名字中含有 O 的:
select ename from emp where ename like '%O%';
找出名字以 T 结尾的:
select ename from emp where ename like '%T';
找出名字以 K 开始的:
select ename from emp where ename like 'K%';
找出第二个字每是 A 的:
select ename from emp where ename like '_A%';
找出第三个字母是 R 的:
select ename from emp where ename like '__R%';
找出名字中有 “_” 的(需用转义字符 \):
select name from t_student where name like '%\_%';
排序
15.1 查询所有员工薪资并排序
select
ename, sal
from
emp
order by
sal; -- 默认是升序!!!
15.2 如何实现降序和升序排序?
select
ename, sal
from
emp
order by
sal desc; -- 指定降序
指定升序排列
select
ename, sal
from
emp
order by
sal asc; -- 指定升序
15.3 多字段排序
select
ename, sal
from
emp
order by
sal asc, ename asc;
多字段排序:在
order by
子句中,可以指定多个字段进行排序,字段之间用逗号分隔。排序优先级:
sal asc
:首先按照薪资 (sal
) 升序排列。ename asc
:如果薪资相同,则按照员工姓名 (ename
) 升序排列。
主导字段:
sal
字段在前,起主导作用。只有当sal
相等时,才会启用ename
进行排序。
16. 综合案例:条件筛选与排序
找出工资在 1250 到 3000 之间的员工信息,并要求按照薪资降序排列。
select
ename, sal
from
emp
where
sal between 1250 and 3000
order by
sal desc;
条件筛选:
使用
where
子句筛选出薪资 (sal
) 在 1250 到 3000 之间的员工。between 1250 and 3000
表示薪资范围包含 1250 和 3000。
排序:
使用
order by sal desc
对筛选结果按照薪资降序排列。
查询结果:
返回符合条件的员工姓名 (
ename
) 和薪资 (sal
)。结果集中薪资从高到低排列。
SQL 关键字的执行顺序
在 SQL 查询中,关键字的顺序是固定的,执行顺序如下:
from
:
首先确定数据来源,即从哪张表中查询数据。
例如:
from emp
表示从emp
表中获取数据。
where
:
对从表中获取的数据进行条件筛选。
例如:
where sal between 1250 and 3000
表示筛选出薪资在 1250 到 3000 之间的员工。
select
:
从筛选后的结果中选择需要显示的字段。
例如:
select ename, sal
表示只显示员工姓名和薪资。
order by
:
对最终的结果集进行排序。
例如:
order by sal desc
表示按照薪资降序排列。注意:排序总是在最后执行!
数据处理函数(单行处理函数)
单行处理函数的特点:一个输入对应一个输出
多行处理函数:多行处理函数(多行处理函数的特点:多个输入,对应一个输出!)
单行处理函数常见的有哪些?
lower:转换小写
upper转换大写
substr:取子串(substr(被截取的字符串,起始下标,截取的长度))
注意:起始下标从1开始,没有0
length取长度
trim 去空格
round四舍五入
rand():生成随机数
ifnull
ifnull是空处理函数,专门处理空的
在所有数据库当中,只要有null参与的数学运算,最终结果就是null
注意:null只要参与运算,最终结果就是null
ifnull函数用法:ifnull(数据,被当做哪个值)
case...when...then...when....then...else...end
当什么时候,应该怎么样,当什么时候,应该怎么样.其他情况应该怎么样
当员工的工作岗位是manager的时候工资上调10%,当工作岗位是salesman的时候,工资上调50% 其他正常
注意:不修改数据库,只将结果查询为工资上调
分组函数(多行处理函数)
多行处理函数的特点:输入多行,最终输出一行。
5个:
count计数
sum 求和
avg 平均值
max 最大值
min 最小值
注意:
分组函数在使用的时候必须先进行分组,然后才能用。
如果你没有对数据进行分组,整张表默认为一组。
自动忽略null
分组查询(非常重要)
将之前的关键字全部组合在一起,来看一下他们的执行顺序?
select
...
from
...
where
...
group by
...
order by
...
以上关键字的顺序不能颠倒,需要记忆。
执行顺序是什么?
1. from
2. where
3. group by
4. select
5. order by
为什么分组函数不能直接使用在where后面?
select ename,sal from emp where sal > min(sal);//报错。
因为分组函数在使用的时候必须先分组之后才能使用。
where执行的时候,还没有分组。所以where后面不能出现分组函数。
select sum(sal) from emp;
这个没有分组,为啥sum()函数可以用呢?
因为select在group by之后执行。
重点结论:
在一条select语句当中,如果有group by语句的话,
select后面只能跟:参加分组的字段,以及分组函数。
其它的一律不能跟。
大总结(单表的查询学完了)
select
...
from
...
where
...
group by
...
having
...
order by
...
以上关键字只能按照这个顺序来,不能颠倒。
执行顺序?
1. from
2. where
3. group by
4. having
5. select
6. order by
从某张表中查询数据,
先经过where条件筛选出有价值的数据。
对这些有价值的数据进行分组。
分组之后可以使用having继续筛选。
select查询出来。
最后排序输出!
distinct关键字
查询结果去除重复记录【distinct】