[Mysql] 条件查询

使用WHERE子句对表中的数据进行筛选,满足条件的记录行会出现在结果集中(对记录进行筛选,符合条件的记录才能被查询出来)

语法格式

SELECT * FROM 表名 WHERE 条件;

WHERE子句在表名(FROM子句)之后给出


WHERE后面支持多种条件表达:

1.比较运算

2.模糊查询

3.范围查询

4.空判断

5.逻辑运算

1.比较运算

比较运算符说明
=等于
!= 或 <>不等于
>大于
>=大于等于
<小于
<=小于等于

数据导入

DROP TABLE IF EXISTS `products`;
CREATE TABLE `products`  (
  `id` int(11) NOT NULL,
  `prod_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `prod_price` decimal(10, 2) DEFAULT NULL,
  `vend_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

INSERT INTO `products` VALUES (1, 'Book', 9.00, 1001);
INSERT INTO `products` VALUES (2, 'Fruit', 12.00, 1002);
INSERT INTO `products` VALUES (3, 'TV', 15.00, 1003);
INSERT INTO `products` VALUES (4, 'Computer', 20.00, 1003);
INSERT INTO `products` VALUES (5, 'Pen', 5.00, 1001);

products表

id:产品id  prod_name:产品名称  prod_price:产品价格  vend_id:供应商id  

问题1:检索价格小于10美元的所有产品

SELECT prod_name, prod_price
FROM products
WHERE prod_price < 10;

结果展示:

问题2:检索价格大于等于10美元的所有产品

SELECT prod_name, prod_price
FROM products
WHERE prod_price >= 10;

结果展示:

问题3:检索出不是由供应商1003制造的所有产品

-- 解法1
SELECT vend_id, prod_name
FROM products
WHERE vend_id <> 1003;

-- 解法2
SELECT vend_id, prod_name
FROM products
WHERE vend_id != 1003;

结果展示:

问题4:检索出产品名称为'Fruit'的所有信息

SELECT *
FROM products
WHERE prod_name = 'Fruit';

结果展示:

2.模糊查询

LIKE与通配符过滤数据

3.范围查询

IN | NOT IN 表示在一个非连续的范围内进行查询

BETWEEN...AND...表示在一个连续的范围内进行查询

IN | NOT IN过滤数据

BETWEEN...AND...过滤数据

4.空判断

NULL过滤数据

5.逻辑运算

逻辑操作符说明
AND

检索满足所有给定条件的行

OR

检索匹配任一给定条件的行

NOT

检索否定后跟条件的行

数据导入

DROP TABLE IF EXISTS `products`;
CREATE TABLE `products`  (
  `id` int(11) NOT NULL,
  `prod_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `prod_price` decimal(10, 2) DEFAULT NULL,
  `vend_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

INSERT INTO `products` VALUES (1, 'Book', 9.00, 1001);
INSERT INTO `products` VALUES (2, 'Fruit', 12.00, 1002);
INSERT INTO `products` VALUES (3, 'TV', 15.00, 1003);
INSERT INTO `products` VALUES (4, 'Computer', 20.00, 1003);
INSERT INTO `products` VALUES (5, 'Pen', 5.00, 1001);

products表

id:产品id  prod_name:产品名称  prod_price:产品价格  vend_id:供应商id  

问题1:检索出由供应商1003制造的产品且该产品价格低于18美金(输出结果顺序:id,prod_name,prod_name)

SELECT id,prod_price,prod_name 
FROM products
WHERE vend_id = 1003 AND prod_price < 18;

结果展示:

问题2:检索出由供应商1002或者1003制造的产品(输出结果顺序:prod_name,prod_price)

SELECT prod_name,prod_price 
FROM products
WHERE vend_id = 1002 OR vend_id = 1003;

结果展示:

问题3:检索出不是由供应商1001制造的所有产品

SELECT * 
FROM products
WHERE NOT vend_id = 1001;

结果展示:

计算次序(优先级)

WHERE可包含任意数目的AND和OR操作符,允许两者结合以进行复杂和高级的过滤

SELECT prod_name,prod_price, vend_id FROM products
WHERE vend_id = 1001 OR vend_id = 1003 AND prod_price = 9;

结果展示:

SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符 

问题4:检索出由供应商1002或者1003制造出的产品,且该产品的价格为9美元

解决方法:使用圆括号明确地分组相应的操作符

SELECT prod_name,prod_price, vend_id FROM products
WHERE (vend_id = 1001 OR vend_id = 1003) AND prod_price = 9;

结果展示:

圆括号具有较AND或OR操作符高的计算次序

如果不加括号,条件运算按照NOT、AND、OR的优先级进行,即NOT优先级最高,其次是AND,最后是OR。加上括号可以改变优先级

在WHERE子句中使用圆括号

任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。不要过分依赖默认计算次序,即使它确实是你想要的东西也是如此。使用圆括号没有什么坏处,它能消除歧义

要组合三个或者更多的条件,就需要用小括号()表示如何进行条件运算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值