sql 判断相等_过滤数据《SQL必知必会》

为何需要过滤数据?

select关键字查询数据,可以指定所需要查询的列(*表示查询所有列),但查询结果将会包括所有的行。在数据库中,一张数据表(table)可能会包含数百万行之多,这之中有很多数据往往我们并不需要,因此需要对数据添加条件筛选。

SQL如何实现过滤?

在 SELECT 语句中,数据根据 WHERE 子句中指定的搜索条件进行过滤。 WHERE 子句在表名(FROM 子句)之后给出。

例:查询Products表中,生产价格(prod_price)为3.49的数据

SELECT prod_name, prod_price FROM Products WHERE prod_price = 3.49;

注:WHERE后跟条件,表示需要满足价格=3.49,在相等的时,注意该列的数据类型,prod_price数据是数值形型,因此等号后面直接跟数字即可。

例2:查询Products表中,生产名称(prod_name)为“milk”的数据。

SELECT prod_name, prod_price FROM Products WHERE prod_name = 'milk';

注:

1.WHERE后跟条件,表示需要名称=milk,在相等的时,注意该列的数据类型,prod_name数据是字符串类型,因此等号后面直接跟字符串,不能跟数字。

2.SQL中用英文单引号扩起来表示字符串,字符串内可以随便写,如;'123'、'abcd'、'1@3'、'牛奶111111' 等,都是字符串

3.SQL中的分号、引号等必须采用英文状态标点符号,区别中文和英文符号等区别在于中文字符更宽,因此中文字符又称为全角字符,英文字符称为半角字符。如;(中)和;(英)、‘’(中)和''(英)

如何进行其他条件筛选?

在实际应用中,我们可能还需要查询大于某个值或不等于某个值的条件,对于不同条件,where后跟不同条件即可,where后支持的条件如下。

7b2560e43b8c201c71c0073841d46843.png

例:查询价格小于10的数据

SELECT prod_name, prod_price FROM Products WHERE prod_price < 10;

例2:查询有不是供应商 DLL01 制造的产品:

SELECT vend_id, prod_name FROM Products WHERE vend_id <> 'DLL01';

如何筛选多个条件(AND关键字)?

实际应用中,我们往往需要筛选多个条件,and关键字用来解决此类问题。

例:查询价格10-20的数据

SELECT prod_name, prod_price FROM Products
  WHERE prod_price >= 10 AND prod_price <= 20;

例2:查询名称为牛奶,并且价格大于10的数据

SELECT prod_name, prod_price FROM Products
  WHERE prod_name = '牛奶' AND prod_price >= 10;

例3:查询名称为牛奶,并且价格在10-20之间的数据

SELECT prod_name, prod_price FROM Products
  WHERE prod_name = '牛奶' AND prod_price >= 10 AND prod_price <= 20;

注:如果需要更多条件,继续增加AND即可。

如何筛选多个条件(OR关键字)?

AND连接的条件表示,需要同时满足。OR连接到条件,需要满足一个即可。

例:查询价格小于10或者,大于20的数据

SELECT prod_name, prod_price FROM Products
  WHERE prod_price < 10 OR prod_price > 20;

例2:查询名称为牛奶,或者价格小于10或者,价格大于20的数据

SELECT prod_name, prod_price FROM Products
  WHERE prod_name = '牛奶' OR prod_price < 10 OR prod_price > 20;

注:如果需要更多条件,继续增加OR即可。

AND和OR关键字能一起用吗?

可以一起使用。AND表示与的关系,OR表示或的关系,但一起使用往往会导致逻辑复杂,往往会采用IN关键字代替OR。

例:查询价格等于10的牛奶或价格等于20的牛奶。

写法1:

SELECT prod_name, prod_price FROM Products
WHERE (prod_name = '牛奶' AND prod_price = 10) OR (prod_name = '牛奶' AND prod_price = 20)

注:

1.此写法表示,查询出价格等于10的牛奶,或查询出价格等于20的牛奶,两个条件满足一个即可。

2.()必须使用英文括号,关键字(AND、OR)识别顺序和数学的运算顺序一样,有括号先算括号里面的,没有括号,从左向右识别。系统的识别顺序为:条件1(prod_name = '牛奶' AND prod_price = 10) ,条件2(prod_name = '牛奶' AND prod_price = 20),结果需要满足:条件1 OR 条件2.

写法2:

SELECT prod_name, prod_price FROM Products
WHERE prod_name = '牛奶' AND (prod_price = 10 OR prod_price = 20)

注:

1.此写法表示,查询出名称为牛奶,并且,价格等于10或价格等于20,也能查出同样的效果

2.()必须使用英文括号,关键字(AND、OR)识别顺序和数学的运算顺序一样,有括号先算括号里面的,没有括号,从左向右识别。系统的识别顺序为:条件1 prod_name = '牛奶' ,条件2(prod_price = 10 OR prod_price = 20),结果需要满足,条件1 AND 条件2

写法3:

SELECT prod_name, prod_price FROM Products
WHERE prod_name = '牛奶' AND prod_price IN (10, 20)

1.此写法表示,查询出名称为牛奶,并且,价格等于10或者20的数据,IN关键字,能够代替OR和=,prod_price IN (10, 20)代替(prod_price = 10 OR prod_price = 20),可以看出,采用IN关键字,程序阅读性更好,更容易理解。IN() 括号中的数值,可以有任意多个,如prod_price IN (10, 20, 30, 40)等价于 (prod_price = 10 OR prod_price = 20 OR prod_price = 30 OR prod_price = 40)

3.()必须使用英文括号,这个关键字(AND、IN)没有被括号括起来,因此识别顺序从左向右。系统的识别顺序为:条件1 prod_name = '牛奶' ,条件2prod_price IN (10, 20),结果需要满足,条件1 AND 条件2

如何进行空值检查?

数据库中的数据往往是不完整的,如果数据库某列的某些数据为空,数据库会标记为关键字NULL,因此为了提取有用的数据,我们往往需要筛选不为空的数据。

例:查询客户名称不为空的数据。

SELECT cust_name FROM CUSTOMERS WHERE cust_email IS NOT NULL;

例2:查询客户名称为空的数据。

SELECT cust_name FROM CUSTOMERS WHERE cust_email IS NULL;

注:NULL关键字的判定比较特殊,禁止使用=或!=判断是否为空,否则会导致数据查询错误(程序并不抱错,但是结果往往不是想要的)。

错误示范:

SELECT cust_name FROM CUSTOMERS WHERE cust_email = NULL;

SELECT cust_name FROM CUSTOMERS WHERE cust_email != NULL;

如何对筛选结果进行排序?

SQL查询过程的执行顺序是:查询->筛选->排序,因此,关键字的书写顺序往往也需要按照SELECT、WHERE、ORDER BY顺序进行,否则程序会抱错。

例:查询名称为牛奶,并且价格大于10的数据,并将结果按照价格从大到小排序。

SELECT prod_name, prod_price FROM Products
  WHERE prod_name = '牛奶' AND prod_price >= 10 ORDER BY prod_price DESC;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值