Sql Server 的链接,查询,添加

链接

自然链接

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

内链接

内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。
例如,检索 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 X
WHERE id <=(SELECT AVG(text)FROM B Y
WHERE 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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值