• MySQL的基本操作


        
    修改一个数据库的字符集    
    alter database 数据库名 character set 字符集名;
    
    修改一个数据库的校对规则
    alter database 数据库名 collate 校对规则名;
    
    删除一个数据库
    drop database 数据库名;
    
    练习:
    1.将数据库mydb2的字符集改成utf8
    2.将数据库mydb3的校对规则改成utf8_bin
    3.删除mydb1数据库
    
    创建数据表
    create table 数据表名(
        列名 列类型,
        列名 列类型,
        列名 列类型
    );
    
    MySQL中的数据类型:
    MySQL中的数据类型和Java中的数据类型并不是完全一一对应的关系.
    
    数值类型
    tinyint
    smallint
    MEDIUMINT
    int                (最常用)
    bigint
    
    
    
    时间和时间戳的区别:
    date:只包含日期,如果传入数据的时候,没有指定值,将是null
    timestamp:包含日和时间,如果传入数据时,没有指定值,将是当前的系统时间
    
    字符串类型:
    char:(character)定长,例如:指定长度为100,但是实际传入的值只有20,剩余的字符用空格补全.
    varchar:(variable character):可变长度,例如:指定长度为100,但是实际传入的值只有20,真实存储的就是20个字符
    
    创建一个没有约束的员工表:
    
    create table employee(
        id int,
        name varchar(20),
        gender varchar(10),
        birthday date,
        entry_date date,
        job varchar(50),
        salary double,
        resume text
    );
    
    查看表信息:
    show create table employee;//显示建表信息
    desc employee;//格式化显示
    
    单表约束:
    非空约束:not null
        name varchar(20) not null
    
    唯一约束:unique
        id int unique
        在MySQL中,唯一列,允许有null值,null并不等于null
        
    主键约束:primary key
        相当于非空约束 + 唯一约束
        uid int primary key auto_increment 
        auto_increment //表示此列的值如果不传入的话,系统自动赋值,在前一条记录基础上加1(通常用在int型主键上)
    
    练习:
    创建表employee2,加上各种约束
    
    create table employee2(
        id int primary key auto_increment,
        name varchar(10) not null,
        gender varchar(10) not null,
        birthday date not null,
        entry_date date not null,
        job varchar(50) not null,
        salary double not null,
        resume text
    );
    
    
    删除表:
    drop table tbl_name;
    
    
    修改表:
    添加列:
    alter table employee2
    add email varchar(20) not null;
    
    删除列:
    alter table employee2
    drop email;
    
    修改列:
    alter table employee2
    modify job varchar(40);
    
    alter table employee2
    change salary money float not null;
    
    修改表名:
    alter table employee2
    rename to emp;
    
    rename table emp to employee2;
    
    alter table employee2 drop money;
    
    alter table employee2 drop resume;
    
    
    插入数据到数据表
    insert into employee2 (id,name,gender,birthday,entry_date) values(1,'tom','male','2010-10-10','2018-3-4');
    
    把一个表中的所有列都显示出来
    select * from employee2;
    
    insert into employee2 (id,name,gender,birthday,entry_date,job) values(2,'toms','male','2000-10-10','2018-2-5','boss');
    
    当插入的列是一个表的所有列的时候,此时有简化写法:
    insert into employee2 values(3,'toms','male','2005-10-10','2018-2-10','clear');
    
    insert into employee2 values(4,'toms','male','2005-10-10','2018-2-10');//列数量不匹配
    
    insert into employee2 values(null,'toms','male','2005-10-10','2018-2-10',null);//主键列可以传null,系统自动维护
    
    //删除数据(记录)//删除表:drop 删除列:drop
    delete from 表名 [where id = 2];
    
        
        delete from employee2 where id = 2;
        delete from employee2 ;
    
    更新数据:update
    update 表名 set 列名 = 值 [where记录过滤条件];
    
        update employee2 set gender = 'female';
        update employee2 set gender = 'male' where id = 1;
    
    查询:select
    select 列名1,列名2... from 表名;
    
        select * from emp;
        select id,name from emp;
    
    中文乱码
    insert into employee2 values(null,'张飞','男','2010-10-10','2018-2-10',null);
    
    第一种解决方法:
    临时:
    mysql --default-character-set=gbk -uroot -proot;
    
    修改配置文件
    my.ini中修改
    default-character-set=gbk
    重启服务生效
    
    
    更新练习:
    练习:
    1.将tom的id改成50
        update employee2 set id = 50 where name = 'tom';
        
    2.将tyson的id改成60,job改成HR
        update employee2 set id = 60,job = 'HR' where name = 'tyson'; 
        
    3.将toms的salary在原有基础上增加1000
        update employee2 set salary = salary + 1000 where name = 'toms';
        
    4.把所有人的salary增加500
        update employee2 set salary = salary + 500;
    
    truncate和delete的区别
    truncate相当于delete不加where控制条件(清空表)
    truncate的操作是:先把表删除(drop table ...),然后重新创建一个一样的表.
    delete是一条一条数据的删除
    
    练习:
    1.删除表中id=2的记录
        delete from employee2 where id = 2;
        
    2.删除表中所有记录
        delete from employee2 ;
        
    3.使用truncate删除所有记录
        truncate employee2;
    
    查询操作
    select * from employee;
    select name , id from employee;
    
    select name ,id from stu where id > 3;//把id>3的记录的name和id列的值显示
    select distinct name from stu;
    
    create table stu(
        id int primary key auto_increment,
        name varchar(10),
        ch int not null,
        math int not null,
        team varchar(10)
    );
    
    insert into stu values(null,'tom',70,70,'first');
    insert into stu values(null,'tom',80,80,'first');
    insert into stu values(null,'toms',90,90,'first');
    
    insert into stu values(null,'tyson',70,70,'second');
    insert into stu values(null,'tyson',80,80,'second');
    insert into stu values(null,'toy',90,90,'second');
    
    insert into stu values(null,'tyson',70,70,'thrid');
    insert into stu values(null,'tyson',80,80,'thrid');
    insert into stu values(null,'toy',90,90,'thrid');
    
    //查询出的列可以进行运算
    select math + 10 from stu;
    
    //别名
    select math + ch as sum from stu;
    select math + ch sum from stu;//as 可以省略
    
    
    select * from stu where id > 3;
    select * from stu where id <= 5;
    select * from stu where id != 5;
    select * from stu where id <> 5;
    
    
    //选择一组和二组的记录
    select * from stu where team in('first','second');
    select * from stu where team = 'first' or team = 'second';
    
    //区间
    select * from stu where ch >= 70 and ch <= 85;
    select * from stu where ch between 70 and 85;
    
    
    //模糊查询
    select * from stu where name like 'to%';
    %占位符,表示任意多个字符
    select * from stu where name like 'to_';
    _占位符,表示一个任意字符
    
    select * from stu where name like '%m%';
    
    练习:
    1.查询成绩在80-90之间的记录:between and
        select * from stu where ch between 80 and 90;
        
    2.查询70,90分的记录
        select * from stu where ch in(70,90);
        
    3.查询所有姓张的同学的记录
        insert into stu values(null,'张三',80,90,'first',null);
        insert into stu values(null,'张三丰',80,90,'first',null);
        insert into stu values(null,'张飞',80,90,'first',null);
        select * from stu where name like '张%';
        
    4.查询所有名字为两个字的记录
        select * from stu where name like '__';
    
    //排序order by
    select name,ch from stu order by ch asc;//按照ch列升序排序,asc可以省略
    select name,ch from stu order by ch;
    
    select name,ch from stu order by ch desc;
        
    练习:(使用测试数据的表stu)
    1.查询各个学生总成绩,并按总分从高到底排序
        select ch + math from stu order by ch + math desc;
        select ch + math sum from stu order by sum desc;
        
    2.查询学生成绩,先按ch升序,ch相同,按math降序排序
        select * from stu order by ch asc, math desc;
        
    3.将所有姓张的同学的ch成绩降序排列    
        select ch from stu where name like '张%' order by ch desc;
        
    聚合函数
    count
    查询某列有多少行?
    select count(name) from stu;
    select count(*) from stu;    //查询表中的记录条数,不论某列是否有null值
    
    查询stu中math成绩>80的记录条数
    select count(*) from stu where math > 80;
        
    查询stu中总成绩>150的记录条数
    select * from stu where (ch + math) > 150;
    select count(*) from stu where (ch + math) > 150;
        
    
    sum
    查询stu中math的总成绩
    select sum(math) from stu;    
        
    查询各科总成绩
    select sum(ch),sum(math) from stu;    
        
    查询整个班级总成绩
    两种实现方式:
        1.先求出个人的总成绩,再加起来
            select sum(ch + math) from stu;
            select sum(ifnull(ch,0) + ifnull(math,0)) from stu;
            
        2.先求出整个班级单科总成绩,在加起来
            select sum(ch) + sum(math) from stu;
        
    当记录中某列有null值,进行算术运算,结果都为null.    
    如果使用聚集函数,就会把null值当0
    解决办法:使用ifnull函数
        
    查询math的平均分
        select sum(math) / count(*) from stu;
        
    查询math的平均分
        select avg(math) from stu;
        
    查询整个班级的平均分
        select avg(ifnull(math,0) + ifnull(ch,0)) from stu;
        //select avg(sum(ch) + sum(math)) from stu; 出错!!!
    
    求math最高分
        select max(math) from stu;
    
    求ch最低分
        select min(ch) from stu;//排除null值
        
        
    create table orders(
        id int,
        product varchar(20),
        price double
    );
    
    insert into orders values(1,'洗衣机',900);
    insert into orders values(2,'洗衣机',900);
    insert into orders values(3,'电视',700);
    insert into orders values(4,'电视',900);
    insert into orders values(5,'吹风机',20);
    insert into orders values(6,'游戏机',9);
        
    //求每种产品的销售总额
    select product , sum(price) from orders group by product;    
    select product , sum(price) as sum from orders group by product order by sum desc;
        
    //对分组后的数据再次进行过滤 (where)    
    select product , sum(price) as sum from orders group by product where sum > 1000;//不能用where进行过滤
    select product , sum(price) as sum from orders group by product having sum > 1000;
    对group by分组之后的结果再次进行过滤,使用关键字having    
        
        
    统计单价在100以上的产品销售总额大于1000的,降序排序
    select product,sum(price) sum from orders where price > 100 group by product having sum > 1000 order by sum desc;    
    s f w g h o    
    
    笛卡尔积
    表A                    表B
    1 aa1                1  bb1
    2 aa2                2  bb2
                        3  bb3
    
    select * from a,b;
    1 aa1 1  bb1
    1 aa1 2  bb2
    1 aa1 3  bb3
    2 aa2 1  bb1
    2 aa2 2  bb2
    2 aa2 3  bb3
    
    create table dept(
        did int primary key auto_increment,
        dname varchar(20)
    );
    
    create table emp(
        eid int primary key auto_increment,
        ename varchar(20),
        dno int
    );
    
    insert into dept values(null,'财务部');
    insert into dept values(null,'研发部');
    insert into dept values(null,'后勤部');
    
    insert into emp values(null,'toms',1);
    insert into emp values(null,'tyson',1);
    insert into emp values(null,'tom',2);
    insert into emp values(null,'lucy',3);
    insert into emp values(null,'lily',4);
    
    //内连接
    select * from emp inner join dept on emp.dno = dept.did;
    select * from emp,dept where emp.dno = dept.did;  (常用)
  • 相关阅读:
    UEFI启动 安装win8 win10 及windows server 2012 最简单的方法
    Android SDK中国在线更新镜像服务器 解决GOOGLE更新无法下载 更新失败的问题
    DELPHI 单元文件结构
    获取程序自身大小的2个函数
    实时获取网络时间 并转换为北京时间的函数
    部署maven的一些要点、遇到的问题
    cron表达式详解
    redhat安装xwindow环境
    tomcat执行文件权限
    一个方便的java分页算法
  • 原文地址:https://www.cnblogs.com/zyde/p/9046964.html
Copyright © 2020-2023  润新知