MYSQL(数据库的安装与使用)
MYSQL介绍
mysql 轻量级数据库
oracle 企业级数据库
数据的保存类型:1.数据2.视频3.图片4.文件
5.5以前不好用,5.5之后完善
1.压缩版
1.下载
2.解压(最好不要出现中文路径)
3.创建一个配置文件my.ini 创建一个名为data文件夹
4.填写配置文件
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=D:\mysql\mysql-5.7.16-win32
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql\mysql-5.7.16-win32\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
5.mysql初始化
(1)进入bin目录
(2)目录地址输入cmd
(3)输入mysqld install
(4)然后输入mysqld --initialize
(5)net start mysql
(6)修改mysql密码
可以进行环境配置
把/bin的绝对路径复制到计算机的高级系统配置,path环境添加
2.安装版
https://jingyan.baidu.com/article/da1091fb6dd1bb027849d633.html (安装版教程)
3.mysql的命令使用
1.数据库的安装使用命令、
show databases 展示全部数据库
create database xxx character set utf-8 创建数据库
show create database xxx 展示创建的数据库
drop database xxx 删除数据库
use xxx 使用某一个数据库
2.表的安装使用命令、
show tables 展示某一个数据库里面的所有表
create table xxx(id int(xx),name char(xx),age int(xx))创建一个表的各种字段
alter table xxx add xx char() 添加一个字段
alter table xxx modify xx char() 修改某一个字段的数据类型长度
change 替换某一个字段名或其他
int 分为:ting int(小整数) int(整数) bigint(大整数)
3.数据的插入与使用
语法
insert into 表名 values(对应的值,对应的值,对应的值)
增加内容 insert into xxx values(xx)
数据类型 char() int() date() time() datetime()等
4.数据的修改与使用
update 表名 set 修改的字段名=修改的值 where(条件)
*4.MYSQL查询与使用
select *(字段) from xxx(表名) where(条件)
'_'代表一个单字符 '%'代表未知的多个字符
between A and B (在某一个范围)
in (,) not in(,) (在那几个范围)
like() not like() (模糊查询)
=,<,>,<>(不等于) = != ,||,&&
is null is not null (空值判断)
聚合函数
sum()
avg()
min()
max()
count()等
分组与排序
group by 分组查询
order by asc 默认正序 order by desc 逆序
having 在group by 后面加条件
limit 限制页数与行数(以下标开始的)
limit 5 一页显示5个
用法 limit (3,5)下标三开始显示5个
-- 查询王燕的信息
select * from xs where xs.xs_name='王燕';
select xs_id,xs_name,xs_zy from xs where xs_name='王燕';
-- 查询并给重命名
select xs_id as '学号',xs_name as '姓名',xs_zy as '专业' from xs where xs_name='王燕';
-- 模糊查询法 '_'代表一个字符,‘%’代表多个字符
-- 查询名字中包含一个'燕'字的学生信息
select * from xs where xs_name like '%燕%';
-- 查询王姓的学生信息
select * from xs where xs_name like '王%';
-- 查询李姓的学生信息,并且规定姓名只有两个字
select * from xs where xs_name like '李_';
-- 查询在某一个范围内between A and B :查询A到B之间的数据 A必须小于B
select * from xs where xs_rq between '1990-02-10' and '1990-11-20'
-- 等价于
select * from xs where xs_rq >= '1990-01-01' and xs_rq <= '1990-12-31'
-- 指定具体几个范围数值
select * from xs where xs_rq in('1990-02-10','1990-11-20');
-- 不在指定范围内的
select * from xs where xs_rq not in('1990-02-10','1990-11-20');
-- 空值判断 is NULL
select * from xs where xs.xs_bz is null;
-- 非空判定
select * from xs where xs.xs_bz is not null;
-- 对查询结果进行排序 asc:正序 desc:倒序 order by 必须写在where后面
select * from xs where xs.xs_zy='计算机' order by xs.xs_rq desc;
-- 复合排序 先按专业排序,当专业相同时,按日期排序
select * from xs order by xs.xs_zy asc,xs.xs_rq desc;
-- 查询前几条记录 limit
-- 查询学号小于81110的前5个学生信息
select * from xs where xs_id < 81110 limit 5;
-- 查询学号小于81110的从第2条开始(下标为1),获取3条数据
select * from xs where xs_id < 81110 limit 1,3;
-- 查询学号小于81110的学生信息,列出从下标为2开始的三个学生信息
select * from xs where xs_id < 81110 limit 1,3;
-- 分组查询 group by 将查询结果分为男女两个组
-- 分组后只能显示对应组别的信息,例如:以性别分组后,只能显示两条信息,并且仅能显示与分组相关的信息
-- 分组一般与聚合函数一起使用
-- sum(),avg(),count(),max(),min()..
-- 统计计算机专业中男女生人数
select xs.xs_xb,count(xs_id) from xs where xs.xs_zy='计算机' group by xs.xs_xb;
-- 统计计算机专业中男女的最大年龄
select xs.xs_xb,min(xs_rq) from xs where xs.xs_zy='计算机' group by xs.xs_xb;
-- 查询所有学生中男生和女生年龄最大的两个学生的信息
-- 先将学生分组,获得男生、女生最大的日期
-- 将上一步的查询结果作为条件,合并
-- having 语句的用法 ---where语句里面不能有统计函数,而且where条件不能对group by 进行分组
-- having 一般与group by 结合使用
-- 查询所有学生的平均成绩
select xs_id as '学号',avg(kc_cj)as '平均成绩' from xs_kc group by xs_id;
-- 查询平均成绩大于80的学生信息
-- 1、查询平均成绩大于80的学生id‘
select xs_id from xs_kc group by xs_id having avg(kc_cj)>80;
-- 2、利用查询到的id查询学生的基本信息
select * from xs where
xs_id in(select xs_id from xs_kc group by xs_id having avg(kc_cj)>80);
-- 多表查询
-- 查询所有学生的课程及成绩
select xs.xs_name,kc_name,xs_kc.kc_cj from xs,xs_kc,kc where xs_kc.kc_id = kc.kc_id and xs_kc.xs_id = xs.xs_id;
-- 多表连接
-- 查询选修了206课程且成绩在80分以上的学生姓名及成绩
select xs.xs_name,xs_kc.kc_cj from xs,xs_kc where xs.xs_id = xs_kc.xs_id and xs_kc.kc_cj>80 and xs_kc.kc_id=206
-- join on
select xs.xs_name,xs_kc.kc_cj from xs join xs_kc on xs.xs_id = xs_kc.xs_id where xs_kc.kc_cj>80 and xs_kc.kc_id=206
-- 查询选修了“计算机基础”课程并且成绩在80分以上的学生学号、姓名、课程名及成绩
select xs.xs_id as '学号',xs.xs_name as '姓名' ,kc.kc_name as '课程名',xs_kc.kc_cj as '成绩'
from xs join xs_kc on xs.xs_id=xs_kc.xs_id
join kc on kc.kc_id=xs_kc.kc_id
where kc.kc_name='计算机基础' and xs_kc.kc_cj>80;
-- 查询数据库中课程不同、成绩相同的学生的学号、课程号及成绩
select a.xs_id as '学号',a.kc_id as '课程号',a.kc_cj as '成绩'
from xs_kc as a join xs_kc as b on a.kc_cj=b.kc_cj
and a.xs_id = b.xs_id
and a.kc_id!=b.kc_id;
-- LEFT OUTER JOIN :左外连接。。。在结果表里除了匹配行外,还包括左表有的但右表中不匹配的行,对于这样的行,从右表被选择的列设置为NULL
-- 查询所有学生情况及他们选修的课程号,若学生未选修任何课,也要包括其情况
select xs.*,kc_id from xs left outer join xs_kc on xs.xs_id=xs_kc.xs_id;
-- 交叉连接:CROSS JOIN 范例:列出所有学生所有可能的选课情况
select xs.xs_id as '学号',xs_name as '姓名',kc.kc_id as '课程号',kc.kc_name as '课程名'
from xs cross join kc;
-- 去重复 distinct 范例:查找所有学生选过的课程名和课程号
select distinct xs_kc.kc_id as '课程号',kc.kc_name as '课程名' from xs_kc,kc where kc.kc_id=xs_kc.kc_id;
-- 替换查询结果中的数据
--
select xs.xs_id as '学号' ,xs.xs_name as '姓名',xs.xs_xf as '学分' ,
case
when xs.xs_xf is null then '未选课'
when xs.xs_xf < 50 then '不及格'
when xs.xs_xf >= 50 and xs.xs_xf <=52 then '合格'
else '优秀'
end
as '等级'
from xs where xs.xs_zy='计算机';