金沙棋牌app手机下载

当前位置:金沙棋牌 > 金沙棋牌app手机下载 > 关系型数据库表与表之间的三种关系,JOIN的技巧

关系型数据库表与表之间的三种关系,JOIN的技巧

来源:http://www.logblo.com 作者:金沙棋牌 时间:2019-11-29 12:40
  • 需求如题

创建视图Sql代码

查询两张表中相匹配的数据显示,不匹配的忽略
1、简单表连接
select * from 表1,表2
where 表1.字段=表2.字段
2、内链接
select * from 表1 inner join 表2
on 表1.字段=表2.字段
3、交叉链接
select * from 表1 cross join 表2
where 表1.字段=表2.字段

关系型数据库表与表之间的三种关系,数据库三种

取出数据库中某表的表头和内容,并显示该表的行数和列数

CREATE VIEW view_name AS SELECT t1.xxx, t2.xxx, t3.xxx FROM (table1 t1 INNER JOIN table2 t2 ON t1.fid = t2.fid) INNER JOIN table3 t3 ON t1.mid = t3.mid; 

=======================================================================================
简单表链接
why:
在实际开发过程中很多时候需要同时使用多个表中的数据
这时就需要使用表链接
表连接两个重要因素
1、指明需要连接的表
2、指明表间的关系
语法:
select 表1.字段,表2.字段 from 表1,表2
where 表关系 and 其他查询条件

一、一对一关系:

定义:有两个表,在第一个表中的某一行只与第二个表中的一行相关,同时第二个表中的某一行,也只与第一个表中的一行相关,我们称这两个表为一对一关系。 例如: 第一张表:

ID

姓名

国籍

贡献

1001

王大锤

中国

万万没想到

1002

吉泽明步

日本

动作艺术片

1003

刀锋女王

未知

计划生育

第二张表:

ID

出生日期

逝世日期

1001

1988

NULL

1002

1984

NULL

1003

未知

3XXX

这里的第一张表的每一行只与第二张表的一行相对应。 提示:一对一关系是比较少见的关系类型。但在某些情况下,还是会需要使用这种类型。 情况一:一个表包含了太多的数据列 情况二:将数据分离到不同的表,划分不同的安全级别。 情况三:将常用数据列抽取出来组成一个表   二、一对多关系: 定义:有多张表,第一个表中的行可以与第二个表中的一到多个行相关联,但是第二个表中的一行只能与第一个表中的一行相关联。 例如: 第一张表:

ID

姓名

国籍

 

1001

王大锤

中国

 

1002

吉泽明步

日本

 

1003

刀锋女王

未知

 

第二张表:

ID

节目ID

1001

10001

1001

10002

1003

10003

1003

10004

第三张表:

节目ID

节目名称

10001

万万没想到

10002

报告老板

10003

星际2

10004

英雄联盟

这里的第一张表的一行可以与第二张表的多行相对应;第二张表的一行与第三张表的一行相对应。 提示:一对多关系是最常见的关系类型。   三、多对多关系: 定义:有两个表,第一个表的一行可以与第二个表中的一到多个行相关联,同时,第二个表中的一行可以与第一个表中的一到多个行相关联。 例如: 第一张表:

ID

姓名

国籍

 

1001

王大锤

中国

 

1002

吉泽明步

日本

 

1003

刀锋女王

未知

 

第二张表:

ID

节目ID

1001

10001

1001

10002

1003

10003

1003

10004

第三张表:

节目ID

节目名称

10001

万万没想到

10002

报告老板

10003

星际2

10004

英雄联盟

在第一张与第三张表之间,一个人可以参加多个节目,一个节目也可以有多个人参加。例如王大锤参加了《万万没想到》和《报告老板》。而《万万没想到》中有王大锤和吉泽明步。这种是多对多的关系。

一、一对一关系: 定义:有两个表,在第一个表中的某一行只与第二个表中的一行相关...

 1 <?php
 2     //显示表内容的函数
 3     function showTable($tableName){
 4         //连接数据库
 5         $mysqli=new MySQLi("localhost","root","root","test");
 6         if(mysqli_connect_error()){
 7             die(mysqli_connect_error());
 8         }
 9         //设置字符集
10         $mysqli->query("set names utf8");
11         //sql查询语句
12         $sql="select * from $tableName";
13         //执行sql语句
14         $res=$mysqli->query($sql);
15         //取结果集中的行数
16         $rows=$res->num_rows;
17         //取结果集中的列数
18         $colums=$res->field_count;
19         echo "该表有 $rows 行 $colums 列";
20         //输出表头
21         echo "<table border=1 cellspacing=0 cellpadding=3><tr>";
22         while($field=$res->fetch_field()){
23             echo "<th>{$field->name}</th>";
24         }
25         echo "</tr>";
26         //输出表的内容
27         while($row=$res->fetch_row()){
28             echo "<tr>";
29             for($i=0;$i<$colums;$i++){
30                 echo "<td>$row[$i]</td>";
31             }
32             echo "</tr>";
33         }
34         echo "</table>";
35         //释放结果集
36         $res->free_result();
37         //关闭连接
38         $mysqli->close();
39     }
40     showTable("user1");
41 ?>

这里使用了3表关联,对于多表关联的 INNER JOIN 写法有一个技巧

外链接
特点:
外连接就是在满足表连接关系的情况下不但可以查找出匹配的数据,
而且还可以包含左表,右表或是两表中的所有的数据行
分类:
左外连接
语法:
SELECT * FROM 表1 LEFT [OUTER] JOIN 表2 ON 表1.字段=表2.字段
特点:
以左表为基础将右表中相匹配的数据显示出来,不匹配的数据显示为null
注:左表是from后面的,右表是on前面的
右外连接
语法:
SELECT * FROM 表1 right [OUTER] JOIN 表2 ON 表1.字段=表2.字段
特点:
以右表为基础将左表中相匹配的数据显示出来,不匹配的数据显示为null
注:左表是from后面的,右表是on前面的
全外连接
语法:
SELECT * FROM 表1 full [OUTER] JOIN 表2 ON 表1.字段=表2.字段
特点:
将两张表数据全部列出,匹配的显示,不匹配的为null在显示
注:左表是from后面的,右表是on前面的
自联结
使用场合:自联接通常在具有上下层级关系的一张表中的数据查询中应用
语法:
select * from 表1 b1,表1 b2
where b1.字段1=b2.字段2

结果如下:

  1. 先写最简单的2表关联 INNER JOIN2. 然后使用 () 从 FROM 之后到语句结尾全部扩起来3. 在语句结尾开始连接与下一个表的 INNER JOIN

图片 1

记住这个原则,未来进行4表关联,5表关联就都不是什么难事了删除视图复制代码 代码如下:DROP VIEW view_name

 

以下是其它网友的补充:

多表联接是十分有用的技术,因为某 些情况下,我们需要跨越多个表查询数据。

语法格式:FROM (((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号) INNER JOIN 表X ON Member.字段号=表X.字段号,只要套用该格式就可以了。

注意事项:在输入字母过程中,一定要用英文半角标点符号,单词之间留一半角空格;在建立数据表时,如果一个表与多个表联接,那么这一个表中的字段必须是“数字”数据类型,而多个表中的相同字段必须是主键,而且是“自动编号”数 据类型。否则,很难联接成功。代码嵌套快速方法:如,想连接五个表,则只要在连接四个表的代码上加一个前后括号(前括号加在FROM的后面,后括号加在代码的末尾即可),然后 在后括号后面继续添加“INNER JOIN 表名X ON 表1.字段号=表X.字段号”代码即可,这样就可以无限联接数据表了。

连接两个数据表的用法:FROM 表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号

连接三个数据表的用法:FROM (表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号

连接四个数据表的用法:FROM ((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号

连接五个数据表的用法:FROM (((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号) INNER JOIN 表5 ON Member.字段号=表5.字段号

本文由金沙棋牌发布于金沙棋牌app手机下载,转载请注明出处:关系型数据库表与表之间的三种关系,JOIN的技巧

关键词:

上一篇:没有了

下一篇:没有了