MYSQL基础知识和操作

一 MySQL数据库安装和使用;
1.地址栏中输入cmd进入命令窗口,输入net start mysql80,查看mysql服务是否开启。net stop mysql80
2.环境变量中,选择path,将安装目录复制(C:Program FilesMySQLMySQL Server 8.0in)到path,点击确定
3.在cmd中进入安装目录,输入cd C:Program FilesMySQLMySQL Server 8.0in,回车
4.输入mysql -uroot -p 提示需要输入密码。登录成功,
5.可使用show databases;命令来查看数据表
6.Mysql的连接认证基本语法:
Mysql.exe/mysql -h主机地址 -P端口号 -u用户名 -p密码 例:mysql -h127.0.0.1 -uroot -p密码 -P3306
quit命令可以退出MySQL

二 mysql数据类型;
1.数值类型 int:4个字节; integer:与int同义词; float:4个字节; double:8个字节
2.字符串类型 char:固定长度字符串; varchar:可变长度字符串;
3.日期型 Date:YYYY-MM-DD; Datetime:YYYY-MM-DD HH:MM:SS Time: HH:MM:SS
MySQL支持选择在该类型关键字后面的括号内指定整数值显示宽度(例如,int(4))显示宽度并不限制可以在列内保存的值范围,也不限制超过列的指定宽度的值的
显示。

三 数据库定义语言;
1.创建数据库: create database 数据库名;使用数据库; use 数据库名
2.创建学生表
create table student(
id int(10为显示宽度并不影响数据的真实长度)整数型 primary key (主键是不允许重复)auto_increment(自动生成的数),
name varchar(8)可变型字符串。名字长度不固定显示8个字符,
sex char(1)性别固定 只有男 女 所以说固定1个字符的变量
score float(6,2)
);
show tables 显示表
3.删除表
drop table 表名
4.删除数据库
drop database 数据库名
5.修改表
查看表数据 select * from 表名 ;insert into 表名(变量1,变量2)values("值1","值2);

修改表的结构:
增加列
alter table 表名 add 列名 数据类型(长度)
修改列的数据类型
alter table 表名 modify 列名 数据类型(长度)
修改列的名称
alter table 表名 change 愿列名 新列名 数据类型(长度)
删除列
alter table 表名 drop 列名

四 数据操作语言
1.向表中插入数据 insert into 表名(变量1,变量2)values("值1","值2);
inert to student(表名)(name,age)values("张三",20);
2.修改表中数据 update 表名 set 字段2=值1,字段2=值2,。。[where]
update student(表名)set age=20(字段=值) where id=1(某个字段=值所在的那一行)
3.删除表中的数据 delete from 表名 [where]
4.删除表的所有内容 delete from 表名

五 数据查询语言
1.单表查询
select ... from 表名 [where] ....[group by]...[having]..[order by asc/desc]
A 查询整张表的内容 例;select * from 表名;
B 查询表的部分数据:
1.查询部分列 如查询部门表里 编号 姓名 薪水 字段:
select 编号,姓名,薪水 from 部门表;
2.查询部分行 如查询部门表里薪水>2500的部门员工;
select * from 部门表 where 薪水>2500;
3.查询部分行和列 如查询部门表里薪水>2500 员工的编号,姓名,薪水;
select 编号,姓名,薪水 where 薪水>2500;
C 查询结果进行排序:
1.升序 如对部门表里的薪水进行升序排列
select * from 部门表 order by 薪水 asc;
2.降序 如对部门表里的薪水进行升序排列
select * from 部门表 order by 薪水 desc;

2.模糊查询
只能与字符一起使用的like关键字;
like 加 通配符进行排序
a. 从部门表里查询姓名以M开头的员工信息
select * from 部门表 where 姓名 like "%M%" ;%表示任意字符任意多个
b. 从部门表里查询姓名以M开头员工信息
select * from 部门表 where 姓名 like “M%”;
c. 从部门表里查询姓名的第二个字母是M的员工信息
select * from 部门表 where 姓名 like "_M%" ;_代表一个字符
区间范围的 between...and....;在给定的值中进行选择的;
a. 从部门表里查询薪水在2000-3000之间的员工信息
select * from 部门表 where 薪水 between 2000 and 3000;
也可以加上排序看起来更整齐
select * from 部门表 where 薪水 between 2000 and 3000 order by 薪水 asc;
in 在指定的值中进行选择
a. 从部门表里职位字段的值中选择出是经理,职员的信息
select * from 部门表 where 职位 in(“职员”,“经理”);
也可以加上排序
select * from 部门表 where 职位 in("职员",“经理”)order by 职位;如果没有指定asc 或者是 desc 会默认的是升序;

3.分组函数 也叫做聚合函数
count()行总数统计 sum()求和 avg()平均数 max()最大 min()最小
a. 从部门表统计符合某些条件的信息如:
统计部门表里总共员工的数量;
select count(*) from 部门表;
统计部门表里客服的员工总数;
select count(*) from 部门表 where 部门="客服";
统计部门表里职位为经理的员工总数;
select count(*) from 部门表 where 职位=”经理“;
b. 从部门表里查询员工的总薪水
部门所有员工总薪水数
select sum(薪水) from 部门表
查询部门表里客服员工总薪水
select sum(薪水) from 部门表 where 部门=”客服“;
查询部门表里经理总薪水
select sum(薪水) from 部门表 where 职位=”经理“;
c. 从部门表里查询员工的平均水平
部门所有人平均薪水
select avg(薪水) from 部门表
查询部门表里客服员工平均薪水
select avg(薪水) from 部门表 where 部门=”客服“;
d 从部门表里查询员工的 薪水max()最多 薪水min()最少
查询部门表里客服员工最多薪水
select max(薪水) from 部门表
查询部门表里客服员工最多薪水
select max(薪水) from 部门表 where 部门=”客服“;

查询部门表里客服员工最少薪水
select min(薪水) from 部门表
查询部门表里客服员工最多薪水
select min(薪水) from 部门表 where 部门=”客服“;
4.分组 group by....[having] 与我们上面的分组函数一起使用;having只能配合group by 一起使用
统计各部门总人数
select 部门(这里是为了配合显示更直观) count(*) from 部门表 group by 部门;
统计各部门总人数,但是人数少于4人不显示
select 部门(这里是为了配合显示更直观) count(*) from 部门表 group by 部门 having count(*)>3;
5.表连接查询 遵循99标准连接查询
A. inner join 内连接查询 select ... from 表1 inner join 表2 on 连接条件 [where];
表的主从关系和约束,例如一个员工信息表里员工所在的部门都是编号,而另一张部门信息表里存有部门编号、名称等信息。员工信息表里部门编号必须和部门信息表里部
门编号是一致的。否则的话连接报错。这里的部门信息表是主键 员工信息表是外键
如从员工信息表里查找员工的编号 名称 薪水 部门的名称而不是显示员工的编号。查询方式如下
select 编号,名称,薪水,部门名称(部门信息表里的字段) from 员工信息表 inner join 部门信息表 on 员工信息表.部门编号=部门信息表.部门编号;
从员工信息表里查找员工的编号 名称 薪水大于3000 部门的名称而不是显示员工的编号
select 编号,名称,薪水,部门名称(部门信息表里的字段) from 员工信息表 inner join 部门信息表 on 员工信息表.部门编号=部门信息表.部门编号 where 薪水>3000;
从员工信息表里查找员工的编号 名称 薪水大于3000 部门的名称而不是显示员工的编号,在排序;
select 编号,名称,薪水,部门名称(部门信息表里的字段) from 员工信息表 inner join 部门信息表 on 员工信息表.部门编号=部门信息表.部门编号
where 薪水>3000 order by 薪水;
B. left/right join 外连接查询 select ... from 表1 left/righ 表2 on 连接条件 [where];
例如一个员工信息表里员工所在的部门都是编号,而另一张部门信息表里存有部门编号、名称等信息。员工信息表里部门编号必须和部门信息表里部门编号是一致的
但是部门表里有一部分编号的信息员工信息表是没有用到的。
如要从员工信息表里查找员工的编号 名称 薪水 部门的名称而不是显示员工的编号,并且没有员工的部门名称也要显示出来查询方式如下;
select 编号,名称,薪水,部门名称(部门信息表里的字段) from 员工信息表 rigth join 部门信息表 on 员工信息表.部门编号=部门信息表.部门编号;
”“”上面的rigth join 后面的是主表。因为我们要显示所有部门名称,而员工信息里没有使用全部部门,所以部门信息表示作为主表来连接的。left join所不
同的是在left 前面是做为主表的。区别只是主表的位置不同,其它的都是一样的
原文地址:https://www.cnblogs.com/Centwei/p/15484031.html