您的位置:首页 > 编程语言 > PHP开发

PHP学习练手(七)

2015-12-26 20:33 435 查看

内联结

定义:内联结从指定的表中返回匹配项。

举例:

匹配项:m.forum_id=f.forum_id



等值联结:上述匹配项也称为等值联结,可以将ON 匹配条件 换成 USING(匹配项)





交换INNER JOIN前后表,查询结果不变



内联结可以加入order 边缘等限制条件



外联结

定义:它将返回两个表中都匹配的记录和不匹配的记录

类型:

左联结:返回左表中的要查询的所有记录和右表中匹配的项,若右表中没有匹配的记录,则返回NULL。(使用最广泛)

——举例:



:个人理解,此处左表是forums,右表是messages。先查找左表中的所有项(f.*)即name,然后再查找右表中与每个name论坛相关联的subject,若存在subject,则显示记录值,若没有,则为NULL。

右联结:右联结与左联结正好相反,返回右表中所有要查询的记录和左表中匹配的项,若左表不匹配则返回NULL。

——举例:



附:可知使用right join后改变左右表的位置,查询结果一致。

全联结:左联结和右联结的组合。两个表中所有匹配的记录都将被返回,包括左表中部匹配右表的记录和右表中不匹配左表的记录。MYSQL不直接支持全联结,不常用。可以使用左联结、右联结加UNION实现该功能。

联结3个或更多表

1-检索funny man 用户发布的所有消息的ID、主题和论坛名



附:第一张表为users,第二张表为messages,第三张表为forums。先查找前2张表中符合条件u.username=’funny man’的所有记录,然后再将该虚拟表中forum_id所对应的forums名称再检索出来。

2-检索每位用户的用户名、消息ID、消息主题和论坛名



附:第一个左联结的左表是users,右表是messages。返回左表中所有检索的username,和username匹配的右表中的记录,形成一张虚拟表。第二个左联结的左表是虚拟表,右表是forums。返回虚拟表中所有的forum_id记录和forum_id匹配的论坛表中的记录,即name。由于虚拟表的forum_id不要求检索,故无需显示。

分组选定的结果

分组函数:

AVG():列出所有数值的平均值



COUNT():列出所有的值得个数



GROUP_CONCAT():列出所有分组的值



附:从结果中可以看出,若不进行分组,则只返回一组数据,若分组,则返回所有分组的记录。

MAX():列出所有值得最大值

MIN():列出所有值得最小值

SUM():列出所有值得合计值



AVG、COUNT、SUM可以使用DISTINCT关键字,使聚合只应用于不重复的值

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: