• MySQL多表查询


    mysql进行多表查询的方法:1、使用SELECT子句进行查询;2、使用表的别名进行查询;3、通过内连接进行查询;4、通过嵌套进行查询;5、通过多表联合进行查询。

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

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

    SELECT 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字段信息相同作为条件建立两表关联,但在实际开发中不应该这样使用,最好用主外键约束来实现

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

    示例:

    SELECT 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语言中,可以通过两种方式为表指定别名:

    1、通过关键字AS指定,如
    SELECT 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

    2、在表名后直接加表的别名实现

    SELECT 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

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

    ● (1别名通常是一个缩短了的表名,用于在连接中引用表中的特定列,如果连接中的多个表中有相同的名称列存在,必须用表名或表的别名限定列名
    ● 如果定义了表的别名就不能再使用表名

    三、简单嵌套查询(子查询、内连接)

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

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

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


    SELECT filedlist FROM table1 [INNER] JOIN table2 ON table1.column1 = table2.column1

    其中,filedlist是要显示的字段,INNER表示表之间的连接方式为内连接,table1.column1=table2.column1用于指明两表间的连接条件,如:


    SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id

    四、复杂的嵌套查询

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

    test_expression[NOT] IN{

     subquery

    }

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

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

    五、多表联合查询

    利用SQL语句中的UNION,可以将不同表中符合条件的数据信息显示在同一列中。例:
    SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten

    使用UNION时应注意以下两点:

    ● 在使用UNION运算符组合的语句中,所有选择列表的表达式数目必须相同,如列名、算术表达式及聚合函数等
    ● 在每个查询表中,对应列的数据结构必须一样。

    六、复杂内连接查询

    复杂的内连接查询是在基本的内连接查询的基础上再附加一些查询条件,如:

    SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id WHERE b.id=(SELECT id FROM  tb_demo065 WHERE tb_demo065.name='$_POST[text]')

    总之,实现表与表之间的关联的本质是两表之间存在共同的数据项或者相同的数据项,通过WHERE 子句或内连接INNER JOIN … ON 语句将两表连接起来,实现查询。

  • 相关阅读:
    2015-01-27-从实验出发理解buffer与cache区别-吴伟顺
    【实习记】2014-09-26恢复linux下误删的ntfs盘中的文件
    【实习记】2014-09-24万事达卡bin查询项目总结
    【实习记】2014-09-04浏览代码查middle资料+总结我折腾过的源码浏览器
    【实习记】2014-09-01从复杂到简单:一行命令区间查重+长整型在awk中的bug
    【实习记】2014-08-29算法学习Boyer-Moore和最长公共子串(LCS)
    【实习记】2014-08-28知值求范围问题
    【实习记】2014-08-27堆排序理解总结+使用typedef指代函数指针
    【实习记】2014-08-26都是回车惹的祸——shell脚本必须是unix行尾
    【实习记】2014-08-24实习生无法映射磁盘替代方案rsync+非默认端口22设置
  • 原文地址:https://www.cnblogs.com/ma13461749958/p/13950288.html
Copyright © 2020-2023  润新知