Mysql之查询

基本查询语句

select selection_list //要查询的内容,选择哪些列

from 数据表名 //指定数据表

where primary_constraint //查询时需要满足的条件,行必须满足的条件

group by grouping_columns //如何对结果进行分组

order by sorting_cloumns //如何对结果进行排序

having secondary_constraint //查询时满足的第二条件

limit count //限定输出的查询结果

查询一个数据表中所有的列:select * from 数据表名;

查询数据表中的某一个字段:select 字段名 from 数据表名;

多表查询:select * from 数据表名1,数据表名2;      全连接,形成笛卡尔积

select * from 数据表名1,数据表名2 where 数据表名1.字段=数据表名2.字段      等同连接,确定两个表之间的连接关系

 

单表查询

从一个表中查询需要的数据

select * from 表名;        查询所有字段

select 字段名 from 表名;      查询指定字段的数据

select * from 表名 where 。。。;    查询指定数据

select * from 表名 wehre 条件 [not] in (元素1,元素2.。)    带关键字IN的查询

 select * from 表名 where 条件 between 取值1 and 取值2;    判断某个字段的值是否在指定的范围内,如果字段的值在指定范围内,则满载查询条件,该记录将被查询出来;如果不在指定范围内,则不满足查询条件。

select * from 表名 where 字段 like '%%';      LIKE属于较常用的比较运算符,通过它可以实现模糊查询,有两种通配符:‘%’ 和下划线‘_’

“%”可以匹配一个或多个字符,可以代表任意长度的字符串,长度可以为0;“_”只匹配一个字符

用IS NULL 关键字查询空值,如果字段的值为空值,则满足查询条件,该记录将被查询出来;如果字段的值不是空值,则不满足查询条件。

AND关键字可以用来联合多个条件进行查询。使用AND关键字时,只有同时满足所有查询条件的记录会被查询出来;如果不满足查询条件中的一个,这样的记录将被排除。

SELECT * FROM 表名 WHERE 条件1 AND 条件2;

OR关键字也可以用来联合多个条件进行查询,但是与AND关键字不同,使用OR关键字时,只要满足查询条件中的一个,那么此记录就会被查询出来;如果不满足查询条件中的任何一个,这样的记录将被排除

SELECT * FROM 数据表名 WHERE 条件1 or 条件2;

使用DISTINCT关键字可以去除查询结果中的重复记录

SELECT DISTINCT 字段名 FROM 表名;

使用ORDER BY关键字可以对查询的结果进行升序(ASC)或降序(DESC)排列。在默认情况下,ORDER BY按升序输出结果。如果要按降序排列,可以使用DESC来实现

通过GROUP BY子句可以将数据划分到不同的组中,实现对记录进行分组查询。在查询时,所查询的列必须包含在分组的列中,目的是使查询到的数据没有矛盾。

使用GROUP BY关键字也可以按多个字段进行分组。在分组过程中,先按照第一个字段进行分组,当第一个字段有相同值时,再按第二个字段进行分组,依此类推

查询数据时,可能会查询出很多记录,而用户只需要很少的一部分。这样就需要限制查询结果的数量。LIMIT是MySQL中的一个特殊关键字。LIMIT子句可以对查询结果的记录条数进行限定,控制输出的行数。

 

聚合函数查询

聚合函数的最大特点是它们根据一组数据求出一个值。聚合函数的结果值只根据选定行中非NULL的值进行计算,NULL值被忽略。

count()函数

COUNT()函数用于对除“*”以外的任何参数,返回所选择集合中非NULL值的行的数目;对于参数“*”,返回选择集合中所有行的数目,包含NULL值的行

select count(*) from 表名;

SUM()函数

SUM()函数可以求出表中某个数值类型字段取值的总和

SELECT SUM(字段名字) FROM 表名;

AVG()函数

AVG()函数可以求出表中某个数值类型字段取值的平均值。

SELECT AVG(字段名) FROM 表名;

MAX()函数

MAX()函数可以求出表中某个数值类型字段取值的最大值。

SELECT MAX(字段名) FROM 表名;

MIN()函数

MIN()函数的用法与MAX()函数基本相同,它可以求出表中某个数值类型字段取值的最小值。

SELECT MIN(字段名) FROM 表名;

 

连接查询

连接是指把不同表的记录连到一起。

内连接查询

内连接是最普遍的连接类型,而且是最匀称的,因为它们要求构成连接的每个表的共有列匹配,不匹配的行将被排除。

内连接包括相等连接和自然连接,最常见的例子是相等连接,也就是使用等号运算符,根据每个表共有列的值匹配两个表中的行。这种情况下,最后的结果集只包含参加连接的表中与指定字段相符的行。

语法格式

select * from 表1,表2 where 表1.字段=表2.字段

外连接查询

外连接是指使用OUTER JOIN关键字将两个表连接起来。

。外连接生成的结果集不仅包含符合连接条件的行数据,而且包括左表(左外连接时的表)、右表(右外连接时的表)或两边连接表(全外连接时的表)中所有的数据行。

语法格式

select * from 表1 LEFT|RIGHT JOIN 表2  on 表1.字段=表2.字段;

外连接分为左外连接,右外连接和全连接三种

左连接(LEFT JOIN)

左外连接(LEFT JOIN)是指将左表中的所有数据分别与右表中的每条数据进行连接组合,返回的结果除内连接的数据外,还包括左表中不符合条件的数据,并在右表的相应列中添加NULL值。

右外连接(RIGHT JOIN)

右外连接(RIGHT JOIN)是指将右表中的所有数据分别与左表中的每条数据进行连接组合,返回的结果除内连接的数据外,还包括右表中不符合条件的数据,并在左表的相应列中添加NULL。

复合条件连接查询:在连接查询时,也可以增加其他的限制条件。通过多个条件的复合查询,可以使查询结果更加准确。

 

子查询

子查询就是SELECT查询是另一个查询的附属。嵌套多个查询,在外面一层的查询中使用里面一层查询产生的结果集。这样就不是执行两个(或者多个)独立的查询,而是执行包含一个(或者多个)子查询的单独查询。

带IN关键字的子查询:IN运算符可以检测结果集中是否存在某个特定的值,如果检测成功则执行外部的查询。

带比较运算符的子查询:子查询可以使用比较运算符,包括=、!=、>、>=、<、<=等。比较运算符在子查询时使用非常广泛。

带EXISTS关键字的子查询:使用EXISTS关键字时,内层查询语句不返回查询的记录,而是返回一个真假值。如果内层查询语句查询到满足条件的记录,就返回一个真值(true),否则,将返回一个假值(false)

带ANY关键字子查询:ANY关键字表示满足其中任意一个条件,通常与比较运算符一起使用。使用ANY关键字时,只要满足内层查询语句返回的结果中的任意一个,就可以通过该条件来执行外层查询语句。

语法格式:列名 比较运算符 ANY(子查询)

如果比较运算符是“<”,则表示小于子查询结果集中某一个值;如果是“>”,则表示至少大于子查询结果集中的某一个值(或者说大于子查询结果集中的最小值)

带ALL关键字的子查询:ALL关键字表示满足所有条件,通常与比较运算符一起使用。使用ALL关键字时,只有满足内层查询语句返回的所有结果,才可以执行外层查询语句

语法格式:列名 比较运算符 ALL(子查询)

如果比较运算符是“<”,则表示小于子查询结果集中的任何一个值(或者说小于子查询结果集中的最小值);如果是“>”,则表示大于子查询结果集中的任何一个值(或者说大于子查询结果集中的最大值)。

 

合并查询结果

合并查询结果是将多个SELECT语句的查询结果合并到一起。因为某些情况下,需要将几个SELECT语句查询出来的结果合并起来显示。合并查询结果使用UNION和UNION ALL关键字。

UNION关键字是将所有的查询结果合并到一起,然后去除相同记录;

UNION ALL关键字则只是简单地将结果合并到一起。下面分别介绍这两种合并方法。

 

定义表和字段的别名

可以为表和字段取一个别名,这个别名可以代替其指定的表和字段。为表和字段取别名,能够使查询更加方便,而且可以使查询结果以更加合理的方式显示。

使用关键字:as ,如 字段 as a,表示把字段取别名为a

 

使用正则表达式查询

正则表达式是用某种模式去匹配一类字符串的一个方式。正则表达式的查询能力比通配字符的查询能力更强大,而且更加灵活

使用关键字REGEXP来匹配查询正则表达式,语法为:

字段名 REGEXP ‘’匹配方式‘

^:匹配以特定字符或字符串开头的记录,select * from 表名 where 字段 REGEXP '^a',字段以a开头的记录。

$:匹配以特定字符或字符串结尾的记录,select * from 表名 where 字段 REGEXP ’a$‘,字段以a结尾。

.:匹配字符串的任意一个字符,包括回车和换行符。select * from 表名 where 字段 REGEXP ’a.‘,查询包含a的记录。

[字符集合]:匹配字符集合中任意一个字符。select * from 表名 where 字段 REGEXP ’[abc]‘,匹配查询记录中包含abc中任意一个的记录。

[^字符串集合]:匹配除字符集合以外的任意一个字符。select * from 表名 where 字段 REGEXP ’[^abc],匹配除abc以外的记录。

S1|S2|S3:匹配s1,s2,s3中任意一个字符串,select * from 表名 where 字段 REGEXP ‘java|c|python’,匹配查询记录中包含java,c或者python的记录。

*:匹配多个该符号之前的字符,包括0和1个,select * from 表名 where 字段 REGEXP ‘J*A’,匹配查询记录中A字符前出现过J字符的记录。

+:匹配多个该符号之前的字符,包括1个,select * from 表名 where 字段 REGEXP ‘J+A’,匹配查询记录中A字符前至少出现过一个J的记录。

字符串{N}:匹配字符串出现N次。select * from 表名 where 字段 REGEXP ‘J{2}’,匹配查询记录中J连续出现3次的记录

字符串{M,N}:匹配字符串出现至少M次,最多N次,select * from 表名 where 字段 REGEXP ‘J{1,2}’,匹配查询记录中J连续出现1次,最多出现2次的J字符记录。

 

posted on 2023-11-16 09:53  搬家小蜜蜂  阅读(48)  评论(0)    收藏  举报

导航