数分必会mysql点常用查询语句
大家好,我是数据小郑。
本篇是数分常用mysql例系列的第三篇:常用查询语句。
系列内容,请看??话题,订阅后文章更新可第一时间推送至订阅号。
查询表中的若干记录
〓清除取值重复的行
表中的记录没有重复值,但是查询后的结果可能有相同的行,可以使用关键字distinct消除重复的行。
selectdistinct字段from表;
〓查询表中满足条件的记录
在查询过程中,可能只是需要查询表中特定的收据。
1)比较大小,可以使用where子句,配合=、/!=;
2)指定范围,当查询条件为在某字段或者不在某字段范围,可以使用谓语between...and/notbetween...and;
3)集合记录,使用谓语in来确认查找的字段属于指定的集合记录。
#查询年龄为18,28,38的客户信息select*fromcustwhereagein(18,28,38);#查询年龄不为18,28,38的客户信息select*fromcustwhereagenotin(18,28,38);
4)带like的字符匹配查询,这个通常与"%","_"结合使用。如果需要对通配符进行检验,可以将转义字符\放在该字符前面。
#查询姓张的客户select*fromcustwherenamelike张%;#查询姓张_的客户select*fromcustwherenamelike张\_%;#查询姓张_的客户(使用escape指定一个不同的转义字符)select*fromcustwherenamelike张*_%escape*;
5)多重条件查询,可以使用逻辑运算符AND或者OR连接多个查询条件。AND的优先级要高于OR,可以使用括号改变优先级顺序。
对查询结果进行排序
使用orderby子句对查询结果进行排序,可以根据一列或者多列对结果进行升序ASC或者降序DESC,缺省默认为升序。其中,对于NULL值的处理,不同的DBMS采用的方式不同。在Mysql中,升序时NULL在最前面,降序时NULL在最后面。
#查询姓张的客户select*fromcustwherenamelike张%;#查询姓张_的客户select*fromcustwherenamelike张\_%;#查询姓张_的客户(使用escape指定一个不同的转义字符)select*fromcustwherenamelike张*_%escape*;
groupby子句
groupby常用的是单子段分组,多字段分组。会和having子句一起使用对组进行筛选,得到符合条件的信息。
当然groupby子句还可以与group_concat()函数一块使用,返回一个字符串结果,该结果由分组中的值连接组合而成。
groupby子句使用rollup也是十分有用的,但当使用rollup时,不能同时使用orderby子句对结果进行排序,rollup与orderby是相互排斥的。
使用withrollup之后,该查询的最后结果出现一行。该分组列没有值,groupby后面分组的列,则根据前面的Max和Min函数做处理,得到后两列的最大值和最小值。
#查询姓张的客户信息selectid,group_concat(年龄,性别)fromcustgroupbyid;#查询年龄段的最大值与最小值select年龄段,max(年龄),min(年龄)fromcustgroupby年龄段withrollup;
使用limit限制查询结果的数量
limit接受一个或两个参数,参数必须是整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数返回记录行的最大数目。初始记录行的偏移量是0,不是1。
连接查询
涉及两张或者两张以上表的查询称之为连接查询。连接查询是关系数据库中最重要的查询类型。连接查询分为内连接(innerjoinon)/外连接(out/left/rightjoinon)。
合并查询结果
Mysql中使用union关键字,可以将多个select结果集合并为单个结果。但是要求参与合并的结果集对应的列数和数据类型必须相同。第一个select语句中被使用的列名称也被用于结果的列名称。
语法中不使用关键字ALL,则所有返回的行都是唯一的,就像对整个结果集使用了distinct一样。如果指定了all,select语句中得到所有匹配的行都会出现。DISTINCT关键字是一个自选词,不起任何作用,但是根据SQL标准,在语法中允许采用。
select...union[all
distinct]select...union[all
distinct]select*fromcustwheresex="女"unionselect*fromcustwhereage20;
使用正则表达式查询
正则表达式是用某一种模式去匹配一类字符串的方式。
#查询以张姓开头的客户select*fromcustwherenameregexp"^张”;#查询以张字结尾的客户select*fromcustwherenameregexp"张$”;#查询以张字结尾且三个字的客户select*fromcustwherenameregexp"..张$“;#查询姓名任意包含张李王孙的客户,如果是[3-9]则表示集合区间的所有数字#[^字符集合]的含义是匹配不在指定字符集合中的任意字符。select*fromcustwherenameregexp[张李王孙];#模式字符”s1
s2
s3",匹配任意一个字符串select*fromcustwherenameregexp张
赵;#模式字符“*”的含义是匹配多个该字符串之前的字符,包括0和1个。#模式字符“+”的含义是匹配多个该字符串之前的字符,包括1个。#模式字符“字符串{n}”的含义是n前面的字符串至少出现N次。#模式字符“字符串{n,m}”的含义是n前面的字符串至少出现N次,至多出现M次。
原创不易,欢迎点赞、留言、分享,支持我继续写下去
我是数据小郑,最近正在原创数分必会mysql点系列话题,欢迎订阅。订阅后,文章更新第一时间推送至订阅号,每篇文章不错过。
数据小郑
转载请注明:http://www.sonphie.com/jbby/14625.html