求mysql关联语句

求mysql关联语句,第1张

给你一个参考的例子, 你参照着,  创建一个 外键约束就可以了。

首先是测试的表结构与测试数据,  和你的例子一样, 是3列。

分别为: id,   父id,  数据

CREATE TABLE test_self (

  id    INT   NOT NULL,

  pid   INT,

  value   VARCHAR(10),

  PRIMARY KEY(id)  

)

INSERT INTO test_self VALUES(1, NULL,   '.NET')

INSERT INTO test_self VALUES(2, 1,      'C#')

INSERT INTO test_self VALUES(3, 1,      'J#')

INSERT INTO test_self VALUES(4, 1,      'ASP.NET')

INSERT INTO test_self VALUES(5, 1,      'VB.NET')

INSERT INTO test_self VALUES(6, NULL,   'J2EE')

INSERT INTO test_self VALUES(7, 6,      'EJB')

INSERT INTO test_self VALUES(8, 6,      'Servlet')

INSERT INTO test_self VALUES(9, 6,      'JSP')

INSERT INTO test_self VALUES(10, NULL,  'Database')

INSERT INTO test_self VALUES(11, 10,    'DB2')

INSERT INTO test_self VALUES(12, 10,    'MySQL')

INSERT INTO test_self VALUES(13, 10,    'Oracle')

INSERT INTO test_self VALUES(14, 10,    'SQL Server')

INSERT INTO test_self VALUES(15, 13,    'PL/SQL')

INSERT INTO test_self VALUES(16, 15,    'Function')

INSERT INTO test_self VALUES(17, 15,    'Procedure')

INSERT INTO test_self VALUES(18, 15,    'Package')

INSERT INTO test_self VALUES(19, 15,    'Cursor')

INSERT INTO test_self VALUES(20, 14,    'T-SQL')

下面是  创建  外键约束,  和  测试删除 父节点, 同时删除子节点的处理。

mysql> ALTER TABLE test_self

    ->   ADD CONSTRAINT fk_test_self

    ->     FOREIGN KEY (pid)  REFERENCES test_self(id) ON DELETE CASCADE

Query OK, 20 rows affected (0.05 sec)

Records: 20  Duplicates: 0  Warnings: 0

-- 测试 级联删除 层次为 1层的. (预期结果是 id=1,2,3,4,5 的被删除. )

mysql> DELETE FROM test_self WHERE ID = 1

Query OK, 1 row affected (0.07 sec)

-- 数据核对.

mysql> select * from test_self

+----+------+------------+

| id | pid  | value      |

+----+------+------------+

|  6 | NULL | J2EE       |

|  7 |    6 | EJB        |

|  8 |    6 | Servlet    |

|  9 |    6 | JSP        |

| 10 | NULL | Database   |

| 11 |   10 | DB2        |

| 12 |   10 | MySQL      |

| 13 |   10 | Oracle     |

| 14 |   10 | SQL Server |

| 15 |   13 | PL/SQL     |

| 16 |   15 | Function   |

| 17 |   15 | Procedure  |

| 18 |   15 | Package    |

| 19 |   15 | Cursor     |

| 20 |   14 | T-SQL      |

+----+------+------------+

15 rows in set (0.00 sec)

-- 测试 级联删除 层次为 多层的. (预期结果是 id=10 与 10以后 的被删除. )

mysql> DELETE FROM test_self WHERE ID = 10

Query OK, 1 row affected (0.01 sec)

mysql> select * from test_self

+----+------+---------+

| id | pid  | value   |

+----+------+---------+

|  6 | NULL | J2EE    |

|  7 |    6 | EJB     |

|  8 |    6 | Servlet |

|  9 |    6 | JSP     |

+----+------+---------+

4 rows in set (0.00 sec)

来自MySQL的学习笔记,写的不对的地方大家多多指教哦

什么是外键?

假设有 2 个表,分别是表 A 和表 B,它们通过一个公共字段“id”发生关联关系,我们把这个关联关系叫做 R。如果“id”在表 A 中是主键,那么,表 A 就是这个关系 R 中的主表。相应的,表 B 就是这个关系中的从表,表 B 中的“id”,就是表 B 用来引用表 A 中数据的,叫外键。所以,外键就是从表中用来引用主表中数据的那个公共字段。

语法结构:

在创建表时添加外键约束:

在修改表时定义外键约束:

例子1:创建表时添加外键约束

首先创建主表:importhead

创建从表:test_mysql.importdetails

查询外键约束的相关信息:

查询结果为:

例子2:修改表时定义外键约束

修改表时定义从表test_mysql.importdetails的外键约束

删除外键约束使用DROP,语法结构为:

例子:删除从表test_mysql.importdetails的外键约束

在 MySQL 中,有 2 种类型的连接,分别是内连接(INNER JOIN)和外连接(OUTER JOIN)。

在 MySQL 里面,关键字 JOIN、INNER JOIN、CROSS JOIN 的含义是一样的,都表示内连接。我们可以通过 JOIN 把两个表关联起来,来查询两个表中的数据。

例子:有一张销售表,如下图

有一张会员信息表,如下图:

通过内连接,查询会员的销售记录:

运行语句,结果如下:

根据上面的结果,其实可以得知:内连接查询到结果集为两个表的交集部分。

跟内连接只返回符合连接条件的记录不同的是,外连接还可以返回表中的所有记录,它包括两类,分别是左连接和右连接。

例子1:左外连接

如果需要查询所有销售记录,则可以使用左外连接

运行语句,结果为:

从上面的结果可以得知,LEFT JOIN左边的表会返回全部记录,而右边的表只返回符合连接条件的记录

例子2:右外连接:

运行语句,结果为:

从上面的结果可以得知,RIGHT JOIN右边的表会返回全部记录,而左边的表只返回符合连接条件的记录

方法和 *** 作步骤如下:

1、首先,创建一个测试表,如下图所示,然后进入下一步。

2、其次,插入测试数据,如下图所示,然后进入下一步。

3、接着,完成上述步骤后,查询表中的数据,“select t.* from test_tbl2 t ”,如下图所示,然后进入下一步。

4、最后,完成上述步骤后,编写sql,两个表通过pid与id关联, “select t1.*, t2.* from test_tbl1 t1 join test_tbl2 t2 on t1.p_id = t2.id”,如下图所示。这样,问题就解决了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6097534.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-14
下一篇 2023-03-14

发表评论

登录后才能评论

评论列表(0条)

保存