数据库之多表数据记载查询

打印 上一主题 下一主题

主题 900|帖子 900|积分 2700

目录
一、毗连查询
1.内毗连查询
1.平凡内毗连查询
2.自毗连查询
2.外毗连查询
1.左毗连查询
2.右毗连查询
3.复合条件毗连查询
二、子查询
1.FROM子句中的子查询
2.WHERE子句中的子查询
1.利用IN关键字的子查询
2.利用ANY、SOME关键字的子查询
3.利用ALL关键字的子查询
4.利用EXISTS关键字的子查询
5.利用条件判断符的子查询
三、合并查询结果
1.利用UNION关键字的合并操作
2.利用UNION ALL关键字的合并操作


一、毗连查询

   
在关系型数据库管理体系中,通常一张表只会存储一个实体的相关信息,假如用户需要查询多张表中不同实体的数据,可以利用关键字JOIN对表实行毗连查询操作,但条件条件是,这些表中必须存在具有相同意义的字段。毗连查询主要包括内毗连查询和外毗连查询。

  
1.内毗连查询

内毗连查询(INNER JOIN)是利用比力运算符对多个表间的某些列数据进行比力,并列出这些表中与毗连条件相匹配的数据行,组合成新的记载。表之间的毗连条件由表中具有相同意义的字段组成。

1.平凡内毗连查询

内毗连查询的语法形式为:

   
SELECT {*|col_list} FROM table_name1

  
INNER JOIN table_name2 ON condition;

  
上述语句中,condition表示毗连条件。

   
此处,SELECT语句与前面最大的区别在于:SELECT反面指定的列分别属于两个不同的表;同时,FROM子句列出了两个表,两个表之间的关系通过INNER JOIN指定;毗连条件利用ON子句给出。

  
2.自毗连查询

内毗连查询中有一种特殊的查询,称为自毗连查询,它是指毗连查询中涉及的两张表在物理上是同一张表,但逻辑上可以看成两张表。

语法形式如下:

   
SELECT table_alias1.*,table_alias2.* FROM table_name AS table_alias1

  
INNER JOIN table_name AS table_alias2 ON condition;

  
上述语句的意义是,将一张表分别命名为table_alias1和table_alias2,然后利用这两个表名进行自毗连查询。


2.外毗连查询

   
外毗连查询(OUTER JOIN)是以一张表为基表,根据毗连条件,与另一张表的每一行进行匹配,假如没有匹配上,则在相关联的结果行中,另一张表的所有选择列均返回空值。

  
外毗连查询通常分为两种:左毗连查询(LEFT JOIN)和右毗连查询(RIGHT JOIN)。

  
基本语法形式如下:

   
SELECT {*|col_list} FROM table_name1

  
{LEFT|RIGHT} [OUTER] JOIN table_name2 ON condition;

  
对于先创建表关系,之后才插入数据的表,在其中插入数据时需要先关闭外键约束,否则会插入不乐成。

关闭表外键约束的语句为:

   
SET FOREIGN_KEY_CHECKS=0;

  
开启表外键约束的语句为:

   
SET FOREIGN_KEY_CHECKS=1;

  1.左毗连查询

   
在外毗连查询语句中,LEFT JOIN关键字之前的表称为左表,左毗连查询会以左表为基表,与另外一张表的每一行进行匹配,假如符合毗连条件,则返回两张表相对应的行;假如不符合,则只返回左表中的行,而且其对应的活动一个空值。

  2.右毗连查询

   
在外毗连查询语句中,RIGHT JOIN关键字之后的表称为右表,右毗连查询会以右表为基表,与另外一张表的每一行进行匹配,假如符合毗连条件,则返回两张表相对应的行;假如不符合,则只返回右表中的行,而且其对应的活动一个空值。

  
3.复合条件毗连查询

   
复合条件毗连查询是通过在毗连查询中添加过滤条件,以到达限定查询结果和筛选数据的目标。

  
二、子查询

   
假如查询语句中嵌套了一个或若干个其他的查询语句,那么在整个语句中,外层查询称为主查询,内层查询称为子查询或嵌套查询。该类查询可以基于一个或多个表。在此类查询中,体系会先实行子查询,将子查询的结果作为主查询的过滤条件。

  
子查询可以应用在SELECT,UPDATE和DELETE语句中,而且大多数子查询会包含在FROM子句或WHERE子句中,在WHERE子句中通常与IN,ANY,ALL和EXISTS关键字搭配利用,也可以利用条件判断符。

  
1.FROM子句中的子查询

FROM子句中的子查询会生成一个临时表,由于FROM子句中的每个表都必须有一个名称,因此应该为临时表取一个别名。

语法形式如下:

   
SELECT {*|col_list} FROM(SELECT * FROM table_name) AS table_alias

  
[WHERE condition];

  
上述语句中,table_alias表示别名。


2.WHERE子句中的子查询

包含在WHERE子句中的子查询,其查询结果通常是单列数据,体系实行子查询后,子查询的结果会作为主查询的筛选条件。

1.利用IN关键字的子查询

当子查询返回的是一个数据集合,主查询需要返回符合集合中条件的记载时,可以利用IN关键字。

语法形式如下:

   
SELECT {*|col_list} FROM table_name1

  
WHERE col_name1 IN

  
(SELECT col_name2 FROM table_name2 [WHERE condition]);

  
上述语句中col_name1为表1中的字段,col_name2为表2中的字段。


2.利用ANY、SOME关键字的子查询

ANY和SOME是同义词,表示满意其中恣意条件。该类查询会创建一个表达式对子查询的返回值列表进行比力,只要满意子查询中的任一个比力条件,就返回一个结果。

其语法形式如下:

   
SELECT {*|col_list} FROM table_name1

  
WHERE col_name1<any

  
(SELECT col_name2 FROM table_name2 [WHERE condition]);

  
其中,利用“=ANY”与利用关键字IN的结果实际上是相同的。


3.利用ALL关键字的子查询

利用关键字ALL的子查询,表示当一条记载符合子查询结果中所有的条件时,才会返回该数据。

其语法形式如下:

   
SELECT {*|col_list} FROM table_name1

  
WHERE col_name1>All

  
(SELECT col_name2 FROM table_name2 [WHERE 条件]);

  
4.利用EXISTS关键字的子查询

利用EXISTS关键字,体系会对子查询的返回结果进行判断,假如子查询至少返回一行记载,那么EXISTS的结果为TRUE,此时主查询语句将会实行;假如子查询没有返回任何记载,那么EXISTS的结果为FALSE,此时主查询语句将不会实行。

其语法形式如下:

   
SELECT {*|col_list} FROM table_name1

  
WHERE EXISTS(SELECT * FROM table_name2);

  
NOT EXISTS与EXISTS利用方法相同,返回的结果相反。


5.利用条件判断符的子查询

其语法形式如下:
   
SELECT {*|col_list} FROM table_name1

  
WHERE col_name1 operators

  
(SELECT col_name2 FROM table_name2);

  
上述语句中,operators表示条件判断符。


三、合并查询结果

   
合并查询结果就是利用UNION关键字,将多条查询语句的结果合并在一起表现。

  1.利用UNION关键字的合并操作

单独利用UNION关键字的合并操作,查询结果集会会议合并在一起,并将重复的记载删除。

其语法形式如下:

   
SELECT {*|col_list} FROM table_name1

  
UNION SELECT {*|col_list} FROM table_name2;

  
2.利用UNION ALL关键字的合并操作

利用UNION ALL关键字的合并操作,查询结果集会会议直接合并在一起,并不会删除重复记载。

其语法形式如下:

   
SELECT {*|col_list} FROM table_name1

  
UNION ALL SELECT {*|col_list} FROM table_name2;

  
注:在利用UNION关键字合并查询结果时,两个语句查询的字段数目必须相同,否则体系会出现报错。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

傲渊山岳

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表