设为首页 收藏本站
查看: 1457|回复: 0

[经验分享] MySQL数据库基础(五)——SQL查询

[复制链接]

尚未签到

发表于 2018-9-28 09:47:10 | 显示全部楼层 |阅读模式
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>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)
9、带OR的多条件查询
  OR操作符,表示只需要满足其中一个条件的记录即可返回。OR也可以连接两个甚至多个查询条件,多个条件表达式之间用AND分开。

  select * from TStudent where sname like '%志%' or>10、查询结果不重复
  在SELECT语句中可以使用DISTINCE关键字指示MySQL消除重复的记录值。
  SELECT DISTINCT 字段名 FROM 表名;
  查询一共有几个班

  select distinct>11、用LIMIT限制查询结果的数量
  LIMIT关键字可以返回指定位置的记录。
  LIMIT [位置偏移量,] 行数
  返回前10个学生
  select   from TStudent limit 10;
  返回第11-20个学生,偏移量是10,就意味着从第11个开始取10条记录。
  select   from TStudent limit 10,10;
12、合并查询结果
  利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同。各个SELECT语句之间使用UNION或UNION ALL关键字分隔。
  要求第一个SQL语句返回的列和第二条返回的列数相同,
  select studentid,sname from TStudent where studentidTStudent group by>  SUM()函数
  查询每个学生总分
  select concat(a.StudentID,'  ',a.sname) ss,SUM(b.mark) from TStudent a join TScore b on a.StudentID=b.StudentID group by ss;
  AVG()函数
  统计每个班平均分

  Select>TStudent a join TScore b on a.StudentID=b.StudentID group by>3、多字段分组
  统计每班每科平均分,需要按两列分组class和subJectName

  select>4、使用HAVING过滤分组
  查询平局分大于80的学生
  select concat(a.StudentID,'  ',a.sname) ss,avg(b.mark) m from TStudent a join TScore b on a.StudentID=b.StudentID group by ss having m>80;
5、GROUP BY和ORDER BY使用
  查找平均分大于80分,按平均分排序。
  select concat(a.StudentID,'  ',a.sname) ss,avg(b.mark) m from TStudent a join TScore b on a.StudentID=b.StudentID group by ss having m>80 order by m;
6、在GROUP BY子句中使用WITH ROLLUP
  使用GROUP BY的WITH ROLLUP子句可以检索出更多的分组聚合信息,不仅仅可以检索出各组的聚合信息,还能检索出本组类的整体聚合信息。

  select>  能够统计每班每科的平均成绩,每班的平均成绩也能统计,全部班级的全部课程平均成绩也能统计。
五、子查询
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 studentid<some (select distinct studentid from TScore where mark>98);
4、带ALL关键字的子查询
  ALL关键字与ANY和SOME不同,使用ALL时需要同时满足所有内层查询的条件。
  以下SQL语句子查询查出考试成绩大于98的学生的studentid,比如查出的结果有三个‘00010’,‘00021’,‘00061’,外查询将会查询比00010学号小的学生。
  select * from TStudent where studentid<all (select distinct studentid from TScore where mark>98)
  以下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}';


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-603106-1-1.html 上篇帖子: delphi mysql中文乱码 下篇帖子: mysql启动报错:Another MySQL daemon already running with the same unix socket.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表