主要内容:基础查询,条件查询,排序查询
1.基础查询
/*
语法:
select 查询列表 from 表名
特点:
1-查询的结果集是一个虚拟表
2-select类似于System.out.printIn(打印内容)
select后面跟的查询列表,可以有很多个部分组成,中间用逗号隔开
例如:select 字段1,字段2,字段3 from 表
System.out.printIn()的打印内容只有一个
3-执行顺序
select first_name from employees222;
a. from子句
b. select子句
4-查询列表:
*/
# 一、查询常量
SELECT 100;
# 二、查询表达式
SELECT 100%3;
# 三、查询单个字段
SELECT `last_name` FROM `employees` ;
# 四、查询多个字段,Fn+F12快速对齐格式
SELECT
`last_name`,
`email`,
`employee_id`
FROM
`employees` ;
# 五、查询所有字段
SELECT * FROM `employees`;
# 六、调用函数、获取返回值
# 查询当前数据库
SELECT DATABASE();
# 查询版本
SELECT VERSION();
SELECT USER();
# 七、起别名
# 方式一:使用as关键字
SELECT USER() AS 用户名;
SELECT USER() AS '用户名';
SELECT USER() AS "用户名";
#方式二:使用空格
SELECT USER() 用户名;
SELECT USER() '用户名';
SELECT USER() "用户名";
# 八、
# 需求:查询first_name 和last_name 拼接的全名,最终起别名为:姓 名
# 方案一
SELECT first_name+last_name AS "姓 名"
FROM `employees`;
/*
Java中+的作用:
1.加法运算
2.拼接符
至少有一方为字符串
MySQL中+的作用:
加法运算
*/
# 方案二:使用concat拼接函数
SELECT CONCAT (first_name,last_name) AS "姓 名"
FROM `employees`;
# 九、distinct的使用
# 需求:查询员工涉及到的部门
SELECT DISTINCT `department_id` FROM `employees`;
# 十、查看表的结构
DESC employees;
SHOW COLUMNS FROM employees;
基础查询案例
# 1.下面的语句是否可以执行成功?
SELECT last_name , job_id , salary AS sal
FROM employees;
# 可以,换行没问题
# 2.下面的语句是否可以执行成功?
SELECT * FROM employees;
# 可以,意思是查询所有字段
# 3.找出下面语句的错误
SELECT employee_id , last_name,
salsry * 12 "ANNUAL SALARY"
FROM employees;
# 题中所有符号都应该用英文
# 4.显示表departments的结构,并查询全部数据
DESC departments;
SHOW COLUMNS FROM departments;
SELECT * FROM departments;
# 5.显示出表employees中全部的job_id(不能重复)
SELECT DISTINCT job_id FROM employees;
# distinct 表示不能重复
# 6.显示出表employees的全部列,各个列之间用逗号连接,列头显示为OUT_PUT
SELECT CONCAT(employee_id , ',' ,first_name , ',' , last_name , ',' ,salary , ',' ,
IFNULL(commission_pct , '')) AS "OUT_PUT" FROM employees;
# concat表示拼接,但需要注意的是,拼接值中有NULL时,整体为NULL
# 可以借用 ifnull:如果不是null,则返回参数1,如果是null,则返回参数2
SELECT commission_pct , IFNULL(commission_pct , '空') FROM employees;
复制
2.条件查询
/*
语法:
select 查询列表
from 表名
where 筛选条件;
执行顺序:
1.from 子句
2.where 子句
3.select 子句
举例:select last_name , first_name from employees where salary>20000;
特点:
1.按关系表达式筛选
关系运算符:< > >= <= <>
2.按逻辑表达式筛选
逻辑运算符:and(&&) , or(||) , not(!)
3.模糊查询
like , in , between and , is null
*/
# 一、按关系表达式筛选
# 案例1:查询部门编号不是100的员工信息
SELECT *
FROM employees
WHERE department_id <> 100;
#案例2:工资小于15000的姓名还有工资
SELECT last_name , salary
FROM employees
WHERE salary < 15000;
# 二、按逻辑表达式筛选
# 案例1:查询部门编号不是 50-100 之间的员工的姓名、部门编号、邮箱
# 方式1
SELECT last_name , department_id , email
FROM employees
WHERE department_id<50 OR department_id>100;
# 方式2
SELECT last_name , department_id , email
FROM employees
WHERE NOT(department_id>=50 AND department_id<=100);
# 案例2:查询奖金率>0.03 或者 员工编号在66-110之间的员工信息
SELECT *
FROM employees
WHERE commission_pct>0.03 OR (employee_id>=60 AND employee_id<=110);
# 三、模糊查询
# 1. like
/*
功能:一般和通配符搭配使用,对字符型数据进行部分匹配查询
常见通配符:
_ 任意单个字符
% 任意多个字符
*/
# 案例1:查询姓名中包含字符a的员工信息
SELECT *
FROM employees
WHERE last_name LIKE '%a%';
# 案例2:查询姓名中最后一个字符为e的员工信息
SELECT *
FROM employees
WHERE last_name LIKE '%e';
# 案例3:查询姓名中第一个字符为e的员工信息
SELECT *
FROM employees
WHERE last_name LIKE 'e%';
# 案例4:查询姓名中第3个字符为x的员工信息
SELECT *
FROM employees
WHERE last_name LIKE '__x%';
# 案例5:查询姓名中第二个字符为_的员工信息
SELECT *
FROM employees
WHERE last_name LIKE '_\_%';
# \ :转义字符
# 也可以自己设置转义字符
SELECT *
FROM employees
WHERE last_name LIKE '_$_%' ESCAPE '$';
# 2. in
/*
功能:查询某字段的值是否属于指定的列表之内
a in(常量0,常量1,常量2,常量3,...)
a not in(常量0,常量1,常量2,常量3,...)
*/
# 案例1 :查询部门编号是30,50,90的员工姓名,部门编号
SELECT last_name , department_id
FROM employees
WHERE department_id IN(30,50,90);
# 案例2:查询工种编号不是SH_CLERK或IT_PROG的员工信息
SELECT *
FROM employees
WHERE job_id NOT IN ('SH_CLERK','IT_PROG');
# 3. between and
/*
功能:判断某个字段的值是否介于xx之间
*/
# 案例1:查询部门编号是30-90之间的部门编号、员工姓名
SELECT department_id ,last_name
FROM employees
WHERE department_id BETWEEN 30 AND 90 ;
# 案例2:查询年薪不是100000-200000之间的员工姓名、工资、年薪
SELECT last_name , salary , salary*12*(1+IFNULL(commission_pct, 0)) 年薪
FROM employees
WHERE salary*12*(1+IFNULL(commission_pct, 0)) <100000 OR
salary*12*(1+IFNULL(commission_pct, 0)) > 200000;
SELECT last_name , salary , salary*12*(1+IFNULL(commission_pct, 0)) 年薪
FROM employees
WHERE salary*12*(1+IFNULL(commission_pct, 0)) NOT BETWEEN 100000 AND 200000;
# 4. is null is not null
# 案例1 :查询没有奖金的员工信息
SELECT *
FROM employees
WHERE commission_pct IS NULL;
#案例2 :查询有奖金的员工信息
SELECT*
FROM employees
WHERE commission_pct IS NOT NULL ;
# <=> : 安全等于,既能判断普通内容,又能判断null值
# 课堂测试
# 1.查询工资大于12000的员工姓名和工资
SELECT last_name , salary
FROM employees
WHERE salary > 12000;
# 2.查询员工工号为176的员工的姓名和部门号和年薪
SELECT employee_id , last_name , department_id,salary*12*(1+IFNULL(commission_pct,0))年薪
FROM employees
WHERE employee_id=176;
# 3.选择工资不在5000到12000的员工的姓名和工资
SELECT last_name , salary
FROM employees
WHERE salary NOT BETWEEN 5000 AND 12000;
# 4.选择在20 或50 号部门工作的员工姓名和部门号
SELECT last_name , department_id
FROM employees
WHERE department_id IN(20 , 50);
# 5.选择公司中没有管理者的员工姓名及job_id
SELECT last_name , job_id
FROM employees
WHERE manager_id IS NULL ;
# 6.选择公司中有奖金的员工姓名,工资和奖金级别
SELECT last_name , salary , commission_pct
FROM employees
WHERE commission_pct IS NOT NULL ;
# 7.选择员工姓名的第三个字母是a的员工姓名
SELECT last_name
FROM employees
WHERE last_name LIKE '__a%';
# 8.选择姓名中有a和e的员工姓名
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%' AND last_name LIKE '%e%';
# 9.显示出表employees中first name 以 e 结尾的员工信息
SELECT *
FROM employees
WHERE first_name LIKE '%e';
# 10.显示出表中部门编号在80-100之间的姓名、职位
SELECT last_name,job_id
FROM employees
WHERE department_id BETWEEN 80 AND 100;
# 11.显示表中manager_id 是100,101,110的员工的姓名职位
SELECT last_name , job_id
FROM employees
WHERE manager_id IN (100 , 101 , 110);
复制
3.排序查询
/*
语法:
select 查询列表
from 表明
where 筛选条件
order by 排序列表
执行顺序:
1.from 子句
2.where 子句
3.select 子句
4.order by 子句
举例:
select last_name , salary
from employees
where salary>10000
order by salary ;
特点:
1.排序列表可以是单个字段、多个字段、表达式、函数、列数、以及以上的组合
2.升序,通过asc,默认
降序,通过deac
*/
# 一、按单个字段排序
# 案例1:员工编号大于120的工资降序
SELECT * FROM employees WHERE employee_id>120 ORDER BY salary DESC;
# 二、按表达式排序
# 案例1:对有奖金的员工,按年薪降序
SELECT * , salary*12*(1+IFNULL(commission_pct,0))年薪
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;
# 三、按别名排序
# 案例1:对有奖金的员工,按年薪降序
SELECT * , salary*12*(1+IFNULL(commission_pct,0))年薪
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY 年薪 DESC;
# 四、按函数的结果排序
# 案例1:根据姓名的字数长度进行升序
SELECT LENGTH(last_name),last_name
FROM employees
ORDER BY LENGTH(last_name);
# 五、按多个字段进行排序
# 案例1:查询员工的姓名、工资、部门编号、先按工资升序、再按部门编号降序
SELECT last_name , salary , department_id
FROM employees
ORDER BY salary ASC , department_id DESC ;
# 六、按列数排序
SELECT * FROM employees
ORDER BY 2;
# 作业:
USE myemployees
# 1.查询员工的姓名和部门号和年薪,按年薪降序
SELECT last_name , department_id , salary*12*(1+IFNULL(commission_pct , 0))年薪
FROM employees
ORDER BY 年薪 DESC;
# 2.选择工资不在8000到17000的员工姓名和工资,按工资降序
SELECT last_name , salary
FROM employees
WHERE salary NOT BETWEEN 8000 AND 17000
ORDER BY salary DESC;
# 3.查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,在按部门编号升序
SELECT *
FROM employees
WHERE email LIKE '%e%'
ORDER BY LENGTH(email) DESC , department_id;
复制
先写这么多,仅供参考,欢迎指点。
如果你有希望实现的内容,或者在过程中遇到了某些困难,欢迎交流探讨!
/如有纰漏 请联系我 十分感谢/
长按图片,点击关注
文章转载自三分稚气,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
508次阅读
2025-04-25 18:53:11
墨天轮个人数说知识点合集
JiekeXu
446次阅读
2025-04-01 15:56:03
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
427次阅读
2025-04-25 15:30:58
MySQL数据库当前和历史事务分析
听见风的声音
426次阅读
2025-04-01 08:47:17
MySQL 生产实践-Update 二级索引导致的性能问题排查
chengang
390次阅读
2025-03-28 16:28:31
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
365次阅读
2025-04-17 17:02:24
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
357次阅读
2025-04-15 23:49:58
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
332次阅读
2025-04-15 14:48:05
openHalo问世,全球首款基于PostgreSQL兼容MySQL协议的国产开源数据库
严少安
305次阅读
2025-04-07 12:14:29
记录MySQL数据库的一些奇怪的迁移需求!
陈举超
201次阅读
2025-04-15 15:27:53