知识点: 分三部分(对数据库库的操作、表的操作、数据的操作)
所需数据: school.sql、mysql基础命令.xmind
school.sql链接:
https://pan.baidu.com/s/1Em-7Z54kOgIr5OjnX0JosA
基础命令.xmind链接:
https://pan.baidu.com/s/1c8t_s_sL0uZEWvQtuI0Uzw
说明:
- 库名: student
- 表名:s
- 部分表中字段:
c_address: 地址
c_name:姓名
c_gender:性别
x:某个表的字段名
--------------------2020/10/11更新----------------------
数据类型和约束
数据类型:
整数 int、bit
小数 decimal
字符串 varchar、char、text
日期时间 date、time、datetime
枚举类型 enum
数据约束:
主键 PK
非空 not null
唯一 unique
默认 default
外键 fk
基础库表命令
查看MySQL服务状态
sudo service mysql status
停止MySQL服务
sudo service mysql stop
启动
sudo service mysql start
重启
sudo service mysql restart
登录数据库
mysql -uroot -p
退出登录
quit \ exit
查看数据库
show databases
创建数据库
create database 数据库名 charset=utf8
使用数据库
use 数据库名
查看当前使用的数据库
select database()
删除数据库
drop database 数据库名
查看表
show tables
创建表
create table student(
id int primary key auto_increment not null,
name varchar(20) not null,
age tinyint unsigned default 0,
height decimal(5, 2)
gender enum('男', '女')
)
修改表-添加字段
alter table 表名 add 列名 类型 约束
修改表-修改字段类型(modify不能修改字段名)
alter table 表名 modify 列名 类型 约束
修改表-修改字段名和字段类型
alter table 表名 change 原名 新名 类型 约束
修改表-删除字段
alter table 表名 drop 列名
查看创表SQL语句
show create table 表名
查看创库SQL语句
show create database 数据库名
删除表
drop table 表名
表数据操作命令
查:
select * from 表名
select 列1, 列2 from 表名
增:
insert into 表名 values ()
insert into 表名 (列1, 列2) values ()
insert into 表名 values (), ()
insert into 表名 () values (), ()
改:
update 表名 set 列1=值1, ... where 条件
删:
delete from 表名 where 条件
as和distinct关键字
as:
起别名
distinct:
过滤重复数据
select distinct 列1 from 表名
where条件查询
格式:
select * from 表名 where 条件
支持的运算符:
比较运算符(=、>、<、>=、<=、!=)
逻辑运算符(and、or、not)
模糊查询(like、%、_)
范围查询(between..and..、 int)
空判断(is null、is not null)
# 例子
查询编号大于3的学生:
select * from student where id > 3
查询编号大于3的女同学:
select * from student where id > 3 and gender = 0
查询姓黄并且“名”是一个字的学生:
select * from student where name like '黄_'
查询编号为3至8的学生:
select * from student where id between 3 and 8
查询没有填写身高的学生:
select * from student where height is null
排序
select * from 表名 order by 列 asc|desc
# 例子
查询未删除男生信息,按学号降序:
select * from student where gender=1 and is_delete=0 order by id desc
显示所有的学生信息,先按照年龄从大-->小排序,当年龄相同时 按照身高从高-->矮排序:
select * from student order by age desc, height desc
分页查询
select * from 表名 limit start, count
# 例子
查询前3行男生信息:
select * from student where gender=1 limit 0, 3
查询学生表,获取第n页数据的SQL语句:
select * from student limit (n-1)*m, m
聚合函数
通常对表中数据进行统计和计算,配合group by
count()
max()
min()
sum()
avg()
# 例子
返回身高中非NULL数据的总行数:
select count(height) from student
查询女生的编号最大值:
select max(id) from student where gender=0
查询未删除的学生最小编号:
select min(id) student where is_delete=0
查询男生的总身高:
select sum(height) student where gender=1
求男生的平均身高(聚合函数不统计null值,平均身高有误):
select avg(height) from student where gender=1
求男生的平均身高, 包含身高是null的
select avg(ifnull(height, 0)) from student where gender=1
分组查询
将查询结果按照指定字段分组
# group by
根据gender字段来分组:
select gender from student group by gender
# group by + group_concat()
根据gender字段进行分组,查询gender字段和分组的name字段信息:
select gender, group_concat(name) from student group by gender
# group by + 聚合函数
统计不同性别的人的平均年龄:
select gender, avg(age) from student group by gender
# group by + having
根据gender字段进行分组,统计分组条数大于2的:
select gender, count(*) from student group by gender having count(*) > 2
# group by + with rollup
根据gender字段进行分组,汇总所有人的年龄:
select gender, group_concat(age) from student group by gender with rollup
连接查询
内连接
左连接
右连接
自连接
# 内连接
使用内连接查询学生表与班级表:
select * from student as s inner join classes as c on s.cls_id=c.id
# 左连接
使用左连接查询学生表与班级表:
select * from student as s left join classes as c on s.cls_id=c.id
# 右连接
使用右连接查询学生表与班级表:
select * from student as s right join classes as c on s.cls_id=c.id
# 自连接
create table areas(
id varchar(30) not null primary key,
title varchar(30),
pid varchar(30)
)
select c.id, c.title, c.pid, p.title from areas as c inner join areas as p on c.pid = p.id where p.title = '山西省';
子查询
查询大于平均年龄的学生:
select * from students where age > (select avg(age) from students)
索引
查看表中已有索引
show index from 表名
创建索引
alter table 表名 add index 索引名 (列1, 列2)
优点:
加快查询速度
缺点:
创建索引会耗费时间和占用磁盘空间,并随着数据的增加而增加
原则:
最左原则
数据经常更新的要避免创建过多索引,经常查询的可以适当创建索引
数据量小最好不要使用
我是清茶!欢迎你和我一起讨论,我们下期见。