固定长度字符串.docx
- 文档编号:22796658
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:29
- 大小:36.01KB
固定长度字符串.docx
《固定长度字符串.docx》由会员分享,可在线阅读,更多相关《固定长度字符串.docx(29页珍藏版)》请在冰豆网上搜索。
固定长度字符串
固定长度字符串
———————————————————————————————— 作者:
————————————————————————————————日期:
ﻩ
固定长度字符串:
通常用CHAR(n)表示
可变长度字符串:
通常用VARCHAR(n)表示
整数:
Integer、int,一般为4个字节
浮点数:
Float、Decimal
Money:
币值数值,在小数点后恰好包含两位的数字
Bit:
二值数值数据,仅取0、1或NULL
日期:
date,形为YYYY-MM-DD
时间:
time,形为HH:
MM:
SS
删除数据库的方法
DROP DATABASE语句
DROPDATABASE数据库名[,…n]
♘建立一个数据库
createdatabase 数据库名
♘撤消一个数据库
dropdatabase 数据库名
♘指定当前数据库
use 数据库名
▲在当前数据库中创建新表
Createtable 基本表名ﻫ ( 列名类型,
完整性约束,
)
完整性约束包括主键子句(Primary Key、检查子句(Check)、外键子句(ForeignKey)和Null/NotNull、Unique。
▲用Createtable语句创建表结构
Create table表名({字段名字段属性字段约束}[,…n])
列的定义必须放在圆括号中。
语法中参数顺序不能改动。
最多可以设置1024个字段。
1、字段属性
数据类型[(长度)] [identity(初始值,步长值)][null/notnull]
默认长度的数据类型“(长度)”不允许指定,需要指定长度时圆括号不能省略。
identity用于指定该列为自动编号字段(标识列);
null/notnull指定该列允许空值(默认)或不允许空值。
2、字段约束
定义格式:
[constraint 约束名]primarykey[(主键列名)]
[constraint约束名]unique [(惟一列名)]
[constraint约束名][foreignkey[(外键列名)]]
references 引用表名(引用列名)
[constraint约束名]check(检查表达式)
[constraint约束名] default默认值
约束名为以后修改管理时使用,省略为系统默认的约束名。
字段约束也可以在创建表结构以后另外单独设置。
如:
1.设置notnull值:
createtables
(snochar(10) notnull,
snamechar(8),
agesmallint ,
sexchar
(2) )
2.缺省约束default:
createtables
( snochar(10) not null,ﻫsnamechar(8),
age smallint,
sexchar(2)default’男‘)
--性别缺省时默认为’男’
3.主键约束primarykey
createtable s
(snochar(10) ,ﻫ snamechar(8),
age smallint,
sex char(2) default’男‘,
primarykey(sno))
--S表的主键设置为sno
有了主键约束,主键为非空,所以sno的notnull 可以省写
4.外键约束foreignkey…references…
createtableSC
(snochar(10)notnull,
cno char(3)notnull,
ﻩgrade numeric (3,1),
primarykey(sno,cno),
ﻩﻩforeignkey (sno) referencesS(sno),
ﻩﻩforeign key(cno)referencesC(cno))
--与S的sno及C的cno建立外键
5.检查约束check
createtables
(snochar(10)primarykey,
snamechar(8)notnull,ﻫagesmallint check(agebetween15and45),
sexchar
(2)default’男‘,)
--约束年龄在15至45岁之间
check(agebetween15and45)相当于
check(age>=15andage<=45)
▲建表小结:
createtable表名
(
列名数据类型[default缺省值][not null]
[,列名 数据类型[default 缺省值] [notnull]]
[,primarykey(列名[,列名]…)]
[,foreign key(列名[,列名]…)
references表名(列名[,列名] …)]ﻩ
[,check(条件)]
[,unique(列名)]
)
♘常用完整性约束
♙主码约束:
PRIMARYKEY
♙唯一性约束(不重复):
UNIQUE
♙非空值约束:
NOTNULL
♙参照完整性约束
如:
createtableCourse
(cnochar(5)notnull,
cnamenvarchar(30)notnull,
credittinyint notnull check(credit>0),
pcnochar(5),
primary key(cno),
foreignkey(pcno)
referencescourse(cno)
)
1.建立course,增加一条件:
课程名不能重复
createtable Course
(cnochar(5)notnull,
cnamenvarchar(30)not null,
credit tinyintnotnullcheck(credit>0),
pcnochar(5),
primarykey(cno),
foreign key(pcno)
referencescourse(cno)
unique(cname))
▲用Alter table语句修改表结构
SQL修改表结构语句ALTERTABLE的语法格式:
ALTERTABLE 表名
add列名 数据类型[(长度)][null/notnull] [default’默认值’]
alter column列名数据类型[(长度)][null/not null]
dropcolumn 字段名[,…n]
addconstraint {约束名约束类型定义}
列约束定义[ ,…n ][FOR 列名]
dropconstraint约束名[,…n]
注意:
ALTERTABLE语句中只能使用单个子句,即各个子句不能组合使用。
▲使用add子句添加列
altertable表名
add 字段名数据类型[(长度)][null/notnull][default‘默认值’ ]
新增加字段时可以同时设置空值约束、默认值约束。
若不允许为空时则必须给新增加的列指定默认值,否则语句执行错误。
如:
usediannaoxs
altertable供货商表
add联系电话char(13)not nulldefault'00000000'
注意:
添加的字段若不允许为空则必须设置默认值,如果不允许为空又不需要默认值,可在添加字段时先允许为空,再用altercolumn子句修改为不允许为空,则没有默认值。
▲使用alter column子句修改字段属性
使用alter column子句可修改字段的数据类型、长度、是否允许为空值等属性,其语法格式为:
altertable表名
altercolumn字段名数据类型[(长度)][null/notnull]
将一个原来允许为空值的列改为不允许为空时,必须保证表中已有记录中该列没有空值,而且该列没有创建索引。
改变数据类型时,如果原来设置了默认值约束,一般应解除或删除约束后再修改,否则很容易发生错误。
如:
将《供货商表》的“联系电话”字段,数据长度改为20,允许为空(null可以省略)。
代码如下:
USE diannaoxs
ALTER TABLE供货商表
alter column联系电话char(20)
▲用addconstraint子句添加列约束
使用add constraint子句可一次向表的不同字段添加一个或多个约束,其语法格式:
altertable表名
add constraint约束名{约束类型及定义[FOR列名]}[,…n ]
该语句添加约束必须指定约束名,而且必须是惟一的,不能与数据库已定义的其他规则对象、默认值等对象同名。
若约束类型及定义中没有指定列名时,必须用FOR指定列名(如默认值约束);若约束类型及定义中已包含了列名,则不允许使用FOR子句。
如果只允许有一个约束的列已经设置了约束(检查约束除外),则原有约束未解除不能添加新的约束。
使用一个约束名可以为不同字段添加多个约束:
如:
为《供货商表》的“供货商”添加约束“惟一厂家”,代码如下:
Usediannaoxs
altertable供货商表
addconstraint惟一厂家unique(供货商)
注意:
约束定义中已使用了字段名,若再使用“FOR供货商”会产生错误。
运行后显示“命令已成功完成。
”,“惟一厂家”的惟一约束添加成功。
如:
为《供货商表》的“联系电话”字段设置名字为“电话约束”的惟一约束,默认值为“8”。
代码如下:
alter table供货商表
addconstraint电话约束 unique(联系电话),
default‘8’for 联系电话
▲INSERT语句
插入数据的语句是INSERT语句。
方式有两种:
元组值的插入和查询结果的插入。
1、插入元组值
一次插入一个元组值
insertinto 基本表名(列名表)
values(元组值)
如:
往SC插入一个元组(S5,C8),成绩未知。
insert into SC(sno,cno)
values(’S5’,’C8’)
一次插入多个元组
Insertinto基本表名(列名表)
Select元组值1unionall
Select元组值2 unionall
Select元组值3
如:
往表中连续插入三个元组,可以写成:
InsertIntosc
Select's12','c1',89unionall
Select 's16','c2',99 unionall
Select's18','c3',80
2、插入子查询结果
Insertinto基本表名(列名表)
select查询语句
如:
在student中,把学生的专业,平均年龄存入另一个已知的基本表S_G(sno,Avgage)。
insertintoS_G(sno,Avgage)
selectsno,avg(age)
fromstudent
group by sno
▲创建索引
create[unique][cluster]Index <索引名>on <表名>(<列名>[<次序>][,<列名>[<次序>]]…)用<表名>指定要建索引的基本表名字
索引可以建立在该表的一列或多列上,各列名之间用逗号分隔
用<次序>指定索引值的排列次序,升序:
ASC,降序:
DESC。
缺省值:
ASC
Unique表明此索引的每一个索引值只对应唯一的数据记录
1聚集索引
创建聚集索引后,表中的记录按照索引属性值的顺序进行存储。
每个表只能有一个聚集索引。
如:
在student表中按sname建立一个聚集索引
CreateclusteredindexStusname(索引名) onstudent(Sname)基本表名(列名表ASC/DESC)
Cluster表示要建立的索引是聚集索引
2逻辑(非聚集)索引
逻辑索引相当于一个映射,把索引的属性值转换为对应记录的地址或地址集。
逻辑索引不影响表中记录的存储顺序。
Create [unique] index索引名on基本表名(列名表ASC/DESC)
若指定[UNIQUE]选项,系统将保证基本表中的任意两行记录在索引列上或组合的索引列上具有唯一值
索引可以建立在该表的一列或多列上,各列名之间用逗号分隔
默认为升序(ASC)排列
如:
为学生-课程数据库中的Student,Course,SC三个表建立索引。
其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。
Createuniqueindex stusnoon student(Sno)
Create unique indexcoucno oncourse(cno)
create uniqueindexscno onsc(sno asc,cnodesc)
▲数据库的修改
▲删除记录:
DELETE语句
DELETE FROM<表名>
[ WHERE<条件>]
♘删除单个元组
ﻩ例:
删除学号为S11的学生的选课信息(表名为:
SC)
deleteftomsc
where sno=’s11’
删除低于平均工资的老师记录。
delete from PROF
ﻩ whereSAL<(selectavg(SAL)
ﻩﻩﻩ from PROF )
删除整个关系中的所有数据
例:
删除所有学生的选课信息
Delete FromSC
删除多个元组
例:
删除选课而未参加考试的学生的选课信息
ﻩDeleteFromSC
ﻩWheregrade isnull
▲修改记录:
UPDATE语句
update 表名
set列名= 表达式|子查询
列名 =[,表达式|子查询]…
[where条件表达式]
如:
所有学生年龄加1
ﻩUpdateStudent
ﻩSet age= age + 1
将学号(s#)为S1学生性别更改为‘女’
ﻩUpdateStudent
ﻩSetsex=‘女'
ﻩWhere s#='S1‘
将选修C1课程的学生的成绩改为该课程的平均成绩
ﻩUpdateSC
ﻩSetgrade=(Select avg(grade) 先计算avg,再做Update
ﻩ FromSC
ﻩﻩﻩ WhereC#='C1')
WhereC#='C1'
▲删除数据库中的对象:
DROP语句
1、删除基本表
drop table 表名
如:
droptable sc
撤消基本表后,基本表的定义、表中数据、索引、以及由此表导出的视图的定义都被删除。
2、删除索引
drop index 表名.索引名
如:
dropindexstudent.xh_kch
删除索引时,系统会同时从数据字典中删去有关该索引的描述。
对于SQLServer,每个表的索引名必须唯一,但不同表的索引名可以相同。
3、删除数据库
DROPDATABASE <数据库名>
如:
dropdatabaseQTGL
▲如何修改基本表
♘修改基本表定义(ALTER)
格式:
altertable表名
ﻩﻩ[add 子句] 增加新列或添加主键、外键
ﻩ[dropcolumn子句] 删除列
[alter column子句] 修改列的定义
如:
1、Student表中增加一列表示所在系:
列名:
sdept 类型:
varchar(20)
altertableStudent
addsdeptvarchar(20)
2、Student表中增加一列表示年龄:
列名:
sage 类型:
int默认值:
22
altertable Student
addsageintdefault22
3、Student表中删除联系电话(phone)这一列
altertable Student
dropcolumnphone
4、修改Student表中姓名(sname)这一列的类型为varchar(16)
alter tableStudent
altercolumnsnameVarchar(16)
在定义表的时候如果漏了设置主键或外键,如何添加主键和外键
AltertableS ADDPrimaryKEY(S#)
AltertableSC ADDFOREIGNKEY(S#) REFERENCESS(S#)
若在创建表格没有创建约束名,则使用默认约束名。
sp_help [表名]
执行结果返回七个结果集,第七个显示了主键和默认值的信息
Constraint_name:
找到相应约束条件的约束名。
如果创建了S表、C表、SC表,并设置SC的外键为(S#)和(C#),可有时候删除S表的记录或者删除C表的记录时会发生错误,这是为什么?
该如何解决?
S(S#,SNAME ,AGE,SEX,DEPT)
SC(S#,C#,GRADE)
C(C#, CNAME,TEACHER)
第二章 SQL语言—单表查询
●基本结构
select[ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]
from<表名或者视图名>[, <表名或者视图名>]
[where<条件表达式>]
[GROUP BY <列名1>[HAVING] <条件表达式>]
[ORDERBY <列名2> ][ASC|DESC]
例1、查询全体学生的学号和姓名。
SelectSno,sname
From student
例2 、查询全体学生的姓名、学号、年龄。
Selectsname,sno,sage
Fromstudent
▲要求用小写字母表示所有系名。
Selectsname.’YearofBirth’,2007-Sage,LOWER(Sdept)
From STUDENT
【Lower()字符串函数,将大写装换成小写字母。
】
【UPPER()字符串函数,将小写字符转换成大写字母】
▲用户可以通过指定别名来改变查询结果的列标题
SelectSnameNAME,’YearofBirth’BIRTH,2007-SageasDEPARTMENT fromSTUDENT
▲取消重复行distinct
Selectdistinctsnofromsc
▲如果没有指定distinct,则缺省为ALL,即保留重复行
selectALLSno fromSC
▲确定集合 IN,NOTIN
谓词IN可以用来查找属性值属于指定集合的元组
如:
查询既不是信息系、数学系,也不是计算机系的学生姓名和性别
Selectsname,sage fromstudent
Where sdeptnotin(‘IS’,’MA’,’CS’)
▲字符匹配
谓词LIKE可以用来进行字符串的匹配。
其一般语法格式:
[NOT]LIKE‘<匹配串>’ [ESCAPE‘<换码字符> ’]
含义:
查找指定的属性列值与<匹配串>相匹配的元组
如:
查询姓名为李勇的学生信息
Select*from student
Where snamelike‘李勇’
匹配串可以是一个完整的字符串,也可以含有通配符%和_。
其中:
%(百分号)代表任意长度(可以为0)的字符串。
例如a%b表示以a开头,以b结尾的任意长度的字符串。
如acb,addgb,ab等都满足该匹配串。
_(下横线) 代表任意单个字符
例如a_b代表以a开头,以b结尾的长度为3的任意字符串,比如acb,afb都满足该匹配串.
如:
查询所有姓刘的学生姓名、学号和性别
Select sname,sno,ssexftomstudent
Wheresname like‘刘%’
▲要查询的字符串本身就含有%或_,这时就要使用ESCAPE’<转义字符>’短语对通配符进行转义
查询DB_design的课程的课程号和学分
selectCno,Ccredit
fromCourse
wherecnamelike‘db\_design’escape‘\’
查询以“DB_”开头,且倒数第三个字符为i的课程的详细情况
select * fromCourse
wherecnamelike‘DB\_%i__’ESCAPE’\’
▲多重条件查询
▲逻辑运算符AND和OR可用来联结多个查询条件。
如:
查询信息系(IS)、数学系(MA)和计算机系(CS)学生的姓名和性别
Select sname,ssex from student
Wheresdept=’IS’ORSdept=’MA’ ORSdept=’CS’
等价于
Selectsname,ssexfromstudent
Wheresdeptin(‘IS’,‘MA’,‘CS’)
AND的优先级高于OR,但用户可以用括号改变优先级。
如:
检索年龄大于25岁的男学生的学号和姓名,结果按年龄降序、学号升序排序。
SelectSno,sname
Fromstudent
WhereSage>25andSsex=’男’
Orderby sagedesc,snoasc
●集函数(或称聚集函数)
●聚集函数用于对数据表的的记录进行统计,如统计记录总数、平均值、最小值和最大值等。
●count(*):
统计表中所有行的行数。
●count(列名):
统计表中指定列非null值的行数。
count(distinct列名):
统计表中指定列名除去重复值的行数。
●avg(distinct/all列名):
求一列值的平均值(此列必须是数值型)
●SUM(distinct/all列名):
求一列值的总和(此列必须是数值型)
λ max(distinct/all列名):
求一列中的最大值
λmin(distinct/all列名):
求一列中的最小值。
where子句用于对分组前的每个记录进行筛选。
Having是对分组以后对结果进行筛选。
●groupby与orderby 。
●orderby子句可以与Groupby子句共同使用来查询结果进行排序。
Øorderby子句必须跟在Groupby子
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 固定 长度 字符串
![提示](https://static.bdocx.com/images/bang_tan.gif)