`
SIHAIloveYAN
  • 浏览: 112595 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

sqlserver的基本介绍

 
阅读更多

1、概述

名词

笛卡尔积、主键、外键

数据完整性

·实体完整性:主属性不能为空值,例如选课表中学号和课程号不能为空

·参照完整性:表中的外键取值为空或参照表中的主键

·用户定义完整性:取值范围或非空限制,例如:性别(男女),年龄(0-130)

  

表连接

·自然连接:与等值连接(a.id=b.id)相比,连接后的表只有一列id,而不是两列(a.id和b.id)。

·半连接:与等值连接(a.id=b.id)相比,连接后的表只有A表的列,被B表“多次匹配”列会显示为一行。

·左外连接:left join

·右外连接:right join

·全外连接:full join

·全内连接:inner join

SQL语言的构成

·DDL语言:数据定义,定义基本表、视图、索引;

·DML语言:数据操纵,查询、增加、修改、删除

·DCL语言:权限

  

2、查询概述

查询包括:单表查询、连接查询、带有exists的相关子查询、集合操作四中。select...from常用语句执行过程

select… ⑤ 投影

from… ① table→内存

where… ② 选取元组

group… ③ 分组

having… ④ 选择分组

[{union|…} ⑥ 查徇结果的集 合运算

select… ] ①~⑤

order by… ⑦ 排序输出

3、单表查询

group by 只有出现在group by子句中的属性,才可出现在select子句中。

用order by子句对查询结果按照一个或多个列的值进行升/降排列输出,升序为ASC;降序为desc,空值将作为最大值排序

having 与 where的区别

·where 决定哪些元组被选择参加运算,作用于关系中的元组

·having 决定哪些分组符合要求,作用于分组

4、连接查询

连接查询包括:多表连接查询、单表连接查询(自连接)、外连接查询、嵌套查询4种

连接条件一

[表名1.] 列名1 比较运算符 [表名2.]列名2

连接条件二

[表名1.]列名1 between [表名2.]列名2 and [表名2.]列名3

连接条件中的列名称为连接字段,对应的连接字段应是可比的。

执行过程:采用表扫描的方法,在表1中找到第一个元组,然后从头开始扫描表2,查找到满足条件的元组即进行串接并存入结果表中;再继续扫描表2,依次类推,直到表2末尾。再从表1中取第二个元组,重复上述的操作,直到表1中的元组全部处理完毕。

4.1 单表连接(自连接)

用表别名把一个表定义为两个不同的表进行连接。

例:查找至少选修了2号和4号课程的学生的学号

select FIRST.sno

from SC as FIRST, SC as SECOND

where FIRST.Sno=SECOND.Sno and FIRST.cno='s2' and SECOND.cno='4'

4.2 外连接查询

外连接查询包括:Left join、right join、full join

4.3 嵌套查询

·在select … from … where语句结构的where子句中可嵌入一个select语句块

·其上层查询称为外层查询或父查询,其下层查询称为内层查询或子查询

·SQL语言允许使用多重嵌套查询

·在子查询中不允许使用order by子句

·嵌套查询的实现一般是从里到外,即先进行子查询,再把其结果用于父查询作为条件

4.3.1 返回单个值的子查询

例:求与“刘力”同一个系的学生名,年龄

方法一:

select Sname, Sage

from student

where Sdept = (select sdept from student where Sname = "刘力");

方法二:

select FIRST.Sname, FIRST.Sage

from Student FIRST, Student SECOND

where FIRST.Sdept = SECOND.Sdept AND SECOND.Sname = "刘力";

4.3.2 返回一组值的子查询

例:求选修“C6”课程且成绩超过90分的学生

方法一:

select * from

student

where sno IN (select sno from SC where Cno="C6" AND Grade>90);

方法二(连接查询 ):

select student.*

from student,SC

where Student.Sno=SC.Sno AND Cno="C6" AND Grade>90;

例:求比计算机系中某一学生年龄小的其他系的学生

方法一:

select *

from student

where

sdept!="CS" AND

sage < ANY (select Sage from Student where Sdept="CS");

方法二:

select *

from Student

where

Sdept!=’CS’ AND

Sage < (select MAX(Sage) from Student where Sdept="CS");

4.3.3 多重子查询

例:求D01部门中工资与国贸系中任意职工相同的职工姓名和工资

表结构:

Teacher(tno, tname, salary, dno)

Department(dno, dname)

查询语句:

select Tname,Salary

from Teacher

where

Dno = "D01" AND

salary IN(

select salary from teacher

where Dno =(select DNO from department where Dname="国贸")

);

例:求工资介于“张三”与“里司”两个之间的职工

select *

from teacher

where

Salary >= (select MIN(Salary) from teacher where Tname IN ("张三", "里司")) AND

Salary <= (select MAX(Salary) from teacher where Tname IN ("张三", "里司");

4.3.4 在from语句中使用子查询,对查询结果定义表名及列名

例:求平均成绩超过80分的学号及平均成绩

select Sno, avg_G

from (select Sno, avg(Grade) from SC group by Sno) AS RA(Sno, avg_G)

where avg_G > 80;

AS RA(Sno, avg_G),为查询作为定义表名(RA)和列名(Sno, avg_G)

5、带有exists的相关子查询

·不相关子查询:子查询的查询条件不依赖于父查询的称为不相关子查询。

·相关子查询:子查询的查询条件依赖于外层父查询的某个属性值的称为相关子查询,带exists 的子查询就是相关子查询

·exists表示存在量词,带有exists的子查询不返回任何记录的数据,只返回逻辑值“True” 或“False”

例:求所有选修了“C1”课程的学生名。

不相关子查询:

select Sname from student where sno IN ( select sno from SC where Cno = "C1" );

相关子查询

select Sname from student

where exists (select * from SC where student.sno=SC.sno AND Cno = "C1" );

相关子查询执行过程:先在外层查询中取student表的第一个元组(记录),用该记录的相关的属性值(在内层where子句中给定的)处理内层查 询,若外层的where子句返回‘TRUE’值,则此元组送入结果的表中。然后再取下一个元组;重复上述过程直到外层表的记录全部遍历一次为止。

·不关心子查询的具体内容,因此用 select *

·exists + 子查询用来判断该子查询是否返回元组

·当子查询的结果集非空时,exists 为“True”;当子查询的结果集为空时,exists为“False”。

·not exists :若子查询结果为空,返回“TRUE”值,否则返回“FALSE”

例:查询选修了所有课程的学生的姓名(续)

select Sname

from student

where not exists (

select *

from Course

where not exists (

select * from SC where

student.sno=SC.sno AND Course.Cno=SC.Cno

)

);

例:查询至少选修了S1所选的全部课程的学生名

select Sname

from student

where not exists(

select *

from SC SCX

where

SCX.sno="s1" AND

not exists (

select *

from SC SCY

where student.sno=SCY.sno AND SCX.Cno=SCY.Cno

)

);

6、SQL的集合操作

·属性个数必须一致、对应的类型必须一致

·属性名可以不一致, 最终结果集采用第一个结果的属性名

·缺省为自动去除重复元组,除非显式说明ALL

·order by放在整个语句的最后

6.1 “并”操作,例:查询计算机系的学生或者年龄不大于19岁的学生,并按年龄倒排序。

select * from student where Sdept="CS"

UNION

select * from student where AGE <= 19

order by AGE desc

6.2 “交”操作,例:查询计算机系的学生并且年龄不大于19岁的学生,并按年龄倒排序。

(select * from student where Sdept = "CS")

INTERSECT

(select * from student where AGE <= 19)

order by AGE desc

6.3 “差”操作,例:查询选修课程1但没有选修课程2的学生。

select Sname, Sdept

from student

where sno IN (

(select sno from SC where Cno="1")

EXCEPT

(select sno from SC where Cno="2")

)

7、插入操作

格式:insert into 表名[(列名1,…)] values (列值1,…)

插入一已知元组的全部列值

insert into student values("2003001", "陈冬", 18, "男", "电商", "管理学院", "徐州");

插入一已知元组的部分列值

insert into SC(Sno,Cno) values ("2003001", "C003");

插入子查询的结果

例:设关系S_G(Sno,avg_G),把平均成绩大于80的男生的学号及平均成绩存入S_G中

insert into S_G(sno,avg_G) (

select sno, avg(GRADE)

from SC

where Sno IN (select Sno from Student where SEX="男")

group by Sno

having avg(GRADE) > 80

);

8、删除操作

格式:

delete from 表名 [where 条件];

·只能对整个元组操作,不能只删除某些属性上的值

·只能对一个关系(表)起作用,若要从多个关系(表)中删除元组,则必须对每个关系分别执行删除命令

9、修改操作

update语句一次只能操作一个表。

格式1:

update 表名 [别名]

set 列名 = 表达式, ...

[where 条件];

格式2:

update 表名 [别名]

set (列名, ...) = (子查询)

[where 条件];

例:工种为SALESMEN的职工的工资改为工种平均工资的110%

update EMPLOYEE

set Salary = (select 1.1 * avg(Salary) from EMPLOYEE where JOB="SALESMEN")

where JOB="SALESMEN";

例:将所有学生的年龄增加1岁

update student set Sage=Sage+1;

10、数据定义

创建课程表

create table SC (

sno CHAR(6) not null,

Cno CHAR(6) not null,

Grade smallint default null

)

primary key (sno,Cno)

foreign key (sno) references student(sno)

foreign key (Cno) references Course(Cno)

check (Grade between 0 AND 100);

常用的索引:唯一索引和聚簇索引

唯一索引

·对于已含重复值的属性列不能建UNIQUE索引

·对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值。这相当于增加了一个UNIQUE约束

create UNIQUE INDEX Stusno ON Student(Sno ASC);

聚簇索引

建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放。也即聚簇索引的索引项顺序与表中记录的物理顺序一致

create CLUSTER INDEX Stusname ON Student(Sname);

在Student表的Sname(姓名)列上建立一个聚簇索引,而且Student表中的记录将按照Sname值的升序存放。Sql server中的表示方式create clustered index。某些DMBS不支持聚簇索引,所以用前一定要查使用说明。

·在一个基本表上最多只能建立一个聚簇索引

·聚簇索引的用途:对于某些类型的查询,可以提高查询效率

·聚簇索引的适用范围:很少对基表进行增删操作;很少对其中的变长列进行修改操作

删除索引

删除索引时,系统会从数据字典中删去有关该索引的描述。

DROP INDEX [表名.]<索引名>;

例:删除Student表的Stusname索引

DROP INDEX Student.Stusname;

11、视图

例:建立电商系学生的视图

create view ec_student

as

select sno, sname, age from student where dept="ec"

删除视图

DROP VIEW <视图名>

一个视图被删除后,由此视图导出的其他视图也将失效,用户应该使用DROP VIEW语句将他们一一删除

分享到:
评论

相关推荐

    数据库基础知识_SQLSERVER介绍和使用

    数据库基础知识_SQLSERVER介绍和使用

    SQL Server 基本语言

    关于SQL Server的基本介绍,操作命令

    SQLServer的简介和使用

    第一章 SQLServer 介绍 第二章 安装SQLServer 第三章 使用SQLServer工具 第四章 创建表 第五章 Transact-SQL 第六章 函数 第七章 数据分组和汇总 第八章 多表连接 第九章 子查询 第十章 更改数据 第十一章 关系型...

    SQL server 2000介绍

    sql server2000 简介用法基本代码增删改查基本用法

    SQL Server基本函数详细介绍.doc

    SQL Server基本函数详细介绍.doc

    SQL Server 2008宝典

    第2部分为SQLServer 2008的准备篇,介绍了SQL Server 2008的功能、特性、各版本的比较、安装方法、SQL Server 2008的服务、客户端的工具等;第3部分为SQL Server 2008的基本操作篇,介绍如何管理与配置SQL Server ...

    SQL Server 2005数据库简明教程PPT

    第2部分(第3~9章)是本书的重点,也是读者深入学习SQL Server 2005的基础,详细介绍了SQL Server 2005的安装和配置过程,如何创建和管理数据库、数据表,以及如何对数据进行查询、修改、输出等内容;第3部分(第10~14章)...

    SQL Server数据库技术大全

    《SQL Server数据库技术大全》分为四篇,共22章,从SQL Server的基本概念讲起,再进一步介绍SQL Server的安全特性和管理,然后从开发的角度讲解了数据库的设计、SQL Server的各种开发特性以及SQL Server 2008在开发...

    SQL Server 2008数据库设计与实现

    《SQL Server 2008数据库设计与实现》深入浅出地介绍了目前世界上最受欢迎的数据库管理系统之一——SQL Server。全书共分三个部分:第一部分阐释了数据库的基本概念,讲解了数据库建模语言;第二部分展示了从概念...

    SQL Server2000基本操作1

    SQL Server 2000企业版是一套完整的数据库设计和分析产品,可提供下一代可扩展电子商务、各种业务和数据仓库解决方案。本课程介绍编写基本的SQL查询语句所需的知识,以及利用SQL Server 2000进行数据库设计的知识。

    SQL Server数据库基本原理

    为初学者介绍sqlserver基本原理的好书。是入门关系数据库技术的不二选择。深入浅出的介绍了安装和配置、数据库的设计和管理、SQL 语言基础、创建索引、设计数据完整性、存储过程、触发器、安全性、数据库的备份和...

    SQL Server 2005应用开发技术与典型实例代码

    全书分为15章:第1章和第2章介绍SQL Server 2005的基本知识及管理和开发工具:第3章~8章介绍数据库开发、事务日志、数据表和关键字的创建,Transact-SQL、视图和索引的使用,存储过程和触发器;第9章和第10章介绍...

    SQL Server2000基本操作2

    SQL Server 2000企业版是一套完整的数据库设计和分析产品,可提供下一代可扩展电子商务、各种业务和数据仓库解决方案。本课程介绍编写基本的SQL查询语句所需的知识,以及利用SQL Server 2000进行数据库设计的知识。

    Visual C#+SQL Server数据库开发与实例光盘

    书第1,2章分别介绍了使用Visual C#和SQL Server开发数据库应用程序的基本知识,第3章~第10章,通过开发8个完整实用的数据库应用程序,系统全面地介绍了用Visual C#和SQL Server来进行数据库应用程序开发的各种技术...

    SQLSERVER基本语句整合

    SQL基本语句介绍 1.数据库查询 2.数据定义 3.数据操纵 4.数据控制

    Microsoft SQL Server 2005 Express Edition SP3

    SQL Server Express 可以根据协议重新进行发布,并可作为客户端数据库以及基本服务器数据库使用。SQL Server Express 是独立软件供应商 (ISV)、服务器用户、非专业开发人员、Web 应用程序开发人员、网站宿主以及...

    sql server学习课件

    介绍SQL Server2000 的安装、配置和基本内容进行介绍,要求能够完成MS SQL Server2000 企业版的安装

    Microsoft SQL Server企业级平台管理实践 徐海蔚 PDF ZIP.001

    本书的最大特点是面向实战,主要面向Microsoft SQL Server各个版本的数据库系统管理和开发人员,介绍SQL Server关系型数据库引擎在日常使用和开发过程中经常会遇到的问题、其表现形式、背后运行机理、基本理论知识、...

Global site tag (gtag.js) - Google Analytics