软件测试-数据库-day02

目标

1. 能够通过select语句查询表的所有信息及部分字段
2. 能够通过条件判断(比较运算、逻辑运算、范围查询、模糊查询)查询表中指定数据
3. 能够通过order by关键字进行排序
4. 掌握聚合函数的用法
5. 能够通过group by关键字进行分组操作
6. 能够通过having关键字对分组后的数据进行筛选

一、数据更新操作

1.【知道】添加多行数据

-- 方式一: 写多条insert语句, 多条语句之间用英文分号分隔
insert into students (id, name) values(0,'张三');
insert into students (id, name) values(0,'李四');
insert into students  values(0,'李四',20,180);
​
-- 方式二: 通过一条insert语句插入多条数据, 数据间用逗号分隔
-- insert into 表名 values (...), (...) ...
insert into students values(0,'亚瑟3',23,167.56),(0,'亚瑟4',23,167.56);
​
-- insert into 表名 (字段名1,字段名2....) values (字段值1,字段值2,....),(字段值1,字段值2,....) ...
insert into students (id,name)values(0,'小黑'),(0,'小蓝'),(null,'大白');

2.【知道】修改数据

-- update 表名  set  字段名1=值1,字段名2=值2...... where  条件
-- 修改id为5的数据,将名称设为狄仁杰,年龄设为22
update students set name='狄仁杰',age=22 where id=5; 
  • 注意:修改数据时一定要加条件,否则修改的是所有记录的值

3.【知道】删除数据

-- delete from 表名 where 条件(物理删除对应的数据)   
delete from students where id=6;
  • 注意

    • 此方法为物理删除, 工作中大部分使用逻辑删除

    • 逻辑删除是指通过设定一个字段来标识当前记录已经删除

      • is_delete字段来标识, 1代表删除, 0表示未删除

        • 如果is_delete为1,不会把这个记录数据展示到页面

        • 用户看不到这个数据,用户认为这个数据被删除了

其他删除数据的方式:

-- truncate table 表名   (清除表里面所有的数据,但是表结构会保留. 自增长字段的值会从1开始。)
truncate table  studens;
​
-- drop table 表名  (删除数据表,包括数据和表结构)
drop table students;

二、数据查询操作

1.【操作】数据准备

drop table if exists students;
create table students (
studentNo varchar(10) primary key,
name varchar(10),
sex varchar(1),
hometown varchar(20),
age tinyint(4),
class varchar(10),
card varchar(20)
);
​
insert into students values
('001', '王昭君', '女', '北京', 20, '1班', '340322199001247654'),
('002', '诸葛亮', '男', '上海', 18, '2班', '340322199002242354'),
('003', '张飞', '男', '南京', 24, '3班', '340322199003247654'),
('004', '白起', '男', '安徽', 22, '4班', '340322199005247654'),
('005', '大乔', '女', '天津', 19, '3班', '340322199004247654'),
('006', '孙尚香', '女', '河北', 18, '1班', '340322199006247654'),
('007', '百里玄策', '男', '山西', 20, '2班', '340322199007247654'),
('008', '小乔', '女', '河南', 15, '3班', null),
('009', '百里守约', '男', '湖南', 21, '1班', ''),
('010', '妲己', '女', '广东', 26, '2班', '340322199607247654'),
('011', '李白', '男', '北京', 30, '4班', '340322199005267754'),
('012', '孙膑', '男', '新疆', 26, '3班', '340322199000297655');

2.【知道】查询的基本操作

  • 查询部分字段的值

    -- select 字段名1,字段名2.... from 表名    (查询的为一部分的字段的信息)
    -- 查询学生表中的姓名、性别、年龄的数据
    select name,sex,age from students;
  • 取别名

    -- 给表取别名,为后面关联查询做准备
    -- select 别名.字段名1,别名.字段名2.....  from 表名 as  别名
    select s.name,s.sex,s.age from students as s;
    ​
    -- 给字段取别名
    -- select 字段名1 as 别名1, 字段名2 as 别名2 .... from 表名;
    select name as 姓名, sex as 性别, age as 年龄 from students;
  • 去重

    --  select distinct 字段名1,字段名2.... from 表名;
    -- 根据学生的性别去重
    select distinct sex  from students;

3.【重点】条件查询

  • 语法格式

    select 字段名1,字段名2.... from 表名  where 条件
    select * from students where id=5;

3.1【重点】条件查询:比较运算符

  • 比较运算符: 大于(>)、等于(=)、小于(<)、大于等于(>=)、小于等于(<=)、不等于(<>或者!=)

    -- 查询id值为005的记录
    select * from students where studentNo='005';
    -- 查询studentNO的值不为006
    select * from students where studentNo <> '006';

3.2【重点】条件查询:逻辑运算符

  • 逻辑运算符: and(且,同时符合对应的条件), or(或,符合其中的一个条件), not(非,不符合该条件)

    -- 查询年龄等于18的女生的记录(and)
    select * from students where age=18 and sex='女';
    ​
    -- 查询出女学生或者是1班的学生
    select * from students where sex='女' or class='1班'
    ​
    -- 查询非天津学生的记录
    select * from students where not hometown='天津';

3.3【重点】条件查询:模糊查询

  • 模糊查询: like关键字

    • % : 匹配任意个字符

    • _ :匹配任意单个字符

    • 一般LIKE关键字只用来匹配字段类型为字符串的

    -- 查询姓孙的学生
    select * from students where name like '孙%';
    ​
    -- 查询姓小的学生且名字只有一个字
    select * from students where name like '孙_';
    ​
    ​
    -- 查询姓名以乔结尾的学生
    select * from students where name like '%乔';
    ​
    -- 查询姓名包含 白的学生
    select * from students where name like '%白%'

3.4【重点】条件查询:范围查询

  • in : 查询非连续范围内的数据

--  查询家乡为北京或上海或广东的学生
select * from students where hometown in ('北京','上海','广东');
-- 相同实现方式
select * from students where hometown='北京' or hometown='上海' or hometown='广东'  

  • between ... and : 查询连续范围内的数据(用来数值型字段中)

-- 查询年龄在18到20之间的学生
select * from students where age between 18 and 20;
-- 相同实现方式
select * from students where age >=18 and age <= 20; 

3.5【重点】条件查询:为空判断

  • 空判断: is null

-- 查询出学生身份证号为空的信息
select * from students where card is null;
  • 非空判断: is not null

-- 查询出学生身份证不为空的信息
select * from students where card is not null;

4.【知道】排序

  • 语法格式:

    select * from 表名 order by 字段1 asc|desc, 字段2 asc|desc ........
    • 字段的排序规则默认为升顺排列(从小到大)

    • asc: 表示从小到大排序(升序)

    • desc: 表示从大到小排序(降序)

    -- 根据年龄从小到大排序
    select * from students order by age;
    ​
    -- 根据年龄从大到小,如果年龄相同,按学号从小到大排序
    select * from students order by age desc, studentNo;

5. 分组和聚合

5.1【知道】聚合函数介绍

5.2【知道】聚合函数案例

  • count(*) : 求表的总的记录数

-- 查询学生表的总记录数
select count(*) from students;
  • max(字段名): 查询对应字段的最大的值

-- 查询女生的最大年龄
select max(age) from students where sex='女';
  • min(字段名): 查询对应字段的最小的值

-- 查询1班的最小年龄
select min(age) from students where class='1班';
  • sum(字段名): 查询对应字段的值的总和

-- 查询北京学生的年龄总和
select sum(age) from students where hometown='北京';
  • avg(字段名): 查询对应字段的值的平均数

-- 查询女生的平均年龄
select avg(age) from students where sex='女';

5.3【知道】分组查询

  • 分组的目的是对每一组的数据进行统计(使用聚合函数)

    • 语法格式

      select 字段名1,字段名2,聚合函数.... from 表名  group by 字段名1,字段名2....
    • 例子

      -- 查询各种性别的人数
      select sex,count(*) from students group by sex;
      -- 查询各种性别年底最大的
      select sex,max(age) from students group by sex;
      -- 查询各个班级的人数
      select class,count(*) from students group by class;
      -- 查询各个班级中不同性别的人数
      select class,sex,count(*) from students group by class,sex;

  • 分组后的数据筛选:

    • 将分组之后的数据当成是一个表数据,然后再通过having 条件来对当前的表数据进行筛选。

    • 语法格式

      select 字段名1,字段名2,聚合函数.... from 表名  group by 字段名1,字段名2....  having 条件
      • having 条件 运算符跟where 条件运算符是一样的

      • 在having后面可以使用聚合聚函数

    • 例子

      -- 查询男生总人数
      select count(*) from students where sex='男';
      select sex,count(*) from students group by sex having sex='男';
      ​
      ​
      -- 查询每个班级男生的总记录数
      select class,sex,count(*) from students group by class,sex having sex='男';
      -- 查询所有班级中不同性别的记录数大于1的信息
      select class, sex,count(*) from students group by class,sex having count(*)>1;

6.【知道】分页查询

  • 语法格式

    select * from limit start, count
    • start 表示的是开始的记录,索引是从0开始。0表示第一条记录

    • count 表示的是从start开始,查询多少条记录

  • 例子

    -- 查询前3行的学生信息
    select * from students limit 0,3;
    select * from students limit 3;
  • 分页查询实现

    select * from students limit (n-1)*m, m;
    • n表示的是页数

      • n = 1, 2, 3, 4

    • m表示的是每页显示的记录数

      • m = 3

    • (n-1)*m, m 是公式, 并不是语法格式,不能直接写在SQL语句中,需要替换为具体的数字

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值