DQL数据查询语言
一.select 语句的基本使用
语法:
select 查询列表 from 表名;
类似于:System.out.println(打印东西);
去重:SELECT DISTINCT 列段名 FROM 表名;
起别名:SELECT 字段名/表名 别名 FROM 表名;
特点:
1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询的结果是一个虚拟的表格
二.过滤和排序数据
1.过滤
语法:SELECT 查询列表 FROM 表名 WHERE 过滤条件
使用WHERE 子句,将不满足条件的行过滤掉。
WHERE 子句紧随 FROM 子句。
过滤条件关键字:
&&/and ||/or ! / not
>#案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
SELECT
*
FROM
t_mysql_employees
WHERE
NOT(department_id>=90 AND department_id<=110) OR salary>15000;
>*between ... and* ... ;过滤的界限;
>#案例1:查询员工编号在100到120之间的员工信息
SELECT
*
FROM
t_mysql_employees
WHERE
employee_id <= 120 AND employee_id>=100;
#----------------------
SELECT
*
FROM
t_mysql_employees
WHERE
employee_id BETWEEN 100 AND 120;
in(…); 在表中是否有该字符等
> #案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
SELECT
last_name,
job_id
FROM
t_mysql_employees
WHERE
job_id = 'IT_PROT' OR job_id = 'AD_VP' OR JOB_ID ='AD_PRES';
IS NULL:判断NULL值为空,IS NOT NULL:判断NULL值不为空,
>#案例1:查询有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
t_mysql_employees
WHERE
commission_pct IS NOT NULL;
表名 like 条件 :模糊查询
#案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
select
last_name,
salary
FROM
t_mysql_employees
WHERE
last_name LIKE '__n_l%';
2.排序
语法:select 查询列表 from 表 【where 筛选条件】 【order by 排序的字段】;
三.分组查询
1、概念:分组函数作用于一组数据,并对一组数据返回一个值。
#2.查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序
SELECT *,LENGTH(email)
FROM t_mysql_employees
WHERE email LIKE '%e%'
ORDER BY LENGTH(email) DESC,department_id ASC;
2.简单 的使用
SELECT SUM(salary) FROM t_mysql_employees;
SELECT AVG(salary) FROM t_mysql_employees;
SELECT MIN(salary) FROM t_mysql_employees;
SELECT MAX(salary) FROM t_mysql_employees;
SELECT COUNT(salary) FROM t_mysql_employees;
SELECT SUM(salary) 和,AVG(salary) 平均,MAX(salary) 最高,MIN(salary) 最低,COUNT(salary) 个数
FROM t_mysql_employees;
SELECT SUM(salary) 和,ROUND(AVG(salary),2) 平均,MAX(salary) 最高,MIN(salary) 最低,COUNT(salary) 个数
FROM t_mysql_employees;
3.Group by子句的使用
语法:select 查询列表 from 表 【where 筛选条件】 group by 分组的字段 【order by 排序的字段】;
案例:查询每个位置的部门个数
SELECT COUNT(*),location_id
FROM t_mysql_departments
GROUP BY location_id;
#2、可以实现分组前的筛选
#案例1:查询邮箱中包含a字符的 每个部门的最高工资
SELECT MAX(salary),department_id
FROM t_mysql_employees
WHERE email LIKE '%a%'
GROUP BY department_id;
#案例2:查询 有奖金 的 每个领导 手下员工的 平均工资
SELECT AVG(salary),manager_id
FROM t_mysql_employees
WHERE commission_pct IS NOT NULL
GROUP BY manager_id;
#3、分组后筛选
#案例:查询哪个部门的员工个数>5
#查询 每个部门 的员工个数
SELECT COUNT(*),department_id
FROM t_mysql_employees
GROUP BY department_id;