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子句的主要内容,如果未能解决你的问题,请参考以下文章

7_mysql查询之where子句

如何从 Firestore 7.24.0 实例中查询具有多个 where 子句的数据?

Laravel 7 / SQL不区分大小写的where子句

4 个连接 + 3 个 where 子句的查询构建器正确语法(Laravel 5.7)

TypeORM查找where子句,如何在多个参数中添加where

在 PostgreSQL 的 WHERE 子句中使用函数结果