软件测试——MySQL基础

作者: 小小一颗卤蛋 | 来源:发表于2020-03-18 21:11 被阅读0次

    基本语句

    DML语句:(database maptipu.. Language:数据库操作语言), 它是用来对数据库中的对象进行操作的语言。
    delete:删除
    update:更新
    insert:插入

    DDL语句:(database defined Language:数据库定义语言),主要用来创建和修改数据库中的对象。
    create:创建
    alter:修改
    drop:删除

    DCL语言:(database control language:数据库控制语言),它是对数据库权限控制的操作。
    grant:授权
    connect:连接

    DQL语句:(databse Query Language:数据库查询语言),它是用来查询数据库中的对象的。select:查询

    修改表名:rename oldname to newname; commit;
    修改表添加字段:alter table myemp add(hiredate DATE);
    修改表删除字段:alter table myemp drop(hiredate);
    修改表修改段:alter table myemp modify(gender char(5));
    删除表:drop table myemp;
    ***********************************************************
    ##进入MySQL:
    1,CMD 进入命令输入
    2,d:  进入D盘
    3,cd D:\HPEU\Software\EasyPHP5.2.10\mysql\bin  找到MySQL的路径
    4,dir
    5,D:\HPEU\Software\EasyPHP5.2.10\mysql\bin> mysql -uroot -p
    6,enter
    注意:首先要确定easyphp5.2.10 的已经打开
    ***********************************************************
    ##进入内部数据库:
    1,mysql> show databases;   显示数据库
    2,mysql> use ciircrm   使用数据库中的一个数据库(ciircrm)
    Database changed(数据库被改变)
    3,mysql> show  tables; (显示tables)
    4,mysql> select * from cri_change;   选择其中一个表(cri_change)
    
    **********************************************************
    ##创建一个自己的数据库:
    1,create  database class;   class为数据库名称
    2,show databases;  查看是否创建成功
    3,create table student(1 条件,2,条件.....); 
       创建学生表 ()中填写学生表的首行信息以及输入限制
    4,insert into student(1,2,....)values(),()...();    添加学生表的内容
    5, select * from student;   选择学生表
    
     ##插入数据:insert into myemp(id,gender,name,birth,salary,job,dept)
    values(6,'W','Flacs',TO_DATE('1997-05-03','YYYY-MM-DD'),4000,'UI开发工程师',123458);
    更新数据:update myemp set GENDER='G' where GENDER='M';
    删除数据:delete from MYEMP where job='CEO';
    
    **********************************************************
    查询信息:
    1,学生中是男生并且是class1班的学生信息
        select * from student where sex='mal' and grade='class1';
    2,学生中是男生并且是class1班并且年龄大于16岁的学生信息
        select * from student where sex='mal' and grade='class1'and age>16;
    3,学生中是class1班或者class2班的学生的女生信息
        select * from student where( grade='class1' or grade='class2' )and sex='femal'  ;
    4,学生中所有男生的学生信息
        select * from student where sex='mal';
    

    标准的SQL字符串匹配: like “%”匹配任意数目字符。

    1,要查找学生表中姓名含有‘li’的人员信息
    select * from student where name like ‘%li%’;
    2,学生中名字是以’li’开头的学员信息
    select * from student where name like 'li%';
    3,学生中名字是以’zhang’结尾的学员信息
    select * from student where name like '%zhang';
    4,学生中名字中包含’li’并且是class3班的学员信息
    select * from student where name like '%li%'and grade='class3';
    5,学生中名字中不包含’li’并且是class3班的学员信息
    select * from student where name not like '%li%'and grade='class3';

    ##介绍常见的Mysql典型聚合函数:
    min()、max()、sum()、avg()、count()
    1,学生表中最大年龄是多少
        select max(age) from student;
    2,学生表中最小年龄是多少
        select mim(age) from student;
    3,学生表中学生年龄之和是多少
        select sum(age) from student;
    4,学生表中学生的平均年龄是多少
        select avg(age) from student;
    5,学生表中共有多少学生
        select count(*) from student;    count(*)记行的
    

    Group by语法:

    可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表,SELECT子句中的列名必须为分组列或列函数。
    1,要得到学生中每个班的最大年龄
    select grade,max(age) from student group by grade;
    2,每班平均年龄的学生的班级信息
    select grade,avg(age) from student group by grade;
    3,学生表中每班最小年龄的学生的班级、年龄信息
    select grade,min(age) from student group by grade;
    4,学生表中同一个地方的有多少人
    select adress,count() from student group by adress;
    5,学生表中每个班有多少个人
    select grade,count(id) from student group by grade;
    6,class1班同学同一地方的人数
    select adress,count(
    ) from student where grade='class1' group by adress;
    7,class1和class2的同学来自同一地方的人数
    select adress,count(id) from student where grade='class2' or grade='class2 'group by adress;
    8,来自同一地方的全部男同学
    select adress,count(id) from student where sex='mal'group by adress;

    ##Having语法:
    可以筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by之后。而having子句在聚合后对组记录进行筛选
    1,要得到学生中每个班的最大年龄并且最大年龄小于19岁的班级
        select grade,max(age) from student group by grade having max(age)<19;
    2,表中每班平均年龄大于16岁的班级、年龄信息
        select grade,avg(age) from student group by grade having avg(age)>16;
    3,表中每班最大年龄大于17岁的班级、年龄信息
        select grade,max(age) from student group by grade having max(age)>17;
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ##Order by语法:
    使用ORDER BY子句对查询返回的结果按一列或多列排序(升序asc降序desc)。
    1,每班平均年龄大于16岁的学生的姓名、班级、年龄信息并按照年龄降序排列
         select name,grade,avg(age) from student group by grade having avg(age)>16 order by age desc;
    2,每班最大年龄大于17岁的学生的姓名、班级、年龄信息并按照年龄降序排列
         select name,grade,max(age) from student group by grade having max(age)>17 order by age desc;
    3,根据年龄从小到大顺序排出学生的相关信息
        select * from student order by age asc ;
    4,按照学号升序排列学生的信息
        select * from student order by number asc ;
    5,根据年龄从大到小顺序排出学生的相关信息
        select * from student order by age desc ;
    6,小明同学想按照学号降序排列学生的信息
        select * from student order by number desc ;
    7,查看class1班所有学生的id、姓名、和性别,并以年龄的降序排列
        select id,name,sex from student where grade='class1' order by age desc;
    8,所有女生的姓名和电话,并以年龄升序排列学生的信息?
        select name,phone from student where sex='femal' order by age desc; 
    

    Limit语法:

    用于强制 SELECT 语句返回指定的记录数。
    1,学生中每个班的最大年龄并且显示从第二条开始显示两条
    select grade, max(age) from student group by grade limit 1,2;
    limit 1,2 :表示从第二行开始,显示两行(行数计数从0开始,即第一行的行标为0)
    2,每班平均年龄大于16岁的学生的班级、年龄信息并按照年龄降序排列并取得前两行数据
    select grade, age from student group by grade having avg(age)>16 order by age desc limit 0,2;
    3,每班最大年龄大于17岁的学生的班级、年龄信息并按照平均年龄降序排列并从第二行开始取得三行数据
    select grade, age from student group by grade having max(age)>17 order by avg(age) desc limit 1,3;
    4,根据年龄从小到大顺序排出学生的相关信息并取得前五行数据
    select * from student order by age asc limit 0,5;


    查询语句:

    SELECT selection_list   选择哪些列
    FROM table_list     从何处选择行
    WHERE primary_constraint      行必须满足什么条件
    GROUP BY grouping_columns    怎样对结果分组
    HAVING secondary_constraint   分组之后的行必须满足的第二条件
    ORDER BY sorting_columns       怎样对结果排序
    LIMIT count          结果限定
    

    注意:HAVING从句与WHERE从句的区别是,HAVING表达的是第二条件,在与其他从句配合使用,显然不能在WHERE子句中的项目使用HAVING


    创建第二个表学生成绩表:
    performance:create table performance(id int(4) not null auto_increment PRIMARY key,number
    char(10) not null,name char(10) not null,grade char(10),course char(10) not null ,core
    int(4) DEFAULT 0,time timestamp DEFAULT CURRENT_TIMESTAMP());

    插入信息: insert into performance(number, name, grade, course,core) values
    ('HP0001','li1','class1','develop',90),
    ('HP0001','li1','class1','test',80);

    查询信息:

    1. 列出performance表中,各班级名以及班级最高分和最低分。
      select grade,max(core),min(core) from performance group by grade;

    2. 列出performance表中,课程名为develop的各班级名以及班级的最高分和最低分。
      select grade,max(core),min(core) from performance where course='develop' group by grade;

    3. 列出performance表中,课程名为test的班级名,最低分数和最高分数,并且最低分数小于80的班级。
      select grade,max(core),min(core) from performance where course='develop'
      group by grade having min(core)<80;

    4. 列出performance表中姓名不包含’li1’信息的所在班级中的每个学员的学号、姓名和班级名
      select number,name, grade from performance where name not like'%li1%';

    5. 列出performance表中test成绩大于平均成绩的学员的相关信息。
      select * from performance where course='test' and core >(select avg(core) from performance where course='test') ;


    多表查询语句:积笛卡尔积(交叉连接):

    如:得到student表和performance表中的所有数据;
    select performance.*,student.* from performance ,student;
    

    列和表的别名用法:

    1.在Mysql中数据库的表名在Unix操作系统上区分大小写,在windows上不区分大小写。
    2.在Mysql中列名是不区分大小写的。
    3.表的别名是区分大小写的。
    4.列的别名是不区分大小写的。
    如:将student表查询时命名为S1表,将performance表查询时命名为S2表
    Select S1.,S2. from student S1, performance S2;

    union 和union all 的用法:

    联合的意思,即把两次或多次查询结果合并起来,要求两次或多次查询的列数必须一致。
    1. Union 对两个结果集进行并集操作,重复数据只显示一次。
    2. Union All,对两个结果集进行并集操作,重复数据全部显示。
    如:将student表查询时命名为S1表,将performance表查询是命名为S2表,并将S1表中的列
    id、number、name、grade与S2表合并起来。
    (Select S1.id, S1.number, S1.name, S1.grade from student S1)
    Union (select S2.id, S2.number, S2.name, S2.grade from performance S2)

    左连接的用法:

    left join (left outer join):对于左连接,不仅匹配前面的行记录,而且还显示左边的表,而右边的表中无匹配的行。对于这样的行,从右边表选择的列均被显示为NULL。这样,每一匹配的行都从左边的表被选出,而如果右边表有一个匹配的行,则被选中,如果不匹配,行仍然被选中,不过,其中右边相应的列在结果集中均设为NULL。即,LEFT JOIN强制包含左边表的每一行,而不管右边表是否匹配。

    如:将student表查询时命名为S1表,将performance表查询是命名为S2表,并查询出S1表中所有学生的相关成绩。
    -SELECT s1.name,s1.grade,s2.course,s2.core from student s1 left join performance s2 on s1.name = s2.name where s1.grade=‘class2’;

    内连接的用法:

    内连接的数据记录中,不会存在字段为NULL的情况。可以简单地认为,内链接的结果就是在左连接或者右连接的结果中剔除存在字段为NULL的记录后所得到的结果。

    如:将student表查询时命名为S1表,将performance表查询是命名为S2表,并查询出student表中与performance表中都存在的学生的成绩,并且是class2班的学生。
    SELECT s1.name,s1.grade,s2.course,s2.core from student s1 inner join performance
    s2 on s1.name = s2.name where s1.grade=‘class2’;

    相关文章

      网友评论

        本文标题:软件测试——MySQL基础

        本文链接:https://www.haomeiwen.com/subject/ayfhyhtx.html