表连接Join

--表连接Join
--使用子查询
select StudentNo,StudentName,(select classname from Classes where ClassId=Student.ClassId) from Student
--使用from多表的方式
select Student.StudentNo,Student.StudentName,Classes.classname
from Student,Classes
where student.ClassId=classes.ClassId
order by Student.StudentNo
--表 inner/left/right join 表 on 如何建立关联
select Student.StudentNo,Student.StudentName,Classes.classname
from Student
--inner join:相当于from ..where,可以查询两个表建立关联字段值相等的记录 默认就是inner join
inner join Classes on Student.ClassId=Classes.ClassId

--查询学员的学号,姓名,班级名称,和考试成绩,科目名称
--建议:先确定你需要的字段来自于那一些表。。再来考虑这些表中如何建立关联
select Student.StudentNo,grade .classname,Student.StudentName,Result.StudentResult,Subject.SubjectName
from Student
--能够建立连接的表,能够做多表连接查询的表之间往往也可以建立主外键关系
inner join grade on Student.ClassId=grade .ClassId
inner join Result on Student.StudentNo=Result.StudentNo
inner join Subject on Result.SubjectId=Subject.SubjectId

--案例1:查询所有学生的姓名、年龄及所在班级
select Student.StudentName,DATEDIFF(yyyy,student.borndate,getdate()) age,Classes.classname
from Student
inner join Classes on Student.ClassId=Classes.ClassId

--案例2:查询年龄超过20岁的学生的姓名、年龄及所在班级
select Student.StudentName,DATEDIFF(yyyy,student.borndate,getdate()) age,Classes.classname
from Student
inner join Classes on Student.ClassId=Classes.ClassId
where DATEDIFF(yyyy,student.borndate,getdate())>20
--案例3:查询学生姓名、年龄、班级及成绩
select Student.StudentName,DATEDIFF(yyyy,student.borndate,getdate()) age,Classes.classname,Result.StudentResult
from Student
inner join Classes on Student.ClassId=Classes.ClassId
inner join Result on Student.StudentNo=Result.StudentNo

--left join:左连接
select * from PhoneNum
inner join PhoneType on PhoneNum.pTypeId=PhoneType.ptId
--使用左连接 左表:写在关键字前面的表就是左表 关键字后面的表就是右表 会得到左表的所有记录,如果建立关联的字段值在右表中没有存在,那么右表中的字段值就会以null值替代
select * from PhoneNum
left join PhoneType on PhoneNum.pTypeId=PhoneType.ptId
--右连接:会得到右表的所有记录,如果建立关联的字段值在左表中没有存在,那么左表中的字段值就会以null值替代
select * from PhoneNum
right join PhoneType on PhoneNum.pTypeId=PhoneType.ptId

--查询所有学生(参加及未参加考试的都算)及成绩
select * from Student
left join Result on Student.StudentNo=Result.StudentNo order by Student.StudentNo
--请查询出所有没有参加考试(在成绩表中不存在的学生)的学生的姓名。
select * from Student
left join Result on Student.StudentNo=Result.StudentNo
--判断右表的非空字段为null
where result.studentresult is null and Result.Id is null
order by Student.StudentNo

--练习1:查询所有英语及格的学生姓名、年龄及成绩
--1.使用表连接
select Student.StudentName,DATEDIFF(YYYY,Student.BornDate,GETDATE()),Result.StudentResult
from Student
inner join Result on Student.StudentNo=Result.StudentNo
inner join Subject on Result.SubjectId=Subject.SubjectId
where Result.StudentResult>=60 and Subject.SubjectName=‘office‘
--2.使用子查询
select Student.StudentName,DATEDIFF(YYYY,Student.BornDate,GETDATE()),Result.StudentResult
from Student
inner join Result on Student.StudentNo=Result.StudentNo
where StudentResult>=60 and SubjectId=(select SubjectId from Subject where SubjectName=‘office‘)
--练习2:查询所有参加考试的(english分数不为null)学生姓名、年龄及成绩
select Student.StudentName,DATEDIFF(YYYY,Student.BornDate,GETDATE()),Result.StudentResult
from Student
inner join Result on Student.StudentNo=Result.StudentNo
inner join Subject on Result.SubjectId=Subject.SubjectId
where Result.StudentResult is not null and Subject.SubjectName=‘office‘
--练习3:查询所有学生(参加和未参加考试)的学生姓名、年龄、成绩,如果没有参加考试显示缺考,如果小于60分显示不及格
select Student.StudentName,DATEDIFF(YYYY,Student.BornDate,GETDATE()),
case
when Result.StudentResult <60 then ‘不及格‘
when Result.StudentResult is null then ‘缺考‘
else cast(Result.StudentResult as CHAR(3)) --convert(目标类型,源数据)
end
from Student
left join Result on Student.StudentNo=Result.StudentNo
left join Subject on Result.SubjectId=Subject.SubjectId

select*from student
right join grade on grade .ClassId =Student .ClassId

时间: 2024-10-22 04:30:53

表连接Join的相关文章

Hadoop MapReduce例子-新版API多表连接Join之模仿订单配货

文章为作者原创,未经许可,禁止转载.    -Sun Yat-sen University 冯兴伟 一.    项目简介: 电子商务的发展以及电商平台的多样化,类似于京东和天猫这种拥有过亿用户的在线购物网站,每天要处理的订单数堪称海量,更别提最近的双十一购物节,如此海量的订单数据阿里巴巴和京东是如何准确将用户信息和其订单匹配并配货的呢?答案是数据连接匹配.我的云计算项目idea也是来源于此.我们在做数据分析时常要连接从不同的数据源中获取到的数据,单机模式下的关系型数据库中我们会遇到这问题,同样在

表连接join on

表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 a20050114 5 a20050115  表B记录如下: bID bName 1 2006032401 2 2006032402 3 2006032403 4 2006032404 8 2006032408  1)left join (左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录  sql语句如下: select * from A left join B on A.a

性能调优7:多表连接 - join

在产品环境中,往往存在着大量的表连接情景,不管是inner join.outer join.cross join和full join(逻辑连接符号),在内部都会转化为物理连接(Physical Join),SQL Server共有三种物理连接:Nested Loop(嵌套循环),Merge Join(合并连接)和Hash Join(哈希连接).这三个物理连接的处理方式不同,分别应用在不同的场景中. 在同一时刻,表连接只能是两表(或者是数据集,也就是表的一部分)之间的连接,通常按照表处于Join操

oracle 表连接 - hash join 哈希连接

一. hash 连接(哈希连接)原理 指的是两个表连接时, 先利用两表中记录较少的表在内存中建立 hash 表, 然后扫描记录较多的表并探測 hash 表, 找出与 hash 表相匹配的行来得到结果集的表连接方法. 哈希连接仅仅能用于等值连接条件(=). 如果以下的 sql 语句中表 T1 和 T2 的连接方式是哈希连接, T1 是驱动表 select * from T1, T2 where T1.id = T2.id and T1.name = 'David'; oracle 运行过程例如以下

oracle表连接之----〉嵌套循环(Nested Loops Join)

嵌套循环连接(Nested Loops Join)是一种两个表在做表连接时依靠两层嵌套循环(分别为外层循环和内存循环)来得到连接结果集的表连接方法.即外层循环对应的驱动结果集有多少条记录,遍历被驱动表的内层循环就要做多少次,这就是所谓的"嵌套循环"的含义. 对于嵌套循环连接的优缺点及适用场景如下: a,如果驱动表所对应的驱动结果集的记录数较少,同时在被驱动表的连接列上又存在唯一性索引(或者在被驱动表的连接列上存在选择性好的非唯一性索引),那么此时使用嵌套循环连接的执行效率就会非常高:但

SQLSERVER表连接(INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN,CROSS JOIN,CROSS APPLY,OUTER APPLY)

1 常用表连接(inner join,left join,right join,full join,cross join) if object_id(N'table1',N'U') is not null drop table table1 if object_id(N'table2',N'U') is not null drop table table2 create table table1(id int,name varchar(20)) insert into table1 select

深入理解Oracle表(3):三大表连接方式详解之Nested loop join和 Sort merge join

深入理解Oracle表(3):三大表连接方式详解之Nested loop join和 Sort merge join 分类: Oracle 基础管理 Oracle SQL 开发2013-01-28 00:33 2536人阅读 评论(1) 收藏 举报 关系数据库技术的精髓就是通过关系表进行规范化的数据存储       并通过各种表连接技术和各种类型的索引技术来进行信息的检索和处理       这里Think愿意和大家一起来学习分享Oracle的三大表连接技术              在早期版本,

mysql join表连接

1.表连接,就是将两个表合并起来,被合并的表的记录要通过中间字段,一一匹配起来左边的表的记录,形成一张临时的合并的表,并且每条记录的值都是两张表一一准确对应的 实例 尝试以下实例: [email protected]# mysql -u root -p password; Enter password:******* mysql> use RUNOOB; Database changed mysql> SELECT * FROM tcount_tbl; +-----------------+-

MySQL JOIN 多表连接

除了常用的两个表连接之外,SQL(MySQL) JOIN 语法还支持多表连接.多表连接基本语法如下: 1 ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON condition INNER|LEFT|RIGHTJOIN table3 ON condition ... JOIN 多表连接实现了从多个表中获取相关数据,下面是三个原始数据表: article 文章表: aid title content uid tid 1 文章1 文章1正文内容… 1 1