您的位置:首页 > 数据库 > MySQL

MySQL之数据库查询语言(DQL)

2019-01-11 16:16 357 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_36548106/article/details/86295036

MySQL之数据库查询语言(DQL)

数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果给客户端,查询返回的结果是一张虚拟表 。

select selection_list						//要查询的列名称
from table_list								//要查询的表名称
where condition							//行条件
group by grouping_columns		//对结果分组
having condition							//分组后的行条件
order by sorting_columns			//对结果排序
limit offset_start, row_count		//结果限定
  1. 基础查询

    查询所有列:

    select * from table_name;

    查询指定列

    select 列名1,列名2,...from table_name;
  2. 条件查询

    条件查询就是在查询时给出where子句,在where子句中可以使用如下运算符及关键字:
    =, != , <>, < ,<= ,> ,>=;
    between…and;
    in(set); //括号中可以放多个值,用逗号隔开
    is null; //判断是否为空
    and, or , not , is not null

    例子:
    1)查询性别为女,年龄大于等于50的记录
    select * from stu where gender = ‘femal’ and age>=50;
    2)查询学号为s_1001,或者姓名为lisi的记录
    select * from stu where sid = ‘s_1001’ or name = ‘lisi’;
    3)查询学号为s_1001,s_1002,s_1003的记录
    select * from stu where sid = ‘s_1001’ or sid = ‘s_1002’ or sid = ‘s_1003’;
    select * from stu where sid in( ‘s_1001’ , ‘s_1002’ , ‘s_1003’);
    4)查询学号不是s_1001,s_1002,s_1003的记录
    select * from stu where sid not in( ‘s_1001’ , ‘s_1002’ , ‘s_1003’);
    5)查询年龄为null的记录
    select * from stu where age is null;
    6)查询年龄在20和40之间的记录
    select * from stu where age between 20 and 40;

  3. 模糊查询
    通配符:

    _ 任意字符
    % 任意0~n个字符

    例子:
    1)查询姓名有5个字母组成的记录
    select * from stu where name like ‘_ _ _ _ _ ';
    2)查询姓名有5个字母组成且第5个字母为i的记录
    select * from stu where name like ’ _ _ _ _ i’;
    3)查询姓名以‘z’开头的记录
    select * from stu where name like ‘z%’;
    4)查询姓名第二个字母为‘’i’的记录
    select * from stu where name like ‘_i%’;
    5)查询姓名中包含‘a’的记录
    select * from stu where name like ‘%a%’;

  4. 字段控制查询

    1)去除重复记录需要使用distinct

    例子:
    select distinct sal from emp; //在emp表中查询sal列,并去除重复记录

    2)查询两列之和

    例如sal和comn两列都是数值类型,可以进行运算。但是,如果sal或comn中有一个字段不是数值,那么会出错。

    select sal + if null(comn,0) from emp; // if null(comn,0),如果为null,则返回0;否则,不变

    3)给列名添加别名

    select sal + if null(comn,0) as total from emp; //别名为total,而且as可以省略

  5. 排序

    order by 列名 [asc|desc]

    例子:
    select * from emp order by age asc; //查询所有记录,并按年龄升序排列
    select * from emp order by sal asc, empno desc; //查询所有记录,并按月薪升序排列,月薪相同时,按编号降序排列

  6. 聚合函数

    聚合函数适用于纵向运算的函数。

    count():统计指定列不为null的记录数;
    max():计算指定列的最大值,如果执行列是字符串,使用字符串排序规则得到最大值
    min():计算指定列的最小值
    sum():计算指定列的数值和,如果指定列不是数值类型,返回值为0
    avg():计算指定列的平均值,如果指定列不是数值类型,返回值为0

    例子:
    select avg(age) from stu; //查找年龄的平均值
    select max(age) from stu; //查找年龄的最大值
    select sum(sal)+sum(comn) from emp; //查询所有雇员月薪+佣金和
    select count( * ) from emp; //查询表中所有记录数
    select count(comn) from emp; //查询有佣金的人数
    select count( * ) from emp where sal >5000; //查询工资大于5000的人数

  7. 分组查询 group by

    select count( * ) from emp group by deptno; //查询各部门的人数
    select deptno ,sum(sal) from emp group by deptno; //查询各部门的部门编号和工资和
    select deptno ,count( * ) from emp group by deptno; //查询各部门的部门编号和人数
    select deptno ,count( * ) from emp where sal >5000 group by deptno; //查询各部门的部门编号和工资大于5000的人数

    having子句用于分组之后再筛选

    select deptno ,sum(sal) from emp group by deptno having sum(sal)>9000; ////查询工资总和大于9000的部门编号和该部门人数

    having是对分组后数据进行过滤,where是在分组前对数据进行过滤
    having后面可以使用聚合函数,where后不可以使用聚合函数

  8. limit 方言

    limit用来限定查询结果的起始行以及总行数。

    select * from emp limit 0,5; //查询5行记录,从第 0 行开始

    书写顺序:select —— from —— where —— group by —— having —— order by —— limit
    执行顺序:from —— where —— group by —— having —— select —— order by ——limit

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: