5.2 单表条件查询

本文详细介绍了MySQL中单表条件查询的语法和各种查询方式,包括使用WHERE、IN、BETWEEN…AND、IS NULL和LIKE关键字进行复杂条件筛选。通过实例展示了如何根据不同的查询需求来构建SQL查询语句。

语法规则

select [ all | distinct] <目标列表达式> [别名] [, <目标列表达式> [别名] ] . . .

from <表名或视图名> [别名] [ ,<表名或视图名>[别名] ] . . .

[where <条件表达式>]

[group by <列名1> ]

[having <条件表达式> ]

[order by <列名2> [ ASC| DESC ]]

[limit 字句];

其中[ ]内的内容是可选的。

条件查询主要使用关键字WHERE指定查询的条件,where子句常用的查询条件有很多种,如下表所示。

1.带关系运算符和逻辑运算符的查询

注意:条件表达式中设置的条件越多,查询出来的记录就会越少。

MYSQL中,可以通过关系运算符和逻辑运算符来编写“条件表达式”。

SELECT number AS 学号, NAME 姓名, yw 语文,sx 数学,yy 英语,wl 物理,yw+sx+yy+wl AS 总分,ROUND((yw+sx+yy+wl)/4,1)AS 均分 FROM mydb.cj_table WHERE wl>=90;

SELECT numberAS 学号, NAME 姓名, yw 语文,sx 数学,yy 英语,wl 物理,yw+sx+yy+wl AS 总分,ROUND((yw+sx+yy+wl)/4,1) AS 均分 FROM mydb.cj_table WHERE ROUND((yw+sx+yy+wl)/4,1) >=80;

SELECT number AS 学号, NAME 姓名, yw 语文,sx 数学,yy 英语,wl 物理,yw+sx+yy+wl AS 总分,ROUND((yw+sx+yy+wl)/4,1) AS 均分 FROM mydb.cj_table WHERE yy >=90 OR (yy>=80 AND yy<=85);

2.带IN关键字的查询。

IN关键字可以判断某个字段的值是否在指定的集合中。

语法格式:[NOT] IN (元素1,元素2, 元素3, . . . )

SELECT number AS 学号, NAME 姓名, yw 语文,sx 数学,yy 英语,wl 物理,yw+sx+yy+wl AS 总分,ROUND((yw+sx+yy+wl)/4,1) AS 均分 FROM mydb.cj_table WHERE yy IN (65,75,85,95);

3.带BETWEEN…AND关键字的查询。

between and关键字可以判断读某个字段的值是否在指定的范围内。语法格式:[ NOT ] between 取值1 and 取值2

SELECT number AS 学号, NAME 姓名, yw 语文,sx 数学,yy 英语,wl 物理,yw+sx+yy+wl AS 总分,ROUND((yw+sx+yy+wl)/4,1) AS 均分 FROM mydb.cj_table WHERE yy BETWEEN 80 AND 99;

4.带IS NULL关键字的空值查询。

is null关键字可以用来判断字段的值是否为空值(NULL)。

语法格式:is [ not ] null

SELECT number AS 学号, NAME 姓名, yw 语文,sx 数学,yy 英语,wl 物理,yw+sx+yy+wl AS 总分,ROUND((yw+sx+yy+wl)/4,1)AS 均分 FROM mydb.cj_table WHERE NAME IS NULL;

注意:IS NULL 是一个整体,不能将IS换成“=”, NAME=null 不能表示要查询的NAME值是空值。

SELECT number AS 学号, NAME 姓名, yw 语文,sx 数学,yy 英语,wl 物理,yw+sx+yy+wl AS 总分,ROUND((yw+sx+yy+wl)/4,1) AS 均分 FROM mydb.cj_table WHERE NAME IS NOT NULL;

5.带LIKE关键字的查询。

like关键字可以匹配字符串是否相等。

语法规则: [not] like ‘字符串’;

说明:使用LIKE关键字和使用“=”的效果是一样的,但仅对匹配一个完整的字符串有效。如果字符串中包含了通配符,就不替换了。使用LIKE和NOT LIKE关键字可以很好地匹配字符串。而且,可以使用和这两个通配字符来简化查询。LIKE后面参数值可以是一个完整的字符串,也可以是包含百分号“%”或者下划线“_”的通配字符。但是%和_有很大的差别:

(1)“%”可以代表任意长度的字符串,长度可以为0。

(2)“_”只能表示单个字符。

假若like ‘字符串’中的要匹配的字符串上就含有通配符百分号%或者下划线“_”,那么我们可以使用ESCAPE<转换码>短语,将通配符转义为普通字符。\为默认转换码,不用此短语声明。

SELECT number AS 学号, NAME 姓名, yw 语文,sx 数学 FROM mydb.cj_table WHERE NAME =‘蔡安国’;

SELECT number AS 学号, NAME 姓名, yw 语文,sx 数学 FROM mydb.cj_table WHERE NAME LIKE ‘蔡安国’;

SELECT number AS 学号, NAME 姓名, yw 语文,sx 数学 FROM mydb.cj_table WHERE NAME LIKE ‘李%’;

SELECT number AS 学号, NAME 姓名, yw 语文,sx 数学 FROM mydb.cj_table WHERE NAME LIKE ‘李_’;

SELECT number AS 学号, NAME 姓名, yw 语文,sx 数学 FROM mydb.cj_table WHERE NAME LIKE ‘%磊%’;

#ESCAPE<转化码>短语:ESCAPE ‘\’,\为默认转换码,不能用此短语声明,直接使用。

SELECT number AS 学号, NAME 姓名, yw 语文,sx 数学 FROM mydb.cj_table WHERE NAME LIKE ‘李%_’;

SELECT number AS 学号, NAME 姓名, yw 语文,sx 数学 FROM mydb.cj_table WHERE NAME LIKE ‘李%_’;

#ESCAPE<转化码>短语的应用:

SELECT number AS 学号, NAME 姓名,yy 英语,sx 数学

FROM mydb.cj_table WHERE NAME LIKE ‘李/%/_’ ESCAPE ‘/’;

SELECT number AS 学号, NAME 姓名,yy 英语,sx 数学

FROM mydb.cj_table WHERE NAME LIKE ‘李#%#_’ ESCAPE ‘#’;

SELECT number AS 学号, NAME 姓名,yy 英语,sx 数学

FROM mydb.cj_table WHERE NAME LIKE ‘李*%_’ ESCAPE '’;

SELECT number AS 学号, NAME 姓名,yy 英语,sx 数学

FROM mydb.cj_table WHERE NAME LIKE ‘李%_’ ESCAPE ‘$’;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值