加入收藏 | 设为首页 | 会员中心 | 我要投稿 焦作站长网 (https://www.0391zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

MySQL多表查询的具体范例

发布时间:2021-10-12 17:41:39 所属栏目:外闻 来源:互联网
导读:这篇文章主要介绍了MySQL多表查询的具体实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起

这篇文章主要介绍了MySQL多表查询的具体实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

 

一 使用SELECT子句进行多表查询

 

SELECT 字段名 FROM 表1,表2 … WHERE 表1.字段 = 表2.字段 AND 其它查询条件

 

1SELECT a.id,a.name,a.address,a.date,b.math,b.english,b.chinese FROM tb_demo065_tel AS b,tb_demo065 AS a WHERE a.id=b.id

 

注:在上面的的代码中,以两张表的id字段信息相同作为条件建立两表关联,但在实际开发中不应该这样使用,最好用主外键约束来实现

 

二 使用表的别名进行多表查询

 

如:

 

1SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065 a,tb_demo065_tel b WHERE a.id=b.id AND b.id='$_POST[textid]'

 

SQL语言中,可以通过两种方式为表指定别名

 

第一种是通过关键字AS指定,如

 

1SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065 AS a,tb_demo065_tel AS b WHERE a.id=b.id

 

第二种是在表名后直接加表的别名实现

 

1SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065 a,tb_demo065_tel b WHERE a.id=b.id

 

使用表的别名应注意几下几点

 

别名通常是一个缩短了的表名,用于在连接中引用表中的特定列,如果连接中的多个表中有相同的名称列存在,必须用表名或表的别名限定列名

 

如果定义了表的别名就不能再使用表名

 

三 合并多个结果集

 

SQL语言中,可以通过UNION 或 ALL将多个SELECT语句的查询结果合并输出,这两个关键字的使用说明如下:

 

UNION:利用该关键字可以将多个SELECT 语句的查询结果合并输出,并删除重复行

 

ALL:利用该关键字可以将多个SELECT 语句的查询结果合并输出,但不会删除重复行

 

在使用UNION或ALL关键字将多个表合并输出时,查询结果必须具有相同的结构并且数据类型必须兼容,另外使用UNION时两张表的字段数量也必须相同,否则会提示SQL语句有错误。

 

1e.x:SELECT id,name,pwd FROM tb_demo067 UNION SELECT uid,price,date FROM tb_demo067_tel

 

四 简单嵌套查询

 

子查询:子查询是一个SELECT查询,返回单个值且嵌套在SELECT、INSERT、UPDATE和DELETE语句或其它查询语句中,任何可以使用表达式的地方都可以使用子查询.

 

1SELECT id,name,sex,date FROM tb_demo068 WHERE id in(SELECT id FROM tb_demo068 WHERE id='$_POST[test]')

 

内连接:把查询结果作为WHERE子句的查询条件即称为内连接

 

五 复杂的嵌套查询

 

多表之间的嵌套查询可以通过谓词IN实现,语法格式如下:

 

test_expression[NOT] IN{

 

 subquery

 

}

 

参数说明:test_expression指SQL表达式,subquery包含某结果集的子查询

 

多表嵌套查询的原理:无论是多少张表进行嵌套,表与表之间一定存在某种关联,通过WHERE子句建立此种关联实现查询

 

六 嵌套查询在查询统计中的应用

 

实现多表查询时,可以同时使用谓词ANY、SOME、ALL,这些谓词被称为定量比较谓词,可以和比较运算符联合使用,判断是否全部返回值都满足搜索条件.SOME和ANY谓词是存在量的,只注重是否有返回值满足搜索条件,这两个谓词的含义相同,可以替换使用;ALL谓词称为通用谓词,它只关心是否有谓词满足搜索要求.

 

3SELECT * FROM tb_demo069_people WHERE uid IN(SELECT deptID FROM tb_demo069_dept WHERE deptName='$_POST[select]')

 

SELECT a.id,a.name FROM tb_demo067 AS a WHERE id<3)

 

ANY 大于子查询中的某个值

 

=ANY 大于等于子查询中的某个值

 

<=ANY 小于等于子查询中的某个值

 

=ANY 等于子查询中的某个值

 

!=ANY或<>ANY 不等于子查询中的某个值

 

ALL 大于子查询中的所有值

 

=ALL 大于等于子查询中的所有值

 

<=ALL 小于等于子查询中的所有值

 

=ALL 等于子查询中的所有值

 

!=ALL或<>ALL 不等于子查询中的所有值

 

七 使用子查询作派生的表

 

在实际项目开发过程中经常用到从一个信息较为完善的表中派生出一个只含有几个关键字段的信息表,通过子查询就可以来实现这一目标,如

 

1SELECT people.name,people.chinese,people.math,people.english FROM (SELECT name,chinese,math,english FROM tb_demo071) AS people

(编辑:焦作站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读