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 ...