MySQL数据库基础(五)

您所在的位置:网站首页 mysql查询或 MySQL数据库基础(五)

MySQL数据库基础(五)

2023-07-01 03:38| 来源: 网络整理| 查看: 265

MySQL数据库基础(五)——SQL查询 一、单表查询 1、查询所有字段

在SELECT语句中使用星号“*”通配符查询所有字段 在SELECT语句中指定所有字段 select * from TStudent;

2、查询指定字段

查询多个字段 select Sname,sex,email from TStudent;

3、查询指定记录

在SELECT 语句中通过WHERE子句,对数据进行过滤,语法格式为: SELECT 字段名1,字段名2,…,字段名n FROM 表名WHERE 查询条件 select Sname,sex,email,Class from TStudent where class='java';

4、带IN关键字的查询

查询满足指定范围内的条件的记录,使用IN操作符,将所有检索条件用括号括起来,检索条件用逗号分隔开,只要满足条件范围内的一个值即为匹配项。 查新姓 王 刘 石的学生 select * from TStudent where left(sname,1) in ('王','刘','石');

5、带BETWEEN AND的范围查询

查询某个范围内的值,该操作符需要两个参数,即范围的开始值和结束值,如果字段值满足指定的范围查询条件,则这些记录被返回。 以下查询条件,查询学号100到150的学生,包括100和150 select * from TStudent where convert(studentid,signed) between 100 and 150 等价于 select * from TStudent where convert(studentid,signed)>=100 and convert(studentid,signed)20 and studentid80 order by m;

6、在GROUP BY子句中使用WITH ROLLUP

使用GROUP BY的WITH ROLLUP子句可以检索出更多的分组聚合信息,不仅仅可以检索出各组的聚合信息,还能检索出本组类的整体聚合信息。 select class,subJectName,AVG(mark) from TStudent a join TScore b on a.StudentID=b.StudentID join TSubject c on b.subJectID=c.subJectID group by class,subJectName with rollup; 能够统计每班每科的平均成绩,每班的平均成绩也能统计,全部班级的全部课程平均成绩也能统计。

五、子查询 1、带IN关键字的子查询

IN关键字进行子查询时,内层查询语句仅仅返回一个数据列,数据列里的值将提供给外层查询语句进行比较操作。 select * from TStudent where studentid in (select distinct studentid from TScore where mark>98);

2、带EXISTS关键字的子查询

EXISTS关键字后面的参数是一个任意的子查询,系统对子查询进行运算以判断子查询是否返回行,如果至少返回一行,那么EXISTS的结果为true,此时外层查询语句将进行查询;如果子查询没有返回任何行,那么EXISTS返回的结果是false,此时外层语句将不进行查询。 select * from TStudent where studentid='01001' and exists (select * from TScore where studentid='01001');

3、带ANY、SOME关键字的子查询

ANY和SOME关键字是同义词,表示满足其中任一条件,允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件。 select * from TStudent where studentid=any (select distinct studentid from TScore where mark>98) 等价于 select * from TStudent where studentid=some (select distinct studentid from TScore where mark>98); 等价于 select * from TStudent where studentid in (select distinct studentid from TScore where mark>98); 子查询时还可以使用其他的比较运算符,如some (select distinct studentid from TScore where mark>98) 以下SQL语句子查询查出考试成绩大于98的学生的studentid,比如查出的结果有三个‘00010’,‘00021’,‘00061’,外查询将会查询比00061学号小的学生。 select * from TStudent where studentid98);

4、带ALL关键字的子查询

ALL关键字与ANY和SOME不同,使用ALL时需要同时满足所有内层查询的条件。 以下SQL语句子查询查出考试成绩大于98的学生的studentid,比如查出的结果有三个‘00010’,‘00021’,‘00061’,外查询将会查询比00010学号小的学生。 select * from TStudent where studentid98) 以下SQL语句子查询查出考试成绩大于98的学生的studentid,比如查出的结果有三个‘00010’,‘00021’,‘00061’,外查询将会查询比00061学号大的学生。 select * from TStudent where studentid>all (select distinct studentid from TScore where mark>98);

六、使用正则表达式查询

正则表达式作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较。MySQL用WHERE子句对正则表达式提供了初步的支持,允许指定用正则表达式过滤SELECT检索出的数据。 在SQL查询语句中,查询条件REGEXP后所跟的东西作为正则表达式处理。

1、查询以特定字符或字符串开头的记录

字符‘^’匹配以特定字符或者字符串开头的文本。 select * from TStudent where sname regexp '^刘平';

2、查询以特定字符或字符串结尾的记录

字符‘$’匹配以特定字符或者字符串结尾的文本。 select * from TStudent where cardid regexp '36$';

3、用符号"."来替代字符串中的任意一个字符

字符‘.’匹配任意一个字符。 select * from TStudent where sname regexp '.康.';

4、使用"*"和"+"来匹配多个字符

星号‘*’匹配前面的字符任意多次,包括0次。 加号‘+’匹配前面的字符至少一次。 找出×××以19开始,以6结束的学生 select * from TStudent where cardid regexp '^19.*6$' 找出×××号中有123的学生 select * from TStudent where cardid regexp '.123+.';

5、匹配指定字符串

正则表达式可以匹配指定字符串,只要匹配字符串在查询文本中即可,如要匹配多个字符串,多个字符串之间使用分隔符‘|’隔开。 select * from TStudent where sname regexp '武|尹|罗';

6、匹配指定字符中的任意一个

方括号“[]”指定一个字符集合,只匹配其中任何一个字符,即为所查找的文本。不支持汉字。 select * from TStudent where email regexp '[w-z]'; select * from TStudent where cardid regexp '^[1-3,7]';

7、匹配指定字符以外的字符

“[^字符集合]”匹配不在指定集合中的任何字符。 select * from TStudent where cardid regexp '^[^1-7]';

8、使用{M}或者{M,N}来指定字符串连续出现的次数

“字符串{n,}”表示至少匹配n次前面的字符。“字符串{n,m}”表示匹配前面的字符串不少于n次,不多于m次。 查找×××中出现138并且后面有8位0-9的数字的学生。 select * from TStudent where cardid regexp '138[0-9]{15}';



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3