固定长度字符串_第1页
固定长度字符串_第2页
固定长度字符串_第3页
固定长度字符串_第4页
固定长度字符串_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

固定长度字符串:通常用CHAR(n)表示可变长度字符串:通常用VARCHAR(n)表示整数:Integer、int,一般为4个字节浮点数:Float、DecimalMoney:币值数值,在小数点后恰好包含两位的数字Bit:二值数值数据,仅取0、1或NULL日期:date,形为YYYY-MM-DD时间:time,形为HH:MM:SS删除数据库的方法DROPDATABASE语句DROPDATABASE数据库名[,…n]建立一个数据库createdatabase数据库名撤消一个数据库dropdatabase数据库名指定当前数据库use数据库名▲在当前数据库中创建新表Createtable基本表名

(列名类型,完整性约束,)

完整性约束包括主键子句(PrimaryKey、检查子句(Check)、外键子句(ForeignKey)和Null/NotNull、Unique。▲用Createtable语句创建表结构Createtable表名({字段名字段属性字段约束}[,…n])列的定义必须放在圆括号中。语法中参数顺序不能改动。最多可以设置1024个字段。1、字段属性数据类型[(长度)][identity(初始值,步长值)][null/notnull]默认长度的数据类型“(长度)”不允许指定,需要指定长度时圆括号不能省略。identity用于指定该列为自动编号字段(标识列);null/notnull指定该列允许空值(默认)或不允许空值。2、字段约束定义格式:[constraint约束名]primarykey[(主键列名)][constraint约束名]unique[(惟一列名)][constraint约束名][foreignkey[(外键列名)]]references引用表名(引用列名)[constraint约束名]check(检查表达式)[constraint约束名]default默认值约束名为以后修改管理时使用,省略为系统默认的约束名。字段约束也可以在创建表结构以后另外单独设置。如:设置notnull值:createtables(snochar(10)notnull,snamechar(8),agesmallint,sexchar(2))2.缺省约束default:createtables

(snochar(10)notnull,

snamechar(8),

agesmallint,sexchar(2)default’男‘)--性别缺省时默认为’男’3.主键约束primarykeycreatetables

(snochar(10),

snamechar(8),

agesmallint,sexchar(2)default’男‘,primarykey(sno))--S表的主键设置为sno有了主键约束,主键为非空,所以sno的notnull可以省写4.外键约束foreignkey…references…createtableSC(snochar(10)notnull,cnochar(3)notnull, gradenumeric(3,1),primarykey(sno,cno), foreignkey(sno)referencesS(sno), foreignkey(cno)referencesC(cno))--与S的sno及C的cno建立外键5.检查约束checkcreatetables(snochar(10)primarykey,snamechar(8)notnull,

agesmallintcheck(agebetween15and45),sexchar(2)default’男‘,)--约束年龄在15至45岁之间check(agebetween15and45)相当于check(age>=15andage<=45)▲建表小结:createtable表名(列名数据类型[default缺省值][notnull][,列名数据类型[default缺省值][notnull]][,primarykey(列名[,列名]…)][,foreignkey(列名[,列名]…)references表名(列名[,列名]…)] [,check(条件)][,unique(列名)])常用完整性约束主码约束:PRIMARYKEY唯一性约束(不重复):UNIQUE非空值约束:NOTNULL参照完整性约束如:createtableCourse(cnochar(5)notnull,cnamenvarchar(30)notnull,credittinyintnotnullcheck(credit>0),pcnochar(5),primarykey(cno),foreignkey(pcno)referencescourse(cno))1.建立course,增加一条件:课程名不能重复createtableCourse(cnochar(5)notnull,cnamenvarchar(30)notnull,credittinyintnotnullcheck(credit>0),pcnochar(5),primarykey(cno),foreignkey(pcno)referencescourse(cno)unique(cname))▲用Altertable语句修改表结构SQL修改表结构语句ALTERTABLE的语法格式:ALTERTABLE表名add列名数据类型[(长度)][null/notnull][default’默认值’]altercolumn列名数据类型[(长度)][null/notnull]dropcolumn字段名[,…n]addconstraint{约束名约束类型定义}列约束定义[,…n][FOR列名]dropconstraint约束名[,…n]注意:ALTERTABLE语句中只能使用单个子句,即各个子句不能组合使用。▲使用add子句添加列altertable表名add字段名数据类型[(长度)][null/notnull][default‘默认值’]新增加字段时可以同时设置空值约束、默认值约束。若不允许为空时则必须给新增加的列指定默认值,否则语句执行错误。如:usediannaoxsaltertable供货商表add联系电话char(13)notnulldefault'00000000'注意:添加的字段若不允许为空则必须设置默认值,如果不允许为空又不需要默认值,可在添加字段时先允许为空,再用altercolumn子句修改为不允许为空,则没有默fromSTUDENT▲取消重复行distinctSelectdistinctsnofromsc▲如果没有指定distinct,则缺省为ALL,即保留重复行selectALLSnofromSC▲确定集合IN,NOTIN谓词IN可以用来查找属性值属于指定集合的元组如:查询既不是信息系、数学系,也不是计算机系的学生姓名和性别Selectsname,sagefromstudentWheresdeptnotin(‘IS’,’MA’,’CS’)▲字符匹配谓词LIKE可以用来进行字符串的匹配。其一般语法格式:[NOT]LIKE‘<匹配串>’[ESCAPE‘<换码字符>’]含义:查找指定的属性列值与<匹配串>相匹配的元组如:查询姓名为李勇的学生信息Select*fromstudentWheresnamelike‘李勇’匹配串可以是一个完整的字符串,也可以含有通配符%和_。其中:%(百分号)代表任意长度(可以为0)的字符串。例如a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab等都满足该匹配串。_(下横线)代表任意单个字符例如a_b代表以a开头,以b结尾的长度为3的任意字符串,比如acb,afb都满足该匹配串.如:查询所有姓刘的学生姓名、学号和性别Selectsname,sno,ssexftomstudentWheresnamelike‘刘%’▲要查询的字符串本身就含有%或_,这时就要使用ESCAPE’<转义字符>’短语对通配符进行转义查询DB_design的课程的课程号和学分selectCno,CcreditfromCoursewherecnamelike‘db\_design’escape‘\’查询以“DB_”开头,且倒数第三个字符为i的课程的详细情况select*fromCoursewherecnamelike‘DB\_%i__’ESCAPE’\’▲多重条件查询▲逻辑运算符AND和OR可用来联结多个查询条件。如:查询信息系(IS)、数学系(MA)和计算机系(CS)学生的姓名和性别Selectsname,ssexfromstudentWheresdept=’IS’ORSdept=’MA’ORSdept=’CS’等价于Selectsname,ssexfromstudentWheresdeptin(‘IS’,‘MA’,‘CS’)AND的优先级高于OR,但用户可以用括号改变优先级。如:检索年龄大于25岁的男学生的学号和姓名,结果按年龄降序、学号升序排序。SelectSno,snameFromstudentWhereSage>25andSsex=’男’Orderbysagedesc,snoasc集函数(或称聚集函数)聚集函数用于对数据表的的记录进行统计,如统计记录总数、平均值、最小值和最大值等。count(*):统计表中所有行的行数。count(列名):统计表中指定列非null值的行数。count(distinct列名):统计表中指定列名除去重复值的行数。avg(distinct/all列名):求一列值的平均值(此列必须是数值型)SUM(distinct/all列名):求一列值的总和(此列必须是数值型)lmax(distinct/all列名):求一列中的最大值lmin(distinct/all列名):求一列中的最小值。where子句用于对分组前的每个记录进行筛选。Having是对分组以后对结果进行筛选。groupby与orderby。orderby子句可以与Groupby子句共同使用来查询结果进行排序。orderby子句必须跟在Groupby子句后面,顺序不能调换。groupby子句、orderby中不能包含Select清单组成部分以外的列名。▲查询语句的一般格式:SELECT[all|distinct]<目标表达式>[,<目标表达式>]FROM<表名或者视图名>[,<表名或者视图名>][WHERE<条件表达式>][GROUPBY<列名1>[HAVING<条件表达式>]][ORDERBY<列名2>[ASC|DESC]]WHERE子句作用于基本表或视图(分组前),HAVING子句作用于组groupby子句、orderby中不能包含Select清单组成部分以外的列名。INSERT语句—插入数据插入数据的语句是INSERT语句。方式有两种:元组值的插入和查询结果的插入1、插入元组值一次插入一个元组值INSERTINTO基本表名(列名表)VALUES(元组值)一次插入多个元组值INSERTINTO基本表名(列名表)Select元组值1unionallSelect元组值2unionallSelect元组值32、插入子查询结果INSERTINTO基本表名(列名表)SELECT查询语句如:在student中,把学生的专业,平均年龄存入另一个已知的基本S_G(S#,Avgage)INSERTINTOS_G(S#,Avgage)SELECTS#,AVG(age)FROMstudentGROUPBYS#语法格式CREATE[UNIQUE][CLUSTER]INDEX<索引名>ON<表名>(<列名>[<次序>][,<列名>[<次序>]]…) 用<表名>指定要建索引的基本表名字索引可以建立在该表的一列或多列上,各列名之间用逗号分隔用<次序>指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASCUNIQUE表明此索引的每一个索引值只对应唯一的数据记录CLUSTER表示要建立的索引是聚集索引数据库的修改1、删除记录:DELETE语句DELETEFROM<表名>

[WHERE<条件>]2、修改记录:UPDATE语句update表名set列名=表达式|子查询列名=[,表达式|子查询]…[where条件表达式]如:删除低于平均工资的老师记录(表S,工资SAL)。deletefromSwhereSAL<(selectavg(SAL)fromS)将选修C1课程的学生的成绩改为该课程的平均成绩Update Setscore=(Selectavg(score) FromSC Wherecno='C1') Wherecno='C1'▲删除数据库中的对象:DROP语句1、删除基本表DROPTABLE表名2、删除索引DROPINDEX表名.索引名3、删除数据库DROPDATABASE数据库名▲修改基本表定义(ALTER)altertable表名 [add子句]增加新列或添加主键、外键 [dropcolumn子句] 删除列[altercolumn子句]修改列的定义[Dropconstraint约束名]删除约束如果要删除或修改有约束限制的字段,则应先删除其约束,然后在删除或修改。WHERE子句作用于基本表或视图(分组前),HAVING子句作用于组orderby子句必须跟在Groupby子句后面,顺序不能调换。groupby子句、orderby中不能包含Select清单组成部分以外的列名。连接查询在查询中,同时涉及两个或两个以上的表,要根据表中数据的情况作连接。连接查询:一个查询涉及两个以上的表2、连接条件(或称连接谓词)连接条件,其一般格式为:[<表名1>.]<列名1><比较运算符>[<表名2.>]<列名2>连接条件中的列名称为连接字段其中比较运算符主要有:=、>、<、>=、<=、!=。当连接运算符为=时,称为等值连接。使用其他运算符称为非等值连接。需要连接的表要具有公共属性(个人认为是主外键的联系)如果连接条件中两个属性里的任何一个属性包含空值,那一条记录就将被剔除,当这两个属性都是空值时也同样被剔除。一、广义笛卡尔积(不带连接谓词的连接)例:SELECTStudent.*,SC.*FROMStudent,SC带连接谓词的连接SELECTSNAME,CNOFROMSTUDENT,SCWHERESTUDENT.SNO=SC.SNO二、等值与非等值连接查询[<表名1>.]<列名1><比较运算符>[<表名2.>]<列名2>当比较运算符为=时,称为等值连接。使用其他运算符时,称为非等值连接。连接查询注意事项:需要连接的表要具有公共属性连接的属性最好是主键和外键若连接的两个表包含相同的字段,则需要在字段前加其所属的表名2、使用别名若连接的表名较长,可为表起别名。SQL语言允许在FROM子句中为表名指定别名。为表名执行别名,只需将别名写在表名之后,它们之间用空格隔开就可以了。如:selects.sno,snameFromstudents,scWherecno=’002’ands.sno=sc.sno三、自身连接连接操作不仅可以在两个表之间进行,也可以是一个表与自己进行连接。一个表与其自己进行连接,称为表的自身连接需要给表起别名以示区别由于所有属性名都是同名属性,因此必须使用别名前缀如:查询每一门课的间接先修课(即先修课的先修课)SELECTFIRST.Cno,SECOND.CpnoFROMCourseFIRST,CourseSECONDWHEREFIRST.Cpno=SECOND.Cno查询与刘晨在同一个系学习的学生的详细资料selectb.*fromstudenta,studentbwherea.Sdept=b.Sdeptanda.Sname='刘晨'既选修了001又选修002课程的学生学号selecta.snofromsca,scbwherea.sno=b.snoando='001'ando='002'四、外连接外连接与普通连接的区别1.普通连接操作只输出满足连接条件的元组2.外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出左外连接外连接符(*)出现在连接条件的左边 右外连接外连接符(*)出现在连接条件的右边如:查询每个学生的基本情况以及选课情况。包括没有选修课程的学生selectstudent.*,cno,scorefromstudent,scwherestudent.sno=sc.snoselectstudent.*,cno,scorefromstudent,scwherestudent.sno*=sc.sno查询学生的学号,选修课的课程名,成绩,要求没有学生选修的课程名也显示出来。selectsc.sno,cname,scorefromsc,coursewhereo=*o五、复合条件连接WHERE子句中含多个连接条件时,称为复合条件连接如:查询选修002号课程且成绩在90分以上的所有学生的学号、姓名SELECTStudent.Sno,student.SnameFROMStudent,SCWHEREStudent.Sno=SC.SnoANDSC.Cno='002'ANDSC.Score>90多表连接连接操作除了可以是两表连接,还可以是两张以上的表的连接,称为多表连接。Selectstudent.sno,sname,cname,scoreFromstudent,sc,coutseWherestudent.sno=sc.snoandcoutse,cno=o关系数据库与SQL语言----嵌套查询嵌套查询在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块,将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询,而置入的SELECT语句称为子查询。如:selectSnamefromStudentwheresnoin(selectsnofromscwherecno=‘001’)一、使用in的子查询表达式[not]in(子查询)判断表达式的值是否在子查询的结果中。如:查询与“刘晨”在同一个系学习的学生。selectSno,Sname,SdeptfromStudentwhereSdeptIN(selectSdeptfromStudentwhereSname='刘晨')选修了001号课程的学生的学号及姓名。Selectsno,snamefromstudentwhereSnoin(selectsnofromSCwherecno=‘001')二、带有比较运算符的子查询当用户确切知道内层查询返回的是单值,可以用>,<,>=,<=,!=,<>等比较运算符查询与刘晨在同一个系学习的学生selectSno,Sname,SdeptfromStudentwhereSdept=(selectSdeptfromStudentwhereSname=‘刘晨’)三、集合之间的比较some/any/all子查询(some与any等效)表达式比较运算符any(子查询)表达式的值至少与子查询结果中的一个值相比满足比较运算符。表达式比较运算符all(子查询)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论