您的位置:首页 > 数据库 > MySQL

MySQL的连接查询及子查询

2016-03-07 21:53 567 查看
在校招的各种银行类笔试题中,数据库的题占据了绝大部分,其中数据库的查询考察的很多,而且尤其是各种连接查询,子查询,嵌套查询等等,所以我打算总结总结连接查询和子查询等知识点

1.连接查询分类

(1)内连接查询

(2)外连接查询(左外连接查询和右外连接查询)

2.内连接查询(INNER JOIN)

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

实验:













最后一个图上面有个小错误,INNER JOIN….ON….而不是用WHERE

3.自连接查询

如果一个连接查询中,涉及到的两个表都是同一个表,这种查询就是自连接查询,自连接也是属于一种特殊的内连接,它是指相互连接的表在物理上为同一张表,但是可以在逻辑上面分为两张表。

4.外连接查询

连接查询就是查询多个表中相关的行,内连接时,返回查询结果集合中的仅是符合查询条件和连接条件的行,但是当要求返回的结果集中除了符合条件的行之外,或许还需要返回左表的记录,右表记录,左右表记录,此时就需要采用外连接查询的方式

(1)左外连接(LEFT JOIN … ON)

返回包括左表中的所有记录和由表中连接字段相等的记录。

如果左表的某行在右表中没有匹配行,则在相关联的结果行中,右表的所有选择列表列均为空值



(1)右外连接(RIGHT JOIN … ON)

返回包括右表中的所有记录和由表中连接字段相等的记录。

如果右表的某行在左表中没有匹配行,则在相关联的结果行中,左表的所有选择列表列均为空值



5.复合条件连接查询

复合条件连接查询是在连接查询的过程中,通过添加过滤条件,限制查询的结果,使得查询的结果更加准确。

6.子查询

子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从mysql4.1开始引入,在SELECT子句中先计算子查询,子查询的结果作为外层另一个查询条件,查询可以基于一个表或者多个表。

(1)带any,some关键字的子查询

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

any关键字放在一个比较操作符的后面,表示若与子查询返回的任何值比较为true,则返回true.

(2)带ALL关键字的子查询

使用ALL关键字时需要同时满足所有内层查询的条件。ALL关键字放在一个比较操作符的后面,表示与子查询返回的所有值比较为TRUE,则返回TRUE。

(3)带exists关键字的子查询

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

(4)带IN关键字的子查询

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

7.合并查询结果

使用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同。

UNION 不使用ALL,执行的时候会删除重复的记录,所有返回行都是唯一的;如果加上ALL,不删除重复的记录也不会对结果进行自动排序。

8.为表和字段取别名

表名 [AS] 表别名


字段名 [AS] 字段别名


表别名只在执行查询的时候使用,并不会在返回结果中显示,列别名定义之后,将返回给客户端显示,显示的结果字段为列字段的别名。

9.正则表达式查询

(1)字符”^”匹配以特定字符或字符串开头的文本

(2)字符“$”匹配以特定字符或者字符串结尾的文本

(3)字符“.”匹配任意一个字符

(4)字符“*”用来匹配前面的字符任意多次,包括0次

(5)字符“+”匹配前面的字符至少一次

(6)正则表达式可以匹配指定字符串,只要这个字符串 在查询文本中即可,如果要匹配多个字符串,多个字符串之间使用分隔符“|”隔开

(7)字符”[]”指定一个字符集合,职匹配其中任何一个字符,即为锁查找的文本。

(8)“[^字符集合]”匹配不再指定集合中的任何字符

(9)“字符串{n,}”表示至少匹配n次前面的字符

(10)“字符串{n,m}”表示匹配前面的字符串不少于n次,不多于m次。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: