/*---向表Trainee中插入一条记录---*//*---没有插入photo一列,因此该列可为空---*/INSERTINTOTrainee(TraineeNo,TraineeName,Sex,Address,GradeId,Email,BornDate,IdentityCard)VALUES(10009,'张青',0,'上海虹桥',1,'adc@sohu.com','1985-8-23','12345678901234567x')
/*---表的字段名省略---*/INSERTINTOTraineeVALUES(10010,'刘楠',0,2,'13811112222',DEFAULT,'1983-12-12','adc@aptech.com','123456111112222223')
select*fromTrainee
2.使用SQL删除数据:
/*---删除表Trainee中的数据---*//*---删除编号为10013记录---*/DELETEFROMTraineeWHERETraineeName='张青燕'
DELETEFROMTraineeWHERETraineeName='田园'
/*---删除表Result中数据---*/DELETEFROMResultWHERETraineeNo='20023'
select*fromResult
3.使用SQL修改数据:
/*---修改表Trainee中的数据---*//*---地址不详的实习生地址改为北京女子职业技术学校---*/UPDATETraineeSETAddress='北京女子职业技术学校'WHEREAddress='地址不详'
/*---2010-2-15科目为2的成绩低于95分的实习生加5分---*/UPDATEResultSETTraineeResult=TraineeResult+5WHERETraineeResult<95ANDSubjectNo=2ANDExamDate='2010-2-15'
select*fromResultWHERETraineeResult<95ANDSubjectNo=2ANDExamDate='2010-2-15'
3.使用SQL查询数据:
<1>简单的查询语句
/*--查询所有数据的行和列--*/--查询表Trainee、Grade中所有数据select*fromGradeselect*fromTrainee
/*--查询部分数据的行和部分列--*/selectSubjectName,ClassHourfromSubject--显示部分列SELECT*FROMTraineeWHEREAddress='北京市海淀区'--显示部分行SELECTTraineeNo,TraineeName,AddressFROMTraineeWHEREAddress='北京市海淀区'--显示部分行和部分列
/*--查询对比--*/select*fromSubjectselectsubjectNo,SubjectName,ClassHour,GradeIdfromSubject
/*--查询中使用别名--*/SELECTTraineeNoAS实习生编号,TraineeName实习生姓名,实习生地址=AddressFROMTrainee
/*--在查询中使用常量列--*/SELECT姓名=TraineeName,地址=Address,'河北新龙'AS实习地点FROMTrainee
/*--查询空值--*/SELECTTraineeName,AddressFROMTraineeWHEREEmailISNULL
/*--限制查询数据返回的行数--*/SELECTTOP5TraineeName,AddressFROMTraineeWHERESex=0
SELECTTOP20PERCENTTraineeName,AddressFROMTraineeWHERESex=0
/*--按顺序排列查询结果--*/--降序排列SELECTTraineeNoAS实习生编号,SubjectNoAS科目编号,TraineeResultAS成绩FROMResultWHERETraineeResult>60ORDERBYTraineeResultDESC--升序排列SELECTTraineeNoAS实习生编号,SubjectNoAS科目编号,TraineeResultAS成绩FROMResultWHERETraineeResult>60ORDERBYTraineeResult
<2>聚合函数查询
/*--SUM的应用--*/SELECTSUM(TraineeResult)AS总分FROMResultWHERETraineeNo=20015
/*--AVG的应用--*/SELECTAVG(TraineeResult)AS平均成绩FROMResultWHERESubjectNo=2
/*--MAX和MIN的应用--*/SELECTMAX(TraineeResult)AS最高分,MIN(TraineeResult)AS最低分FROMResultWHERESubjectNo=2
/*--COUNT的应用--*/SELECTCOUNT(*)AS及格人数FROMResultWHERETraineeResult>=60
<3>模糊查询
/*--使用LIKE进行模糊查询--*/SELECT*FROMTraineeWHERETraineeNameLIKE'张%'--查询姓张的实习生SELECT*FROMTraineeWHERETraineeNameLIKE'张_'--查询姓张并且姓名是两个字的实习生SELECT*FROMTraineeWHEREAddressLIKE'%北京%'--查询地址中有“北京”二字的实习生
/*--使用BETWEEN进行模糊查询--*/SELECT*FROMResultWHERETraineeResultBETWEEN70AND80--查询分数在60(含)到80(含)之间的记录SELECT*FROMTraineeWHEREBornDateNOTBETWEEN'1985-1-1'AND'1990-8-1'--查询生日不在1985年1月1日到1990年8月1日之间实习生
/*--使用IN在列举值内进行查询--*/SELECTTraineeNameAS实习生姓名FROMTraineeWHEREAddressIN('北京市海淀区','广州','上海虹桥')ORDERBYAddress--查询地址在北京市海淀区、广州、上海虹桥中的实习生姓名
SELECT*FROMResultWHERESubjectNoIN(3,6,7,8)ORDERBYSubjectNoDESC--查询科目编号在3、6、7、8中的考试记录
<4>内联接查询
/*--内联接查询--*/
--在where子句中指定查询条件
--显示字段列表时,使用表名.字段名SELECTTrainee.TraineeName,Result.SubjectNo,Result.ExamDate,Result.TraineeResultFROMTrainee,ResultWHERETrainee.TraineeNo=Result.TraineeNo
--显示字段列表时,省略表名SELECTTraineeName,SubjectNo,ExamDate,TraineeResultFROMTrainee,ResultWHERETrainee.TraineeNo=Result.TraineeNo
--查询实习生姓名、考试科目、成绩和日期SELECTTraineeName,SubjectName,ExamDate,TraineeResultFROMTrainee,Result,SubjectWHERETrainee.TraineeNo=Result.TraineeNoANDSubject.SubjectNo=Result.SubjectNo
--表名使用别名SELECTT.TraineeNo,TraineeName,SubjectName,ExamDate,TraineeResultFROMTraineeasT,ResultasR,SubjectasSWHERET.TraineeNo=R.TraineeNoANDS.SubjectNo=R.SubjectNo
---使用INNERJOIN…ON实现表间关联SELECTTraineeName,SubjectNo,ExamDate,TraineeResultFROMTraineeINNERJOINResultON(Trainee.TraineeNo=Result.TraineeNo)
--使用AS指定表的别名SELECTTraineeName,SubjectNo,ExamDate,TraineeResultFROMTraineeAST,ResultASRWHERET.TraineeNo=R.TraineeNo
SELECTT.TraineeName,R.SubjectNo,R.ExamDate,R.TraineeResultFROMTraineeASTINNERJOINResultASRON(T.TraineeNo=R.TraineeNo)
--查询实习生姓名、考试科目、成绩和日期,3个表联接查询SELECTTraineeName,SubjectName,ExamDate,TraineeResultFROMTraineeASTINNERJOINResultASRON(T.TraineeNo=R.TraineeNo)INNERJOINSubjectASSON(S.SubjectNo=R.SubjectNo)
<5>外联接查询
/*--外联接查询--*/
--左外联接查询SELECTT.TraineeName,R.SubjectNo,R.TraineeResultFROMTraineeASTLEFTJOINResultASRONT.TraineeNo=R.TraineeNo
SELECTT.TraineeName,R.SubjectNo,R.TraineeResultFROMTraineeASTLEFTOUTERJOINResultASRONT.TraineeNo=R.TraineeNo
--右外联接查询SELECTT.TraineeName,R.SubjectNo,R.TraineeResultFROMTraineeASTRIGHTOUTERJOINResultASRONT.TraineeNo=R.TraineeNo
<6>使用UNION合并查询
--查询科目表中的科目编号和科目、查询实习生信息表中的实习生编号和姓名,然后合并SELECTSubjectNo,SubjectNameFROMSubjectUNIONALLSELECTTraineeNo,TraineeNameFROMTrainee
--在Trainee中查询实习生编号、在Result中查询实习生编号,然后合并--使用ALL合并所有行SELECTTraineeNoFROMTraineeUNIONALLSELECTTraineeNoFROMResult
--不使用ALL删除重复行SELECTTraineeNoFROMTraineeUNIONSELECTTraineeNoFROMResult
<7>分组查询
/*--分组查询--*/--查询获得每门课程的平均成绩SELECTSubjectNo,AVG(TraineeResult)AS课程平均成绩FROMResultGROUPBYSubjectNo
---查询男女实习生的人数各是多少。SELECTCOUNT(*)AS人数,SexFROMTraineeGROUPBYSex
--查询每个年级的总人数。SELECTCOUNT(*)AS年级人数,GradeIdFROMTraineeGROUPBYGradeId
--查询每个科目的平均分并且按照由高到低的顺序排列显示。SELECTSubjectNo,AVG(TraineeResult)AS课程平均成绩FROMResultGROUPBYSubjectNoORDERBYAVG(TraineeResult)DESC
--统计每个学期男女实习生人数SELECTCOUNT(*)AS人数,GradeIdAS年级,SexAS性别FROMTraineeGROUPBYGradeId,SexORDERBYGradeId
--查询年级总人数超过5人的年级SELECTCOUNT(*)AS人数,GradeIdAS年级FROMTraineeGROUPBYGradeIdHAVINGCOUNT(*)>5
--查询平均分及格的课程信息SELECTSubjectNoAS课程编号,AVG(TraineeResult)AS课程平均成绩FROMResultGROUPBYSubjectNoHAVINGAVG(TraineeResult)>=60
--查询每门课程及格总人数和及格实习生的平均分SELECTCOUNT(*)AS人数,AVG(TraineeResult)AS平均分,SubjectNoAS课程FROMResultWHERETraineeResult>=60GROUPBYSubjectNo
--查询每门课程及格总人数和及格平均分在70分以上的记录。SELECTCOUNT(*)AS人数,AVG(TraineeResult)AS平均分,SubjectNoAS课程FROMResultWHERETraineeResult>=60GROUPBYSubjectNoHAVINGAVG(TraineeResult)>=70
<8>查询中使用函数
/*--字符串函数--*/SELECTCHARINDEX('PBDEV','MyPBDEVSubject',1)SELECTCHARINDEX('PBDEV','MyPBDEVSubject',5)
SELECTLEN('SQLServer课程')
SELECTUPPER('sqlserver课程')
SELECTRTRIM('周杰伦')SELECTLTRIM('周杰伦')
SELECTRIGHT('买卖提.吐尔松',3)SELECTRIGHT('买卖提.吐尔松',5)
SELECTREPLACE('莫乐可切','可','兰')
SELECTDATEADD(MM,4,'02/03/2010')--4个月后SELECTDATEADD(DD,4,'02/03/2010')--4天后SELECTDATEADD(YY,4,'02/03/2010')--4年后
SELECTDATEDIFF(MM,'01/06/2010','05/06/2011')SELECTDATEDIFF(DD,'01/06/2010','05/06/2011')SELECTDATEDIFF(YY,'01/06/2010','05/06/2011')
SELECTDATENAME(DW,'12/13/2010')SELECTDATENAME(DAY,'12/13/2010')SELECTDATENAME(DD,'12/13/2010')SELECTDATENAME(MONTH,'12/13/2010')SELECTDATENAME(YY,'12/13/2010')
SELECTDATEPART(DAY,'03/15/2010')SELECTDATEPART(YEAR,'03/15/2010')SELECTDATEPART(MONTH,'03/15/2010')
SELECTDAY('03/15/2010')SELECTYEAR('03/15/2010')SELECTMONTH('03/15/2010')
/*--数学函数--*/SELECTRAND()
SELECTROUND(43.543,1)SELECTROUND(43.545,2)
/*--系统函数--*/SELECTCONVERT(VARCHAR(5),12345)
SELECTCURRENT_USER
SELECTHOST_NAME()
<8>使用SELECTINTO建立新表
--把Trainee表中的TraineeName、Address、Email列值插入到新建表NewAddressList中SELECTTraineeName,Address,EmailINTONewAddressListFROMTrainee