zoukankan      html  css  js  c++  java
  • MySQL----DQL(查询数据库表中数据)

    ##DQL:查询表中的记录

    1、语法:

        select 

          字段列名 

        from 

          表名列表 

        where 

          条件列表 

        group  by 

          分组字段 

        having  分组之后的条件 

        order  by

          排序

        limit

          分页限定

    2、基础查询

      1、多个字段的查询

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

        *注意:

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

      2、去除重复

        * distinct

      3、计算列

        * 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)

        * ifnull(表达式1,表达式2):null 参与的运算,计算结果都为null

          表达式1:哪个字段需要去判断是否为null

          表达式2:如果该字段为null后的替换值

      4、起别名

        *as:as也可以省略

      例子:

    /*在 lxy数据库中创建一张学生表*/
    create table student(
        id int,
        name varchar(20),
        age int,
        sex varchar(5),
        address varchar(100),
        math int,
        english int
    );
    /*插入数据*/
    insert into student(id,name,age,sex,address,math,english) values (1,'马云',66,'','杭州',100,100); insert into student(id,name,age,sex,address,math,english) values (8,'马德',35,'','香港',78,88); select * from student ;
    /*数据去重*/ select distinct address from student; /*计算分数之和*/ select name,math,english,math+english from student; /*如果有Null 参与的运算,计算结果都为Null*/ select name,math,english,math+ifnull(english,0) from student; /*起别名*/ select name,math,english,math+ifnull(english,0) as Total from student;

     3、条件查询

      1、where子句后跟条件

      2、运算符

        *  >;<;<=;>=;=;<>(这个是不等于)

        *  BETWEEN...AND

        * IN(集合)

        *  LIKE

          *  _:单个占位字符

          *  %:多个任意字符

        *  IS NULL

        *  and  或  &&

        *  or  或  ||

        *  not  或  !

      例子1:普通查询

    /*查询年龄大于20岁*/
    select * from student where age >=30;
    /*查询年龄不等于30*/
    select * from student where age <> 30;
    /*查询年龄在30-50之间*/
    select * from student where age between 30 and 50;
    select * from student where age >= 30 && age <= 50;
    select * from student where age >= 30 and age <= 50;
    /*查询年龄为45,35,46的信息*/
    select * from student where age = 45 or age = 35 or age = 46;
    select * from student where age in(45,35,46);
    /*查询英语成绩为null*/
    /*这样查是不正确的,null不能使用 =(!=)判断*/
    select * from student where english = null;
    /*正确写法*/
    select * from student where english is null;

       例子2:模糊查询

    /*查询姓马的有哪些*/
    select * from student where name like '马%';
    /*查询姓马的单名有哪些*/
    select * from student where name like '马_';
    /*查询第二个字是化的人*/
    select * from student where name like '_化%';
    /*查询姓名是三个字的人*/
    select * from student where name like '___';
    /*查询姓名中包含马的*/
    select * from student where name like '%马%';

     4、排序查询

      *  语法:order by 子句

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

      *  排序方式:

        *  ASC:升序,默认的

        *  DESC:降序

      *  注意:

        *  如果有多个排序体哦阿健,则当前边的条件值一样时,才会判断第二条件。

    /*按照数学成绩排序 降序 */
    select * from student order by math desc ;
    /*按照数学成绩排序 降序 如果数学成绩一样 按照英语成绩降序排序*/
    select * from student order by math desc,english desc ;

    5、聚合函数:将一列数据作为整体,进行葱纵向计算

      1、count:计算个数

        1、一般选择非空的列:主键

        2、count(*)

      2、max:计算最大值

      3、min:计算最小值

      4、sum:计算和

      5、avg:计算平均值

      *  注意聚合函数的计算会排除null值。

        *  解决方案:

          1、选择不包含非空的列进行计算。

          2、IFNULL函数

    /*计算name的记录条数*/
    select count(name) from student;
    /* 注意聚合函数的计算会排除null值,解决方案:*/
    select count(ifnull(english,0)) from student;
    select count(*) from student;
    /*计算数学成绩最大值,最小值同理*/
    select max(math) from student;
    /*求和*/
    select sum(math) from student;
    /*平均值*/
    select avg(math) from student;

    6、分组查询

      1、语法:group by 分组字段;

      2、注意:

        1、分组之后查询的字段:分组字段、聚合函数

        2、where 和 having 的区别

          1、where在分组之前进行限定,如果不满足条件,则不参与分组。Having在分组之后进行限定,如果不满足结果则不会被查询出来。

          2、where后不可以跟聚合函数,having可以进行聚合函数的判断。

    /*按照性别分组,分别查询男、女同学的数学平均分*/
    select sex, avg(math) from student group by student.sex;
    /*按照性别分组,分别查询男、女同学的数学平均分,分别的人数*/
    select sex, avg(math),count(id) from student group by student.sex;
    /*按照性别分组,分别查询男、女同学的数学平均分,分别的人数 要求:分数低于70分的人不参与分组*/
    select sex, avg(math),count(id) from student where math > 70 group by student.sex;
    /*按照性别分组,分别查询男、女同学的数学平均分,分别的人数 要求:分数低于70分的人不参与分组 分组之后人数大于2个人*/
    select sex, avg(math),count(id) from student where math > 70 group by student.sex having count(id) > 2;
    select sex, avg(math),count(id) 人数 from student where math > 70 group by student.sex having 人数 > 2;

    7、分页查询

        1、语法:limit   开始的索引,每页查询的条数;

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

        3、limit是一个MySQL的”方言“

    /*每页显示3条记录*/
    select * from student limit 0,3;  /*第一页*/
    select * from student limit 3,3;  /*第二页*/
    That which doesn't kill me makes me stronger!
  • 相关阅读:
    php 注册与登录
    php 多条件查询
    php(ajax)异步刷新(转)
    PHP中的6种加密方式
    ajax 异步刷新,需要填写的参数
    php+Mysql 页面登录代码
    php+Mysql页面注册代码
    jquery入门知识点总结(转)
    php+Mysql中网页出现乱码的解决办法详解
    php代码常见错误详解整理
  • 原文地址:https://www.cnblogs.com/21seu-ftj/p/12263874.html
Copyright © 2011-2022 走看看