zoukankan      html  css  js  c++  java
  • 软件测试培训总结篇1

    所学内容的整体整理(中):数据库的全部查询命令详解:

    查询

    简单的查询记录基础语法

    基础语法 select 查询的内容(也就是字段名1,字段名2from 表名 where 条件

    (用*号可以显示所有字段)

    查询李进峰的所有基本信息

    SELECT * FROM student WHERE sname='李进峰';

    查询李进峰和菲菲的所有基本信息

    SELECT * FROM student WHERE sname='李进峰' OR sname='菲菲';

    SELECT * FROM student WHERE sname IN (‘李进峰’, '菲菲');

    查询所有姓张的同学的所有基本信息

    SELECT * FROM student WHERE sname LIKE '%';

    查询姓名中有“宇”的同学的所有信息

    SELECT * FROM student WHERE sname LIKE '%%';

    查询姓名长度为3,第一个字为“李”最后一个字是“照”的记录

    SELECT * FROM student WHERE sname LIKE '_';

    查询所有姓张和姓李的同学的学号和姓名以及出生年月

    SELECT sid,sname,borth_year FROM student WHERE sname LIKE '%' OR sname LIKE '%'

    SELECT sid,sname,borth_year FROM student WHERE sname LIKE [张李]%';

    查询姓“杨”并且所在省份为“河北省”的同学的学号

    SELECT sid FROM student WHERE sname LIKE '%' AND province='河北省';

    查询北京湖南河南省同学的所有信息

    SELECT * FROM student WHERE province=’北京' OR province='湖南' OR province='河南省'

    SELECT sid,sname,borth_year FROM student WHERE province IN ('北京', '湖南', '河南省');

    查询姓“”李但是所在省份没有“湖南”字样的同学的省份证号码

    SELECT card_id FROM student WHERE sname LIKE '%' AND province NOT LIKE '%湖南%'

    查询18岁(不含18)以前上学的同学的姓名和电话

    SELECT sname,tel FROM student WHERE year(enrollment)-borth_year<18;

    查询所有大于25岁的人的所有信息

    SELECT * FROM student WHERE year(getdate())-year(enrollment)>25;

    通配符

    使用环境,用于模糊查询,连接符号用Like 而非 =

    * 代表全部,所有,没有规定数量和内容。一般用于select 后面 不作为条件

    _ 代表一个字符,一个数据位。中文要用两个__ 。作为条件使用

    % 代表任意的,没有规定数量和内容。作为条件使用

    [1,2,3] 从括号内的任意值。作为条件使用

    select * from student where stname like '%'

    select * from student where stname like '[张李]%'

    运算符。条件

    -- = 两边内容相同。

    -- > 左边大于右边。

    -- < 右边大于左边。

    -- >= 左边大于等于右边。

    -- <= 右边大于等于左边。

    -- <> 或者 != 不等于

    -- between A and B 介于 A B 之间,并且 >=a <=b  .前面的数要小于后面的数,包含边界数的。

    select * from grade where coursegrade = 80

    select * from grade where coursegrade between 80 and 100

    条件关联

    -- 条件1 and 条件2 :要同时满足条件1 和 条件2 是并且的关系。

    -- 条件1 or 条件2 :只要满足一个条件就可以 是或的 关系。

    -- () :先去执行括号中得条件

    -- 字段 in (1,2,3) :字段的内容要满足 值1 或 值2 或 值3

    select * from student where family = '北京' and stname like '%'

    select * from student where family in ('上海','天津')

    排序

    --对查询到的结果按照升序或者降序的方式进行排列。

    --语法 order by 字段 排序方式 (desc,asc)  asc 可以省略

    --注意:order by 一定要写在所有查询sql 的最后面

    select * from grade order by coursegrade

    聚合函数

    对查询的结果中某个字段进行函数运算

    sum(字段) :求和函数 字段需为数字类型

    avg(字段) :求平均值 字段需为数字类型.不会计算为空的条目。

    min(字段) :最小的值

    max(字段) :最大的值

    count(字段) :统计字段的个数,这里可以使用 * ,统计所有结果的行数。

    distinct(字段) :去重复

    注:聚合函数,不能放在WHERE中,需要放在HAVING

    -- 显示学生的总成绩

    select sum(coursegrade) from grade

    -- 显示最高的成绩是多少

    select min(coursegrade) from grade

    select avg(coursegrade) from grade

    select * from grade

    select count(*) from student

    DISTINCT 去除重复行

    SELECT DISTINCT province FROM student;

    别名AS (Alias)

    as 临时别名

    列别名在WHERE中不能使用 GROUP BY 中不能使用 ORDER BY 中可以

    表别名可以在任何地方使用

    select class, sex, count(sex)  as数量 FROM student GROUP BY class,sex ORDER BY class;

    select count(*) as 学生个数 from student

    select stname as 姓名,stuid as 学号from student

    SELECTORDER BY 不影响表中数据 所以可以使用别名

    分组里加WHEREORDER BY

    --统计每个课程的选修人数大于2个人的信息

    对课程分组,显示课程和对应的人数

    select couid,count(stuid) from grade group by couid having count(stuid) >2

    --统计<学生选修信息表>,统计每个同学的总成绩

    统计记录条数 count

    查多少名学生

    SELECT count(*) FROM student

    查有多少种班级

    SELECT count (DISTINCT class) FROM student;

    查入学时间在1990-1-12000-12-31的学生个数

    SELECT count(enrollment) FROM student WHERE  enrollment BETWEEN '1990-1-1' AND '2000-12-31' ;

    分组查询 GROUP BY

    先对查询内容进行分组、分类,然后在对一个组中的数据进行查询或者运算

    select 查询的内容 from 表名 group by 字段名

    select stuid,sum(coursegrade) from grade group by stuid

    select * from grade

    select stuid,sum(coursegrade) from grade where coursegrade is not null group by stuid

    分组前条件

    group by 之前使用where 条件去选取数据

    分组后条件

    group by 分组后 + having 条件

    select stuid,sum(coursegrade) from grade where coursegrade is not null

    group by stuid having sum(coursegrade) >=200

    --统计<学生信息表>,统计每个班级中每种性别的学生人数

    select * from student

    --统计按照性别分得学生人数

    select sex,count(stuid) from student group by sex

    --统计<学生信息表>,统计每个班级中每种性别的学生人数,两个分组条件

    --统计<grade>,统计每门课程的平均成绩,并按照成绩降序排序

    select couid,avg(coursegrade) from grade group by couid order by avg(coursegrade) desc

    RIGHT函数

    取身份证最后5位数

    SELECT right(card_id, 5) FROM student;

    将身份证补齐20位,前面用0

    SELECT right('00'+card_id, 20) FROM student;

    SELECT ‘00’+card_id FROM student;

    LEFT函数

    取身份证的前10

    SELECT left(card_id, 10) FROM student;

    将学号小于50的电话设置成NULL

    UPDATE student SET tel = NULL WHERE sid< 50;

    将电话为NULL的学生信息查询出来

    SELECT * FROM student WHERE tel IS NULL;

    判断条件是NULL的时候不能用= 要用IS   IS  NOT

    HAVING

    分组查询中,如果条件中有聚合函数,不能放在WHERE中,需要放在HAVING

    查询平均出生年>1991的班级信息

    SELECT class,avg(borth_year) FROM student GROUP BY class HAVING avg(borth_year) > 1991 ;

    统计哪些班级男生平均年龄大于20

    SELECT calss FROM student WHERE sex=’’ GROUP BY class HAVING avg(year(getdate())-borth_year)>20;

    优先级WHERE——GROUP BY——HAVING——PRDER BY

    查询学生的姓名和出生年,年龄最大的放前面

    SELECT sname, borth_year FROM student ORDER BY borth_year ;

    TOP  查询结果去前几个结果

    查询年龄最大的学生信息 年龄最大的前10

    SELECT  TOP 1 sname, borth_year FROM student ORDER BY borth_year ;

    SELECT  TOP 10 sname, borth_year FROM student ORDER BY borth_year ;

    查询年龄最小的学生信息 年龄最大的前10

    SELECT  TOP 1  sname, borth_year FROM student ORDER BY borth_year DESC;

    SELECT  TOP 10 sname, borth_year FROM student ORDER BY borth_year  DESC;

    查询按照学号排序,前50个学生的信息

    SELECT TOP 50  * FROM student ORDER BY sid;

    查询最近入学的10名学生信息

    SELECT TOP 10 * FROM student ORDER BY enrollment DESC;

    关联查询(等值联接)只需看懂查询语句的意思即可

    内连接 等值连接

    外连接 1、左连 2、右连

    多表关联

    1内连接 等值连接 inner join

    语法 select 内容 from 1 inner join 2 on 等值条件

    select * from student inner join grade on grade.stuid = student.stuid

    select grade.couid,couname,coursegrade from grade inner join course on grade.couid = course.couid

    2外连接 outer join

    1)左连 select 内容 from 1 left outer join 2 on 条件

    2)右连 select 内容 from 1 right outer join 2 on 条件

    select * from grade  outer join student on student.stuid = grade.stuid

    注:左连接 outer join 左边的表为准,要显示全部的左边表的数据,如果右边表没有关联的数据显示Null   与右边表比较 当右边表没有值时 只取左边表的记录

    select * from student right outer join grade on student.stuid = grade.stuid

    注:右连接 outer join 右边的表为准,要显示全部的右边表的数据,如果左边没有关联数据,显示Null

    多表关联

    语法:select 内容 from 1,表2,表3 where 条件

    select stname,couname,coursegrade from student,course,grade

    where student.stuid = grade.stuid and course.couid= grade.couid and coursegrade >80

    select * from grade

    --所有男同学的平均成绩

    select avg(coursegrade) from student,grade where student.stuid = grade.stuid and sex = '' and coursegrade is not null

    select * from student

    3子查询,嵌套查询

    --当某一个查询的条件,是在另一个查询的结果集里面时,使用嵌套查询

    --查询李四的成绩。

    select * from grade where stuid = (select stuid from student where stname ='李四')

    --查询 张三和李四的成绩

    select * from grade where stuid in

    (select stuid from student where stname ='张三' or stname = '李四')

    select * from grade where stuid = (select stuid from student where stname ='张三')

    or stuid = (select stuid from student where stname ='李四')

    --有考试成绩在 70~90的学生的姓名

    select stname from student where stuid in

    (select stuid from grade where coursegrade between 70 and 90)

    视图与索引为额外拓展部分

    视图/虚表  view

    创建视图  create view 视图名 as (SQL)

    create view tiger as (

    select stname,couname,coursegrade from student,grade,course

    where student.stuid = grade.stuid and grade.couid = course.couid)

    --注意1.视图中不保存数据,不保存表结构,不保存表,没有约束。只保存sql 语句。

    --注意2.视图可以当表来使用,可以用视图去建视图。但是,不建议做 增 删 改的操作。

    --注意3.删除视图时,不会影响到原来的基础表。可以直接在视图中使用SELECT

    create view big_tiger as (select stname,coursegrade from tiger )

    delete from big_tiger where coursegrade is null

    删视图

    --语法:drop view 视图名

    drop view big_tiger

    drop view tiger

    视图的优点

    --1.对于使用sql 不熟练来说。视图是个很简单的查询途径

    --2.对于经常重复的复杂sql,使用视图可以提高查询效率

    --3.可以辅助用于权限管理,提高数据的安全性

    --4.帮助保护表和数据的完整一致性

    视图的缺点

    --1.降低了查询效率

    --2.增加保存空间

    --3.无法对数据和表进行操作。使得操作测试不方便进行。

    create view cll as (

    select class,count(stuid) as 人数 from student group by class

    )

    select * from cll where 人数 = 2

    --视图在企业中如何应用

    1.对于测试而言,降低测试的复杂度。例如:复杂 sql 写一次保存视图,以后都直接调用视图。

    2.对于测试而言,降低工作难度。例如:新来的新人可能对表结构不熟悉,对sql 也不熟悉,使用视图可以尽快上手开始工作。

    3.对于开发而言,降低服务器的工作。提高服务器运行效率。例如:如果不用视图,查询语句要在服务器端生成传给数据库。如果使用视图,服务器直接查询视图就可以满足查询功能。

    4.对产品设计和业务人员而言,降低了工作难度,不用学习和使用复杂sql 语言。例如:如果产品或者业务人员想去查询某些指定的数据时,只要让开发或测试人员建一个视图。直接去查询视图就可以了。

    索引

    --索引就像目录,表中对于一个字段的目录结构。如果想操作表中的数据,先在索引字段中找到那一行,然后再去操作那一条数据。

    --注意1:建议索引设置在主键、外键、唯一约束,效率高

    --注意2:索引是应用于查询条件的。经常使用的查询条件字段,应该被设置为索引字段。

    --注意3:一个表中可以有多个索引,索引之间可以交叉字段,一个索引可以有多个字段。

    索引的优点:

    --1.提高查询效率

    --2.提高排序效率

    索引的缺点:

    --1.占用数据库资源

    --2.降低了对数据库增、删、改的效率

    索引在企业中如何应用:

    --1.页面上如果有很多的查询条件并且需要排序时,建议一一创建索引。

    --2.检查是否主键和外键、唯一约束建立了索引关系。

    --3.在测试过程中应该检查,运行查询条件时是否使用了索引。

    --4.测试中检查,平凡被更新的表,不要设置太多的索引。

    --建索引

    --语法:create index 索引名 on (字段,字段...);

    create index suoyin1 on student(stname,family);

    --删索引

    --语法:drop index 表名.索引名

    drop index student.suoyin

  • 相关阅读:
    平时十六测
    平时十五测
    平时十四测
    poj 1486 Sorting Slides
    POJ 3621Sightseeing Cows
    POJ 2728 Desert King
    POJ3111 K Best
    NOIopenjudge 407:Heritage
    POJ#2065. SETI
    HDU 4607 Park Visit
  • 原文地址:https://www.cnblogs.com/k874146812-/p/7942695.html
Copyright © 2011-2022 走看看