注册 登录
  • 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

SQL编程:基本查询

MySQL SQL 彭东稳 4531次浏览 已收录 0个评论

一、实验环境

自行创建一个员工信息表info,里面记录着员工姓名,年龄,地址以及工资。

二、投影查询

实例:

三、条件查询

在使用WHERE语句可以做条件查询,但需要结合SQL操作符一起运用,如SQL算术、比较、逻辑操作符。

SQL比较操作符

SQL算术操作符

SQL逻辑操作符

我们也可以把AND和OR结合起来(使用圆括号来组成复杂的表达式):

PS:逻辑操作符的执行优先级为NOT>ADN>OR,一般当有多个逻辑操作符时要使用括号括起来。

四、聚合查询

AVG()

MAX()

MIN()

SUM()

COUNT()

RIGHT()

LEFT()

五、关键字查询

AS(给字段或表取别名)

GROUP BY(分组查询)

ORDER BY(对查询结果进行排序)

LIMIT(用于限制由 SELECT 语句返回的数据数量)

DISTINCT(使字段查询结果不重复)

六、正则表达式

正则表达式也称默认查询(REGEXP关键字可以使用LIKE代替)通常被用来检索或替换那些符合某个模式的文本内容,根据指定的匹配模式匹配文本中符合要求的特殊字符串。例如从一个文本文件中提取电话号码,查找一篇文件中重复的单词或替换用户输入的某些敏感词语等等,这些地方都可以使用正则表达式。正则表达式强大且灵活,可以应用与非常复杂的查询,比如用在

MySQL中使用REGEXP关键字指定正则表达式的字符匹配模式,下面给出一些常用的字符匹配列表(具体正则表达式可以看本博客“Linux文本检索和处理中有介绍”)。

^:匹配文本的开始字符,如“^b”匹配以字符b开头的字符串。

$:匹配文本的结束字符,如“b$”匹配以b结尾的字符串。

.:匹配任意单个字符,如“b.t”匹配任何bt之间有一个字符的字符串。

*:匹配零个或多个在它前面的字符,如“f*n”匹配字符n掐面有任意个字符f的字符串。

[]:匹配字符集和中的任何一个字符,如[xz]匹配x或者z

REGEXP举例

除了使用正则表达式来匹配查询外,也还可以使用LIKE运算符匹配指定的字符串,但与REGEXP不同,LIKE匹配的字符串如果在文本中间出现,则找不到它,相应的行也不会返回。而REGEXP在本内进行匹配,如果被匹配的字符串在文本中出现,REGEXP将会找到它,相应的行也会被返回。下面给一些例子:

连接查询

连接是关系数据库模型的主要特点,连接查询时关系数据库中最主要的查询,主要包括内连接、外连接(左外连接、右外连接)等。通过连接运算符可以实现多个表查询。

创建两张表student(学生姓名,出生时间,性别),course(课程名称,课程编号,课程导师,学生姓名)

交叉连接

返回左右表中每个记录一一对应,没有值的以“Null”显示

内连接(INNER JOIN

内连接使用比较运算符进行表间某些列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组合成新的记录,也就是说,在内连接查询中,只有满足条件的记录才能出现结果关系中。使用语法如下:

还可以使用WHERE字句定义连接条件,比较简单明了。而INNER JOIN语法是ANSI SQL的标准规范,使用INNER JOIN连接语法能够确保不会忘记连接条件,而且,WHERE字句在某些时候会影响查询的性能。具体操作语法如下

左外连接(LEFT JOIN

返回包括左表中的所有记录和右表中连接字段相等的记录,右边无值则显示“NULL”,语法如下:

右外连接(RIGHT JOIN

返回包括右表中的所有记录和右表中连接字段相等的记录,左边没有值则显示“NULL”,语法如下:

完全连接(FULL JOIN

返回包括左右表中的所有记录,左右两边没有值都显示为“NULL”,语法如下:

三表内连接

子查询

子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL4.1开始引入。在SELECT子句中先计算子查询,子查询结果作为为外层另一个查询的过滤条件,查询可以基于一个表或者多个表。子查询中常用的操作符有ANYSOME)、ALLINEXISTS。子查询可以添加到SELECTUPDATEDELETE语句中,而且可以进行多层嵌套。子查询中也可以使用比较运算符。

1)带ANY关键字的子查询

ANYSOME关键字是同义词,表示满足其中任一条件,它们允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件。

示例:

2)带ALL关键字的子查询

ALL关键字与ANYSOME不同,使用ALL时需要同时满足所有内层查询的条件。例如,修改前面的例子,用ALL关键字替换ANYALL关键字接在一个比较操作符的后面,表示与子查询返回的所有值比较为TRUE,则返回TRUE

示例:

3)带EXISTS关键字的子查询

EXISTS关键字后面的参数是一个任意的子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS的结果为true,此时外层查询语句将进行查询;如果子查询没有返回任何行,那么EXISTS返回的结果是false,此时外层语句将不进行查询。

示例:

由上述查看可以看到,如果子查询有NUM=1000的记录,因此EXISTS表达式返回true;那么外层查询语句接收true之后对表student进行查询,返回所有的记录。如果使用NOT EXISTS关键字的话就是对EXISTS取反。代码如下:

4)带IN关键字的子查询

使用IN关键字进行子查询时,内层查询语句仅仅返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较操作。

示例:

5)带比较运算符的子查询

在使用比较运算符时,内层查询语句必须返回一个准确的值给外层查询用来做比较使用,而上面介绍的ANYALLIN等关键字就不需要内层查询给一个准确的返回值。

示例:

PS:子查询的功能也可以通过连接查询来完成,但是子查询使得MySQL代码更容易阅读和编写。

合并查询结果

利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同。各个SELECT语句之间使用UNIONUNION ALL关键字分隔。UNION不适用关键字ALL,执行的时候删除重复的记录,所有返回的行都是唯一的;使用关键字ALL的作用是不删除重复行也不对结果进行自动排序。基本语法格式如下:

示例:

查询course表中ID大于2的记录和查询course表中NUM小于7000的记录,然后使用UNION ALL把这两个查询结果合并到一起去。如果光使用UNION关键字就是合并重复的行,代码如下:

 


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (1)or分享 (0)
关于作者:

您必须 登录 才能发表评论!