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
【声明】:茂名站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章