sql多对多
1. sql语句多对多查询
select * from book a join (select cid,count(1) as [count] from category group by cid) b where a.id=b.cid
2. SQL 多对多查询
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));
3. sql多对多关系的两表如何联合查询出所有的结果
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 将三个表按条件联接在一起。
(3)sql多对多扩展阅读
连接通常可以在select语句的from子句或where子句中建立,其语法格式为:
selectcolunm_name1,colunm_name2
fromtable_name1
leftjointable_name2
ontable_name1.colunmname=table_name2.colunmname其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接称为自连接, join_type 为连接类型,可以是left join 或者right join 或者inner join 。
on (join_condition)用来指连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。
4. SQL 多对多查询语句
/*选择全部课程的学生列表:
select B.student,A.num_class
from
(
select count(*) as num_class from class
) A left outer join
(
select count(*) as num_class,student from cs
group by student
) B on A.num_class = B.num_class
/* 报名多过5门课程的学生列表
select A.student,B.num_class as num_class
from
(
select student from student
) A left outer join
(
select count(*) as num_class,student from cs
group by student
) B on A.student = B.student
where num_class >5
5. sql 多对多查询
select *
from
(select id,sum(money) as mm from a表 group by id) aaa,
(select id,sum(money) as nn from b表 group by id) bbb
where aaa.id=bbb.id and aaa.mm=bbb.nn;
-----------------------------
说明:
先用语句,得到aaa,bbb两个临时表,里面是(ID,钱的求和);
然后叠加一个查询,从表aaa,表bbb中,用条件,筛选出需要的记录(ID相等,钱求和相等);mm,nn是我为了字段查看方便,设置的两个临时字段名。
-----------------------------
如果你是用workbench,语句正确执行要写成一行。
6. SQL的一对多,多对一,一对一,多对多什么意思
1、一对多:比如说一个班级有很多学生,可是这个班级只有一个班主任。在这个班级中随便找一个人,就会知道他们的班主任是谁;知道了这个班主任就会知道有哪几个学生。这里班主任和学生的关系就是一对多。
2、多对一:比如说一个班级有很多学生,可是这个班级只有一个班主任。在这个班级中随便找一个人,就会知道他们的班主任是谁;知道了这个班主任就会知道有哪几个学生。这里学生和班主任的关系就是多对一。
3、一对一:比如说一个班级有很多学生,他们分别有不同的学号。一个学生对应一个学号,一个学号对应一个学生;通过学号能找到学生,通过学生也能得到学号,不会重复。这里学生和学号的关系就是一对一。
4、多对多:比如说一个班级有很多学生,他们有语文课、数学课、英语课等很多课。一门课有很多人上,一个人上很多门课。这里学生和课程的关系就是多对多。
7. 求助在sql中多对多怎么建表
首先建立两个表分别对应两个实体然后建立第三张表作为中间表将之前建好的两个表的主键在中间表中做联合主键这样就将两张表的多对多关系联系起来了我举个例子一条微博可能属于多个话题一个话题中也包含多条微博--------------话题表------createtabletopic(topicidintprimarykey,keywordnvarchar2(50)notnull,topictypenvarchar2(50)notnullcheck(topictypein('生活','情感','娱乐','电影','电视','体坛','财经','科技','文化','媒体沙龙')),);-----、微博表——————createtableweibo(weiboidintprimarykey,userIDint,textnvarchar2(140)notnull,);---------、话题微博表createtabletopicWeibo(topicweiboidintprimarykey,weiboidintreferencesweibo(weiboid),topicidintreferencestopic(topicid));