MySQL数据库基础(五) |
您所在的位置:网站首页 › mysql查询或 › MySQL数据库基础(五) |
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 |