7)where子句
Posted xuan01
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7)where子句相关的知识,希望对你有一定的参考价值。
where子句:根据条件表达式从数据源中筛选符合条件的记录
select 字段列表 from 数据源 where 条件表达式;
1、比较运算符:
> < >= <= = !=(<>)
注意等于是单个等于号,不等于也可以用<>表示;
例如,查找及格的项:
select * from choose where score>=60;
例如:查找 张三 的考试成绩信息,需要用到内连接;
select s.student_no 学号,s.student_name 名字, c.score 成绩 from student s join choose c on s.student_no=c.student_no where s.student_name = \'张三\';
2、where实现内连接:
from 这儿使用逗号代替join;
select 字段列表 from 表1,表2 where 关联条件;
select student_no 学号,student_name 名字,c.class_no 班级名 from student s, classes c where s.class_no=c.class_no;
3、is null判断是否为空
注意这儿的判断是否为空,不能用 =null 或者 != null ,这个表示 此条件永远为 null,通俗讲就是永远为false;
例如 列出没有班级的学生:也是需要先用大外连接
select c.class_no 班号,class_name 班级名,department_name 院名,s.* from classes c left join student s on c.class_no=s.class_no;
可以看到测控班没有学生,那么使用where子句进行筛选;
select c.class_no 班号,class_name 班级名,department_name 院名,s.* from classes c left join student s on c.class_no=s.class_no where s.student_no is null;
4、between...and:
格式:表达式 between 值1 and 值2
select * from choose where score between 70 and 90;
select * from choose where choose_time between \'2023-05-25 21:34:11\' and \'2023-05-25 21:34:41\';
5、in:
格式:表达式 in (值1,值2,...)
select ch.student_no 学号,c.course_name 课程名,ch.score 成绩 from course c join choose ch on c.course_no=ch.course_no where c.course_name in (\'c++\',\'MySQL\');
6、like:
格式:表达式 like \'模式\'
通配符:% :匹配任意长度的任意字符; _ :匹配一位任意字符;
select student_no 学号, student_name 姓名 from student where student_name like \'张%\';
注意:当碰到要查找的字符本身含有_时,查找时,会认为这个是通配符;
例如,查找user_为开头的,,若查找时格式为 ’user_%‘,并不是以这个为开头,而是‘user’开头的,会把_当作通配符处理;
select table_schema,table_type,table_name from information_schema.tables where table_name like \'user_%\';
可以看到第一项为users,并不是user_开头的;
处理方法:
1)此时需要我们将其转义为下划线, 即使用转义字符 \'\\\',所以格式为:这种方法是关系型数据库MySQL独有的,不适合于其他关联性数据库;
select table_schema,table_type,table_name from information_schema.tables where table_name like \'user\\_%\';
可以看到正如我们想要的一样;
2)我们也可以自定义通配符;适合于其他关联性数据库;
select table_schema,table_type,table_name from information_schema.tables where table_name like \'user#_%\' escape \'#\';
一样的效果;
7、and运算符
1)代替between and;
select * from choose where score>=60 and score<=90;
2)where内连接,查找信息
select s.student_no 学号,s.student_name 姓名,c.score 成绩 from student s,choose c where s.student_no=c.student_no and s.student_name=\'张三\';
3)三表内连接;
格式:
select 字段列表 from 表1,表2,表3 where 关联条件1 and 关联条件2;
例如 检索所有学生信息:
select s.student_name 姓名,s.student_no 学号,c.course_name 课程,ch.score 成绩 from student s,course c,choose ch where s.student_no=ch.student_no and c.course_no=ch.course_no;
8、or:
select ch.student_no, c.course_name,ch.score from course c,choose ch where c.course_no=ch.course_no and (c.course_name=\'c++\' or c.course_name=\'MySQL\');
9、not:
格式:not 逻辑表达式 或者 !(逻辑表达式)
select * from course where up_limit!=60; select * from course where !(up_limit=60); select * from course where not(up_limit=60);
10、运算符取反:
1):is null 取反;将有学生的班级列出;
select distinct c.* from student s right join classes c on c.class_no=s.class_no where s.student_no is not null;
2)in 取反,not in,要注意为null的情况;
select * from student where class_no in(1,2); select * from student where class_no not in(1,2);
但是当in中有null的时候:
select * from student where class_no in(1,2,null); select * from student where class_no not in(1,2,null);
可以看到当in有null时,对它取反,得到 空结果集;
产生原因:
上述 is null 判断为空时说过,=null 和 != null 的情况,其结果都是false;必须要用is null 判断空;
class_no in(1,2,null) ==> class_no == 1 or class_no == 2 or class_no == null; 此处第三个条件 class_no == nul 条件永远为false; ==> class_no == 1 or class_no == 2 class_no not in(1,2,null) ==> class_no != 1 and class_no != 2 and class_no != null ;此处第三个条件 class_no != nul 条件永远为false;那么该条件与后最终就是false; ==> null
因此,当对有null值的in取反时,其结果集就是空的;
Oracle Where(条件)子句用法
Where是Oracle中的条件查询子句,本教程,将学习如何使用Oracle Where子句来指定过滤的条件返回符合查询条件的行记录。
Oracle WHERE子句简介
WHERE子句指定SELECT语句返回符合搜索条件的行记录。下面说明了WHERE子句的语法:
SELECT
column_1,
column_2,
...
FROM
table_name
WHERE
search_condition
ORDER BY
column_1,
column_2;
WHERE子句出现在FROM子句之后但在ORDER BY子句之前。在WHERE关键字之后是search_condition - 它定义了返回行记录必须满足的条件。
除了SELECT语句之外,还可以使用DELETE或UPDATE语句中的WHERE子句来指定要更新或删除的行记录。
Oracle WHERE示例
参阅示例数据库中的以下产品(products)表,其表结构如下:
1. 通过使用简单的相等运算符来查询行记录
以下示例仅返回名称为“Kingston”的产品:
SELECT
product_name,
description,
list_price,
category_id
FROM
products
WHERE
product_name = ‘Kingston‘;
执行上面示例中的查询语句,得到以下结果:
在这个例子中,Oracle按以下顺序评估子句:FROM WHERE和SELECT
- 首先,FROM子句指定查询数据的表。
- 其次,WHERE子句基于条件(例如product_name =‘Kingston‘过滤行记录)。
- 第三,SELECT子句选择了应该返回的列。
2. 使用比较运算符选择行记录
除了等于(=)运算符之外,Oracle还提供了下表中所示的许多其他比较运算符:
编号 | 运算符 | 描述 |
---|---|---|
1 | = |
等于 |
2 | != ,<> |
不等于 |
3 | > |
大于 |
4 | < |
小于 |
5 | >= |
大于或等于 |
6 | <= |
小于或等于 |
7 | IN | 等于值列表中的任何值 |
8 | ANY/SOME/ALL | 将值与列表或子查询进行比较。它必须以另一个运算符(例如:= ,> ,< )作为前缀。 |
9 | NOT IN | 不等于值列表中的任何值 |
10 | [NOT] BETWEEN n AND m | 相当于[Not] >= n 且 <= y 。 |
11 | [NOT] EXISTS | 如果子查询返回至少一行,则返回true |
12 | IS [NOT] NULL |
测试NULL 的值 |
例如,要获取标价大于500的产品,请使用以下语句:
SELECT
product_name,
list_price
FROM
products
WHERE
list_price > 500;
执行上面查询语句,得到以下结果:
3. 选择符合某些条件的行
要组合条件,可以使用AND,OR和NOT逻辑运算符。
例如,要获取属于类别编号是4且标价大于500的所有主板,请使用以下语句:
SELECT
product_name,
list_price
FROM
products
WHERE
list_price > 500
AND category_id = 4;
执行上面示例代码,得到以下结果:
4. 选择在两个值之间的值的行记录
要查找具有两个值之间的值的行,请在WHERE子句中使用BETWEEN运算符。
例如,要获取标价在650到680之间(650 <= list_price <= 680)的产品,请使用以下语句:
SELECT
product_name,
list_price
FROM
products
WHERE
list_price BETWEEN 650 AND 680
ORDER BY
list_price;
执行上面查询语句,得到以下结果:
请注意,以下表达式是等效的:
SELECT
product_name,
list_price
FROM
products
WHERE
list_price >= 650 AND list_price <= 680
ORDER BY
list_price;
5. 选择符合值列表中的行记录
要查询值列表中的行记录,可以使用IN运算符,如下所示:
SELECT
product_name,
category_id
FROM
products
WHERE
category_id IN(1, 4)
ORDER BY
product_name;
执行上面查询语句,得到以下结果:
表达方式:
category_id IN (1, 4)
等效于 -
category_id = 1 OR category_id = 4
6. 选择包含值的行作为字符串的一部分
以下语句检索名称以Asus开头的产品:
SELECT
product_name,
list_price
FROM
products
WHERE
product_name LIKE ‘Asus%‘
ORDER BY
list_price;
在这个例子中,我们使用LIKE运算符来根据指定的模式来匹配行记录。
以上是关于7)where子句的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Firestore 7.24.0 实例中查询具有多个 where 子句的数据?
4 个连接 + 3 个 where 子句的查询构建器正确语法(Laravel 5.7)