提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
本篇文章基于尚硅谷Mysql数据库教程 课程链接bilibili
数据库来源
链接:https://pan.baidu.com/s/1XGX73vLbVsT8NmidRssCog
提取码:6699
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V3的分享
一、基础查询
语法
select 查询列表 from 表名;
特点
1、 查询列表可以是:表中的字段、常量值、表达式、函数
2、 查询的结果是一个虚拟的表格
查询举例
#1. 查询表中的单个字段
select last_name from employees;
#2. 查询表中的多个字段
select last_name,salary,email from employees;
#3. 查询表中的所有字段
select * from employees;
#4. 查询常量值
select 100;
select 'john';
#5. 查询表达式
select 100*50;
#6. 查询函数
select version();
#7. 起别名
##(1)便于理解
##(2)如果要查询的字段有重名的情况,使用别名可以区分开来
select 100%98 as 结果;
select last_name as 姓,first_name as 名 from employees;
select last_name 姓,first_name 名 from employees;
#8. 去重
##案例:查询员工表中涉及到的所有的部门编号
select distinct department_id from employees;
#9. 加号
## Mysql加号功能:运算符
## 两个操作数都为数值型,则做加法运算
## 如果一方为字符型,则试图将字符型数值转换为数值型
## 如果转换成功,则继续做加法运算
select '123'+90;
## 如果转换失败,则将字符型数值转换成0
select 'john'+90;
##只要一方为null 则结果肯定为null
select null+0;
#10. concat函数
##案例:查询员工名和姓连接成一个字段,并显示为 姓名
select concat(last_name,first_name) as 姓名 from employees;
#11. ifnull函数
select ifnull(commisiion_pct,0) as 奖金率 from employees;
二、条件查询
语法
select 查询列表
from 表名
where 筛选条件;
分类
1. 按条件表达式筛选
条件运算符:> < = != <> >= <=
#案例1:查询工资>12000的员工信息
select * from employees where salary >12000;
#案例2:查询部门编号不等于90号的员工名和部门编号
select last_name department_id from employees where department_id <> 90;
2. 按逻辑表达式筛选
逻辑运算符: && || ! and or not
#案例1:查询工资在10000到20000之间的员工名、工资以及奖金
select last_name,salary,commission_pct
from employees
where salary >=10000 and salary<=20000;
#案例2:查询部门编号不在90到110之间,或者工资高于15000的员工信息
select * from employees
where not(department_id>=90 and department_id<=110) or salary >15000;
3. 模糊查询
- like
- between and
- in
- is null
#1. like
#特点:
#(1)一般和通配符搭配使用 通配符:
# %任意多个字符,包含0个字符
# _任意单个字符
#案例1:查询员工名中包含字符a的员工信息
select * from employees where last_name like '%a%';
#案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
select last_name,salary from employees where last_name like '__e_a%';
#案例3:查询员工名中第二个字符为_的员工名
select last_name from employees where last_name like '_\_%';
#2. between and
#(1)使用between and 可以提高语句的简洁度
#(2)包含临界值
#案例1:查询员工编号在100到120之间的员工信息
select * from employees where employee_id >=100 and employee_id<=120;
#--------------------------------------------------------
select * from employees where employee_id between 100 and 120;
#3. in
#含义:判断某字段的:值时候属于in列表中的某一项
#(1)提高语句简洁度
#(2)in列表的值类型必须一直或者兼容
#案例1:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
select last_name,job_id from employees where job_id in('IT_PROG','AD_VP','AD_PRES');
#4. is null
#案例1:查询没有奖金的员工名和奖金率
select last_name,commission_pct
from employees
where commission_pct is null;
#案例2:查询有奖金的员工名和奖金率
select last_name,commission_pct
from employees
where commission_pct is not null;
三、排序查询
语法
select 查询列表
from 表
[where 筛选条件]
order by 排序列表 [asc|desc]
特点
- asc代表的是升序,desc代表的是降序,如果不写,默认的是升序
- order by子句可以支持单个字段、多个字段、表达式、函数、别名
- order by子句一般是放在查询语句的最后面,limit子句除外
实例
#案例1:查询员工信息,要求工资从高到低排序
select * from employees order by salary desc;
#案例2:查询员工信息,要求工资从低到高排序
select * from employees order by salary asc;
#案例3:查询部门编号>=90的员工信息,按入职时间的先后进行排序【添加筛选条件】
select * from employees where department_id>=90 order by hiredate asc;
#案例4:按年薪的高低显示员工的信息和年薪 【按别名排序】
select *,salary*12*(1+ ifnull(commission_pct,0)) as 年薪 from employees order by 年薪;
#案例5:按年薪的高低显示员工的信息和年薪 【按表达式排序】
select *,salary*12*(1+ ifnull(commission_pct,0)) as 年薪 from employees
order by salary*12*(1+ ifnull(commission_pct,0));
#案例6:按姓名的长度显示员工的姓名和工资【按函数排序】
select length(last_name) 字节长度, salary from employees order by 字节长度;
#案例7:查询员工信息,要求先按工资排序,再按员工编号排序【按多个字段排序】
select * from employees order by salary asc,employee_id desc;
测试
- 查询员工的姓名和部门号和年薪,按年薪降序 按姓名升序
- 选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序
- 查询邮箱中包含 e 的员工信息,并先按邮箱的字节数降序,再按部门号升序
#1. 查询员工的姓名和部门号和年薪,按年薪降序 按姓名升序
SELECT CONCAT(first_name,last_name) AS NAME ,department_id,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM employees ORDER BY first_name;
#2. 选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序
SELECT CONCAT(first_name,last_name) AS NAME ,salary FROM employees
WHERE salary NOT BETWEEN 8000 AND 17000 ORDER BY salary DESC;
#3. 查询邮箱中包含 e 的员工信息,并先按邮箱的字节数降序,再按部门号升序
SELECT * FROM employees WHERE email LIKE '%a%' ORDER BY LENGTH(email) DESC, department_id ASC;