乐趣区

关于mysql:MySQL学习笔记4-DQL

DQL(Data Query Language)数据查询语言

用来 查问 数据库中 表的记录(数据)。关键字:select, where 等

select * from 表名;

语法:

select
    字段列表
from
    表名列表
where
    条件列表
group by
    分组字段
having
    分组之后的条件
order by
    排序
limit
    分页限定
    

根底查问

一、多个字段的查问

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

留神:

如果查问所有字段,能够用 * 来代替字段列表

二、去除反复

distinct

eg: SELECT DISTINCT 列名 FROM 表名;

多列名时,保障每行对应列名处齐全一样才能够去除

三、计算列

个别能够应用四则运算计算一些列的值。

eg:SELECT name,math,english,math+english FROM 表名;
math + english 即是运算,并且新建别名

IFNULL(表达式 1, 表达式 2):NULL 参加的运算,计算结果都为 NULL

 
 表达式 1:哪个字段须要判断为 NULL
 表达式 2:替换为哪个值
 

SELECT name,math,english,math+ IFNULL(english,0) FROM 表名;

四、起别名

SELECT name,math,english,math+ IFNULL(english,0) AS 总分 FROM 表名;

AS 也能够省略,肯定要有空格

条件查问

1.where 字句后跟条件

2. 运算符

  • 、<、<=、>=、=、<>(不等于)
    BETWEEN…AND…
    IN(汇合)
    LIKE:含糊查问
    占位符:

      _: 单个任意字符
      %:多个任意字符

    IS NULL
    and 或 &&
    or 或 ||
    not 或 !

— 查问年龄大于 20 岁

        SELECT * FROM student WHERE age > 20;
        
        SELECT * FROM student WHERE age >= 20;
        
        -- 查问年龄等于 20 岁
        SELECT * FROM student WHERE age = 20;
        
        -- 查问年龄不等于 20 岁
        SELECT * FROM student WHERE age != 20;
        SELECT * FROM student WHERE age <> 20;
        
        -- 查问年龄大于等于 20 小于等于 30
        
        SELECT * FROM student WHERE age >= 20 &&  age <=30;
        SELECT * FROM student WHERE age >= 20 AND  age <=30;
        SELECT * FROM student WHERE age BETWEEN 20 AND 30;
        
        -- 查问年龄 22 岁,18 岁,25 岁的信息
        SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
        SELECT * FROM student WHERE age IN (22,18,25);
        
        -- 查问英语问题为 null
        SELECT * FROM student WHERE english = NULL; -- 不对的。null 值不能应用 =(!=)判断
    
        SELECT * FROM student WHERE english IS NULL;
        
        -- 查问英语问题不为 null
        SELECT * FROM student WHERE english  IS NOT NULL;

LIKE 的含糊查问例子

                -- 查问姓马的有哪些?like
        SELECT * FROM student WHERE NAME LIKE '马 %';
        
        -- 查问姓名第二个字是化的人
        SELECT * FROM student WHERE NAME LIKE "_化 %";
        
        -- 查问姓名是 3 个字的人
        SELECT * FROM student WHERE NAME LIKE '___';
            
                -- 查问姓名中蕴含德的人
        SELECT * FROM student WHERE NAME LIKE '% 德 %';

一. 排序查问

语法:order by 字句
    order by 排序字段 1 排序形式 1, 排序字段 2 排序形式 2,.. 排序字段 n 排序形式 n;
排序字段:指标列
排序形式:ASC:升序,默认
    DESC:降序
留神:如果有多个排序条件,则只有后面条件值一样时,才执行前面的条件
    

二. 聚合函数

将一列数据作为一个整体,进行 纵向 的计算(排除了非空的值

SELECT 聚合函数(列名) FROM 表名;

如果把 null 纳入计算,要把 null 的值替换后再计算
解决方案:

①:IFNULL 函数
    SELECT 聚合函数(IFNULL(列名,替换后的值)) FROM 表名;
②:应用不蕴含 NULL 的列进行计算

1、count:计算个数

1. 个别抉择非空的列:主键
2. count(*): 个别不举荐写 *,个别写主键

2、max: 计算最大值

3、min:计算最小值

4、sum:计算和

5、avg:计算平均值

三. 分组查问

语法:
group by 分组字段;

留神:

1. 分组之后查问的字段:分组字段、聚合函数
2.

where 和 having 的区别

where:在分组 之前 限定,如果不满足条件,不参加分组
having:在分组 之后 限定,如果不满足条件,不会被查问进去(意味着,having 有时候在分组后根底上再筛选)

where:前面不能够跟聚合函数
having:后能够进行聚合函数的判断

简化写法,在 聚合函数后取一个别名,判断时用别名(个别取英文)进行判断

四. 分页查问

语法:

<kbd>limit 开始的索引, 每页的条数;(仅仅在 MySQL 语句)

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

分页操作时一个 MySQL 的“方言”

退出移动版