来自 产品测评 2019-12-19 13:06 的文章
当前位置: 118kj开奖现场 > 产品测评 > 正文

详解MySql基本查询

询问数据指从数据库中拿走所需求的数量。查询数据是数据库操作中最常用,也是最器重的操作。客户能够依据自个儿对数据的要求,使用差别的查询办法。通过分化的询问艺术,能够拿走分裂的多寡。MySQL中是行使SELECT语句来询问数据的。在此风流罗曼蒂克章中校讲明的剧情富含。

1、查询语句的基本语法2、在单表上询问数据3、使用聚合函数查询数据4、多表上联合查询5、子查询6、归并查询结果7、为表和字段取别称8、使用正则表明式查询

何以是询问?

怎么查的?

create table STUDENT( STU_ID int primary KEY, STU_NAME char not null, STU_AGE smallint unsigned not null, STU_SEX char; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values;

接下来那是学员成绩表,当中定义了外键限制

create table GRADE( STU_ID INT NOT NULL, STU_SCORE INT, foreign key references STUDENT; insert into GRADE values; insert into GRADE values; insert into GRADE values; insert into GRADE values; insert into GRADE values; insert into GRADE values; insert into GRADE values; insert into GRADE values; insert into GRADE values; insert into GRADE values; insert into GRADE values; insert into GRADE values; insert into GRADE values; insert into GRADE values; insert into GRADE values; insert into GRADE values; insert into GRADE values; insert into GRADE values; insert into GRADE values; insert into GRADE values; 

意气风发、查询语句的着力语法

查询数据是指从数据库中的数据表或视图中得到所急需的数额,在MySQL中,可以利用SELECT语句来询问数据。根据查询条件的不等,数据库系统会找到差别的多寡。SELECT语句的基本语法格式如下:

SELECT 属性列表 FROM 表名或视图列表 [WHERE 条件表达式1] [GROUP BY 属性名1 [HAVING 条件表达式2]] [ORDER BY 属性名2 [ASC|DESC]] 

品质列表:表示需求查询的字段名。表名或视图列表:表示就要开展多少查询的数据表可能视图,表或视图能够有八个。条件表明式1:设置查询的原则。属性名1:表示按该字段中的数据开展分组。条件表达式2:表示满足该表达式的数据本事出口。属性2:表示按该字段中的数据举行排序,排序情势由ASC或DESC参数内定。ASC:表示按升序的各样进行排序。即表示值依据从小到大的顺序排列。那是暗许参数。DESC:表示按降序的依次实行排序。即表示值依据从大到小的顺序排列。

假定有WHERE子句,就依照“条件发挥式1”钦定的口径进行询问;若无WHERE子句,就询问全部记录。假若有GROUP BY子句,就依照“属性名1”钦命的字段举行分组;假使GROUP BY子句前边带着HAVING关键字,那么独有满足“条件发挥式2”中钦定的法规的记录本事够出口。GROUP BY子句平常和COUNT等聚合函数一齐利用。如果有OLacrosseDER BY子句,就依据“属性名2”钦赐的字段实行排序。排序格局由ASC或DESC参数钦点。暗许的排序形式为ASC。

二、在单表上询问数据

2.1、查询全部字段

复制代码 代码如下:select * from STUDENT;

2.2、按原则查询

正如运算符> , < ,= , != ,>= , <=

select * from STUDENT where STU_AGE>13; 

in ,符合v1,v2,,,vn手艺被查出IN关键字能够推断有个别字段的值是不是在钦定的集聚中。假设字段的值在集合中,则满意查询条件,该纪录将被询问出来。假若不在集结中,则不满意查询条件。其语准则则如下:[ NOT ] IN

select * from STUDENT where STU_AGE in; 

between v1 and v2 在v1至v第22中学间BETWEEN AND关键字能够判读有个别字段的值是不是在钦定的界定内。尽管字段的值在钦命范围内,则满意查询条件,该记录将被询问出来。即使不在内定范围内,则不满意查询条件。其语准则则如下:[ NOT ] BETWEEN 取值1 AND 取值2

select * from STUDENT where STU_AGE between 13 and 15; 

逻辑运算符

select * from STUDENT where STU_AGE NOT IN; 

or 逻辑或OENVISION关键字也得以用来一齐四个尺码进行询问,不过与AND关键字差异。使用OR关键字时,只要满意那多少个查询条件的中间叁个,那样的记录将会被询问出来。假诺不满意那几个查询条件中的任何三个,那样的记录将被杀绝掉。OLAND关键字的语法法规如下:条件表达式1 O凯雷德 尺度表明式2 [ …OTiggo 条件表达式n ]里头,O昂科威能够用来三番两次三个尺码表明式。何况,能够而且采取四个O福睿斯关键字,这样能够连续不断更加的多的基准说明式。

select * from STUDENT where STU_ID<2005 OR STU_ID>2015; 

and 逻辑与AND关键字能够用来一块多少个规范化进行询问。使用AND关键字时,唯有同有时候满意全体查询条件的记录会被询问出来。若是不满足这个查询条件的中间一个,那样的笔录将被扼杀掉。AND关键字的语法准则如下:条件表明式1 AND 标准表明式2 [ … AND 条件表明式n ]里头,AND能够一而再五个尺码表达式。何况,能够同一时间接选举择四个AND关键字,那样能够接连越来越多的标准化表明式。

混淆查询

LIKE关键字能够相称字符串是或不是等于。假如字段的值与钦命的字符串相相称,则满意查询条件,该记录将被询问出来。如若与钦命的字符串分歧盟,则不满意查询条件。其语法则则如下:[ NOT ] LIKE '字符串' “NOT”可选参数,加上 NOT表示与钦赐的字符串不相配时知足条件;“字符串”表示内定用来同盟的字符串,该字符串必得加单引号或双引号。

select * from STUDENT where STU_NAME LIKE '%王'; 

表示万分任何以王结尾的

select * from STUDENT where STU_NAME LIKE '阿%'; 

意味着极其任何以阿初叶的

select * from STUDENT where STU_NAME LIKE '阿%'; 

select * from STUDENT where STU_NAME LIKE '阿%'; 

然则假如下前面加七个_符号

select * from STUDENT where STU_NAME LIKE '_下__'; 

“字符串”参数的值能够是一个安然无恙的字符串,也得以是富含百分号的通配字符。二者有超级大差别“%”能够表示私行长度的字符串,长度可认为0;“_”只好表示单个字符。固然要相称姓张且名字唯有四个字的人的笔录,“张”字背后总得要有五个“_”符号。因为叁个中华夏儿女民共和国字是三个字符,而贰个“_”符号只可以表示四个字符。

空值查询

IS NULL关键字能够用来判断字段的值是还是不是为空值。就算字段的值是空值,则知足查询条件,该记录将被询问出来。要是字段的值不是空值,则不满足查询条件。其语法则则如下:IS [ NOT ] NULL在那之中,“NOT”是可选参数,加上NOT表示字段不是空值时满意条件。IS NULL是叁个整机,不可能将IS换到”=”.

三、使用聚合函数查询数据

3.1、group by 分组如下:

select * from STUDENT group by STU_SEX; 

不加条件,那么就只取每一个分组的首先条。

只要想看分组的开始和结果,能够加groub_concat

select STU_SEX,group_concat from STUDENT group by STU_SEX;

3.2、常常景观下group需与总计函数一齐使用才有含义先准备一些数量:

create table EMPLOYEES NOT NULL, EMP_SALARY INT unsigned NOT NULL, EMP_DEP CHAR; insert into EMPLOYEES values; insert into EMPLOYEES values; insert into EMPLOYEES values; insert into EMPLOYEES values; insert into EMPLOYEES values; insert into EMPLOYEES values; insert into EMPLOYEES values; insert into EMPLOYEES values; insert into EMPLOYEES values; insert into EMPLOYEES values; insert into EMPLOYEES values; insert into EMPLOYEES values; insert into EMPLOYEES values; insert into EMPLOYEES values; 

mysql中的四种计算函数:max:求最大值118kj开奖现场,求各个机关的万丈薪金:

select EMP_NAME,EMP_DEP,max from EMPLOYEES group by EMP_DEP;

min:求最小值求每一个机关的最仰报酬:

select EMP_NAME,EMP_DEP,min from EMPLOYEES group by EMP_DEP; 

sum:求总量和求每种机构的薪金总额:

select EMP_DEP,sum from EMPLOYEES group by EMP_DEP 

avg:求平均值求各类机构的薪俸平均值

select EMP_DEP,avg from EMPLOYEES group by EMP_DEP; 

count:求总行数求每一种机构薪水超过一定金额的人头

select EMP_DEP,count from EMPLOYEES where EMP_SALARY>=500 group by EMP_DEP; 

3.3、带条件的groub by 字段 having,利用HAVING语句过滤分组数据having 子句的功用是筛选满足条件的组,即在分组之后过滤数据,条件中时常包蕴聚组函数,使用having 条件显得特定的组,也能够动用多个分组规范进行分组。having 子句被约束子已经在SELECT语句中定义的列和汇集表明式上。平时,你须要经过在HAVING子句中再一次聚合函数表达式来援用聚合值,如同你在SELECT语句中做的那么。

复制代码 代码如下: select EMP_DEP,avg,group_concatfrom EMPLOYEES group by EMP_DEP HAVING avg >=6000;

检索平均报酬大于6000的机构,并把单位里的人整整列出来

四、多表上豆蔻梢头道查询多表上同步查询分为内接二连三查询和外接连查询隐式内延续查询

复制代码 代码如下: select STUDENT.STU_ID,STUDENT.STU_NAME,STUDENT.STU_AGE,STUDENT.STU_SEX,GRADE.STU_SCORE from STUDENT,GRADE WHERE STUDENT.STU_ID=GRADE.STU_ID AND GRADE.STU_SCORE >=90;

探索大于90分的学习者音讯:

显式内接连查询

复制代码 代码如下: select STUDENT.STU_ID,STUDENT.STU_NAME,STUDENT.STU_AGE,STUDENT.STU_SEX,GRADE.STU_SCORE from STUDENT inner join GRADE on STUDENT.STU_ID=GRADE.STU_ID AND GRADE.STU_SCORE >=90;

用法:select .... from 表1 inner join 表2 on 准绳表明式

外接连查询left join.左连接查询。用法 :select .... from 表1 left join 表2 on 标准化表明式意思是表1查出来的多寡不可能为null,不过其对应表2的数据可以为null

复制代码 代码如下: select STUDENT.STU_ID,STUDENT.STU_NAME,STUDENT.STU_AGE,STUDENT.STU_SEX,GRADE.STU_SCORE from STUDENT left join GRADE on STUDENT.STU_ID=GRADE.STU_ID;

right join正是相反的了,用法相符用left join的时候,left join操作符侧边表里的新闻都会被询问出来,右边表里未有的记录会填空.right join亦然;inner join的时候则唯有标准适当的才会来得出来full join(卡塔尔(قطر‎完整外界联接再次回到左表和右表中的全部行。当某行在另二个表中未有相配行时,则另两个表的精选列表列包涵空值。就算表之间有相称行,则全体结果集行李包裹蕴基表的数据值。仅当至罕有二个同归于两表的行相符联接条件时,内联接才重回行。内联接解除与另三个表中的别的行不匹配的行。而外联接会再次回到FROM 子句中涉嫌的最少二个表或视图的装有行,只要这个行相符任何 WHERE 或 HAVING 寻觅条件。将寻觅通过左向外对接引用的左表的保有行,以至经过右向外对接引用的右表的全体行。完整外界联接中七个表的具备行都将回到。

五、子查询以叁个查询select的结果作为另两个询问的条件语法:select * from 表1 wher 条件1(select ..from 表2 where 条件2)1、与In结合

select * from STUDENT where STU_ID IN(select STU_ID from GRADE where STU_SCORE>85); 

招来大于85分的上学的儿童消息

2、与EXISTS结合EXISTS和NOT EXISTS操作符只测验某块头查询是还是不是重回了数据行。假诺是,EXISTS将是true,NOT EXISTS将是false。

select * from STUDENT where EXISTS (select STU_ID from GRADE where STU_SCORE>=100); 

假若有学员成绩超越100,才查询全体的学习者新闻

3、ALL、ANY和SOME子查询any和all的操作符见怪不怪用法是结合三个针锋相投比较操作符对一个数据列子查询的结果进行测量检验。它们测量检验比较值是还是不是与子查询所重返的满贯或一些值十一分。举例说,如若相比值小于或等于子查询所重临的每贰个值,<=all将是true,只要相比值稍差于或等于子查询所再次来到的任何三个值,<=any将是true。some是any的叁个同义词。

select STU_ID from GRADE where STU_SCORE <67; 

万大器晚成学号大于下面包车型客车随机一个就体现出来:

复制代码 代码如下: select * from STUDENT where STU_ID >= any (select STU_ID from GRADE where STU_SCORE <67);

六、归拢查询结果联合查询结果是将多少个SELECT语句的查询结果合并到手拉手。因为某种情形下,要求将多少个SELECT语句询问出来的结果归总起来突显。使用UNION关键字时,数据库系统会将享有的查询结果合併到一同,然后去除掉相通的笔录。而UNION ALL关键字则只是简单的联合到二头。其语法则则如下:

SELECT语句1 UNION | UNION ALL SELECT语句2 UNION | UNION ALL …. SELECT语句n ;

七、排序与取数7.1、order byorder by price //暗中同意升序排列order by price desc //降序排列order by price asc //升序排列,与私下认可一样//随机排列,功用不高

select * from GRADE where STU_SCORE >80 order by STU_SCORE; 

默许是按升序的,也足以如此写

select * from GRADE where STU_SCORE >80 order by STU_SCORE ASC; 

select * from GRADE where STU_SCORE >80 order by STU_SCORE desc; 

7.2、limit

limit [offset,] Noffset 偏移量,可选,不写则一定于limit 0,NN 收取条目取分数最高的前5条

select * from GRADE order by STU_SCORE desc limit 5; 

select * from GRADE order by STU_SCORE asc limit 5; 

取分数排行在10-15里边的5条

select * from GRADE order by STU_SCORE desc limit 10,5 

八、为表和字段取别称

select STU_ID as '学号',STU_SCORE as '分数' from GRADE; 

当表的称号不长时,在查询中央直属机关接动用表名特不便于。那时候可认为表取三个小名。用那些外号来取代表的名称。MySQL中为表取别称的中坚格局如下:表名 表的别称

复制代码 代码如下: select S.STU_ID,S.STU_NAME,S.STU_AGE,S.STU_SEX,G.STU_SCORE from STUDENT S,GRADE G WHERE S.STU_ID=G.STU_ID AND G.STU_SCORE >=90;

九、使用正则表明式查询

正则表明式是用某种情势去相称后生可畏类字符串的二个办法。比如,使用正则说明式能够查询出含有A、B、C此中任一字母的字符串。正则表明式的询问技能比通配字符的询问本事更加强有力,况兼越是的灵巧。正则表明式能够行使于特别复杂查询。MySQL中,使用REGEXP关键字来协作查询正则表明式。其主导情势如下:属性名 REGEXP '匹配方式'

在选择前先插入一些数据:

insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; insert into STUDENT values; 

动用字符“^”可以宽容以一定字符或字符串带头的笔录。询问全部以阿头的

select * from STUDENT where STU_NAME REGEXP '^阿'; 

select * from STUDENT where STU_NAME REGEXP '^[0-9]';

运用字符“$”能够宽容以一定字符或字符串结尾的笔录以数字结尾

select * from STUDENT where STU_NAME REGEXP '[0-9]$'; 

用正则表达式来查询时,能够用“.”来替代字符串中的大肆二个字符。

select * from STUDENT where STU_NAME REGEXP '^w....[0-9]$'; 

以w最早,以数字截止,中间有4个

能够将急需查询字符组成多个字符集。只要记下中带有方括号中的任意字符,该记录将会被询问出来。比方,通过“[abc]”能够查询包涵a、b、c那多少个假名中其余多少个的记录。

利用方括号能够钦点集结的区间。“[a-z]”表示从a-z的有着字母;“[0-9]”表示从0-9的具有数字;“[a-z0-9]”表示满含全部的小写字母和数字。“[a-zA-Z]”表示特出全数字母。select * from STUDENT where STU_NAME REGEXP '[0-9a-z]'; 查询全数包罗有数字和小写字母的

使用“[^字符集结]”能够相配钦赐字符以外的字符

{}表示出现的次数

正则表明式中,“字符串{M}”表示字符串三回九转现身M次;“字符串{M,N}”表示字符串联一而重现身至少M次,最多N次。比方,“ab{2}”表示字符串“ab”三番五次现身五次。“ab{2,4}”表示字符串“ab”接二连三现身起码五回,最多肆遍。o现身2次

select * from STUDENT where STU_NAME REGEXP 'o{2}'; 

+表示到少现身贰回fa起码现身壹次

select * from STUDENT where STU_NAME REGEXP '+'; 

留神: 正则表明式能够相配字符串。当表中的记录包涵那几个字符串时,就可以将该记录查询出来。假设钦定八个字符串时,须求用符号“|”隔离。只要相配这一个字符串中的任性四个就可以。每一个字符串与”|”之间无法有空格。因为,查询进度中,数据库系统会将空格也作为三个字符。那样就询问不出想要的结果。正则表明式中,“*”和“+”都得以协作四个该符号在此之前的字符。然则,“+”起码表示二个字符,而“*”能够代表零个字符。

如上所述便是本文的全体内容,希望我们能够赏识。

本文由118kj开奖现场发布于产品测评,转载请注明出处:详解MySql基本查询

关键词: