SQL基础整理(六) 关于LIKE,BETWEEN,空值判断,IN,EXISTS 讲解以及示例

按照惯例,先把这次讲解需要用到的表贴出来

product表 

 

shopproduct表

一.LIKE谓词

1.  LIKE是用来进行字符串模糊查询的谓词,我们之前介绍字符串匹配查询的时候使用的都是等于号,这种情况只有当完全相等的情况下才会完成匹配,但是如果不完全一致时如何完成检索呢? 这就需要用到  LIKE 了

2.  如果我们想从product表中找出product_name叫做高压锅的商品信息,但是我们忘了具体的名字是什么了,只知道是叫什么什么锅,那么这时候应该怎么去写呢 

select * from product where product_name LIKE '%锅';

在语句中 LIKE表示 进行的是模糊查询,然后%锅 表示的是你要找的数据是什么什么锅,%表示0字符以上的任意字符串,同样的%可以用到任何你需要进行模糊查询的位置,比如%压%也可以匹配到高压锅

3.  需要注意的是,%可以匹配到无穷多个字符,如果表中有一个数据叫做高高压锅,通过%锅也可以匹配到,那么如果我们只想看到高压锅这条数据,应该怎么做呢?通过下划线   “_” 下划线只匹配任意单个字符,不会像%一样匹配多个字符

 

 

二.BETWEEN--范围查询

1.  顾名思义,between表示一个范围,我们从product表中,找出售价在100--1000范围内的商品信息

select * from product where sale_price between 100 and 1000;

 

由此我们可以看出between是包括100和1000两个边界值的,如果不想包含这个边界值,还是需要用大于号和小于号去进行比较

 

 

三.IS NULL 和 IS NOT NULL 

1.  还是顾名思义是用来判断是否为空值的语法,还是以product表为例

我们先找出注册日期regist_date为空的商品信息

select * from product where regist_date IS NULL;

再找出注册日期不为空的数据

select * from product where regist_date IS  NOT NULL;

 

四.IN--or的简单用法

1. 如果我们需要查找出售价是1000,3000,6800的商品,如果使用的是or的语法,应该这样去写

select * from product where sale_price=1000 or sale_price=3000 or sale_price=6800;

 

但是这样的话,代码比较长 如果使用in关键字的话,应该这样写

select * from product where sale_price in (1000,3000,6800); 结果与上面的相同

 

而且,IN关键字还有一个更方便的用处,就是IN的参数可以是一个子查询的结果

比如,我们把上面说的两张表结合起来说 找出大阪店000C 的在售商品的售价

SELECT product_name,sale_price
from product

where product_id in (select product_id   from shopproduct where shop_id='000C');

在子查询中,我们先找到所有的大阪店000C在售的所有商品编号,然后再找出他们的售价,这也就是IN关键字比OR更灵活的地方了

 

 

 

五.EXISTS谓词--理解起来有点难,但是有很大的便利性

1.  谓词的作用就是判断是否存在满足某种条件的记录,如果存在返回true,如果不存在就返回false

 我们还是采用IN中提到的例子进行对比   找出大阪店000C 的在售商品的售价

SELECT product_name,sale_price
from product as p
where EXISTS (select * 
                from shopproduct as sp 
                  where sp.shop_id='000C'  AND sp.product_id=p.product_id);

 

在这段代码中 EXISTS 的参数是一个关联子查询,由于EXISTS的返回值是布尔类型的,所以 他并不关心你select * 还是别的乱七八糟的东西,这不影响程序的结果,不过 一般习惯上还是在内层中select *

 

这段代码具体的执行过程是: 先从外层查询中找到一条记录,然后拿到内层查询中去进行判断,如果满足内层循环所指定的条件,则内层循环返回一个true,则将这条记录的product_name和sale_price进行输出

 

 

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页