目录
SQL语言基础
1.sql语言的组成
2.创建语句
2.修改语句
3.删除语句
4.简单数据查询
5.复杂数据查询
6.数据插入
7.数据更新
8.数据删除
9.视图
数据库编程
1.T-SQL语言
2.存储过程
3.触发器
主要有命令(函数),字句,运算符,加总函数及通配符
(1)sql命令在意思上理解就是用户对数据库进行的一系列动作,这些动作包含建立,查询,增删,更新等等。其中还可以细分为数据定义语言,数据查询语言,数据操作语言,数据控制语言。数据定义语言可以用来建立新的数据库,数据表,字段及索引等,数据操作语言则用来新建查询表,筛选,排序,修改,增删等动作。
数据定义语言可以完成表,视图,索引,存储过程,用户和组的建立和撤销。其主要动词有create,alter和drop.
create:创建命令动词,创建数据库,创建表,创建视图等。
alter:修改已创建好的相关命令,如修改表结构,修改视图等。
drop:删除用create创建的相关命令,如删除表,删除视图等。
数据处理语言主要是完成数据的查询,增加,修改,删除和运算等功能。其主要动词有select
,update,insert,delete.
select:查询命令,可理解为从一堆数据中选择出自己所需要的数据。
insert:插入命令,将数据输入数据库中。
update:更行命令,相较于插入,更新命令范畴更大,不单单值数据数量的添加,更多的是对数据本身进行修改。
delete:删除命令,将符合条件的相关数据进行删除。
(2)子句
子句在sql语言中主要是来搭配上述的命令动作使用,(筛选)设定命令的操作对对象。
子句from用于指定数据表。
子句where可以理解为当的意思,主要用来设定条件。
子句group by中文意思为分组,通常是将所需的数据以分组的形式显示出来,由此达到一个更全面的视觉效果,当对数组后的数据进行条件设置时,需要用having子句搭配使用。
子句order by的中文意思为排序,将输出的数据进行排序显示。
(3)运算符
运算符分为逻辑运算符和比较运算符,附加在子句中,来是的条件的设置更为多样化。
1.逻辑运算符
and逻辑与:要同时符合左右两边的条件。
or逻辑或:表示左右两边条件满足一个即可。
not逻辑非:取反的意思。
2.比较运算符
<(小于),>(大于),=(等于),<>(不等于)。
3.between:理解为在.........之间,设置取值范围。
4..like:用于通配符中,理解为像的意思。
一般格式为:列名 like 匹配字符串
5.in:理解为在......之内,用于集合的设定。
(4)统计函数
用法有点类似于excel中的函数,主要通过现成的函数来进行一系列的基础运算。
count:统计个数
sum:计算和
avg:计算平均数
max:求最大值
min:求最小值
(5)通配符
sql语言中的通配符分为三类(%,_,[]),所谓的通配符就是当前urgent对所要设定的对象感到模糊时,可以通过通配符来匹配符合模糊设定条件的数据。
_:匹配任意一个字符
%:匹配0个或多个字符
[]:匹配[]中的任意一个字符,若里面多个字符是连续的,可用-表达
[^]:不匹配[^]中的任意一个字符
1.创建数据库
基本语法格式为:
create database database_name //指定数据库名
on(file子句) //指定数据库文件和文件属性
log on(file子句) //指定日志文件属性
一个完整的数据库文件是由一个主数据库文件,若干次要数据库文件和若干日志文件构成。其中,主数据库文件的扩展名为.mdf,次要数据库文件扩展名为.ndf,日志文件扩展名为.ldf
参数说明:
on:指定显式定义用来存储数据库数据部分的磁盘文件
n:占位符,表示可以为新数据库指定多个文件
log on:指定显式定义用来存储数据库日志的文件磁盘
primary:将创建数据库产生的数据文件放在主文件组里
size:指定义文件的大小
maxsize:指定定义的文件可以增长到的最大值
unlimited:指定定义的文件将增长到磁盘变满为止
filegrowth:指定定义的文件的增长量
2.创建数据表
基本语法格式为:
create table table_name
(列名 数据类型 列级完整性约束,列名 数据类型 列级完整性约束.....,表级完整性约束)
列级完整性约束条件:
null 和not null:空和非空约束
default:默认值约束
primary key:主键约束
unique:唯一性约束
check 逻辑表达式:表达式约束
表级完整性约束条件:
primary key:定义主键
foreign key:定义外键
check 逻辑表达式:表达式约束
1.修改数据库
基本语法格式为:
alter database database_name
add file|remove file|add log file|remove log file
(file子句)
2.修改数据表
基本语法格式为:
alter table table_name
alter 列名 新数据类型 //修改列定义
add 列名 数据类型<约束> //添加新列
drop 列名 //删除列
add constraint 约束名 约束定义 //添加约束
drop constraint 约束名 约束定义 //删除约束
1.删除数据库
基本语法格式为:
drop database database_name
2.删除数据表
基本语法格式为:
drop table table_name
需要注意的是,如果该表有外键引用,则需要先删除粗外键所在表
基本语法格式为:
select distinct|all 列名 from 表名
where 行选择条件
group by 分组依据列
having 组选择条件
order by 排序依据列
其中:
distinct|all:all表示显示表中所有满足条件的所有列,distinct表示去除重复列
where:用于指定行选择条件
group by 用于对检索到的记录进行分组
having:用于指定组的选择条件
order by:用于对查询的结果进行排序
注意:如要查询经过计算的列,直接在select子句的列名上进行计算,也就是说,列名的位置可用是多个包含列的计算的表达式
1.内连接
内连接是一种常用的连接方式,使用内连接时,如果两个表的相关字段满足连接条件,则从这两个表中提取数据并组成新记录
内连接主要有两种连接方式,连接操作是在where子句中执行的,连接称为thera连接,语法格式为:
select 列名 ... from 表名 ... where 连接条件
在连接条件中指明两个表按什么条件进行连接,连接条件中的比较运算符称为连接谓词,连接条件的一般格式为:
表名.列名 比较运算符 表名.列名
比较运算符包括=,>,<,<=,>=,!=,最常见的是=,称为等值连接
另一种连接方式为ANSI连接,连接是在join子句中执行的,语法格式为:
select 列名 ... from 表名 join 表名 on 连接条件 where 子句
2.外连接
在连接操作中,只有满足连接条件的元组才能作为结果输出,但有时也希望输出哪些不满足连接条件的元组的信息,比如查看全部课程的被选修情况,包括有学生选修和没有学生选修的课程。如果用内连接实现,则只能找到有学生选修的课程,因为内连接的结果首先是要满足连接条件sc.cno=course.cno.对于在course表中有单在sc表中没有的课程(没人选修的课),所以这种情况就需要使用外连接来实现
外连接是只限制一张表的数据必须要满足连接条件,而另一张表中的数据可以不满足连接条件,语法格式为:
from 表名 left|right join 表名 on 连接条件
left join称为左外连接,rigtht join称为右外连接。左外连接的含义是限制表2的数据必须满足连接调价你,而不管表1的数据是否满足连接条件,均输出表1的所有内容。右外连接相反,是限制表1中的数据必须满足连接条件,而表2中的数据均输出。
3.使用TOP限制结果集
在使用select语句进行查询时,有时只希望列出结果集中的前几个结果,而不是全部结果。例如,在显示学生成绩时,只显示前三名的学生姓名,这时就可以用top谓词来限制输出的结果
基本与语法格式为:
top n with ties
n表示显示前n个数据,with ties表示包括并列的结果
top谓词写在select单词的后边(如果有distinct的话,则在distinct之后),查询列表的前面
注意:使用top 谓词时最好与order by 子句一起使用,因为这样前几名才有意义。
4.嵌套查询
在sql语言中,一个select...from ...where语句称为一个语句块
如果一个select语句嵌套在一个select语句中,则称之为子查询。而包含子查询的语句称之为外层查询。一个子查询也可以写在另一个子查询中。为了和外层查询有所区别,总是把子查询写在括号中。和外层查询类似,一个子查询其本质也是一个完整的select语句。
1.使用子查询进行基于集合的测试
使用子查询进行基于集合的测试时,通过运算符in或not in,讲一个表达式的值与子句查询返回的结果进行比较,基本语法格式为:
select 列名 from 表名 where 表达式 not in|in (子查询语句)
2.使用子查询进行比较测试
使用子查询进行比较测试时,通过比较运算符将一个表达式的值与子查询返回的值进行比较
基本语法格式为:
select 列名 from 表名 where 表达式 比较运算符 (子查询语句)
3.使用子查询进行存在性测试
通常使用exists谓词,基本语法格式为:
where not exists|exists (子查询语句)
带exists谓词的子查询不返回查询的结果,只返回逻辑真或假
注意:对于否定条件的查询都应该用子查询来实现,而且应该将否定放在外层查询中
insert语句主要用于实现向数据表中添加新记录的操作,其语法格式为:
insert 表名 values(v1,v2,...) //v1,v2...表示对应列插入的值
其也可以根据需要指定插入数据的列
insert 表名(c1,c2...) values(v1,v2...) //c1,c2...表示列名,c和v一一对应
除了基本的数据查询操作,insert语句还可以与select语句相结合以实现数据表之间的复杂插入或复制,基本语法格式为:
insert 表名(c1,c2...)select c1,c2... from 表名 //select查询所得列的个数必须与Insert所需插入列的个数相同
update语句用于秀阿贵数据表中不符合要求的数据或者是错误的字段,其语法格式为:
update 表名 set 需要更新的列名=更新后的值 where 条件(即筛选需要更新的数据行)
如:
将“计算机系”系全体学生的成绩置零。
update sc set grade=0 from sc join student on sc.sno=student.sno where sdept='计算机系'
同样update也和insert一样,可以与select语句结合使用,基本语法格式为:
update 表名 set (c1,c2...)=(select语句) where 条件(即筛选出需要更新数据的行)
注意:select查询所得列的个数必须与update所需更新列的个数相同
delete语句用于从数据表或视图中删除行,其语法格式为:
delete from 表名 where 条件(即筛选出需要删除的行)
同样,dalete也和updat一样可以与select语句结合使用,语法格式为:
delete 表名 where 列名=(select语句)
视图是从一个或多个表中导出来的虚拟表,是一种不真正存在的虚拟表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中。视图的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变。
1.视图的创建
其基本代码格式为:
create view 视图名 视图列名 as (select c1,c2... from 表名 where 条件)(即相当于后面就是一个查询语句)
注意:如果没有指定视图的列,则视图的列名将使用与select语句中查询列名相同的名称
2.视图的修改
其基本代码格式为:
alter view 视图名 视图列名 as (select c1,c2... from 表名 where 条件)(即相当于后面就是一个查询语句)
3.视图的删除
基本代码格式为:
drop view 视图名
1.注释
单行注释:--
多行注释:/* */
2.常量
字符串常量要使用单引号括起来,若单引号的字符串中包含单引号,则里面的单引号要双写
3.变量
变量是指在程序运行过程中其值可以改变的量。变量的三要素:变量名,变量类型和变量值
全局变量由系统定义和维护,其名称前面有两个@@,而局部变量由用户定义和使用,其名称前面有一个@
局部变量可以用declare语句定义,其格式为:
declare @局部变量名 数据类型
局部变量被定义后期初始值为null,如果之后要给其赋值,可使用set 或select语句,基本语法格式为:
set @局部变量名=表达式
select @局部变量名=表达式
4.流程控制语句
包括if,while,case,基本与c语言一样,这里就不进行赘述了
需要注意的是:里面没有{},语句块用begin...end表示
存储过程其实可以理解为c语言里面的一个函数,创建好以后,还需要调用才能有效果
1.存储过程的创建及调用
创建基本语法格式为:
create proc 存储过程名 @形式参数 数据类型 [=默认值] [output] as sql语句(包括增删改查)
调用基本语法格式为:
exec 存储过程名 @形参=实参值 [@变量 output]
注意:output表示指定该参数为=返回参数
2.修改存储过程
基本语法格式为:
alter proc 存储过程名 @形式参数 数据类型 [=默认值] [output] as sql语句(包括增删改查)
3.删除存储过程
基本语法格式为:
drop proc 存储过程名
触发器是一种特殊的存储过程,当对数据表进行插入,修改或者删除时,触发器即可自动执行,不能不调用,也不可传递参数。
1.触发器创建
基本语法格式为:
create trigger 触发器名 on 表名 for|after|instead of insert|update|delete(即引发触发器的操作) as sql语句(即触发器被触发后会执行的操作)
for|after:使用此修饰的称为后触发型触发器,指定触发器只有在引发触发器的sql语句执行完成,并且所有的约束检查完成后,才执行此触发器
instead of:使用此修饰的称为前触发型触发器,与后触发型触发器刚好相反
注意:对于后触发型,可以在同一操作上建立多个触发器;对于前触发型,在同一种操作上只能建立一个触发器;当触发器运行后,系统会自动产生两张临时工作表:inserted表和deleted表。这两张表的结构同建立触发器的表的结构相同,而且只能用在触发器代码中。inserted表中保存了insert操作中新插入的数据和update操作中更新后的数据,deleted表中保存了delete操作中删除的数据和update操作中更新前的数据。当触发器执行完毕后,两张表会自动消失;后触型触发器可以进行回滚操作,rollback,即当操作不正确时,回到此触发器执行前数据库的状态
2.修改触发器
基本语法格式为:
alter trigger 触发器名 on 表名 for|after|instead of insert|update|delete(即引发触发器的操作) as sql语句(即触发器被触发后会执行的操作)
3.删除触发器
基本语法格式为:
drop trigger 触发器名
未经本人允许,请勿转载!!!