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

本文详细介绍了DQL(数据查询语言)在MySQL中的基本查询、条件查询、排序、聚合函数、分组查询以及分页查询的方法和示例,涵盖了从基础操作到高级查询技巧的内容。
摘要由CSDN通过智能技术生成

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;		-- 第三页
    
  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值