mysql在数据库命令行操作基础应用
--查看当前在什么数据库里面
select database();
-- 数据库的备份与恢复
-- 备份
mysqldump -uroot -p 备份的数据库名称 > xx.sql // (表示定向输出到xx.sql)
-- 恢复
1.新建一个数据库 python_restore
2. mysql -uroot -p python_restore < xx.sql
-- E-R模型 三范式 逻辑删除
-- MySQL 查询
-- 准备数据
create table students(
id int unsigned primary key auto_increment not null,
name varchar(20) default '',
age tinyint unsigned default 0,
height decimal(5,2),
gender enum('男','女','人x','保密'),
cls_id int unsigned default 0,
isdelete bit default 0
);
insert into students values
(0,'韦少',18,180.00,2,1,0),
(0,'小月月',18,180.00,2,2,1),
(0,'彭于晏',29,185.00,1,1,0),
(0,'刘德华',59,175.00,1,2,1),
(0,'芙蓉',38,160.00,2,1,0),
(0,'凤姐',28,150.00,4,2,1),
(0,'王祖贤',18,172.00,2,1,1),
(0,'周杰伦',36,NULL,1,1,0),
(0,'程坤',27,181.00,1,2,0),
(0,'刘亦菲',25,166.00,2,2,0),
(0,'金星',33,162.00,3,3,1),
(0,'静香',12,180.00,2,4,0),
数据库名称: 当前正在使用这个数据库,并且查询的数据表就是属于该数据库就可以省略
-- 查询编号大于3的女同学
select * from students where id > 3 and gender = 2;
-- 查询编号小于4或没被删除的学生
select * from students where id < 4 or isdelete = 0;
-- 查找以周开头的学生
select * from students where name like '周%'
select * from students where name like '周__';
-- 使用正则表达式查询 rlike

-- order by 默认就是升序排序
-- select * from 表名 order by 列1 asc|desc,列2 asc|desc,...
select * from students order by height desc;
-- 聚合函数 为了统计而生
-- count(*) 整行是否为空
-- count(id) id 是否为空
-- 分组: group by ... having
-- 分组之后会对分组的数据执行一次升序排序的操作
-- 根据分组字段来筛选数据表中的数据 根据分组字段来比较当前这个数据在分组的结果集中是否存在,如果不存在, 会将改行所有的
-- 信息存入结果集合中,以后再遇到相同之中的时候就不会存入结果集中,但是会影响统计信息,
-- 获取班级上女生的总人数
any_value
select gender,count(*) from students group by gender having gender = 2;
where 是对于数据表的数据进行筛选的操作
having 是对分组的结果做进一步的筛选操作
-- limit
-- select * from 表名 limit start,count; start 的默认值为0
select * from students limit 5;
-- 已知 用户选择的页码 n, 1,2,3...n, 每页显示 m 条数据,求第 n 页应该显示哪些数据
-- 连接查询
-- 查询班级学生的名字和学生所在的班级名字
-- 学生名字: 在 students 表
-- 班级名字: 在 classes
错误: select students.name,classes.name from students,classes;
-- 连接查询 inner join on
-- inner join 内连接查询
SELECT students.name,classes.name from students inner join classes on students.cls_id = classes.id;
select s.name,c.name from students as s inner join classes as c on s.cls_id = c.id;
-- 第一种写法
select s.name,c.name from students as s join classes as c on s.cls_id = c.id;
-- 第二种写法
select s.name,c.name from students as s cross join classes as c on s.cls_id = c.id;
-- 外连接查询:左右连接
-- 左连接 左表示主表,主表中的数据会全部显示(不管漫步满足连接条件都会显示)
select s.name,c.name from students as s left join classes as c on s.cls_id = c.id;
select s.name,c.name from students as s right join classes as c on s.cls_id = c.id;
select s.name,c.name from students as s right outer join classes as c on s.cls_id = c.id;
-- 自关联
广东省: 100010 广东省 NULL
广州市: 100050 广州市 100010
天河区: 100080 天河区 100050
-- 查询广东省 有哪些市
-- 将 areas 表想象成两张表(父表,子表)
select p.atitle,s.atitle from areas as p inner join areas as s on s.pid = p.aid where p.atitle = '广东省';
-- 子查询
-- 总结
select database();
-- 数据库的备份与恢复
-- 备份
mysqldump -uroot -p 备份的数据库名称 > xx.sql // (表示定向输出到xx.sql)
-- 恢复
1.新建一个数据库 python_restore
2. mysql -uroot -p python_restore < xx.sql
-- E-R模型 三范式 逻辑删除
-- MySQL 查询
-- 准备数据
create table students(
id int unsigned primary key auto_increment not null,
name varchar(20) default '',
age tinyint unsigned default 0,
height decimal(5,2),
gender enum('男','女','人x','保密'),
cls_id int unsigned default 0,
isdelete bit default 0
);
insert into students values
(0,'韦少',18,180.00,2,1,0),
(0,'小月月',18,180.00,2,2,1),
(0,'彭于晏',29,185.00,1,1,0),
(0,'刘德华',59,175.00,1,2,1),
(0,'芙蓉',38,160.00,2,1,0),
(0,'凤姐',28,150.00,4,2,1),
(0,'王祖贤',18,172.00,2,1,1),
(0,'周杰伦',36,NULL,1,1,0),
(0,'程坤',27,181.00,1,2,0),
(0,'刘亦菲',25,166.00,2,2,0),
(0,'金星',33,162.00,3,3,1),
(0,'静香',12,180.00,2,4,0),
(0,'周杰',34,176.00,2,5,0);
as: 能够给数据表和字段起别名
数据库名称: 当前正在使用这个数据库,并且查询的数据表就是属于该数据库就可以省略
distinct: 去重
-- 查询编号大于3的女同学
select * from students where id > 3 and gender = 2;
-- 查询编号小于4或没被删除的学生
select * from students where id < 4 or isdelete = 0;
-- 查找以周开头的学生
select * from students where name like '周%'
select * from students where name like '周__';
-- 使用正则表达式查询 rlike
select * from students where name rlike '^周';
-- 范围查询
select * from students where id in(1,3,8);
-- between ... and
select * from students where id between 1 and 5;
-- 判断是否为空 null
select * from students where height is null;
-- order by 默认就是升序排序
-- select * from 表名 order by 列1 asc|desc,列2 asc|desc,...
select * from students order by height desc;
select * from students order by height desc,age desc;
-- 聚合函数 为了统计而生
-- count(*) 整行是否为空
-- count(id) id 是否为空
-- count(height) 身高
-- 分组: group by ... having
-- 分组之后会对分组的数据执行一次升序排序的操作
-- 根据分组字段来筛选数据表中的数据 根据分组字段来比较当前这个数据在分组的结果集中是否存在,如果不存在, 会将改行所有的
-- 信息存入结果集合中,以后再遇到相同之中的时候就不会存入结果集中,但是会影响统计信息,
-- 获取班级上女生的总人数
any_value
select gender,count(*) from students group by gender having gender = 2;
where 是对于数据表的数据进行筛选的操作
having 是对分组的结果做进一步的筛选操作
-- limit
-- select * from 表名 limit start,count; start 的默认值为0
select * from students limit 5;
-- 已知 用户选择的页码 n, 1,2,3...n, 每页显示 m 条数据,求第 n 页应该显示哪些数据
select * from students limit (n-1)*m,m
-- 连接查询
-- 查询班级学生的名字和学生所在的班级名字
-- 学生名字: 在 students 表
-- 班级名字: 在 classes
错误: select students.name,classes.name from students,classes;
-- 连接查询 inner join on
-- inner join 内连接查询
SELECT students.name,classes.name from students inner join classes on students.cls_id = classes.id;
select s.name,c.name from students as s inner join classes as c on s.cls_id = c.id;
select * from students as s inner join classes as c on s.cls_id = c.id;
-- 第一种写法
select s.name,c.name from students as s join classes as c on s.cls_id = c.id;
-- 第二种写法
select s.name,c.name from students as s cross join classes as c on s.cls_id = c.id;
-- 外连接查询:左右连接
-- 左连接 左表示主表,主表中的数据会全部显示(不管漫步满足连接条件都会显示)
select s.name,c.name from students as s left join classes as c on s.cls_id = c.id;
select s.name,c.name from students as s right join classes as c on s.cls_id = c.id;
select s.name,c.name from students as s right outer join classes as c on s.cls_id = c.id;
-- 自关联
广东省: 100010 广东省 NULL
广州市: 100050 广州市 100010
天河区: 100080 天河区 100050
-- 查询广东省 有哪些市
-- 将 areas 表想象成两张表(父表,子表)
select p.atitle,s.atitle from areas as p inner join areas as s on s.pid = p.aid where p.atitle = '广东省';
-- 子查询
-- 总结