软件测试——MySQL基础

基本语句

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,条件.....);
创建学生表 ()中填写学生表的首行信息以及输入限制:如(number,int)
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.列的别名是不区分大小写的。

    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班的学生。

   s2 on s1.name = s2.name where s1.grade=‘class2’; 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350

推荐阅读更多精彩内容

  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 1,072评论 0 0
  • Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 S...
    忘了呼吸的那只猫阅读 2,853评论 0 8
  • 一、数据库操作: 1.1 创建数据库: create database student; 1.2 删除数据库: ...
    __71db阅读 780评论 0 0
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,448评论 0 13
  • 理论知识 修改数据表 1.修改表名 格式:Alter table 旧表名 rename [to] 新表名; 如下:...
    lufaqiang阅读 1,434评论 0 0