零基础学SQL
上QQ阅读APP看书,第一时间看更新

6.2 逻辑查询

在SQL语句中逻辑运算符主要包括AND、OR和NOT三种。其中AND运算符用来查询同时满足多个条件的记录,OR运算符用来查询多个条件中满足其中任一个条件的记录,NOT运算符用来查询满足相反条件的记录。这一节将对这三个逻辑运算符的使用方法一一介绍,并在最后通过例子介绍混合使用上述三种逻辑运算符进行复杂逻辑查询的情况。

6.2.1 使用AND运算符查询同时满足多个条件的记录

在SQL的执行操作中,很多情况下,WHERE子句并不是只希望满足一个条件,而是希望最终查询的结果必须同时满足多个条件(两个或者两个以上)。这个时候就需要使用AND运算符。其语法格式如下:

        条件1 AND 条件2

其中条件1、条件2是在WHERE子句中进行查询时都需要满足的条件。如果希望使用AND运算符在WHERE子句中连接多个条件,可以使用下面的语法格式。

        条件1 AND 条件2   AND条件3 ...

这里使用两个AND运算符来连接3个条件。多个AND运算符进行连接操作时,每一个AND运算符两侧的值必须都为TRUE,也就是说这些条件都同时被满足的情况下,结果才会被显示出来。

说明 在Microsoft SQL Server数据库中,使用“&”符号代替AND运算符表示逻辑与运算。

下面来看一个使用AND运算符的例子。在这个例子中使用AND运算符查询教师信息表中年龄在45岁以上并且职称为教授的教师信息。

例6.8 查询教师信息表中年龄在45岁以上并且职称为教授的教师信息。

        SELECT teaID,teaName,age,sex,dept,profession
        FROM T_teacher
        WHERE age>45 AND profession='教授'

在这个查询语句中,查询的教师信息有两个条件的限制,一个条件是年龄在45岁以上,另外一个条件是职称为教授,而且这两个条件必须同时具备,缺一不可。因此这里就需要使用AND运算符将这两个查询条件连接起来。其查询结果如图6.6所示。

图6.6 查询教师信息表中年龄在45岁以上,职称为教授的教师信息

这条SQL语句是从教师信息表中选择教师年龄大于45岁并且教师职称为教授的教师信息。这里的SQL语句中AND运算符两侧的条件必须都为TRUE。可以看到age>45和profession='教授'这两个条件都符合SQL的语法规范而且比较的结果也都是TRUE。

注意 SQL语句中AND运算符两侧的条件必须都为TRUE。如果在AND运算符两侧有任意一个条件为FALSE,则都不会显示正确的结果。

在这个查询结果中,符合查询条件的记录一共有2条。从这两条查询语句的结果可以看出,查询的教师年龄既大于45岁而且职称还都是教授。

提示 AND运算符可以在WHERE子句中连接两个或者多个条件。例如现在要查询教师信息表中年龄在45岁以上,所在部门为计算机系的职称为教授的教师信息,这个时候最后查询出来的记录应该就只有一条了,这条查询语句读者可以试着完成一下。看一下最后的运行结果是不是只显示了一条记录。

6.2.2 使用OR运算符查询满足任一条件的记录

在使用SQL进行查询操作时,有些时候只是希望查询的结果中满足多个条件中的任一条件即可。这个时候就需要使用OR运算符。使用OR运算符可以用来查询满足任一条件的记录。其语法格式如下:

        条件 OR条件2

其中条件1、条件2是在WHERE子句中进行查询时需要的条件。这两个条件中,只要符合其中任何一个条件,则符合该条件的记录就会被检索出来。如果希望使用OR运算符在WHERE子句中连接多个条件,可以使用下面的语法格式。

        条件1 OR条件2   OR条件3 ...

这里使用两个OR运算符来连接3个条件。多个OR运算符进行连接操作时,两侧的条件中任何一个条件为TRUE,满足该条件的记录就会被显示出来。

说明 在Microsoft SQL Server数据库中,使用“|”符号代替OR运算符表示逻辑或运算。

下面来看一个使用OR运算符的例子。在这个例子中使用OR运算符查询教师信息表中年龄在45岁以上或者职称为教授的教师信息。

例6.9 查询教师信息表中年龄在45岁以上或者职称为教授的教师信息。

        SELECT teaID,teaName,age,sex,dept,profession
        FROM T_teacher
        WHERE age>'45' OR profession='教授'

在这个查询语句中,查询的教师信息需要有两个,一个条件是年龄在45岁以上,另外一个条件是职称为教授,但是这两个条件不必同时具备,具备其中任何一个条件的记录都会被查询出来。其查询结果如图6.7所示。

图6.7 查询教师信息表中年龄在45岁以上或者职称为教授的教师信息

这条SQL语句是从教师信息表中选择教师年龄大于45岁或者教师职称为教授的教师,并将这两部分的教师信息都查询出来。在这个查询结果中,符合查询条件的记录一共有6条。

从查询的结果中可以看到,教师编号为t103256的姓名为张昌的教师年龄是43岁不符合WHERE子句中age>'45'的条件,但是该教师的职称为教授,即符合WHERE子句中profession='教授'这个条件;而教师编号为t186585的姓名为张立的教师职称是讲师不符合WHERE子句中profession='教授'这个条件,但是他的年龄为48岁,即满足WHERE子句中age>'45'的条件。

从这里可以看出,在执行SQL语句操作中,如果OR运算符两侧的条件中有一个条件为TRUE,则满足该条件的记录就会被显示出来。

提示 OR运算符可以在WHERE子句中连接两个或者多个条件。使用OR运算符时,OR运算符两侧有一个条件为TRUE时,满足该条件的记录就会被显示出来。所以OR运算符在使用时两侧条件可以只有一个为TRUE,也可以两侧的条件都为TRUE。

6.2.3 使用NOT运算符查询满足相反条件的记录

有些时候,需要查询不满足指定条件的记录,这个时候就需要使用NOT运算符。NOT运算符是用来查询满足相反条件的记录。

说明 在Microsoft SQL Server数据库中,使用“~”符号代替NOT运算符表示逻辑非运算。

下面来看一个使用NOT运算符的例子。在这个例子中使用NOT运算符查询教师信息表中不在计算机系或者数学系的所有教师信息。

例6.10 查询教师信息表中不在计算机系或者数学系的所有教师信息。

        SELECT teaID,teaName,age,sex,dept,profession
        FROM T_teacher
        WHERE dept NOT IN('计算机系','数学系')

其查询结果如图6.8所示。

图6.8 查询教师信息表中不在计算机系或者数学系的所有教师信息

这条SQL语句是将所有不在计算机系和数学系的教师信息检索出来。可以将该运行结果和例6.4中显示的结果做一下对比,看一下这两个SQL语句产生结果的不同之处。

6.2.4 复杂逻辑查询

在前面的3节中,分别介绍了AND运算符、OR运算符和NOT运算符的使用。这3个逻辑运算符也可以放到一个SQL语句中混合使用。在这3个逻辑运算符中,NOT的优先级最高,AND的优先级要高于OR。为了便于理解,一般在混合使用这3个逻辑运算符时,可以使用括号将每一个部分括起来。下面来看一个混合使用逻辑运算符的例子。

例6.11 查询计算机系或者是数学系中教师的工资大于3000元的教师信息。

        SELECT teaID,teaName,age,sex,dept,profession ,salary
        FROM T_teacher
        WHERE (dept ='计算机系'OR dept ='数学系')
        AND salary >3000

在这个查询语句中,使用了两个逻辑运算符,一个是OR,一个是AND。使用OR运算符查询所在的部门是计算机系或者是数学系的教师,使用AND运算符表示教师所在的部门是计算机系或者是数学系并且工资大于3000元,其查询结果如图6.9所示。

图6.9 查询计算机系或者是数学系中教师的工资大于3000的教师信息

这条SQL语句是从教师信息表中首先查询所在部门为计算机系或者是数学系的教师信息,将计算机系或者是数学系的教师信息的记录检索出来后,再在这些教师中查询工资大于3000元的教师信息,并将查询到的记录显示出来。