Sql Server 的链接,查询,添加

来源:互联网 发布:淘宝产品拍摄技巧 编辑:程序博客网 时间:2024/06/06 03:16

链接

自然链接

是一种特殊的等值连接,它要求两个关系进行比较的分量必须是相同的属性组,并且在结果集中将重复属性列去掉。

内链接

内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。
例如,检索 students和courses表中学生标识号相同的所有行。

外链接

外联接可以是左向外联接、右向外联接或完整外部联接

下面用实验来表示一下

1.首先建立一个用于试验的两个表A,B;
这里写图片描述

CREATE TABLE A(id INT NOT NULL PRIMARY KEY,name CHAR(30) NOT NULL,);CREATE TABLE B(id INT NOT NULL PRIMARY KEY,class INT NOT NULL,text INT NOT NULL);

2.添加一些内容
这里写图片描述

USE student;INSERT INTO dbo.A(id,name)VALUES(1,'Tom');INSERT INTO dbo.A(id,name)VALUES(2,'Jack');INSERT INTO dbo.A(id,name)VALUES(3,'Mary');INSERT INTO dbo.B(id,class,text)VALUES(1,'001',1);INSERT INTO dbo.B(id,class,text)VALUES(2,'002',2);INSERT INTO dbo.B(id,class,text)VALUES(3,'003',4);

下面就开始链接实验;
对照表
这里写图片描述
1) 内连接

SELECT A.*,B.* FROM A INNER JOIN B ON A.id=B.text;

结果是
内链接是将对应的元素都表达出来

2)左连接

SELECT A.*,B.* FROM A LEFT JOIN B ON A.id=B.text;这里写代码片

结果是
因为为是左外链接,所以B中所有内容都会表示出来

3) 右连接

SELECT A.*,B.* FROM A RIGHT JOIN B ON A.id=B.text;   

结果是
因为为是右外链接,所以B中所有内容都会表示出来

4) 完全连接

SELECT A.*,B.* FROM A FULL JOIN B ON A.id=B.text;

结果是
涉及到笛卡尔集的使用

备注:

1.在做链接时,如果不加限制赋,展现出来的时两个表的笛卡尔集;
2.当在SQL Server 上进行sql语句操作时,要注意,有些名词报错是因为同框上一条语句还也没有执行,所以建议逐条执行;

多表查询

复合条件链接,多表联合查询(注意对应关系)

SELECT A.*,B.* FROM A,B WHERE A.id=B.id;

注意两张表之间的对应关系

sql标准 in () 为 集合

SELECT A.*,B.* FROM A,B WHERE A.id=B.id AND A.id IN (1,3);

注意这里的 in 是集合,用括号里表示是集合的项

嵌套查询

工作方式是:先处理内查询,由内向外处理。
举例:

SELECT student.name,class.grade FROM student,class WHERE student.id=class.id AND grade=(SELECT MAX(grade) FROM class)//这是在查询成绩最好的学生的姓名和成绩
实例     不相关嵌套
SELECT A.name,B.text FROM A,B WHERE A.id=B.id AND text=(SELECT MAX(text) FROM B);

注意嵌套的时候要有承接值,和确保被嵌套的sql语句的完整性

小知识 AVG() 平均值 SUM() 总和值 MAX() 最大值 MIX() 最小值 COUNT() 返回被选行数 LAST() 返回所在域中最后一个记录的值
实例     多层嵌套

SELECT id,name FROM student WHERE Sno IN ******

SELECT * FROM A WHERE //3.第三步进行将选了这门课程的学生列出id IN(SELECT id FROM B WHERE//2.第二步,将课程id所对应的学生id传给最外层text = (SELECT id FROM C WHERE subject='physics')//1.第一步选出physics所对应的课程id)

这里写图片描述
注意
多层嵌套,如同递归,剥茧抽丝,利用多表嵌套查询,从而层层对应得到需要的答案,在使用时会有许多表中其他元素做干扰,要注意!!!

实例     相关子查询

复习:别名的使用

SELECT id,name FROM A XWHERE id <=(SELECT AVG(text)FROM B YWHERE Y.id=X.id);SELECT AVG(text)FROM B;

这里写图片描述

当我们把sql语句进行修改,去掉了联合查询,此时id=2

SELECT id,name FROM A WHERE id =(SELECT AVG(text)FROM B);

这里写图片描述

在进行相关子查询时,要注意使用表的联查,否则会导致查询范围出错。
同时注意查询思路,以及对应括号的数量。

带有ANY(SOME)或ALL谓词修饰,需要比较运算符
SELECT FROM student *********
EXISTS 子查询中存在谓词

插入数据

使用INSERT INTO 语句,语句有两种,

将所有的列全部列出

INSERT INTO  B(id,class,text)VALUES (1,001,1);/*当要插入的数据为字符型的时候,需要在数据上加单引号*/INSERT INTO A(id,name)VALUES(4,'Jack');INSERT INTO A(id,name)VALUES(5,'Mak');INSERT INTO A(id,name)VALUES(6,'Bob');

这里写图片描述

将所需添加的数据列出即可

INSERT INTO D(id,name)VALUES(1,'JARY');INSERT INTO D(id,age)VALUES(2,15);

1.要注意顺序问题,插入值与前方的列对应
2. 当列的规范性约束可以为空时,才能选择不添加
这里写图片描述

按照表的顺序将数据写入

当然在与表进行全部按顺序添加数据的时候,可以直接简便的写成

INSERT INTO D VALUES(3,'JARY',14);INSERT INTO D VALUES(4,'Tom',15);

这里写图片描述

总结 INSERT INTO
- 1.注意顺序
2.字符型要加单引号
3.当约束条件有 NOT NULL 就不能令其为空

2 0