栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

第六章、SQL语言学习(条件查询) 超硬核!!!

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第六章、SQL语言学习(条件查询) 超硬核!!!

哈罗,各位小伙伴大家好,又见面了,我还是那个不吃饱不干活的小尘,欢迎来到本期的SQL语言之条件查询部分,让我们一起进入知识的海洋吧~  

之前我们知道了简单查询,这次的条件查询又是什么样的呢?

让我们一起来探索吧~

 

一、语法

先回顾一下基础查询:

select  查询列表  from  表名

查询列表:字段、表达式、函数、常量值……

这是查询表中所有行的数据。

若我只想查询部分行呢?

这时候就要追加 where 子句了。

在where 后面加上筛选条件即可。当where后面的条件成立的话,就可以显示出来。

即:

select  

          查询列表;

from

         表名;

where

         筛选条件;

注:

执行顺序:表名--->筛选条件--->查询列表

二、分类 

根据筛选条件的不同,大致可以分为一下几类:


1、按照条件表达式筛选

条件运算符: >     <     =     != 或 <>    >=    <=

注:MySQL里面的条件运算符,等于是只有一个等于号,不像java里面的两个。

       不等于号可以用“ != ” ,但它也有自己的符号“ <> ”

案例一、

查询工资>12000的员工信息

代码:

SELECt 
	*
FROM
	employees
WHERe
	salary>12000;

执行结果:

案例二、

查询部门编号不等于90号的员工名和部门编号

我们要查什么,select后面就写什么

代码:

SELECT
	last_name,
	department_id
FROM
	employees
WHERe
	department_id<>90;

执行结果:

2、按照逻辑表达式筛选

逻辑运算符:&&     ||     !

在MySQL里面,推荐使用它自己的运算符:

                    and  (&&)、or(||)、not(!)

作用:用于连接条件表达式。当条件比较多的时候,得连在一起啊,又不能用逗号。

意思:and 和 && :如果两个条件都为true,那么最终结果为true,反之为false。

           or   和   ||  :只要有一个条件为true,那整体就为true,反之就为false。

           not 和   !:如果连接的条件本身为false,那么结果为true,反之为false。

案例一、

查询工资在10000到20000之间的员工名、工资以及奖金

代码:

select 
  last_name,
  salary,
  commission_pct 
from
  employees 
where salary >= 10000 
  and salary <= 20000 ;

执行结果:

案例二、

查询部门编号不在90~110之间或者工资高于15000的员工信息

代码:

SELECt
	*
FROM 
	employees
WHERe
	department_id<90 OR department_id>110 OR salary>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

案例一、

查询员工名中包含字符a的员工信息

代码:

SELECt 
	* 
FROM
	employees
WHERe
	last_name LIKE '%a%';

注:这个筛选条件不是具体的条件了,不是具体的条件或是大于某个具体的值。是一个很模糊的条件,不是一个精确的值。所以叫“模糊查询”。

last_name like '%a%';

解读:字符型的值必须用单引号引用!!!

           根据题目必须包含字符a,那还有其他字符啊,前面可能有,后面也有可能有。

           在a前后加上百分号%,这里的百分号代表一种通配符,代表任意一个字符。

执行结果:

案例二、

查询员工名中第三个字符为n,第五个自字符为l的员工名和工资

代码:

select 
	last_name,
	salary
from
	employees
where
	last_name like '__n_l%';

执行结果:

案例三、

查询员工名中第二个字符为下划线_的员工名

下划线本身是通配符,但我们现在要让它当成普通字符来使。

SELECt 
    last_name
FROM
    employees
WHERe
    last_name LIKE '__%';

这样写吗?

明显是不对的!上面打的那个下划线是一个通配符,而不是普通的字符下划线!

所以我们需要转义一下。

   last_name LIKE '__%';

 代码:
 

select 
	last_name
from
	employees
where
	last_name like '__%';

执行结果:

其实在MySQL中也推荐大家这样去用:

下划线需要转义,我们可以随意在前面写一个转义字符(即可以不用“ ”)。

比如我们写一个$ , 即: last_name LIKE '_$_%';

那么我们此时需要标明一下这个$符号实际上是一个转义。那我们可以加上ESCAPE关键字,给$指定一下,说明一下$是一个转义。

即:last_name LIKE '_$_%' ESCAPE '$';

执行一下也是好使的:

总结:

like

一般和通配符搭配使用。

通配符: %(任意多个字符,包含0字符)、_ (任意单个字符)

<2>  between  and

在英文中,between  and表示在……之间

案例一、

查询员工编号在100~120之间的员工信息

按照之前的写法,肯定是这样:
 

SELECt 
	*
FROM
	employees
WHERe
	employee_id>=100 AND employee_id<=120;

执行结果:

那有的小伙伴就要问了,employee_id 这个写了两遍,可以省略吗?

想啥呢?肯定不能啊。

除非……要请出咱们的 between  and 出山了!

代码:

SELECt 
	*
FROM
	employees
WHERe
	employee_id BETWEEN 100 AND 120;

执行结果:

总结:

between  and

1)使用between and 可以提高语句的简洁度

2)between and 包含临界值

3)两个临界值不能调换顺序

4)临界值类型必须一致

<3>  in

案例一、

查询员工的工种编号是 IT_PROG , AD_VP , AD_PRES 中的员工名和工种编号

按照之前的写法:

SELECt 
	last_name,
	job_id
FROM
	employees
WHERe
	job_id ='IT_PROG' OR job_id='AD_VP' OR job_id='AD_PRES';

执行结果:

我们可以看到,非常繁琐麻烦。

我们可以使用in来实现简洁。

因为我们判断的都是job_id,所以我们可以用in来将可能出现的值都放进小括号里面。

即:

SELECt 
	last_name,
	job_id
FROM
	employees
WHERe
	# job_id ='IT_PROG' or job_id='AD_VP' or job_id='AD_PRES';
	job_id IN('IT_PROG','AD_VP','AD_PRES');

执行结果:

问:

in里面支持写百分号之类的通配符吗?

如:

查询员工的工种编号是 IT_PROG , AD_开头 的员工名和工种编号

代码:

#查询员工的工种编号是 IT_PROG , AD_开头 的员工名和工种编号
SELECt
	last_name,
	job_id
FROM
	employees
WHERe
	job_id IN('IT_PROG','AD_%');

执行结果:

 

我们可以看到,明显是不可以的!

因为in是判断与括号里面的数值是否相等的,而不是和like一样。

当然,这里用like也是不行的,like没有这个用法。

总结:

in 

含义:判断某字段的值是否属于in列表中的某一项

特点:1)使用in做筛选的话,比使用or做筛选更简洁,即提高了语言简洁度

           2)in列表中的值类型必须统一(兼容)

           3)不支持通配符

 

<4>  is null

案例一、

查询没有奖金的员工名和奖金率

按道理咱们应该这样写:

SELECt
	last_name,
	commission_pct
FROM
	employees
WHERe
	commission_pct =NULL;

执行结果:

 

 

让我们失望的是,并没有结果出现!

原因就在于,=运算符不能判断NULL值!

这个时候我们可以用is null

代码:

#查询没有奖金的员工名和奖金率
SELECt
	last_name,
	commission_pct
FROM
	employees
WHERe
	commission_pct IS NULL;

执行结果:

那我们想查询有奖金的,就很简单啦:

把“is null”改成“is not null”就可以啦!

代码:

SELECt
	last_name,
	commission_pct
FROM
	employees
WHERe
	commission_pct IS NOT NULL;

执行结果: 

 

 

补充:

有的小伙伴感觉is可以这样用:

用来判断薪资是否是20000。


代码:

SELECt
	last_name
FROM 
	employees
WHERe
	salary IS 20000;

执行结果:

哎呀,报错了!

注意了,is适合null搭配的,不能随意更改!

总结:

is null

1)=或者<>不能用于判断null值

2)is null 或 is not null可以判断null值

3)is不能随意搭配

<5>安全等于

 不等于我们是这样写的:  <>

那我们在里面加一个等于号,就是安全等于:  <=>

案例一、

查询没有奖金的员工名和奖金率

刚才我们用is null来做的,现在我们用安全等于来试试。

代码:

SELECt 
	last_name,
	commission_pct
FROM
	employees
WHERe
	commission_pct <=> NULL;

执行结果:

 

案例二、

查询工资为12000的员工信息

当然,安全等于不仅可以判断NULL值,还可以判断普通类型的值。

代码:

SELECt
	last_name,
	salary
FROM
	employees
WHERe
	salary <=> 12000;

执行结果:

 

总结:

1)安全等于是判断是否等于,如果等于,返回true

2)is null只可以判断null值,但可读性较高。

3)安全等于既可以判断null值,又可以判断普通数值。但可读性较低。

4)建议大家用is null

三、条件查询案例

案例一、

查询员工号为176的员工的姓名和部门号和年薪

正常来说,我们应该这样写:

 

select
	last_name,
	department_id,
	salary*12*(1+commission_pct) AS 年薪
from
	employees;

执行结果:

 

但是,

commission_pct有为null的情况。

所以,要把要用IFNULL函数,若奖金为空的话,就给它赋值0。(上面刚讲过)

所以应该这样写:

SELECt
	last_name,
	department_id,
	salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM
	employees;

 

执行结果:

好啦~今天的知识点有点多,要好好消化哦

下次咱们来做些练习题巩固一下

MySQL数据库专栏持续更新中,欢迎前来学习

原创不易,请多多支持

咱们下次再见喽~

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/297412.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号