经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MySQL » 查看文章
MySQL与PHP的基础与应用专题之自连接
来源:jb51  时间:2022/2/22 15:52:30  对本文有异议

概述

从今天开始, 小白我将带领大家一起来补充一下 数据库的知识.

自连接

自连接 (Self Join) 是一种特殊的表连接. 自连接指相互连接的表在物理上同为一张表, 但是逻辑上是多张表. 自连接通常用于表中的数据有层次结构, 如区域表, 菜单表, 商品分类表等.

格式:

SELECT A.列名, B.列名 FROM 表A, 表B WHERE A.列名 = B.列名

数据:

例子: (过滤城市)

  1. <?php
  2.  
  3. $conn = mysqli_connect("localhost", "root","admin","study");
  4.  
  5. if ($conn) {
  6. echo "数据库链接成功\n";
  7. } else {
  8. echo mysqli_connect_error();
  9. }
  10.  
  11. # SQL语句
  12. $SQL = "SELECT * FROM location WHERE pid <> 0";
  13.  
  14. # 执行
  15. $result = mysqli_query($conn, $SQL);
  16.  
  17. # 查看是否执行成功
  18. if ($result) {
  19. echo "SQL 语句执行成功!\n";
  20. }else {
  21. echo mysqli_error($conn);
  22. }
  23.  
  24. # 调试输出
  25. while ($line = mysqli_fetch_assoc($result)) {
  26. print_r($line);
  27. }
  28.  
  29. # 关闭连接
  30. mysqli_close($conn);
  31.  
  32. ?>

输出结果:

数据库链接成功
SQL 语句执行成功!
Array
(
[id] => 2
[pid] => 1
[location] => 杭州
)
Array
(
[id] => 3
[pid] => 1
[location] => 萧山
)
Array
(
[id] => 5
[pid] => 2
[location] => 广州
)
Array
(
[id] => 6
[pid] => 2
[location] => 台山
)

子查询 in

子查询又称为内部查询或嵌套查询. 它允许我们在 WHERE 子句中过滤某个字段的多个值.

格式:

SELECT 列名 FROM 表名
WHERE 列名 IN ( SELECT 列名 FROM 表名 [条件])

数据 (table1):

数据 (table2):

例子:

  1. <?php
  2.  
  3. $conn = mysqli_connect("localhost", "root","admin","study");
  4.  
  5. if ($conn) {
  6. echo "数据库链接成功\n";
  7. } else {
  8. echo mysqli_connect_error();
  9. }
  10.  
  11. # SQL语句
  12. $SQL = "SELECT table1.* FROM table1
  13. WHERE table1.name in (SELECT table2.name FROM table2)";
  14.  
  15. # 执行
  16. $result = mysqli_query($conn, $SQL);
  17.  
  18. # 查看是否执行成功
  19. if ($result) {
  20. echo "SQL 语句执行成功!\n";
  21. }else {
  22. echo mysqli_error($conn);
  23. }
  24.  
  25. # 调试输出
  26. while ($line = mysqli_fetch_assoc($result)) {
  27. print_r($line);
  28. }
  29.  
  30. # 关闭连接
  31. mysqli_close($conn);
  32.  
  33. ?>

输出结果:

数据库链接成功
SQL 语句执行成功!
Array
(
[id] => 1
[name] => 杨富贵
[age] => 18
)
Array
(
[id] => 2
[name] => 杨美丽
[age] => 19
)
Array
(
[id] => 3
[name] => 杨建国
[age] => 20
)

子查询 EXISTS

EXISTS 是子查询中用于测试内部查询是否返回任何行的布尔运算符.

格式:

SELECT 列名 FROM 表名
WHERE EXISTS

例子:

  1. <?php
  2.  
  3. $conn = mysqli_connect("localhost", "root","admin","study");
  4.  
  5. if ($conn) {
  6. echo "数据库链接成功\n";
  7. } else {
  8. echo mysqli_connect_error();
  9. }
  10.  
  11. # SQL语句
  12. $SQL = "SELECT table1.* FROM table1
  13. WHERE EXISTS
  14. (SELECT table2.name FROM table2 WHERE table1.name = table2.name)";
  15.  
  16. # 执行
  17. $result = mysqli_query($conn, $SQL);
  18.  
  19. # 查看是否执行成功
  20. if ($result) {
  21. echo "SQL 语句执行成功!\n";
  22. }else {
  23. echo mysqli_error($conn);
  24. }
  25.  
  26. # 调试输出
  27. while ($line = mysqli_fetch_assoc($result)) {
  28. print_r($line);
  29. }
  30.  
  31. # 关闭连接
  32. mysqli_close($conn);
  33.  
  34. ?>

输出结果:

数据库链接成功
SQL 语句执行成功!
Array
(
[id] => 1
[name] => 杨富贵
[age] => 18
)
Array
(
[id] => 2
[name] => 杨美丽
[age] => 19
)
Array
(
[id] => 3
[name] => 杨建国
[age] => 20
)

到此这篇关于MySQL与PHP的基础与应用专题之自连接的文章就介绍到这了,更多相关MySQL 自连接内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号