admin 管理员组文章数量: 1086019
2024年4月17日发(作者:format和)
SQL:结构化查询语言,是国际化标准组织采纳的标准数据库语言
作用:数据库管理员可以用利用次语言操作数据库系统,即:SQL是一种能够被数据库系统
读懂的操作语言。
T—SQL是微软公司针对SQL Server这种关系数据库所定义的一种SQL语言,用户可以完成
Server数据库中的所有操作。
SQL的分类:
(1):数据定义语言,DDL
用来创建数据库和数据库中的各种对象
数据库中的对象包括:表、视图、索引、存储过程、触发器
DDL常用的命令包括:create、alter、drop
(2):数据操纵语言,DML
可以完成对数据库中数据的查询、更新、删除、插入的功能
DML常用的命令包括:select、update、delete、insert
(3)数据控制语言,DCL
DCL常用的命令包括:grant、revoke、deny
(4)数据类型
1、数字数据类型
a、整型数据类型:bigint、int、smallint、tinyint
b、浮点数据类型:float、real
c、固定精度数据类型:decimal、numeric
d、货币数据类型:money、smallmoney
将数据格式转换成字符串方法:STR(ID);---ID为数据类型,STR(ID)为字符串
2、字符数据类型:varchar、char、text、nchar、nvarchar、ntext
区别char和varchar数据类型:
char数据类型是存放固定长度的字符
Varchar数据类型是存放动态长度的字符
char(14),实际放入到数据库的字符长度为14个字符,如果实际存储的长度小于定义的
长度,那么数据库会在次字符串后面加上3个空格
1、insert 语句:
insert语句是属于SQL语言中的DML
作用:为表插入数据
你向一个表中插入一条新记录,但有一个字段没有提供数据。在这种情况下,有下面的
四种可能:
1、如果该字段有一个缺省值(默认值),该值会被使用。
2、如果该字段可以接受空值,而且没有缺省值,则会被插入空值。
3、如果该字段不能接受空值,而且没有缺省值,就会出现错误。你会收到错误信息:
The column in table mytable may not be null.
4、如果该字段是一个标识字段,那么它会自动产生一个新值。当你向一个有标识字段的表
中插入新记录时,只要忽略该字段,标识字段会给自己赋一个新值。
使用INSERT语句可向文本型字段中插入数据。但是,如果你需要输入很长的字符串,
你应该使用WRITETEXT语句。
语法:insert into 表名(列名1,列名2,…..) values(值1,值2,….)
注意:(列名1,列名2,…..)可以不写,这样的话,插入的values(值1,值2,….)中的值必
须包含表中的所有列,不然会报错。
把INSERT 语句与SELECT 语句结合起来,可以添加多个记录。像这样:
代码:INSERT mytable (first_column,second_column)
SELECT another_first,another_second
FROM anothertable WHERE another_first=’Copy Me!’
这个语句从anothertable拷贝记录到mytable.只有表anothertable中字段
another_first的值为’Copy Me!’的记录才被拷贝。
2、update 语句它也是属于SQL语句中的DML, 可以修改表的数据,使用WHERE子句来选
择更新特定的记录。
需要更新很长的字符串,应使用UPDATETEXT语句。如果你不提供WHERE子句,表中的
所有记录都将被更新。
语法:update 表名 set 列名1=值1,列名2=值2,……..[where 条件….]
update student set sage=20 where sno=’s014’----修改一列
update student set sage=20,set ssex=’女’ where sno=’s014’
----修改多列逗号隔开
3、delete语句也是属于SQL语句中的DML
作用:可删除表中的一行或多行,在SQL SELECT 语句中可以使用的任何条件都可以在DELECT
语句的WHERE子句 中使用。删除应该表中的所有记录,应使用TRUNCATE TABLE语句。
语法:delete from 表名[where 条件….]
delete from student----删除表student中所有数据
delete from student where sno = ‘s014’----删除表student中编号是014
的一行
delete from student where sno >= ‘s013’ --删除表student中编号大于等于
013的行
4、建立索引
Create INDEX index_name ON table_name (column_name)
说明:对某个表格建立索引后,数据库会对相应列进行自然排序,以增加查询时的速度。
4、基本查询技术:
数据库中提供一种可以将表中的数据查询出来的技术,称为select查询
select查询技术的基本语法格式
select [列名1,列名2,…..] | from 表名1,表名2
[where 条件]
[group by分组的列名]
[having聚合函数比较操作]
[order by 排序的列名]
(1) 查询语句中的“*”号代表将表中的列全部显示出来
select * from student
(2) 如果只想在查询中显示某一列用:
select sno sname sage from student
注意:“*”和列名只能够二选一,不能够同时出现
(3) 在查询的时候可以为表或者列定义别名
A:为列定义别名
select sno as 学号 ,sname as 姓名 from student
或:select ‘学号’=sno, ‘姓名’=sname from student
B:为表定义别名
select sno sname sage ssex from student a
好处:当出现多张表联系起来作查询的时候,如果多张表中含有相同的列名的时候,为
表定义别名使得查询比较方便
例如:想查询课程是由哪些老师就是讲授的。
从课程course表和老师teacher表中查找车tno列相同的数据
select cname, tname, from course a , teacher b
where =
(4)distinct 关键字
此关键字是为了去掉列中重复的值, 对于所有重复的数据行在SELECT返回的结果集合
中只保留一行。
select distinct sno from sc
(5)order by 排序(默认升序)
语法:order by 列名[desc | asc]
desc:代表降序排列
asc 代表升序排列
select *from student order by sname
如果不写排序关键字,默认的是升序
select *from student order by sname desc
(6)where关键字使用
Where作为查询筛选结果的一个过程(非常重要)
语法:where 条件1[or | and] [条件2]…
条件1可以包括以下内容:
Where 列名1
(7)top n限制返回的行数
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT
时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
例如:
代码:SELECT TOP 2 * FROM `testtable`
代码:SELECT TOP 20 PERCENT * FROM `testtable`
条件表达式分类:
1、 比较条件:
(>:大于 <:小于 >=:大于等于 =<:小于等于 <>:不等于 =:登于)
例如:找学生年龄大于23岁的同学信息
select *from student where sage>23
2、 逻辑条件
(and:与运算 or:或运算 not:非)
逻辑操作的用法:
Where 条件1
例如:查找课程编号大于’c002’的课程由哪些老师讲授
sSelect *from teacher ,course where = and >
‘c002’
例如:查找选修了课程’c002’,或者成绩大于70的学生有哪些
select sname , sage , cno ,score from student a , sc b
where = and (cno=’c002’ or score>70)
例如:not关键字的使用:
select *from sc where score not between 70 and 80
3、 in关键字
它是要求查询的结果在某几个值里面
select *from sc where score not in(70,90,80)
select *from course where cno in (‘c001’,’c002’,’c005’)
in还可以应用到子查询中
select *from sc where sno
in (select sno from student where sno >= ‘s002’)
4、 like关键字
like是作为SQL模糊查询比较常用的一个技术,在like关键字使用中提出两
个比较特殊的符号
%:0个或多个任意字符
_:任意一个字符
例如:a、查找学生表中姓“陈”的同学
select * from student where sname like ‘陈%’
b、查询学生表中名字是三个字的学生信息
select * from student where sname like ‘___’ ----‘内三下
杠’
思考题:如果一个列中的内容含有下划线,要去用like来查找含有下划
线的信息,该怎么做?
在SQL模糊查询中提供了一个escape(逃离、躲避、转移)关键字,它作
为转义符使用
select *from student where sname like ‘%$_%’ escape ‘$’
“$”是定义的转移符号,那么在$符号后面的下划线不再是like中的特殊符
号,而是一个普通字符
5、 all关键字
6、 any关键字
7、 between…and 关键字
5、聚合函数:只能对表中的数字类型进行计算,其他类型报错
max、min、count、avg、sum
max函数使用:select max(sage) from student----求学生表中最大的年龄
min函数使用:select min(sage) from student-----求学生表中最小的年龄
count函数使用:
select count (*)from student
select count (sno)from student
count(*):可以计算包含null列的记录数
count(列名):记录总记录数的时候,不去计算null值
avg函数的使用:select avg(sage) from student-----求学生表中的平均年龄
sum函数的使用:select sum(sage) from student-----求学生表中的年龄和
6、group by子句,它是一个分组函数,可以对某一列相同的值进行分组并求出相应的结
果。
语法:
Select 列名1 [,列名2….] from 表名 group by 列名1[,列名2…]
例如:求学生表中男女生的总数
Select ssex ,count(ssex) from student group by ssex
例如:求不同老师总共讲授的课程的总数
A. 两张表的查询teacher,course
B. 对不同的老师进行一个分组
C. 分组后求课程的总数
Select , tname , count(cno) from teacher t , course c
where = group by , tname
groyp by 执行原理、注意事项:
a. 先根据group by 后的列名进行分组
b. 然后根据count(列名)中的列名进行统计
c. group by子句经常和聚合函数一起使用
d. 在使用group by的时候,如果查询的列没有包含在聚合函数中,那么该列一定要出现
在group by子句后面
7、 having子句使用
having子句的作用非常重要,它是对聚合函数的值可以进行比较的操作。Having
必须放在group by 子句的后面。
例如:查询讲两门课以上的老师信息
Select , tname , count(cno) from teacher t , course c
Where = group by , having count(cno) >=2
创建表的语法
creat table 表名(
列名_1 数据类型 约束条件
列名_2 数据类型 约束条件
……………………
)
注意:如果定义的表中有多个列,那么需要以英文逗号”,”隔开;
表名和列名不能是SQL语言中的关键字
Numeric(p,n)
P代表数字类型的精度,插入数据的的最大长度。整数位多了会报错
n代表小数点后面的位数。小数后的位数长度超过n为会四舍五入
creat table A_2(
a_no numeric(5,2) //最大长度为5位,小数点后为两位,
)
insert into A_2 (a_no) values (789.298) //789.30
insert into A_2 (a_no) values (7890.28) //报错
插入日期类型
creat table A_3(
a_date datatime
)
insert into A_3 values (‘2011-04-02’)
查询表:
select *from 表名
select *from A_2
1、 SQL链接查询
含义:复杂的SQL查询是基于多张表以上的查询,就必须考虑多张表的连接查询
是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。
SQL链接查询的分类:
等值链接 外连接 交叉链接
等值链接:
两个SQL语句:
第一个:select tname , cname from teacher t , course c where =
第二个:select tname , cname from teacher t inner join course c on
=
查询学生所选的课程的分数,要求跟上学生的姓名:
select , sname , , cname , score from student a
sc b , course c where = and =
注意:第二个SQL语句是SQL 92/SQL 99的写法,这种写法叫做连接查询中的内连接形
式
外连接:包括:左外链接、右外连接、完全链接
外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接
时)或两个表(全外连接时)中所有符合搜索条件的数据行。
使用外连接需要一些关键字:
left outer join on (左外连接)
right outer join on (右外连接)
full outer join on (完全连接的写法)
例子:select *from 表1 left outer join 表2 on 表1.列名=表2.列名
creat table R( creat table S(
a varchar(5) c varchar(5)
b varchar(5) d varchar(5)
c varchar(5) )
)
left outer join的含义:除了满足查询条件的结果显示出来,还需将left outer join
左侧表中没有匹配的数据显示出来
外连接实战应用:
1、 查询所有同学的学号、姓名、选课数、总成绩
如果没有选课的学生信息,是否也要打印出来作为统计数据
select , sname , count(cno) , sum(score)
from student a left outer join sc c
on = group by , sname
2、查询不同老师所教不同课程的平均分
select , tname , , avg(score) from course c
left outer join sc on = group by , ,
tname
right outer join的含义:除了满足查询条件的结果显示出来,还需将right outer join
右侧表中没有匹配的数据显示出来
1、 查询所有同学的学号、姓名、选课数、总成绩
如果没有选课的学生信息,是否也要打印出来作为统计数据
select , sname , count(cno) , sum(score) from sc c
right outer join student a
on = group by , sname
2、查询不同老师所教不同课程的平均分
select , tname , , avg(score) from sc
right outer join course c on =
group by , , tname
full outer join的含义:就是左外连接和有外链接结果的和
select *from R full outer join on S on R.c = S.c
连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较
运算符、逻辑运算符等构成。
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三
种列进行间接连接。例如:
代码:SELECT _id,_id,_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(_info)=DATALENGTH(_info)(一)内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。
SQL的子查询
1、 where子查询
select cno , score from sc where score > (select avg (score) from
sc)
where子查询后面的条件允许写select语句,那么这个限制条件(“>”符号)
后的查询称为子查询。
2、 from子查询
结构:select *from 表名1 , (select *from 表名2)
例如:查询每个学生的课程、成绩、总平均分
select cno , score , from sc,(select avg(score) as cc from sc)
b
where sc.
虚表命名为b,查询出来的平均分命名为cc
在from关键字后面出现的查询句子,我们可以让他单独的作为一张虚表。
3、 in子查询
它是要求查询的结果在某几个值里面
select *from sc where score not in(70,90,80)
select *from course where cno in (‘c001’,’c002’,’c005’)
in还可以应用到子查询中
select *from sc where sno
in (select sno from student where sno >= ‘s002’)
4、 any子查询
>any:大于最小的
=any:就是关键字in的作用 select * | 列名1 , 列名 , 列名2….from 表名 where 列名 >any 比较条件(子查询) select * | 列名1 , 列名 , 列名2….from 表名 where 列名 select * | 列名1 , 列名 , 列名2….from 表名 where 列名 =any 比较条件(子查询) 例如:查询学生成绩大于70,且出去里面最小的学号 select distinct , sname from student a , sc b where = and >70 and > any (select sno from sc where score > 70) 5、 all子查询 语法格式: select * | 列名1 , 列名 , 列名2….from 表名 where 列名 >all 比较条件(子查询) select * | 列名1 , 列名 , 列名2….from 表名 where 列名 select * | 列名1 , 列名 , 列名2….from 表名 where 列名 =all 比较条件(子查询) >all:大于子查询结果中最大的数据 =all:没有任何数据 Select * from student where sno > all(select sno from sc where score >70) 6、 嵌套子查询 7、 exists子查询 允许查找特定条件的行,exists后面总是跟一个子查询,只要只查询返回了行,exists 的值就为true。 例:查询返回在任何一次考试中分数低于40分得学生studentID和姓名 select studentID , name from student s where exists (select studentID from studentExam e Where mark<40 and tID = tID); 这里的基础是一个相关子查询返回分数低于40分得学生的studentID: select studentID from studentExam e Where mark<40 对student表中的每一行只执行一次 and tID = tID 修改表: 修改表的时候一般有如下操作: 1、 修改表中的数据类型 2、 为表添加列 3、 删除表中的列 4、 为表添加约束 5、 删除表的约束 第一种:为表添加列 alter table 表名 add 列名 数据类型 约束 alter table emp add e_address varchar(20) default’成都’ //声明后面插入 的数据的地址默认为成都,即约束为成都 insert into emp (empno,ename,depno) values (1004,’李明’,2) select * from emp //查询emp表格中的数据 第二种:删除表中的列 Alter table 表名 drop column 列名 alter table emp drop column e_address 注意: 1、 如果在删除表中列的时候,一定要注意此列是否含有约束对象。如果有约束对 象,应先删除约束对象,再删除表中所对应的列。 2、 删除表中的约束: alter table 表名 drop constraint 约束名 alter table emp drop constraint DF_emp_e_address_00200768 3、 删除约束的时候,约束名不要用单引号修饰。 第三种:修改表中列的数据类型 比如:增加varchar的长度 alter table 表名 alter column e_name varchar(25) 第四种:为表添加约束 作用:为了更好地保护数据库中数据的完整性,存储数据的一致性和正确性的一套机制。 alter table 表名 add constraint 约束名 约束类型[约束表达式] 约束的分类: 在SQL Server2005中有6种约束: 主键约束(primary key constraint) 第1种主键约束定义:在创建表的时候定义主键约束: Creat table A_1( a_no int primary key,--此定义方式,系统会默认生成一个主键约束名称 a_name varchar(10) ) --主键到底有什么用: --1、一个列被定义成主键后,此列中的数据不能为NULL --2、被定义成主键的列,其数据必须是唯一的 insert into A_1 values (1,’张三’)---第一个数字不能为null insert into A_1 values (2,’李四’)---第一个数字不能和1重复 第2种主键约束的定义 creat table A_2( a_no int , a_name varchar(10), constraint PK_A_2 primary key (a_no) ) 第3种主键约束的定义 create table A_3( a_no int, a_name varchar(10) ) ---如果创建的表中某一列想定义为一个主键, ---必须满足一个前提条件,即该列不能为空 ---如下:声明表A_3的a_no列不为空 alter table A_3 alter column a_no int not null ---如下:修改表A_3的a_no列为主键约束 alter table A_3 add constraint PK_A_3 primary key(a_no) 唯一性约束(unique constraint) 检查约束(check constraint) 如果要为表中的某一列定义一个规则,可以使用check约束。 例如:为表A的a_sex定义只能存放“男”或“女” creat table A( a_name varchar(10), a_sex varchar(2) constraint ck_sex check(a_sex=’男’ or a_sex=’女’) ) insert into A (a_name,a_sex) values (‘李四’,’女’)----true values (‘李四’,’你’)---false 列约束实例: creat table 会员( No smallint not null constraint memberNoChk-----列约束是直接跟在后 面 check(No between 1 and 10000), name varchar(20) not null, address varchar(60) not null ) 表约束实例: creat table 我的会员( No smallint not null, name varchar(20) not null, address varchar(60) not null, constraint ChkmemberNo-----表约束是表的列写完后添加约束 check(No between 1 and 10000) ) 列约束与表约束的区别:列约束是直接跟在后面,而表约束则是表列项写完后添加约束 外部键约束(foreign key constraint) 外键是指用于建立实体与实体之间关系,当添加、修改、删除数据的时候,他可以保持 两张表的数据一致性。外键就是针对表与表的关系确立而设置的。 作用: 1、当插入数据的时候,如果数据在父表中找不到,我们的外键就阻止你进行一个插入 操作。 2、保持两张表的数据一致性 外键的创建方式: -------如何建立外键,即外键到底建立在哪张表中才是正确的 -------1、确立表之间的子父关系 -------2、外键一定是建在子表中的,且该外键是父表中的主键的那一列。 -------3、在创建表的时候就可以添加外键:将子表某列和父表主键关联起来 alter table 子表 add constraint FK_C foreign key (子表某列) references 父表 (父表主键) 方法1,创建表的时候就定义 例如:A和B表是一对多的关系,那么A表称为父表,B表称为子表。为了体现子父关 系,可以使用外键。 ---emp,员工表 ---dep,部门表 ---员工表 VS 部门表===> n:1 Create table emp(---部门信息(子表) empno int primary key,----员工编号 ename varchar(10),-----员工姓名 depno int foreign key references dep (depno) ) create table dep(----部门信息(父表) depno int primary key,----部门编号 dname varchar(10)---部门的名称 ) 方法2,创建表的时候,自定义外键的名称 create table B( b_no int primary key, b_name varchar(10) ) ---B VS C 1:n create table C( c_no int primary key, c_name varchar(10), b_no int, constraint FK_C foreign key (b_no) references B (b_no) ) 方法3,创建外键约束的方法 create table B( b_no int primary key, b_name varchar(10) ) create table C( c_no int primary key, c_name varchar(10), b_no int, ) alter table C add constraint FK_C foreign key (b_no) references B (b_no) 默认约束:dafault Default可以为表在插入数据的时候,指定一个默认的值 creat table people( p_id int primary key, p_name varchar(20), p_sex varchar(2) default ‘男’ constraint ck_people check (p_sex=’男’or 9_sex = ‘女’)-----检查 约束 ) insert into people(p_id,p_name) values (1,’张三’) 空值(NULL)约束 1、 完整性约束,包括:primary key、unique 完整性约束的基本语法格式: [CONSTRAINT constraint_name(约束名)]<约束类型>,约束不指定名称时,系统会 给定一个名称 2、 参照性约束,包括:foreign key 3、 用户自定义约束,包括:check default 第五种:删除表中的约束 alter table 表名 drop constraint 约束名 alter table emp drop constraint DF_emp_e_address_00200768 删除表: 删除表的操作可使用:drop table 表名 在使用drop table 的时候,注意一点:如果有字符关系的表,且用了foreign key 进行约束,那么删除父表的时候,数据库会提示无法删除。 drop table people 日期函数: A、 获取当前系统时间 select getdate() B、 在当前系统时间上增加两天 第一种:select getdate()+2 第二种:使用dateadd()函数:它可以在向指定日期加上一段时间的基础上,返回 新的datetime值 语法结构:dateadd(datepart , number , date) select dateadd(DD , 2 , getdate())----当前时间加两天; 其中: datepart:对日期做怎样的增加,DD:天MM:月;YYYY:年;HH:小时 number:增加的量 date:日期类型的数据 C、 对两个时间进行差值比较 datediff()函数 语法:datediff(datepart , start , end) datepart:代表做差值的单位:年、月、日、时、分、秒 start:日期类型数据 end: 日期类型数据 select datediff (DD , getdate() , getdate()+5) D、 datepart:返回表示指定日期的某一部分 语法结构:datepart(datepart , date) 例如:返回当前系统的时间年份 select datepart(yyyy , getdate())----返回年份 除了datepart可以返回指定日期的某一部分,还可以用convert函数完成相应功 能效果 convert()函数是把日期转换为新数据类型的通用函数 语法:convert(数据类型,要转换的数据,转换的格式)====》 convert (datatype,data,style) 例子1:当前日期格式转化为dd/mm/yy select convert (varchar (10) , getdate() , 103) 例子2:当前日期格式转化为yyyy-mm-dd hh:mi:ss(24h) select convert ( varchar (30) , getdate() , 120) 字符函数 1、 len:求字符串长度 语法:len(字符串) 例子1、查询学生表中姓名的长度 select len(sname) , sname from student 例子2:查询学生姓名是3个字的信息 select *from student where len(sname) = 3 2、 replace:字符串替换函数 语法:replace (‘String1’ , ‘String2’ , ‘String3’) String1:要搜索的字符串表达式;String1可以是字符数据或二进制数据 String2:要查找的字符串表达式;String2可以是字符数据或二进制数据 String3:用于替换的字符串表达式;String3可以是字符数据或二进制数据 select replace(‘abcdefg’,’abc’,’$$$$$$$$’)----- $$$$$$$$defg select sname replace(sname,sname,’###’) from student where len(sname)=3; 3、 substring:求字符串子串函数 语法:substring(expression , start , length) expression:是字符串、二进制字符串、文本、图像、列和包含列的表达式,不要 使用包含数据函数的表达式 start:指定字符串开始位置的整数,start可以为bigint类型 length:一个正整数,指定要返回的expression的字符数或字节数,如果length 为负。则会返回错误,length可以是bigint类型 例子1:返回从学生学号第2个字符到最后字符的信息 Select sno , substring(sno , 2 , len(sno)) from student 4、 upper:将字符串转换为大写 语法:upper(字符串) 例子:select upper(‘abcdef’)---- ABCDEF 5、 lower:将字符串转换为小写 语法:lower(字符串) 例子:select lower(‘ABCDEF’)----abcdef 6、 rtrim: 去掉字符串右边的空格 语法:rtrim(字符串) 例子:select rtrim(‘abcdef ’)+’d’--------abcdefd 7、ltrim: 去掉字符串左边的空格 语法:ltrim(字符串) 例子:select ’d’ + ltrim(‘ abcdef’) --------dabcdef 7、 charindex:求字符串中某个字符在整个字符串中的位置 语法:charindex(expression1 , expression2 [,start_location]) 参数解释: expression1:代表要查找的子串 expression2:代表原串 Start_location:查找的起始位置 例子1:求’abc’中’a’在整个字符串中的位置 select charindex(‘a’ , ‘abc’) 例子2:从第2位开始查找,’a’在’abcabc’中出现的位置 select charindex(‘a’ , ‘abc’ , 2) 视图的创建方法 1、 可视化创建方法(即在对象管理器中创建) 2、 通过create view命令来创建视图 create view的语法格式: create view<视图名> [(<视图属性列表(列名)>)] [with encryption] as <子查询>[with check option] with encryption: SQL Server对包含create view语句的文本进行加密 with check option:强制视图上执行的所有数据更新语句都必须符合子查询中where子 句的条件 例子:创建能够查看每个老师所教的课程的视图 create view t_view as select cno , cname , , tname from course s , teacher t where = 视图是基于多张表导出的一张表 select * from t_view 基本视图的修改: 如果要让视图进行一个插入操作,有时会影响基本的数据,但需要注意一下几点内容: 1、 基于一张表的视图,可以对试图进行修改、更新、删除数据,则插入的数据会影响 到基表 create view t_student as select sno,sname,ssex from student where sno>’s005’ 对视图插入数据 insert into t_student values (‘s014’,’李晓波’,’男’)----会影响基 表 修改视图中的数据 update t_student set ssex=’女’ where sno = ‘s014’ ----会影响 基表 2、 如果生成的视图包含聚合函数、其它函数、distinct、group by、order by、into; 不能插入、更新、删除数据 create view t_student as select sno , ssex , count(ssex) coun from student group by sno , ssex 3、 如果生成的视图是由两张表以上的查询生成,不能进行插入。更新、删除数据。 Create view t_student as select , sname , , cname From student a, course b , sc c where = and = 4、 如果生成的视图,含有with check option ,一定要满足查询条件(where的条件) 才能进行插入、更新、删除数据。 create view t_student as select sno , sname , sex from student where sno<’s005’ with check option insert into t_student values (‘s015’,’刘洋’,’女’)------报错sno 需小于s005才行 修改视图: 通过alter view 进行 例如:创建视图: create view v_t4 as select *from teacher Where tno > ‘t004’ with check option 查看已建视图创建脚本的命令 sp_helptext t_t4 会显示创建脚本:create view v_t4 as select *from teacher Where tno > ‘t004’ with check option 修改上面的视图v_t4脚本为下:把with check option去掉 alter view v_t4 as select *from teacher where tno > ‘t004’ FROM子句 FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定 256个表或视图,它们之间用逗号分隔。在FROM子句同时指定多个表或视图时,如果选择 列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和 citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以 限定: 代码:SELECT username, FROM usertable , citytable WHERE = 在FROM子句中可用以下两种格式为表或视图指定别名: 代码:表名 as 别名 表名 别名例如上面语句可用表的别名格式表示为: 代码:SELECT ‘username’, FROM usertable a,citytable b WHERE =SELECT 不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 例如: 代码:SELECT _fname+_lname FROM authors a,titleauthor ta (SELECT ‘title_id’,’title’ FROM ‘titles’ WHERE ‘ ytd_sales’>10000) AS t WHERE _id=_id AND _id=_id 此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 UNION联合查询 UNION运算符可以将两个或两个以上的SELECT语句的查询结果集合合并成一个结果集 合显示,即执行联合查询。 UNION的语法格式为: 代码:select_statement UNION [ALL] selectstatement [UNION [ALL] selectstatement][…n]其中selectstatement为待联合的SELECT查询语句。 ALL选项表示将所有行合并到结果集合中,不考虑重复元素。不指定该项时,被联合查询结 果集合中的重复行将只保留一行。 联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须 在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、 列标题或者列序号。 在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式, 并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类 型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。 在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。 例如:查询1 UNION (查询2 UNION 查询3) 在集合中,两集合联合后将包含每个集合的数据成员,但每个数据成员只记录一次 {1,2,3,4}intersect{3,4,5,6} ==={1,2,3,4,5,6} 交集:intersect返回交集 {1,2,3,4}intersect{3,4,5,6} ==={3,4} 差分:except返回不包含共同元素的集合 {1,2,3,4}except{3,4,5,6} ======{1,2,5,6} 二、数据类型: smallint 16位元的整数。 interger 32位元的整数。 decimal(p,s) p精确值和s大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数 点後有几位数。如果没有特别指定,则系统会设为p=5; s=0 float 32位元的实数。 double 64位元的实数。 char(n) n长度的字串,n不能超过254。 varchar(n) 长度不固定且其最大长度为n的字串,n不能超过4000。 graphic(n) 和char(n)一样,不过其单位是两个字元double-bytes,n不能超过127。这个形态是为 了支援两个字元长度的字体,例如中文字。 vargraphic(n) 可变长度且其最大长度为n的双字元字串,n不能超过 2000。 date 包含了年份、月份、日期。 time 包含了小时、分钟、秒。 timestamp 包含了年、月、日、时、分、秒、千分之一秒。
版权声明:本文标题:(完整word版)SQL常用的增删改查语句、视屏笔记 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1713353934a630522.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论