DQL—查询操作

风陵南·2022-08-10 20:53·105 次阅读

DQL—查询操作

一、查询语法

复制代码
select
    字段列表
from
    表名列表
where
    条件列表
group by
    分组列表
having
    分组后条件
order by
    排序字段
limit
    分页限定
复制代码

   (提供一个表来操作操作)

复制代码
-- 删除 stu 表
drop table if exists stu;

-- 创建stu表
create table stu(
id int,    -- 编号
name varchar(20),  -- 姓名
age int,          -- 年龄
sex varchar(5),  -- 性别
address varchar(100),  --  地址
math double(5,2), --  数学成绩
english double(5,2),  -- 英语成绩
hire_date date  -- 入学时间
); 


-- 添加数据
insert into stu(id,name,age,sex,address,math,english,hire_date)
VALUES
(1,'马运',55,'','杭州',66,78,'1995-09-01'),
(2,'马花腾',45,'','深圳',98,87,'1998-09-01'),
(3,'马斯克',55,'','香港',56,77,'1999-09-02'),
(4,'柳白',20,'','湖南',76,65,'1997-09-05'),
(5,'柳青',20,'','湖南',86,NULL,'1998-09-01'),
(6,'刘德花',57,'','香港',99,99,'1998-09-01'),
(7,'张雪有',22,'','香港',99,99,'1998-09-01'),
(8,'德玛西亚',18,'','南京',65,56,'1998-09-02');
复制代码

 

二、基础查询

  1. 查询多个字段

select 字段列表 from 表名;
select * from 表名;  -- 查询所有数据

  

复制代码
-- 查询 name age 两列
SELECT 
      name,  -- 姓名
      age        -- 年龄
FROM
      stu;

-- 查询所有列的数据, 列名列表可以用 * 代替
select * from stu;
-- (通常情况下 企业中是不允许使用 * 的  不便于理解 与 注释)
复制代码

 

  2、去除重复记录

select distinct 字段列表 from 表名;

-- 去除重复记录
select DISTINCT address from stu;

 

 

 

 

  3. 起别名

as: (as 也可以省略)

 

-- 查询姓名,数学成绩 ,英语成绩
select name, math as 数学成绩, english as 英语成绩 from stu;

 

 

 

三、条件查询

  1、 条件查询语法

select 字段列表 from 表名 where 条件列表;

  2、条件

 

 

   

 

  代码实例:

复制代码
-- ====================条件查询================

-- 1. 查询年龄大于20岁的学员信息
select 
    name 姓名,
    age 年龄,
    sex 性别,
    address 地址,
    math 数学成绩,
    english 英语成绩,
    hire_date 入学时间
FROM    
    stu
WHERE
    age > 20;

-- 2. 查询年龄大于等于20岁的学员信息
select 
    name 姓名,
    age 年龄,
    sex 性别,
    address 地址,
    math 数学成绩,
    english 英语成绩,
    hire_date 入学时间
FROM    
    stu
WHERE
    age >= 20;

-- 3. 查询年龄大于等于20岁 并且 年龄小于等于30岁 的学员信息
select 
    name 姓名,
    age 年龄,
    sex 性别,
    address 地址,
    math 数学成绩,
    english 英语成绩,
    hire_date 入学时间
FROM    
    stu
WHERE
    age >= 20 && age <= 20;  -- && 与 AND 含义一样

-- 4. 查询入学日期在’1998-09-01’到 ’1999-09-01’之间的学员信息
select 
    name 姓名,
    age 年龄,
    sex 性别,
    address 地址,
    math 数学成绩,
    english 英语成绩,
    hire_date 入学时间
FROM    
    stu
WHERE
    hire_date BETWEEN '1998-09-01' AND '1999-09-01';

-- 5. 查询年龄等于18岁的学员信息
select 
    name 姓名,
    age 年龄,
    sex 性别,
    address 地址,
    math 数学成绩,
    english 英语成绩,
    hire_date 入学时间
FROM    
    stu
WHERE
    age = 18;

-- 6. 查询年龄不等于18岁的学员信息
select 
    name 姓名,
    age 年龄,
    sex 性别,
    address 地址,
    math 数学成绩,
    english 英语成绩,
    hire_date 入学时间
FROM    
    stu
WHERE
    age != 18;

-- 7. 查询年龄等于18岁 或者 年龄小于20岁 或者 年龄等于22岁的学员信息
select 
    name 姓名,
    age 年龄,
    sex 性别,
    address 地址,
    math 数学成绩,
    english 英语成绩,
    hire_date 入学时间
FROM    
    stu
WHERE
    age = 18 OR age < 20 || age = 22;  -- OR 与 ||  含义一样

-- 8. 查询英语成绩为null 的学员信息
select 
    name 姓名,
    age 年龄,
    sex 性别,
    address 地址,
    math 数学成绩,
    english 英语成绩,
    hire_date 入学时间
FROM    
    stu
WHERE
    english is NULL;

复制代码

 

  3、模糊查询(like)

   通配符
        (1)_: 代表单个任意字符
        (2)%:代表任意个数字符

  

复制代码
-- =============模糊查询 like ==========
/*
    通配符
        (1)_: 代表单个任意字符
        (2)%:代表任意个数字符
*/

-- 1. 查询姓’马’的学员信息
    select 
    name 姓名,
    age 年龄,
    sex 性别,
    address 地址,
    math 数学成绩,
    english 英语成绩,
    hire_date 入学时间
FROM    
    stu
WHERE
    name LIKE '马%';

-- 2. 查询第二个字是’花’的学员信息
select 
    name 姓名,
    age 年龄,
    sex 性别,
    address 地址,
    math 数学成绩,
    english 英语成绩,
    hire_date 入学时间
FROM    
    stu
WHERE
    name like '_花%';

-- 3. 查询名字中包含'德'的学员信息
select 
    name 姓名,
    age 年龄,
    sex 性别,
    address 地址,
    math 数学成绩,
    english 英语成绩,
    hire_date 入学时间
FROM    
    stu
WHERE
    name like '%德%';
复制代码

 

四、 排序查询

  1、 排序查询语法(中括号表示可以省略)

select 字段列表 from 表名 order by 排序字段名1 [排序方式1],排序字段名2 [排序方式2] ...;

  2、 排序方式

   ·ASC :升序排列(默认值)

   ·DESC :降序排列

  (当有多个排序条件时,当前边条件值一样时,才根据第二条件进行排序)

复制代码
-- =================  排序查询
-- 1. 按照年龄升序排序
select * from stu ORDER BY age asc;

-- 2. 按照数学二成绩降序排序
select * from stu order by math desc;

-- 3. 按照数学成绩降序排序,如果数学成绩一样则按照英语成绩排序
select * from stu order by math  desc , english asc ;
复制代码

 

 

五、分组查询

  1、 聚合函数

    概念:将一列数据作为一个整体,进行纵向计算

    分类:(使用 count 统计数量时,通常使用 count(*)  *号会统计到任意行不全为null值的行,且会选择统计速度最快的一列)

        

 

    语法:(注意:null 值不参与所有聚合函数的运算

select 聚合函数名(列名) from 表名;

    代码演示:

复制代码
-- ==============聚合函数==========

-- 1. 统计班里有多少学生?
select count(name) from stu;

-- 2.查询数学成绩最高分 
select max(math) from stu;

-- 3.查询数学成绩最低分 
select min(math) from stu;

-- 4.查询数学成绩总分 
select sum(math) from stu;

-- 5.查询数学成绩平均分 
select avg(math) from stu;
复制代码

 

 

  2、 分组查询

     语法:(注意:分组之后,查询的字段列表为聚合函数和分组字段 ,查询其他字段无任何意义

select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名 [having 分组后条件过滤];

    where 和 having 的区别:

      执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而 having 是分组之后对结果进行过滤

      可判断的条件不一样: where 不能对聚合函数进行判断,having 可以

    执行顺序:where > 聚合函数 > having

    代码演示:

 

复制代码
-- ===========分组查询 ========

 -- 注意:分组之后,查询的字段列表为聚合函数和分组字段 ,查询其他字段无任何意义
-- 1. 查询男女同学各自的数学平均分
select sex,avg(math) from stu group by sex;

-- 2. 查询男女同学各自的数学平均分,以及各自人数
select sex,avg(math),count(*) from stu group by sex;

-- 3. 查询男女同学各自的数学平均分,以及各自人数,要求分数低于70分的不参与分组
select sex,avg(math),count(*) from stu where math >= 70 group by sex;

-- 4. 查询男女同学各自的数学平均分,以及各自人数,要求分数低于70分的不参与分组,分组之后人数大于2个
select sex,avg(math),count(*) from stu where math >= 70 group by sex having count(*) > 2; 
复制代码

 

 

 

 

六、 分页查询

  1、 语法:

 

select 字段列表 from 表名 limit 起始索引, 查询条目数;

 

  起始索引: 从0开始

  计算公式: 起始索引 = (当前页码 - 1)* 每页显示的条数

    (分页查询 limit 是MySQL数据库的方言)

    (Oracle 分页查询使用 rownumber)

    (SQL Server 分页查询使用 top)

  代码演示:

复制代码
--  ==============分页查询 =============


-- 1. 从0开始查询,查询3条数据
select * from stu limit 0,3;

-- 2. 每页显示3条数据,查询第1页数据
select * from stu limit 0,3;

-- 3. 每页显示3条数据,查询第2页数据
select * from stu limit 3,3;

-- 4. 每页显示3条数据,查询第3页数据
select * from stu limit 6,3;

-- 公式总结  起始索引 = (要查询的页码数 - 1)* 每页要显示的数据条数
复制代码

 

posted @   风陵南  阅读(105)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示