连接查询
值得注意的是:字段前必须加表名,以便混淆
1 -- 多表连接查询和子查询
2 select * from dbo.stu_info ,dbo.sname2
3 -- 加连接规则的查询 where
4 select * from dbo.stu_info ,dbo.sname2 where dbo.stu_info.sname= dbo.sname2.姓名
使用where前
使用where后
使用逻辑运算符 and
1 select dbo.stu_info.sno,dbo.stu_info.sname,dbo.stu_info.sex,dbo.stu_info.depart
2 ,dbo.sname2.score,dbo.sname2.姓名,dbo.sname2.sno
3 from dbo.stu_info,dbo.sname2
4 where dbo.stu_info.sname=‘张三‘
5 and dbo.stu_info.sno=dbo.sname2.sno
6 order by dbo.sname2.score desc
表别名简化语句
1 select A.sno,A.sname,A.sex,A.depart
2 ,B.score,B.姓名,B.sno
3 from dbo.stu_info as A,dbo.sname2 as B
4 where A.sname=‘张三‘
5 and A.sno=B.sno
6 order by B.score desc
多表连接查询
跟上面的相似,只是 from 后面多了n个表名 同时多了n-1 个 and 。。。
使用 inner join 连接查询
在where子句中表达式变的臃肿,为了变得清晰,让人理解,所以 ansi SQL 建议使用 inner join
进行多表连接
语法格式 :
select *
from 表名1
inner
join 表名2
on 连接规则1
inner
join 表名3
on 连接规则2
. . .
. . .
inner
join 表名n
on 连接规则n-1
举例 :
1 -- 使用 inner join
2 select * from dbo.stu_info as A
3 inner join dbo.sname2 as B
4 on A.sno=B.sno
5 where A.depart=‘心理学‘
6 order by B.score desc
/**/ 相比上面的 where + and 更简单
高级连接查询
// 这里只是粗略的概括下,来自 书本:《21 天学通SQL Server》 第11章
P226
1、自动连接查询
/**/
select 表名1.* from
表名1,表名2 where 表名1.字段=表名2.字段 and 表名2.字段=‘字段值’
2、内连接查询
等值连接
: 表名1.*=表名2.*
自然连接 :
select 后面不使用* ,而是字段名
不等值连接 : 由
>、>=、< 、<= 、<> 、between . . . 查询某些范围内的值
3、左外连接查询
语法
:select * from 表名1 left outer
join 表名2 on 表名1.字段=表名2.字段
4、右外连接查询
语法
:select * from 表名1 right outer
join 表名2 on 表名1.字段=表名2.字段
5、全外连接查询
语法
:select * from 表名1 full outer
join 表名2 on 表名1.字段=表名2.字段
6、交叉连接查询
语法
:select * from 表名1 cross
join 表名2