DQl

1、基础查询

  select  查询列表  from  表名;

  #查询表中的所有字段

    #方式一:

       select  department_id,  department_name,  manager_id,  location_id  from  departments;

    #方式二:

       select * from departments;

2、起别名

  方式一:

    使用as

     select  last_name  as  name  from  employees;

  方式二:

    使用空格

    select  first_name  myname  from  employees;

3、去重 distinct

  #案例:查询员工表中涉及到的所有的部门编号

    select  distinct  location_id  from  departments;

4、条件查询

  select  查询列表  from  表名  where  条件;

  分类:

    按条件表达式筛选

    简单条件运算符:> , < , = , != , <> , >= , <=

    按逻辑表达式筛选 逻辑运算符:

  作用:

     用于连接条件表达式 && || ! and or not

     &&和and:两个条件都为true,结果为true,反之为false

     ||或or: 只要有一个条件为true,结果为true,反之为false

     !或not: 如果连接的条件本身为false,结果为true,反之为false

     模糊查询 like   between   and    in   is   null

5、.排序查询

  语法:

    select  查询列表  from  表名【where 筛选条件】order by  排序的字段或表达式;

  特点:

    sc 代表的是升序,可以省略; 

    desc代表的是降序

    order by 子句可以支持 单个字段、别名、表达式、函数、多个字段

    order by子句在查询语句的最后面,除了limit子句

  #案例:查询员工信息,要求先按工资降序,再按employee_id升序

     select * from employees order by salary desc ,employee_id asc ;

6、分组函数

  语法:

    select   查询列表   from   表  [where 筛选条件]  group  by  分组的字段 [order by 排序的字段]

  分类:

     sum 求和、avg 平均值、max 最大值 、min 最小值 、count 计算个数

  特点:

    1、sum、avg一般用于处理数值型 max、min、count可以处理任何类型

    2、以上分组函数都忽略null值

    3、可以和distinct搭配实现去重的运算

    4、count函数的单独介绍 一般使用count(*)用作统计行数

    5、和分组函数一同查询的字段要求是group by后的字段

group by经常和having搭配使用。having是条件补充说明

#案例:每个工种有奖金的员工的最高工资>6000的工种编号和最高工资,按最高工资升序 select job_id,max(salary) from employees where commission_pct is not null group by job_id having max(salary) > 6000 order by max(salary);

7、.多表连接查询

  分类:

    内连接: inner

    外连接: 左外连接:left 右外连接:right

  内连接语法:

    select   查询列表   from   表1  别名  [连接类型]   join  表2  别名  on  连接条件  [where 筛选条件]  [group by 分组]  [having 筛选条件]

    #查询姓名中包含字符k的员工的名字、上级的名字(内连接,自连接)

    SELECT e.last_name,m.last_name FROM employees e JOIN employees m ON e.`manager_id`= m.`employee_id` WHERE e.`last_name` LIKE '%k%';

  外连接

    左外连接,left join左边的是主表

    右外连接,right join右边的是主表

      select d.department_name from departments d left join employees e on d.department_id = e.department_id where e.employee_id is null;

8、子查询

  一般用在where或having后面 

  ★ 单行子查询

     单行子查询(结果集只有一行一列) 多行子查询(结果集只有一列多行)

     特点:

      ①子查询放在小括号内

      ②子查询一般放在条件的右侧

       ③标量子查询,一般搭配着单行操作符使用 > < >= <= = <>

      ④子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果

   #1.标量子查询

    ★ #案例1:返回公司工资最少的员工的last_name,job_id和salary

       select last_name,job_id,salary from employees where salary = ( select min(salary) from employees );

    ★#案例2:查询最低工资大于50号部门最低工资的部门id和其最低工资

      select department_id,min(salary) from employees group by department_id having min(salary) > ( select min(salary) from employees where department_id = 50 )

  #2.列子查询(多行子查询)

    ★ #案例1:返回location_id是1400或1700的部门中的所有员工姓名

      select last_name from employees where department_id in ( select department_id from departments where location_id in (1400,1700) );

    ★ #案例2:返回其它部门中比job_id为‘IT_PROG’部门所有工资都低的员工的员工号、姓名、job_id 以及 salary

      SELECT employee_id,last_name,job_id,salary from employees where salary < ( select MIN(salary) from employees where job_id = 'IT_PROG' );

  9、分页查询

      语法:

       select 查询列表 from 表 【join type join 表2 on 连接条件 where 筛选条件 group by 分组字段 having 分组后的筛选 order by 排序的字段】 limit 【offset,】size;

      offset要显示条目的起始索引(起始索引从0开始)

      size 要显示的条目个数

    特点:

      ①limit语句放在查询语句的最后

       ②公式 要显示的页数 page,每页的条目数size select 查询列表 from 表 limit (page-1)*size,size;

    #案例1:查询前五条员工信息

      select * from employees limit 5; select * from employees limit 0 ,5;

   10、联合查询

      union 联合 合并:将多条查询语句的结果合并成一个结果

      语法:

        查询语句1 union 查询语句2 union ...

        

上一篇:MySQL学习笔记


下一篇:DQL——常见函数之单行函数