1. sql多表关联查询语句
1、首先就是创建几个没有任何关系的表,但是注意,你在将要作为外键表的表上必须使用与将要作为主键表的数据类型相同。
2、将能唯一标识的那一行设置为主键,其他表类似。
3、接下来添加关系。
4、拖动需要添加的关系。
5、可以使用SQL语句来写,CREATETABLESTUDENT()--创建学生信息表SnoCHAR(10)PRIMARYKEY,SnameCHAR(10)UNIQUE,SsexCHAR(2),SageSMALLINT,SdeptCHAR(10))。
2. sql 多表关联查询
题干的目的不是很明确啊,是怎么多个多表和并?是关联多个表查询,还是要从若干相似表里提取相似的字段?
一、如果是关联多个表查询
假如有4个表,分别是成绩表,学生表,学科表、教师表,各表字段分别是
成绩表:学生ID、学科ID、成绩
学科表:学科ID,学科名称,任课老师ID
学生表:学生ID,学生姓名
教师表:教师ID,教师姓名
现在要获取学生成绩信息和对应学科及老师信息,要求有学生姓名、学科名称、任课老师姓名、成绩,可以这么写语句:
select 学生表.学生姓名, 学科表.学科名称,教师表.教师名称,成绩表.成绩
from 成绩表
left join 学生表 on 成绩表.学生ID = 学生表.学生ID
left join 学科表 on 成绩表.学科ID = 学科表.学科ID
left join 教师表 on 学科表.教师ID = 教师表.教师ID
二、如果是要从若干相似表里提取相似的字段
假如要提出所有老师和学生的信息,要求有老师姓名、学生姓名、身份(老师或学生),
表结构仍然如上,写法如下:
select 老师姓名 as 姓名, '老师' as 身份 from 教师表
union
select 学生姓名 as 姓名, '学生' as 身份 from 学生表
3. 多表联合查询sql语句
1、Access 数据库多表联合查询,每次连接之前须将连接符前面的内容放在括号里面,示例如:select 表a.字段1,表b.字段1,表c.字段1,表d.字段1 from ((表a inner join 表b on 表a.字段=表b.字段) inner join 表c on 表c.字段=表a.字段)inner join 表d on 表a.字段=表d.字段2、如果每个联合字段不止一个可将on后面条件加(),如:select 表a.字段1,表b.字段1,表c.字段1,表d.字段1 from (表a inner join 表b on (表a.字段1=表b.字段1 and 表a.字段2=表b.字段2)) inner join 表c on 表c.字段=表a.字段3、如果要一次联合一个表多次,但条件不同,可以每次连接此表时给此表换个别名,用别名操作即可,如:select aa.字段1,表b.字段1,表c.字段1,bb.字段2 from ((表a as aa inner join 表b on aa.字段1=表b.字段) inner join 表c on 表c.字段=表a.字段)inner join 表a as bb on 表a.字段=bb.字段2.
4. Sql多表联查
在表的关联字段建立索引,使用视图,尽可能不要使用全连接或卡笛尔积,查询条件最能缩小范围的放在前面,例如身份证和性别,身份证比性别更能缩小查询范围,还有其他的什么exists之类的
5. sql数据库多表关联查询
用两个外键关联。
比如A,B,C三表进行关联,可以在C表中定义两个外键c1、c2,分别连接到A表和B表的主键a1、b2上,这样只要在查询的时候进行三表联合查询,连接语句为:where C.c1=A.a1 AND C.c2=B.b2; N表查询同上的道理,添加N-1个外键就可以。6. 数据库多表关联查询语句
比如,学生表,课程表,选课表,表s(sno,s_data),表c(cno,c_data),表sc(sno,cno,sc_data)例:3表连接查询(比如这是一个内连接:所有选课信息)selects.s_data,c.c_data,sc.sc_datafromsinnerjoinscons.sno=sc.snoinnerjoinconc.cno=sc.cno
7. sql关联多个表的语句
一、外连接
1.左连接 left join 或 left outer join
SQL语句:select * from student left join score on student.Num=score.Stu_id;
2.右连接 right join 或 right outer join
SQL语句:select * from student right join score on student.Num=score.Stu_id;
3.完全外连接 full join 或 full outer join
SQL语句:select * from student full join score on student.Num=score.Stu_id;
通过上面这三种方法就可以把不同的表连接到一起,变成一张大表,之后的查询操作就简单一些了。
而对于select * from student,score;则尽量不使用此语句,产生的结果过于繁琐。
二、内连接
join 或 inner join
SQL语句:select * from student inner join score on student.Num=score.Stu_id;
此时的语句就相当于:select * from student,score where student.ID=course.ID;
三、交叉连接
cross join,没有where指定查询条件的子句的交叉联接将产生两表的笛卡尔积。
SQL语句:select * from student cross join score;
8. sql多表内联查询
在sql语句中,具体是用外联还是内联,是由sql引擎自动选择优化的,一般我们在sql语句中不用指定。
如果真想知道它们的区别,一下讲不清楚,说了你印象也不深刻。
其实基本上,随便哪本sql书上都会详细的给你讲这个问题。
还是自己回去好好翻一下书吧。
9. sql 多表关联
select count(*) from 表1 where 列1 in (select 列1 from 表2 )
10. sql关联多个表
楼主使用的是子查询,子查询局限性较大,只能显示第一张表的字段。你可以这样写
SELECT * FROM biz.coursecomment a,so.sodetail b,so.somaster c
where a.sono=b.sono and b.sono=c.sono and c.TeacherNO='100199' and b.IsStudentComment='1' AND IsTeacherComment='1' and a.ToCustomerNO='100199'
这样写就避免了各种的子查询。当然,你还可以写成join的形式。join的层次更分明,代码如下:
SELECT * FROM biz.coursecomment a
join so.sodetail b
on a.sono=b.sono
join so.somaster c
on c.sono=b.sono
where c.TeacherNO='100199' and b.IsStudentComment='1' AND IsTeacherComment='1' and a.ToCustomerNO='100199'
如果不懂,可以追问
- 相关评论
- 我要评论
-