前言
-
参考B站的《老杜带你学_mysql入门基础(mysql基础视频+数据库实战)》,记录MySQL5.7数据库的安装教程和常用的命令;
-
B站链接和课程资料添加文章末尾,需要自取
-
附带以前MongoDB4.1的安装教程,仅做备份。
一、MySQL5.7安装教程
参考链接:https://blog.csdn.net/m0_49284219/article/details/121972531。
注意:我的MySQL安装在D:\MySQL5.7\bin
二、常用命令
0.设置自启动
- 先执行
mysqld -install
- 然后
右键任务管理器--服务--打开服务--找到MySQL--手动改自动
1.手动启动相关命令(方式通用)
net start mysql #启动MySQL服务
mysql -u root -p #登陆MySQL,password:123456
exit/quit #退出MySQL
net stop mysql #停止MySQL服务
2.数据库和表的相关命令
2.1 数据库的相关命令
select version(); #查看数据库版本
select database(); #查看当前使用的数据库
show databases; #查看mysql数据库
create database test20220410; #创建一个名为test20220410的数据库
drop database test20220410; #删除一个名为test20220410的数据库
use test20220410; #使用test20220410的数据库
了解:MySQL5.7自带的4个系统数据库
- information_schema:这个数据库保存了mysql服务器所有数据库的信息。比如数据库的名、数据库的表、访问权限、数据库表的数据类型,数据库索引的信息等等。
- mysql:mysql的核心数据库,类似于sql server中的master表,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。
- performance_schema:主要用于收集数据库服务器性能参数,可用于监控服务器在一个较低级别的运行过程中的资源消耗、资源等待等情况。链接: performance_schema全方位介绍.
- sys:库中所有的数据源来自:performance_schema。目标是把performance_schema的把复杂度降低,让DBA能更好的阅读这个库里的内容。让DBA更快的了解DB的运行情况。链接: MYSQL的SYS数据库.
2.2 表的相关命令
show tables; #查看当前数据库下有几张表
source E:\file\mysql-demo\bjpowernode.sql #导入指定目录下的sql文件到当前数据库下,路径不能有中文
select * from emp; #查询指定表中的数据,emp是表名
desc emp; #不看表的数据,只看表的结构。describe描述,缩写desc
了解:关于表相关的基本概念
- 数据库最基础的单元是表
- 任何一张表都有行和列
- 行(row):被称为数据/记录,
- 列(column):被称为字段,
- 每一个字段都有:字段名、数据类型、约束等属性
- 字段名:普通的名字,见名知意就行
- 数据类型:字符串、数字、日期等
- 约束:约束有很多,其中有一个是唯一性约束。这种约束添加后,该字段的数据不能重复
三、SQL语句的分类(DQL、DML、DDL、TCL、DCL)
- DQL(Data Query Language):
- 数据查询语句(凡是带有select关键字的都是查询语句)
- select …
- select语句是永远不会进行修改操作的
- DML(Data Manipulation Language):
- 数据操作语句(凡是对表中的数据进行增删改的都是DML)
- insert delete updata
- insert: 增
- delete: 删
- updata: 改
- 这个主要是操作表中的数据data
- DDL(Data Definition Language):
- 数据定义语言(凡是带有create、drop、alter的都是DDL)
- DDL主要操作的是表的结构,不是表中的数据。
- create: 新建,等同于增
- drop: 删
- alter: 修改
- 这个增删改和DML不同,这个主要是对表结构进行操作
- TCL(Trasactional Control Languag):
- 事务控制语言:
- 包括:
- 事务提交:commit
- 事务回滚:rollback
- DCL(Data Control Language):
- 数据控制语言。
- 例如:授权grant、撤销权限revoke…
1.简单查询
语法格式
# 简单查询
select job from emp; #查询一个字段:select 字段名 from 表名;
select job,ename from emp; #查询二个或者多个字段:select 字段名,字段名 from 表名;
select * from emp; #查询所有字段:select * from 表名;
select empno,ename,job.... from emp; #查询所有字段:select 所有的字段名 from 表名;
# 起别名
select ename as username from emp; #将显示的查询结果列名显示为username,
select ename as '姓名' from emp; #将显示的查询结果列名显示为中文“姓名”,原列名不变
select ename '姓名' from emp; #可以将as省略,但是个人感觉阅读性差点
select ename 'user name' from emp; #别名中有空格,可以用单引号或者双引号包裹
# 列参与数字运算
select ename,sal*12 from emp; #将sal(月薪)*12,计算为年薪展示
select ename,sal*12 as yearsal from emp; #结合起别名混合使用
注意:在所有的数据库中,字符串统一使用单引号括起来,单引号是标准,双引号在Oracle数据库中用不了。但是在MySQL可以使用
2.条件查询
语法格式
# 条件的字段,和select的字段不是必然关系,条件的字段只要表中就可以了,select的字段只是显示符合条件的内容展示形式
select
字段1,字段2,字段3....
from
表名
where
条件;
案例
# = 等于
#查询薪资等于800的员工姓名和编号?
select ename,empno from emp where sal = 800;
#查询SMITH的编号和薪资?
select empno,sal from emp where ename = 'SMITH';
# <>或!= 不等于
#查询薪资不等于800的员工姓名和编号?
select ename,empno from emp where sal != 800;
select ename,empno from emp where sal <> 800;
# < 小于 && <= 小于等于
#查询薪资小于2000的员工姓名和编号?
select ename,empno from emp where sal < 2000;
select ename,empno from emp where sal <= 2000;
# > 大于 && >= 大于等于
#查询薪资大于3000的员工姓名和编号?
select ename,empno from emp where sal > 2000;
select ename,empno from emp where sal >= 2000;
# between … and …. 两个值之间, 等同于 >= and <=
# 注意:
# 使用between and的时候,必须遵循左小右大。
# between and是闭区间,包括两端的值。
#查询薪资在2450和3000之间的员工信息?包括2450和3000
select ename,empno,sal from emp where sal >= 2450 and sal <= 3000;
select ename,empno,sal from emp where sal between 2450 and 3000;
# is null 为 null(is not null 不为空)
# 注意:在数据库当中null不能使用等号进行衡量。需要使用is null,因为数据库中的null代表什么也没有,它不是一个值,所以不能使用等号衡量。
#查询哪些员工的津贴/补助为null?
select empno,ename,sal,comm from emp where comm is null;
#查询哪些员工的津贴/补助不为null?
select empno,ename,sal,comm from emp where comm is not null;
# and 并且
#查询工作岗位是MANAGER并且工资大于2500的员工信息?
select ename,empno,job,sal from emp where job = 'MANAGER' and sal > 2500;
# or 或者
#查询工作岗位是MANAGER和SALESMAN的员工?
select ename,empno,job from emp where job = 'MANAGER' or job = 'SALESMAN';
# 注意:
#and和or同时出现的话,有优先级问题,and优先级较高。如果想让or先执行,需要加“小括号”,以后在开发中,如果不确定优先级,就加小括号就行了。
#查询工资大于2500,并且部门编号为10或20部门的员工?
select * from emp where sal > 2500 and (deptno =10 or deptno =20);
# in 包含,相当于多个 or (not in 不在这个范围中)
# 注意:in不是一个区间。in后面跟的是具体的值。
#查询工作岗位是MANAGER和SALESMAN的员工?
select empno,ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';
select empno,ename,job from emp where job in('MANAGER', 'SALESMAN');
#查询工作薪资不在800,5000,3000的员工信息?
select ename,sal from emp where sal not in(800, 5000, 3000);
# not 可以取非,主要用在 is 或 in 中
# is null
# is not null
# in
# not in
3.模糊查询
语法格式
# like称为模糊查询,支持%或下划线匹配
# %匹配任意多个字符
# 下划线:任意一个字符。
# (%是一个特殊的符号,_ 也是一个特殊符号)
select
字段1,字段2,字段3....
from
表名
where
'模糊查询字段' like '匹配字符';
案例
#找出名字以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 '%\_%';
4.查询并排序
语法格式
# 有查询有排序的时候:先查询后排序
select
字段1,字段2,字段3....
from
表名
where
条件
order by
字段 asc;
# 默认是升序,也可以最后加上asc
select
字段1,字段2,字段3....
from
表名
order by
按照某个字段升序 asc;
# 降序:最后添加desc
select
字段1,字段2,字段3....
from
表名
order by
按照某个字段降序 desc;
# 多个字段查询
select
字段1,字段2,字段3....
from
表名
order by
字段1 asc/desc, 字段2 asc/desc;
案例
#查询所有员工薪资,并按照薪资升序排序
select ename,sal from emp order by sal;
#查询所有员工薪资,并按照薪资降序排序
select ename,sal from emp order by sal desc;
#查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,再按照名字升序排列。
select ename,sal from emp order by sal asc, ename asc;
#找出工资在1250到3000之间的员工信息,要求按照薪资降序排列
select ename,sal from emp where sal between 1250 and 3000 order by sal desc;
5.数据处理函数/单行处理函数–> 横向处理
语法格式
select 函数(字段) from 表名; # 横向处理
案例
# lower 转换小写
select lower(ename) as ename from emp;
# upper 转换大写
select upper(name) as name from t_student;
# substr 截取子串(substr( 被截取的字符串, 起始下标,截取的长度))
# 注意:起始下标从1开始,没有0.
# 找出员工名字第一个字母是A的员工信息?
select ename from emp where ename like 'A%'; #模糊查询
select ename from emp where substr(ename,1,1)='A'; #substr 截取子串
# 将查询结果实现首字母大写?
select concat(upper(substr(name,1,1)),substr(name,2,length(name) - 1)) as result from t_student;
# concat函数进行字符串的拼接
select concat(empno,ename) from emp;
# length 取长度
select length(ename) enamelength from emp;
# trim 去空格
select * from emp where ename = trim(' KING');
# 结合insert语句使用
# str_to_date('字符串日期', '日期格式')
# str_to_date 将字符串varchar类型转换成date类型
insert into t_user(id,name,birth) values(1, 'zhangsan', str_to_date('01-10-1990','%d-%m-%Y'));
# 按照默认格式%Y-%m-%d,就不需要转换了
insert into t_user(id,name,birth) values(2, 'lisi', '1990-10-01');
# date_format(日期类型数据, '日期格式')
# date_format 将date类型转换成具有一定格式的varchar字符串类型。
select id,name,date_format(birth, '%m/%d/%Y') as birth from t_user;
+------+----------+------------+
| id | name | birth |
+------+----------+------------+
| 1 | zhangsan | 10/01/1990 |
+------+----------+------------+
# 如果数据库日期是默认格式,可以省略date_format
mysql> select id,name,birth from t_user;
+------+----------+------------+
| id | name | birth |
+------+----------+------------+
| 1 | zhangsan | 1990-10-01 |
+------+----------+------------+
# format 格式化数字:format(数字, '格式')
select ename,format(sal, '$999,999') as sal from emp; // 设置千分位,
#case..when..then..when..then..else..end
#当员工的工作岗位是MANAGER的时候,工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%,其它正常。(注意:不修改数据库,只是将查询结果显示为工资上调)
select
ename,
job,
sal as oldsal,
(case job when 'MANAGER' then sal*1.1 when 'SALESMAN' then sal*1.5 else sal end) as newsal
from
emp;
# round 四舍五入(round( 数字, 保留的小数位))
select 'abc' as bieming from emp; # select后面直接跟“字面量/字面值”
select 1000 as num from emp; # 1000 也是被当做一个字面量/字面值。
select round(1236.567, 0) as result from emp; #保留整数位。
# rand() 生成随机数
select round(rand()*100,0) from emp; # 100以内的随机数
# ifnull 可以将 null 转换成一个具体值。ifnull是空处理函数。专门处理空的
# 注意:在所有数据库当中,只要有NULL参与的数学运算,最终结果就是NULL。
# 为了避免这个现象,需要使用ifnull函数。
# ifnull函数用法:ifnull(数据, 被当做哪个值)
# 如果“数据”为NULL的时候,把这个数据结构当做哪个值。
select ename, (sal + ifnull(comm, 0)) * 12 as yearsal from emp;
6.多行处理函数/分组函数–> 纵向处理
语法格式
select 函数(字段) from 表名; # 纵向处理
# 多行处理函数的特点:输入多行,最终输出一行。
# 5个函数:
# count 计数
# sum 求和
# avg 平均值
# max 最大值
# min 最小值
#注意:
# 分组函数在使用的时候必须先进行分组,然后才能用。
# 如果你没有对数据进行分组,整张表默认为一组。
注意事项&案例
# 计算员工数量
select count(ename) from emp;
# 计算工资和
select sum(sal) from emp;
# 计算平均工资
select avg(sal) from emp;
# 找出最高工资
select max(sal) from emp;
# 找出最低工资
select min(sal) from emp;
# 注意:
# 分组函数在使用的时候必须先进行分组,然后才能用。
#如果你没有对数据进行分组,整张表默认为一组。
# 注意1:分组函数自动忽略NULL,你不需要提前对NULL进行处理
select sum(comm) from emp;
# 注意2:分组函数中count(*)和count(具体字段)有什么区别?
select count(*) from emp; # count(*):统计表当中的总行数。(只要有一行数据count则++)
select count(comm) from emp; # count(具体字段):表示统计该字段下所有不为NULL的元素的总数。
# 注意3:分组函数不能够直接使用在where子句中,需要按照分组查询(group by)使用。
# 找出比最低工资高的员工信息。
select ename,sal from emp where sal > min(sal); # ERROR 1111 (HY000): Invalid use of group function
# 报错的原因跟sql执行顺序有关系,可以看下分组函数和分组查询的内容,
# 1.因为分组函数在使用的时候必须先分组之后才能使用。
# 2.这里可以把sal > min(sal)看成是where后的一个语句
# 3.where执行后才是group by执行,因此min(sal)这个就没有办法进行分组。
# 4.这样就跟第1条“分组函数在使用的时候必须先分组之后才能使用”冲突,就产生了报错
# 注意4:所有的分组函数可以组合起来一起用。
select sum(sal),min(sal),max(sal),avg(sal),count(*) from emp;
7.分组查询–> 非常重要★★★★★
语法格式
# 什么是分组查询?
# 在实际的应用中,可能有这样的需求,需要先进行分组,然后对每一组的数据进行操作。
select
...
from
...
group by
...
注意事项&案例★★★★★
# 注1:关键字的书写顺序
select
...
from
...
where
...(模糊查询:%任意字符_任意一个字符。like %T)
group by
...
having
...
order by
...
limit
...
# 注2:关键字的执行顺序
1. from
2. where
3. group by
4. having
5. select
6. order by
7. limit
# 注3:使用having可以对分完组之后的数据进一步过滤。
# having不能单独使用,having不能代替where,having必须和group by联合使用。
# 重点结论:
# 在一条select语句当中,如果有group by语句的话,select后面只能跟:参加分组的字段,以及聚合函数。其它的一律不能跟。
# 找出每个工作岗位的工资和?
select job,sum(sal) from emp group by job;
# 以上这个语句的执行顺序?
# 先从emp表中查询数据。
# 根据job字段进行分组。
# 然后对每一组的数据进行sum(sal)
# 找出每个部门的最高薪资
select deptno,max(sal) from emp group by deptno;
# 找出 "每个部门,不同工作岗位"的最高薪资?(两个字段联合分组)
select deptno,job,max(sal) from emp group by deptno,job;
# 找出每个部门最高薪资,要求显示最高薪资大于3000的?
select deptno,max(sal) from emp group by deptno having max(sal) > 3000;
select deptno,max(sal) from emp where sal > 3000 group by deptno;
# 优化策略:
# where和having,优先选择where,where实在完成不了了,再选择having。
# where没办法的????
# 找出每个部门平均薪资,要求显示平均薪资高于2500的。
select deptno,avg(sal) from emp group by deptno having avg(sal) > 2500;
8.把查询结果去除重复记录【distinct】
语法格式
# distinct只能出现在所有字段的最前方。
select
distinct 字段1,字段2,字段3....
from
表名;
案例
# 去重某一个字段下的内容
select distinct job from emp;
#两个字段联合起来去重
select distinct job,deptno from emp;
#可以在distinct前面加函数
select count(distinct job) from emp;
注意
distinct 去重:原表数据不会被修改,只是查询结果去重
四、MongoDB4.1安装教程
参考链接:https://www.cnblogs.com/lpl666/p/12872532.html#22-mongodb安装步骤
总结和相关链接
MySQL5.7主要记录基础操作命令,其他内容等后续需要时再补充;
MongoDB4.1是以前安装的,暂时没有使用,只记录安装教程,具体使用等后续用到了再补充。
B站视频链接:https://www.bilibili.com/video/BV1Vy4y1z7EX?p=11&spm_id_from=pageDriver
课程资料链接: https://pan.baidu.com/s/1i7YTlAML6S77AvSes6s4SQ 提取码: 6vbb
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/84971.html