您好,欢迎访问三七文档
SQL语法介绍1SQL简介SQL是什么SQL功能简介1.1什么是SQLSQL(StructuredQueryLanguage,结构查询语言)是一个功能强大的数据库操纵语言。SQL使用场合:应用程序与数据库的通讯通过DBMS或第三方工具,完成一些数据库的操作任务,比如在数据库中更新数据,或者从数据库中检索数据1.2SQL命令分组DML(DataManipulationLanguage,数据操作语言):用于检索或者修改数据DDL(DataDefinitionLanguage,数据定义语言):用于定义数据的结构,比如创建、修改或者删除数据库对象DCL(DataControlLanguage,数据控制语言):用于定义数据库用户的权限1.2.1DML命令SELECT:用于检索数据INSERT:用于增加数据到数据库UPDATE:用于从数据库中修改现存的数据DELETE:用于从数据库中删除数据1.2.2DDL命令CREATETABLE:创建表结构ALTERTABLE:修改表结构DROPTABLE:从数据库中删除表CREATEINDEX:创建索引DROPINDEX:删除索引1.2.3DCL命令ALTERPASSWORD:设置访问口令GRANT:分配权限REVOKE:收回权限CREATESYNONYM:创建替代用户1.2.4SQL功能概述建立数据库的表格改变数据库系统环境设置针对某个数据库或表格,授予用户存取权限对数据库表格建立索引值修改数据库表格结构。(新建、删除或是修改表格字段)对数据库进行数据的新建、删除、修改、查询2SQL命令常用SQL命令SQL语法2.1Select命令功能:从数据库中检索所需要信息。例:从学生表(student)中检索出李明的档案信息,其SQL语法为:Select*fromstudentwhereSNAME=‘李明’2.1.1Select命令语法SELECT[predicate]{*|table.*|[table.]field[,[table.]field2[,...]]}[ASalias1[,alias2[,...]]]FROMtableexpression[,...][INexternaldatabase][WHERE...][GROUPBY...][HAVING...][ORDERBY...][WITHOWNERACCESSOPTION]2.1.2predicateALL,DISTINCT,DISTINCTROWDISTINCT:SelectDISTINCTSNAMEfromstudent2.1.3查询字段所有字段:Select*fromStudent指定查询字段:SelectSNO,SNAMEfromStudent字段换名:SelectSNOas学号,SNAMEas姓名fromStudent查询多表字段:Selecta.SNO,a.SNAME,b.CNAME,b.SCOREfromStudenta,Cursebwherea.SNO=b.SNOSelecta.*,b.CNAME,b.SCOREfromStudenta,Cursebwherea.SNO=b.SNO2.1.4From子句指定从哪些表中获取数据,可以同时给表取一个别名。Selecttop2Student.SNO,Student.SNAME,Curse.CNAME,Curse.SCOREfromStudent,CursewhereStudent.SNO=Curse.SNOSelecttop2a.SNO,a.SNAME,b.CNAME,b.SCOREfromStudenta,Cursebwherea.SNO=b.SNO2.1.5where子句指定从表中获取哪些记录。Select*fromstudentwhereSSEX=‘女’Selecta.SNO,a.SNAME,b.CNAME,b.SCOREfromStudenta,Cursebwherea.SNO=b.SNOandb.SCORE=90Selecta.SNO,a.SNAME,b.CNAME,b.SCOREfromStudenta,Cursebwherea.SNO=b.SNOand((b.SCORE=90anda.SSEX=‘男’)or(b.SCORE=80anda.SSEX=‘女’))2.1.6orderby子句指定结果如何排序:升序:ASC;降序:DESC。Select*fromstudentorderbySNAMESelecta.SNO,a.SNAME,b.CNAME,b.SCOREfromStudenta,Cursebwherea.SNO=b.SNOorderbya.SNAME,b.SCOREDESC2.1.7groupby子句对查询结果进行分组合并。例:查询学生的平均成绩并按平均成绩排序Selecta.SNO,a.SNAME,AVG(b.SCORE)asAVG_SCOREfromStudenta,Cursebwherea.SNO=b.SNOGroupbya.SNO,a.SNAMEOrderByAVG(b.SCORE)2.1.8having子句与groupby子句配套使用,与where类似,但主要是针对分组字段的条件。例:查询平均成绩在85分以上的学生,并显示平均成绩Selecta.SNO,a.SNAME,AVG(b.SCORE)asAVG_SCOREfromStudenta,Cursebwherea.SNO=b.SNOGroupbya.SNO,a.SNAMEhavingAVG(b.SCORE)=85错误写法:Selecta.SNO,a.SNAME,AVG(b.SCORE)asAVG_SCOREfromStudenta,Cursebwherea.SNO=b.SNOandAVG(b.SCORE)=85Groupbya.SNO,a.SNAME2.2SQL的特殊操作IN操作符LIKE操作符SQL的运算符及表达式SQL的统计函数Between…and运算符Union操作INNERJOIN操作2.2.1in操作符用在where后,当同时查询多个条件时,用以简化写法Select*fromstudentwhereSNAMEin(‘李明’,‘成功’)等价SQL语句:Select*fromstudentwhereSNAME=‘李明’orSNAME=‘成功’exists/notexists多层SQL查询2.2.2like操作符实现模糊查询。例:找出所有姓李的学生Select*fromstudentwhereSNAMElike‘李%’2.2.3运算符及表达式1、算术运算符()分组括号*、/乘、除+、-加、减算术运算符的优先次序为括号、乘方、乘除和加减,同级运算从左到右依次进行例:还有多少年退休:SelectSNO,SNAME,60-SOLDasTX_OLDfromstudent45年以后已退休的有哪些:Select*fromstudentwhereSOLD+45=602.2.3运算符及表达式2、关系运算符小于大于=等于=小于等于=大于等于不等于字符的比较是按ASCII码的大小进行的,汉字是按机内码比较大小的。对于表达式则是先算表达式的值,然后用值比较大小。例:Select*fromstudentwhereSOLD+45=602.2.3运算符及表达式3、逻辑运算符AND逻辑与OR逻辑或NOT逻辑非逻辑运算符的优先次序为:NOT→AND→OR表达式的运算顺序是先关系表达式后逻辑表达式例:Select*fromstudentwhere(SOLD+45=60andSSEX=‘男’)or(SOLD+45=55andSSEX=‘女’)2.2.4数学函数1、AVG(字段名或表达式):算数平均数Selectavg(sold)asavg_oldfromstudent2、COUNT(字段名或表达式):计算记录条数SelectCOUNT(*)asNSRSfromstudentwhereSSEX=‘女’3、SUM(字段名或表达式):返回某特定字段或是运算的总和数值。Selectsum(score)ast_scorefromCursewheresno=‘870101’4、MAX(字段名或表达式)、MIN(字段名或表达式):求最大、最小值上述统计函数多与groupby联合使用。例:统计出每门课的最高分SelectCNAME,MAX(SCORE)asMAX_SCORE,MIN(Score)asMIN_SCOREfromCursegroupbyCNAME2.2.5BETWEEN...AND决定某一数值是否介于特定的范围之内例:查询年龄在18-20岁之间的学生Select*fromstudentwheresoldBETWEEN25AND30等价于:Select*fromstudentwheresold=25ANDsold=302.2.6多层SQL例:查询所有平均成绩在85分以上学生的名单Select*fromstudentwheresnoin(selectsnofromCursegroupbysnohavingavg(score)=85)试比较:SELECTa.sno,a.sname,avg(b.score)asavg_scoreFROMstudentASa,CurseASbWHEREa.sno=b.snoGROUPBYa.sno,a.snameHAVINGavg(b.score)=852.2.7union将两个以上的表格或是查询的结果组合起来,但组合的两部分内容必须具有相同的结构。例:将两个表中的男生数据提出来放在一起Select*fromstudent1wheressex=‘男’unionselect*fromstudent2wheressex=‘男’表的连接有内连接和外连接,其中外连接又分为左外连接、右外连接和全外连接内连接(或简单表连接innerjoin),就是只在结果中包含根据连接谓词(on后面的语句)所匹配的行,不包含那些不匹配的行。左外连接(leftjoin)返回那些存在于左表而右表中却没有的行,加上内连接的行。那些来自保留行表(左表)的未匹配行会被保留,而那些来自替换NULL的表(右表)中的行会以NULL替换。右外连接(rightjoin)返回那些存在于右表而左表中没有的行,加上内连接的行。那些来自保留行表(右表)的未匹配行会被保留,而那些来自替换NULL的表(左表)中的行会由NULL替换。全外连接(fulljoin)返回那些存在于右表但不存在于左表的行,加上那些存在于左表但不存在于右表的行,还有内连接的行。2.2.8join2.2.9join当某一个共同的字段数据相等时,将两个表格的记录加以组合。例:从两个表中提取学生档案及成绩SELECTstudent.sno,student.sname,Curse.cname,Curse.scoreFROMstudentINNERJOINCurseONstudent.sno=Curse.sno•Outerjoin•Fulljoin2.3数据更新语句Update:更新表中已有的数据Insertinto:向表添加新的数据DeleteFrom:删除表中的记录2.3.1update语句更新指定条件的数据。UPDATEtableSETnewvalueWHEREcriteria例:更新学生成绩UpdateCursesetscore=65wheresno=‘870102’andcname=‘微机原理与应用’UpdateCursesetscore=75,cname=‘数据结构’wheresno=‘870102’andcname=‘微机原理与应用’所有学生的年龄加1Updatestudentsetsold=sold+12.3.1insertinto语句向表中增加新的数据。INSERTINTO表名(字段列表)values(值列表)例:增加新的成绩Insert
本文标题:SQL基本用法介绍
链接地址:https://www.777doc.com/doc-4304837 .html