SQL语句详解四-DQL(数据查询语言-单表查询)

发布时间:2024年01月15日

DQL(单表查询)

  • 概述:DQL(数据查询语言),用来查询数据库中表格中的数据的

基础查询

  • 语法

    select 字段名1 , 字段名2 , ... , 字段名n from 表名;
    

    如果要查询表中所有字段,则直接可以使用 * 来代替字段列表

  • 示例代码

    -- 查询 school 库中 student 表中所有数据
    use school;
    select * from student;
    
    -- 查询表中所有学号
    select sid from student;
    
    -- 查询表中所有姓名
    select sname from student;
    
  • 去除重复(distinct)

    -- 查询表中姓名非重复的字段
    select distinct sname from student;
    
  • 计算列

    • 一般可以使用四则运算计算一些列的值(注意:一般只会进行数值型的计算)
    • IFNULL(表达式1 ,表达式2)
      • 表达式1:意指选择的字段可能为 null
      • 表达式2:意指将为 null 的字段替换成什么值
    -- 数值型 + null 值
    select 5 + null;								-- 结果为null
    -- 数值型 + IFNULL(1,2)
    select 5 + 	IFNULL(NULL,0);						-- 结果为5
    
  • 起别名:给字段或者表起别名

    • as:as也可以或略
    -- 给字段起别名
    select sid as "学号" from student;
    
    -- 给字段起别名,忽略 as
    select sname "姓名" from student;
    
    -- 给表格起别名
    select s.`sid` from student s;
    

条件查询

  • where 子句后跟条件

  • 运算符

    运算符作用
    > 、< 、 <= 、 >= 、 = 、<>(不等号)大小关系运算
    BETWEEN…AND处于某个范围之间
    IN集合
    ISNULLNULL 值用其判断
    AND 或 &&
    OR 或 ||
    NOT 或 !
    LIKE
    _:单个任意字符 %:多个任意字符
    模糊查询
  • 示例代码

    -- 创建一个员工表
    CREATE TABLE employ(
    	id INT(11),		-- 员工编号
    	NAME VARCHAR(40),	-- 员工姓名
    	age INT,		-- 年龄
    	address VARCHAR(100),	-- 通讯地址
    	salary DOUBLE(10,2)	-- 工资
    );
    
    -- 像员工表中插入数据
    INSERT INTO employ VALUES(1001,"张三",15,"河南省洛阳市应天龙门",8900);
    INSERT INTO employ VALUES(1002,"李四",12,"北京市海淀区",8000);
    INSERT INTO employ VALUES(1003,"王五",19,"陕西省安康市",9000);
    INSERT INTO employ VALUES(1004,"马六",20,"四川省成都市",7200);
    INSERT INTO employ VALUES(1005,"黄七",25,"台湾省台北市",6800);
    INSERT INTO employ VALUES(1006,"康八",30,"河南省郑州市航空港区",10000);
    INSERT INTO employ VALUES(1007,"万九",20,"内蒙古自治区",NULL);
    
    -- 查询表
    SELECT * FROM employ;
    
    -- 查询工资大于 8000 的员工信息
    SELECT * FROM employ WHERE salary > 8000;
    
    -- 查询年龄不等于20的员工信息
    SELECT * FROM employ WHERE age <> 20;
    
    -- 查询年龄在 18到30 之间的员工信息
    SELECT * FROM employ WHERE age BETWEEN 18 AND 30;
    
    -- 查询年龄为 15 19 20 的员工信息
    SELECT * FROM employ WHERE age IN(15,19,20);
    
    -- 查询工资为 null 的员工信息
    SELECT * FROM employ WHERE ISNULL(salary);
    
    -- 查询年龄20岁,且工资是非空的员工信息
    SELECT * FROM employ WHERE age = 20 AND NOT ISNULL(salary);
    
    -- 查询年龄15岁或者20岁员工信息
    SELECT * FROM employ WHERE age = 15 OR age = 20;
    
    -- 查询员工地址中有省字的所有员工信息
    SELECT * FROM employ WHERE address LIKE '%省%';
    

排序查询

  • 语法

    order by 排序字段1 排序方式1 , 排序字段2 排序方式2...
    
  • 排序方式

    命令作用
    ASC升序(默认的)
    DESC降序

    注意:如果有多个排序条件时,当前边条件值相同时,才会判断第二条件,例如:年龄相同时,再按工资排序

  • 示例代码

    -- 按照工资进行升序排序
    SELECT * FROM employ ORDER BY salary ASC;
    
    -- 按照年龄进行降序排序
    SELECT * FROM employ ORDER BY age DESC;
    
    -- 按照年龄进行降序排序,当年龄相同时按照工资进行升序(注意:1004和1007俩个数据)
    SELECT * FROM employ ORDER BY age DESC , salary ASC;
    

聚合函数

  • 概述:聚合函数将一列数据作为一个整体,进行纵向的计算

  • 常见的几个聚合函数

    函数名作用
    count计算个数,一般选择非空的列
    max计算此列最大值
    min计算此列最小值
    sum计算此列和
    avg计算此列平均值
  • 注意:聚合函数的计算,必须排除 NULL 值才行

    • 解决方式:
      • 选择不包含 NULL 值的列进行计算,一般都是主键列
      • 使用 IFNULL 函数
  • 示例代码

    -- 查询员工的个数
    SELECT COUNT(id) AS "员工个数" FROM employ;
    
    -- 查询最高工资的信息
    SELECT MAX(salary) FROM employ;
    
    -- 查询最小年龄
    SELECT MIN(age) FROM employ;
    
    -- 查询所有工资和
    SELECT SUM(IFNULL(salary,0)) FROM employ;
    
    -- 计算员工的平均年龄
    SELECT AVG(age) FROM employ;
    

分组查询

  • 语法

    group by 分组字段;
    
  • 注意事项

    • 分组之后查询的字段:分组字段、聚合函数
    • where 和 having 的区别?
      • where 在分组之前进行限定,如果不满足where后的条件,则不参与分组
      • having 在分组之后进行限定,如果不满足having后的结果,则不会被查询出来
      • where 后不可以跟聚合函数,having 后可以进行聚合函数的判断
  • 示例代码

    -- 根据年龄进行分组
    SELECT age FROM employ GROUP BY age;
    
    -- 根据年龄进行分组,并查询相同年龄个数大于等于2的年龄
    SELECT age FROM employ GROUP BY age HAVING COUNT(age) >= 2; 
    
    -- 根据年龄进行分组,并查询对应年龄阶段员工的个数
    SELECT age , COUNT(age) FROM employ GROUP BY age; 
    

分页查询

  • 语法

    -- limit 是 MySQL 的方言
    limit 开始的索引,每页查询的记录条数;
    

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

  • 示例代码

    -- 每页显示 3条数据记录
    SELECT * FROM employ LIMIT 0,3;		-- 第一页
    SELECT * FROM employ LIMIT 3,3;		-- 第二页
    SELECT * FROM employ LIMIT 6,3;		-- 第三页
    
文章来源:https://blog.csdn.net/weixin_45754463/article/details/135612108
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。