SQL 多对多查询

SQL 多对多查询,第1张

1、创建测试表,

create table test_task(taskID varchar2(20),taskName varchar2(200))

create table test_person(personID varchar2(20),personName varchar2(200))

create table test_task_person(taskID varchar2(20),personID varchar2(200))

2、插入测试数据;

insert into test_task values (101,'Task_101')

insert into test_task values (102,'Task_102')

insert into test_task values (103,'Task_103')

insert into test_person values (1001,'Person_1001')

insert into test_person values (1002,'Person_1002')

insert into test_person values (1003,'Person_1003')

insert into test_task_person values (101,1001)

insert into test_task_person values (101,1002)

insert into test_task_person values (102,1001)

insert into test_task_person values (102,1003)

insert into test_task_person values (103,1001)

insert into test_task_person values (103,1003)

commit

3、查询1,查询每个任务对应的担当者;select t.*, b.personName from test_task_person t, test_person b where t.personID = b.personID

4、查询2,查询每个人承担的任务;select t.*, b.taskName from test_task_person t, test_task b where t.taskID = b.taskID

1、语句如下:

Select project.*, [contract].* from project

Left join contract_project on project.projectId = contract_project.projectId

Left join [contract] on contract_project.contractId = [contract].contractId

注:contract在Sql server中是关键字,因此使用了中括号。

2、使用Left join

Left join是以左表为准的。换句话说,左表(project)的记录将会全部表示出来,而右表(contract_project)只会显示符合搜索条件的记录

(例子中为: project.projectId = contract_project.projectId)。对于contract表来说,contract_project表是它的左表。

此例以两个left join 将三个表按条件联接在一起。

扩展资料

连接通常可以在select语句的from子句或where子句中建立,其语法格式为:

select colunm_name1,colunm_name2

from table_name1

left join table_name2

on table_name1.colunmname=table_name2.colunmname

其中join_table指出参与连接 *** 作的表名,连接可以对同一个表 *** 作,也可以对多表 *** 作,对同一个表 *** 作的连接称为自连接, join_type 为连接类型,可以是left join 或者right join 或者inner join 。

on (join_condition)用来指连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。

参考资料:百度百科 left join

多对多:新建一个关系表,将两张表关系起来。关系表中是两张表的主键。

如:有多个学生,每个学生可以选修多门课程,每个课程可以被多个学生选修。

注意:多对多中,不能说在一个表中加个字段,cid是另一张表的主键,不能写两个数据。

扩展资料

一个好的表结构设计,可以减少一些不必要的表或字段等。数据表之间的关联关系分为三种:一对一、一对多、多对多。

1、一对一,是将数据表“垂直切分”,就是A表的一条记录对应B表的一条记录。

优点:

(1)便于管理、可提高一定的查询速度。

(2)减轻CPU的IO读写,提高存取效率。

(3)符合数据库设计的三大范式。

(4)符合关系性数据库的特性。

缺点:增加一定的复杂程度,程序中的读写难度加大。

2、一对多,就是A表的一条记录,对应B表的多条记录,且A的主键作为B表的外键。


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

原文地址: http://outofmemory.cn/sjk/9243962.html

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

发表评论

登录后才能评论

评论列表(0条)

保存