工作生活软件测试MySQL

软件测试——MySQL基础

2020-03-18  本文已影响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’;

上一篇下一篇

猜你喜欢

热点阅读