您的位置:首页 > 数据库 > MySQL

mysql在数据库命令行操作基础应用

2018-04-03 22:33 627 查看
--查看当前在什么数据库里面
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);





    -- select查询 as distinct
    as: 能够给数据表和字段起别名

    表名: sql 语句中只有一个表的时候表名可以省略
    数据库名称: 当前正在使用这个数据库,并且查询的数据表就是属于该数据库就可以省略
    distinct: 去重



    -- where 条件
    -- 查询编号大于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 = '广东省';

    -- 子查询

    -- 总结
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: