mssql 两表合并sql语句

CREATE TABLE student(id nvarchar(10),name nvarchar(10),cno int)INSERT
student SELECT ‘1’,’xix’,1UNION ALL SELECT ‘2’,’cic’,2UNION ALL SELECT
‘3’,’ddi’,4GO

 

insert into destTb select id ,s.name as 姓名,c.cno as cno,c.name as 课程
FROM student as s FULL OUTER JOIN class as c ON s.cno=c.cno

–目标表destTb不存在 ,结果集作为tmp

所谓等值连接,是指表之间通过“等于”关系连接起来,产生一个临时表,

二、建立测试数据

   order  by  x.degree desc

id 姓名 课程号 课程名

(1)查询所有学生的sno,cname,degree列:

学生表: 课程表:

 3.外连接查询,<又分为:左外连接,右外连接,全外连接三种>(左连接和左外连接一样,右连接和右外连接一样,在mysql中不支持全连接,在oracle中左连接才有“(+)”
的形式   eg:select  *  a.name(+) = b.name  )

–如果目标表destTb已经存在

FROM student x,score y

‘1’, ‘xix’, 1 1,’ 语文”2′, ‘cic’, 2 2, ‘数学”3’, ‘ddi’, 4 3,’英语’

被联合查询结果集合中的重复行将只保留一行。

三、合并插入

还可以根据要求返回左侧或右侧数据集合中非匹配的数据或全部的数据.

将学生表、课程表合成一个新表 destTb:

(1)

一、问题


select id ,s.name as 姓名,c.cno as cno,c.name as 课程 FROM student as s
FULL OUTER JOIN class as c ON s.cno=c.cno

3、自然连接:

1 xix 1 语文2 cic 2数学3 ddi NULLNULLNULLNULL3英语

(dbo.kb.jc = 9) OR

CREATE TABLE class(cno int,name nvarchar(10))INSERT class SELECT
1,’语文’UNION ALL SELECT 2,’数学’UNION ALL SELECT 3,’英语’GO

  where  连接条件

select * into destTb from (select id ,s.name as 姓名,c.cno as
cno,c.name as 课程 FROM student as s FULL OUTER JOIN class as c ON
s.cno=c.cno) as tmp

ALL选项表示将所有行合并到结果集合中。不指定该项时,

id 姓名 课程号 课程号,课程名

联合查询时,查询结果的列标题为第一个查询语句的列标题。

dbo.kb.jc, 2 AS num, dbo.kb.zc,

FROM dbo.kb INNER JOIN

全部连接(FULL OUTER JOIN).

并列出这些表中与连接条件相匹配的数据行。

连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,

union all

dbo.kb.kcdm = dbo.kbk.kcdm

根据所使用的比较方式不同,内连接查询操作列出与连接条件匹配的数据行,

这些运算符包括>、>=、<=、<、!>、!<和<>。

 2.内连接查询,<又分为:自然连接,等值连接,不等值连接三种>

 

dbo.bj ON dbo.kb.bh = dbo.bj.bh INNER JOIN

因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,

但可以对这三种列进行间接连接。

然后对该临时表进行处理后生成最终结果。其查询结果中列出被连接表中的所有列,

SELECT y.cno,avg(y.degree) as “平均分”

  连接查询实际上是通过 各个 表之间共同列 的关联性
来查询数据的,它是关系数据库查询最主要的特征。

where (a.学号=b.学号)

语法:

内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING
条件)和

SELECT dbo.kb.xq, dbo.kbk.kcmc, dbo.kbk.lbdh, dbo.kbk.jsmc, dbo.kb.jse,
dbo.bj.bj,

(1)查询所有学生的sno,cno,rank列:

from score,grade

—复合连接

go

titles表中有6类图书,而publishers表中有8家出版社,

如果是在连接条件上匹配的元组,则另一个表返回相应值,否则另一个表返回空值。

即数据集中的每一行都要与另一表每一行组成一个新的行.

from student x,score

on 学生表.学号=成绩表.学号

from 学生表 INNER JOIN 成绩表

go

    一个表 自己 与 自己建立 连接 称为自连接或自身连接。

(dbo.kb.jc = 7) OR

UNION的语法格式为:

外连接语法:

  select 表1.字段名,表2.字段名,…

 

FROM pub_info AS p1 INNER JOIN pub_info AS p2

select
学生表.学号,学生表.姓名,学生表.班级代号,成绩表.课程代号,成绩表.课程成绩

交叉连接不使用任何连接条件来限制结果集合,将各表的记录以“笛卡尔”积的方式组合起来,

即 左外连接(LEFT OUTER JOIN);

例子:

select_statement

SELECT p1.pub_id?p2.pub_id?p1.pr_info

SELECT * FROM student a CROSS JOIN sclass ORDER BY a.sno

例如:

 

它使用比较运算符比较被连接列的列值。

例如:

select x.sno,x.sname,y.cno,y.degree from student x

select x.*,y.* from student x,score y where x.sno=y.sno

  内连接是最常用的一种连接方式,它只返回两个数据集合之间 匹配关系的
那些行。

数据库多表查询

INNER join sclass y on x.sno=y.sno where x.sclass=”95文秘1”

 

SELECT a.*,b.* FROM student as a right JOIN sclass as b

五。联合查询

ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

2、不等值连接:

   where x.cno=’101′ and x.degree>y.degree  and y.sno=’9505201′ and
y.cno=’101′

符合查询条件的数据行数。

where x.sno!=y.sno

注: 外连接强以使不满足条件的记录也出现在结果集中。

      查询选学“101”课程的成绩高于“9505201”号学生成绩的所有学生记录
并按成绩高低 排列

Select 字段名列表 from 表名 Left|Right|Full [Outer] join 表名 ON
连接条件

select 学生表.学号,学生表.姓名,成绩表.课程代号,成绩表.课程成绩

and (b.课程代号=c.课程代号)

例如:一表中有三条记录,另一表有4条记录,交叉连接后,结果集合将由12条记录组成.

交叉连接(CROSS JOIN)没有WHERE
子句,它返回被连接的两个表所有数据行的笛卡尔积,

go

where degree between low and upp order by rank

    例:

是分别使用两个数据源中的行以所有可能的方式进行组合,

select a.学号,a.姓名,b.课程代号,b.课程成绩,c.课程名称,d.教师代号

并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型

在结果表中包含第二个表中满足条件的所有记录。

四。交叉连接:

SELECT * FROM authors AS a INNER JOIN publishers AS p ON a.city=p.city

(2)查询“95033”班所选课程的平均分:

WHERE x.class=”95033” and x.sno=y.sno group by y.cno

select 学生表.学号,学生表.姓名,成绩表.课程代号,成绩表.课程成绩

无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,

from student x,score y

3。全外连接(FULL OUTER JOIN或FULL JOIN):

如果是在连接条件上匹配的记录,则第一个表返回相应值,否则第一个表返回空值。

例: