视频参考自:P28 - P42

https://www.bilibili.com/video/BV1xW411u7ax

条件查询概述

# 进阶2 条件查询
-- 语法:SELECT 查询列表 FROM 表名 WHERE 筛选条件;
-- WHERE 关键字:当...筛选条件成立时,返回条件结果 -- 分类1:按条件表达式筛选,条件运算符:大于>、小于<、等于=、不等于<>(!=)、大于等于>=、小于等于<=
-- 分类2:按逻辑表达式筛选,逻辑运算符:且&&、或||、非!、MySQL推荐关键字[AND OR NOT]来表达
-- 分类3:模糊查询:LIKE,BETWEEN AND,IN,IS NULL

条件表达式

# 按条件表达式筛选

-- 案例1:查询工资大于12000的员工信息【如果单纯的说信息,那可以默认视为表的所有数据】
SELECT * FROM `employees` WHERE `salary` > 12000; -- 案例2:查询部门编号不等于90的【员工名】和【部门编号】
SELECT
`first_name`,`last_name`,`department_id`
FROM
`employees`
WHERE
`department_id` <> 90;

逻辑表达式

# 按逻辑表达式筛选  

-- 案例1:查询工资在10000~20000之间的员工名,工资&奖金
SELECT
`first_name`,`last_name`,`salary`,`commission_pct`
FROM
`employees`
WHERE
10000 <= `salary` AND `salary` <= 20000; -- 案例2:查询部门编号不是在90~110之间,或者工资高于15000的员工信息
SELECT
*
FROM
`employees`
WHERE
NOT(90 <= `department_id` AND `department_id` <= 110) OR (`salary` > 15000);
-- `department_id` < 90 OR `department_id` > 110 OR `salary` > 15000;

模糊条件查询

# 按模糊条件查询
-- LIKE 和通配符一起使用
-- BETWEEN ... AND ...
-- IN
-- IS NULL | IS NOT NULL
-- 通配符: %任意无或单或多字符 _任意1个字符 -- LIKE 像...
-- 案例1:查询员工名中包含字符a的员工信息
SELECT *
FROM `employees`
WHERE `last_name` LIKE '%a%'; -- %通配符,表示无字符或者任意字符 -- 案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
SELECT `last_name`,`salary`
FROM `employees`
WHERE `last_name` LIKE '__n_l%'; -- '__e_a%' [无结果]

转义处理

-- 案例3:查询员工名中第二个字符为下划线的员工名[\转义处理]
SELECT `last_name`
from `employees`
WHERE `last_name` LIKE '_\_%'; -- 或者我们自定义转义符 ESCAPE关键字
SELECT `last_name`
FROM `employees`
WHERE `last_name` LIKE '_@_%' ESCAPE '@';
-- LIKE '_a_%' ESCAPE 'a';
-- LIKE '_$_%' ESCAPE '$'; 都可以

BETWEEN ... AND ...

-- BETWEEN .. AND .. 在...和...之间
-- 1、简化SQL,语义化SQL
-- 2、这个取值包含值本身
-- 3、值的位置不允许颠倒 -- 案例1:查询员工编号100~120之间的员工信息
SELECT * FROM `employees` WHERE `employee_id` BETWEEN 100 AND 120;

IN(...)

-- IN 关键字
-- 1、IN 等同Java的枚举
-- 2、提高SQL简洁和性能,语义化SQL
-- 3、IN列表的值类型必须一致,或者兼容
-- 4、IN的列表内容,不支持通配符【谁TM会往这里面写通配符啊!?】 -- 案例:查询员工的工种是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
SELECT `last_name`,`job_id`
FROM `employees`
WHERE `job_id` IN('IT_PROG','AD_VP','AD_PRES');
-- 非IN的WHERE条件 job_id = 'IT_PROG' or job_id = 'AD_VP' or job_id = 'AD_PRES';

空值判断与安全判断

-- ISNULL
-- = or <> 不能判断Null值
-- is null 或者 is not null 只用于判断null值 -- 案例:查询没有奖金的员工名和奖金串 -- 有奖金 IS NOT NULL
-- 没奖金 IS NULL
-- 那怎么没有0的情况? SELECT `last_name`,`commission_pct`
FROM `employees`
WHERE `commission_pct` IS NOT NULL; # 什么是安全等于? <=>
SELECT `last_name`,`commission_pct`
FROM `employees`
WHERE `commission_pct` <=> NULL; -- 判断是否为null值? -- 查询奖金为12000的信息
SELECT `last_name`,`salary`
FROM `employees`
WHERE `salary` <=> 12000; -- IS NULL 仅判断NULL值
-- <=> 既可以判断NULL值,也可以判断普通的数值
-- 但是可读性很差,不建议使用

练习案例:

-- 1. 查询工资大于 12000 的员工姓名和工资
SELECT `first_name`,`last_name` ,`salary`
FROM `employees`
WHERE `salary` > 12000; -- 2. 查询员工号为 176 的员工的姓名和部门号和年薪
SELECT `first_name`,`last_name`,`department_id`,`salary` * 12
FROM`employees`
WHERE `employee_id` = 176; -- 3. 选择工资不在 5000 到 12000 的员工的姓名和工资
SELECT `first_name`,`last_name`,`salary`
FROM `employees`
WHERE `salary` < 5000 OR `salary` > 12000; -- 4. 选择在 20 或 50 号部门工作的员工姓名和部门号
SELECT `first_name`,`last_name`,`department_id`
FROM `employees`
WHERE `department_id` IN (20,50); -- 5. 选择公司中没有管理者的员工姓名及 job_id
SELECT `first_name`,`last_name`,`job_id`
FROM `employees`
WHERE `manager_id` IS NULL; -- 6. 选择公司中有奖金的员工姓名,工资和奖金级别
SELECT `first_name`,`last_name`,`salary`,`commission_pct`
FROM `employees`
WHERE `commission_pct` IS NOT NULL; -- 7. 选择员工姓名的第三个字母是 a 的员工姓名
SELECT `first_name`,`last_name`
FROM `employees`
WHERE `last_name` LIKE '__a%'; -- 8. 选择姓名中有字母 a 和 e 的员工姓名
SELECT `first_name`,`last_name`
FROM `employees`
WHERE `last_name` LIKE '%a%' OR `last_name` LIKE '%e%'; -- 9. 显示出表 employees 表中 first_name 以 'e'结尾的员工信息
SELECT *
FROM `employees`
WHERE `first_name` LIKE "%e"; -- 10. 显示出表 employees 部门编号在 80-100 之间 的姓名、职位
SELECT `last_name`,`job_id`
FROM `employees`
WHERE `department_id` BETWEEN 80 AND 100; -- 11. 显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、职位
SELECT `last_name`,`job_id`
FROM `employees`
WHERE `manager_id` IN(100,101,110);

排序查询

-- 排序查询
/*
SELECT 查询列表
FROM 表名
[WHERE 筛选条件]
ORDER BY 排序列表 1、ORDER BY 子句 支持单个字段,多个字段,表达式,函数,别名
2、ASC 默认升序排序,DESC 默认降序排序
3、ORDER BY 子句总是放在SQL语句的最后面[LIMIT 是例外]
4、执行顺序就按照默认SQL填写的字段先后来执行
*/
SELECT * FROM `employees` ORDER BY `first_name`; -- 案例:查询员工信息,要求工资从高到底排序[顺序是低到高,逆序高到低]
SELECT * FROM `employees` ORDER BY `salary` DESC;
SELECT * FROM `employees` ORDER BY `salary` aSC; -- [默认不写就是ASC] -- 案例:查询员工编号大于等于90的员工信息,按入职时间的先后顺序排序
SELECT *
FROM `employees`
where `employee_id` >= 90 ORDER BY `hiredate`; -- 案例:按年薪的高低显示员工信息和年薪【表达式排序】 [升序降序不限]
SELECT *,`salary` * 12 *(1 + IFNULL(`commission_pct`,0)) AS YS
from `employees`
ORDER BY `salary` * 12 *(1 + IFNULL(`commission_pct`,0)) DESC; -- [asc or desc] -- 案例:按年薪的高低显示员工信息和年薪【别名排序】 [升序降序不限]
SELECT *,`salary` * 12 *(1 + IFNULL(`commission_pct`,0)) AS YS
from `employees`
ORDER BY YS DESC; -- 案例:按姓名的长度[LENGTH()]显示员工姓名和工资 [升序降序不限]
select LENGTH(`last_name`) AS `name_length`,`last_name`,`salary`
from `employees`
order by `name length`; -- 案例:查询员工信息,要求先按工资排序,再按员工编号排序[升序降序不限]
SELECT *
FROM `employees`
ORDER BY `salary` desc,`employee_id` asc; -- 多个字段排序可以允许独立的升序降序 -- 练习案例:
-- 查询员工的姓名和部门号和年薪,按年薪降序、按姓名升序
SELECT `last_name`,`department_id`,`salary` * 12 as ys
from `employees`
order by ys DESC,`last_name` asc; -- 选择工资不再8000到17000的员工的姓名和工资,按工资降序
SELECT `last_name`,`salary`
from `employees`
where `salary` not between 8000 and 17000
order by `salary` desc; -- 查询邮箱中包含e的员工信息,按邮箱的字节降序,再按部门号升序
SELECT *,LENGTH(`email`) AS elength
FROM `employees`
WHERE `email` LIKE '%e%'
order by length(`email`) desc,`department_id` asc;

【DataBase】MySQL 06 条件查询 & 排序查询的更多相关文章

  1. mysql 多个属性排序查询

    查询 排序(order by) 语法:order by 字段 asc/desc asc 顺序,正序.数值 :递增,字母:自然顺序(a-z) desc 倒序 反序 数值:递减, 字母:自然反序 查询的宗 ...

  2. 数据库MySQL--条件查询/排序查询

    一.条件查询 条件查询:满足条件的字段被筛选出来 语法:select 查询列表字段 from 表名 where 筛选条件: 条件查询的条件分类: 1.按条件表达式筛选:条件运算符:>, < ...

  3. mysql 06章_分组查询和链接查询

    一.分组查询 在进行查询时,通常需要按某个或某些字段进行一些统计,因此就需要使用分组查询,但分组后通常需要与聚合函数使用,分组才有意义. 语法:SELECT <字段列表|*> FROM 表 ...

  4. mysql5.5根据条件进行排序查询 TP5

    用到了 order by if 和 count 使用的是TP5.0 $sql = Db::name('teacher') ->alias('t') ->join('user u', 'u. ...

  5. mysql根据汉字拼音排序查询

    例如现在有一张数据表label,字段为id.name,此表的字符集设置为gb2312,以gb2312_chinese_ci整理. 设置InnoDB引擎的字符集也为简体中文,且整理为gb2312_chi ...

  6. mysq带条件的分页查询数据结果错误

    记一次mysql分页条件查询的结果出错: 以一张用户表为例,首先我们看表中的所有数据,注意红色框住的部分: 我们使用不带条件的分页查询来查询,数据显示是OK的: SELECT id,login_nam ...

  7. Hibernate_day04--课程安排_Hibernate查询方式_对象导航查询_OID查询

    Hibernate_day04 上节内容 今天内容 Hibernate查询方式 对象导航查询 OID查询 HQL查询 查询所有 条件查询 排序查询 分页查询 投影查询 聚集函数使用 QBC查询 查询所 ...

  8. (四)MySQL条件查询(通配符、模糊查询)、排序查询、分组查询(单行、分组函数)

    一.条件查询 1.含义:前面学的基础查询可以查询一个或多个字段,如果需要的数据仅仅是其中的某一行或多行就用到了条件查询. 2.语法:(序号表示语句执行顺序) SELECT 字段名 ③ FROM 表名 ...

  9. MySQL数据库6 -查询基础,简单查询,条件查询,对查询结果排序

    一.SELECT语句 SELECT COL1,COL2,....COLn FROM TABLE1,TABLE2,....TABLEn [WHERE CONDITIONS] -- 查询条件 [GROUP ...

  10. MySQL数据库—查询基础,简单查询,条件查询,对查询结果排序

    一.SELECT语句 SELECT COL1,COL2,....COLn FROM TABLE1,TABLE2,....TABLEn [WHERE CONDITIONS] -- 查询条件 [GROUP ...

随机推荐

  1. Nacos 版本不一致报错: Request nacos server failed

    在做微服务开发中,测试环境使用Nacos没有问题,但是生产环境服务启动一直报错: com.alibaba.nacos.api.exception.NacosException: Request nac ...

  2. electron 安装遇到的各种奇怪问题解决

    在国内,electron经常遇到各种问题,导致无法安装 在安装electron官网的快速入门步骤,到npx electron-forge import的时候,遇到了各种问题 npm install - ...

  3. ansible v2.9.9离线安装脚本

    链接:https://pan.baidu.com/s/18uxyWWyJ39i1mJJ1hb8zww?pwd=QWSC 提取码:QWSC

  4. 【BUG记录】Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\xA6' for column 'name' at row 1

    大家好呀,我是summo,这次的文章标题是一个Mysql数据库的SQL错误,遇到的同学自然懂,没遇到的同学希望你永远也不要遇到. 一.错误说明 Cause: java.sql.SQLException ...

  5. 汇总:"undefined reference to" 问题解决方法

    背景 在Linux下编程容易出现的现象,就是在链接多文件的时候总是报错,类似下面这样的错误: (.text+0x13): undefined reference to `func' 关于undefin ...

  6. Python读取YAML配置数据

    python编写的一些脚本需要一些简单配置时可以使用yaml文件进行设置.本文将介绍如何使用pyyaml进行读取配置数据. 首先安装pyyaml pip install pyyaml 简单使用下pyy ...

  7. 免费领 | 2000件“直击灵魂”的Polo衫,创龙科技10周年献礼!

          一件"有灵魂"的Polo衫 时光荏苒,创龙科技即将迎来10周年庆!为感谢各位客户多年的支持与信任,创龙科技特推出10周年献礼活动--2000件"直击灵魂&qu ...

  8. 小组合作实现的基于 jsp,servlet,mysql 编写的学校管理系统

    基本完成的页面--源代码在<文件>中可下载 文件地址:https://i.cnblogs.com/Files.aspx 学生管理模块各功能已实现 百度网盘下载地址: 链接:https:// ...

  9. JVM(Java虚拟机) 整理(一):基础理论

    JVM整体结构 本文主要说的是HotSpot虚拟机, JVM 全称是 Java Virtual Machine,中文译名:Java虚拟机 简化一下: Java字节码文件 Class文件本质上是一个以8 ...

  10. ubuntu pyinstaller 的安装以及使用

    使用pyinstaller将Python文件打包成linux可执行文件. 安装pip3: sudo apt-get install python3-pip 更换pip3下载源: 1 sudo su 2 ...