网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

SQL语句基本语法

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

【网学网提醒】:网学会员编辑为广大网友搜集整理了:SQL语句基本语法绩等信息,祝愿广大网友取得需要的信息,参考学习。


    为了大家更容易理解我举出的SQL语句,本文假定已经建立了一个学生成绩管理数据库,全文均以学生成绩的管理为例来描述。1.在查询结果中显示列名:a.用as关键字:selectnameas''fromstudentsorderbyageb.直接表示:selectname''fromstudentsorderbyage2.精确查找:a.用in限定范围:select*fromstudentswherenativein('湖南','四川')b.between...and:select*fromstudentswhereagebetween20and30c.“=”:select*fromstudentswherename='李山'd.like:select*fromstudentswherenamelike'李%'(注意查询条件中有“%”则说明是部分匹配,,而且还有先后信息在里面,即查找以“李”开头的匹配项。所以若查询有“李”的所有对象,应该命令:'%李%';若是第二个字为李,则应为'_李%'或'_李'或'_李_'。)e.[]匹配检查符:select*fromcourseswherecnolike'[AC]%'(表示或的关系,与"in(...)"类似,而且"[]"可以表示范围,如:select*fromcourseswherecnolike'[A-C]%')3.对于时间类型变量的处理a.smalldatetime:直接按照字符串处理的方式进行处理,例如:
     select*fromstudentswherebirth>='1980-1-1'andbirth<='1980-12-31'
    4.集函数
    a.count()求和,如:selectcount(*)fromstudents(求学生总人数)
    b.avg(列)求平均,如:selectavg(mark)fromgradeswherecno=’B2’c.max(列)和min(列),求最大与最小5.分组group常用于统计时,如分组查总数:selectgender,count(sno)fromstudentsgroupbygender(查看男女学生各有多少)注意:从哪种角度分组就从哪列"groupby"对于多重分组,只需将分组规则罗列。比如查询各届各专业的男女同学人数,那么分组规则有:届别(grade)、专业(mno)和性别(gender),所以有"groupbygrade,mno,gender"selectgrade,mno,gender,count(*)fromstudentsgroupbygrade,mno,gender
     通常group还和having联用,比如查询1门课以上不及格的学生,则按(sno)分类有:selectsno,count(*)fromgradeswheremark<60groupbysnohavingcount(*)>16.UNION联合合并查询结果,如:SELECT*FROMstudentsWHEREnamelike‘张%’UNION[ALL]SELECT*FROMstudentsWHEREnamelike‘李%’7.多表查询a.内连接selectg.sno,s.name,c.coursenamefromgradesgJOINstudentssONg.sno=s.snoJOINcoursescONgo=co(注意可以引用别名)b.外连接b1.左连接selectcourseso,max(coursename),count(sno)fromcoursesLEFTJOINgradesONcourseso=gradeso
     groupbycourseso
    左连接特点:显示全部左边表中的所有项目,即使其中有些项中的数据未填写完全。左外连接返回那些存在于左表而右表中却没有的行,再加上内连接的行。b2.右连接与左连接类似b3.全连接selectsno,name,majorfromstudentsFULLJOINmajorsONstudents.mno=maj
    ors.mno两边表中的内容全部显示c.自身连接selectc1o,c1.coursename,c1.pno,c2.coursenamefromcoursesc1,coursesc2wherec1.pno=c2o采用别名解决问题。d.交叉连接selectlastname+firstnamefromlastnameCROSSJOINfirstanme相当于做笛卡儿积jion语句有三种,innerjoin,leftouterjoin和rightouterjoin都可以简写,分别为jion,leftjoin,rightjion。jion语句可以用来组合两个表中的记录,只要在公共字段之中有
     相符的值即可,该语句联合两个表查询得到的结果是可以添加新的数据,可以把它看成将两个具有相关内容的表联接在一起新生成的表,而一般的select语句没有这个功能。INNERJOIN连接两个数据表的用法:SELECT*FROM表1INNERJOIN表2ON表1.字段号=表2.字段号INNERJOIN连接三个数据表的用法:SELECT*FROM(表1INNERJOIN表2ON表1.字段号=表2.字段号)INNERJOIN表3ON表1.字段号=表3.字段号
    INNERJOIN连接四个数据表的用法:SELECT*FROM((表1INNERJOIN表2ON表1.字段号=表2.字段号)INNERJOIN表3ON表1.字段号=表3.字段号)INNERJOIN表4ONMember.字段号=表4.字段号
    INNERJOIN连接五个数据表的用法:SELECT*FROM(((表1INNERJOIN表2ON表1.字段号=表2.字段号)INNERJOIN表3ON表1.字段号=表3.字段号)INNERJOIN表4ONMember.字段号=表4.字段号)INNERJOIN表5ONMember.字段号=表5.字段号1)内连接,内连接,innerjoin...on语句格式:FROM(((表1INNERJOIN表2ON表1.字段号=表2.字段号)
     INNERJOIN表3ON表1.字段号=表3.字段号)INNERJOIN表4ONMember.字段号=表4.字段号)INNERJOIN表XONMember.字段号=表X.字段号例子:SELECT*FROM(((MemberINNERJOINMemberSortINNERONJOIN
    Member.MemberSort=MemberSort.MemberSort)
    MemberLevelONMember.MemberLevel=MemberLevel.MemberLevel)INNERJOINMemberIdentityONINNER
    Member.MemberIdentity=MemberIdentity.MemberIdentity)JOINWedlockONMember.Wedlock=Wedlock.WedlockORDERBYMemberDateDESC
    内连接的功能是,把两个表相关联的记录列出来,必须是相关联的记录。2)左外连接,左外连接,leftouterjoin...on
    语句格式:FROM[表名1]LEFTJOIN[表名2]ON[表名1.字段A]〈关系运算符〉[表名2.字段B]其实LEFTJOIN的功能就是将LEFT左边的表名1中的所有记录全部保留,而将右边的表名2中的字段B与表名1.字段A相对应的记录显示出来(当使用SELECT*时)。RIGHTJOIN和LEFTJOIN相而反。
     外连接的功能是,把LEFT左边的表中的所有记录保留,而右边表只保留相关联的记录,也就是先执行一次INNERJOIN,然后把LEFT左边的表中的与右边表没有任何关联的记录也保留,而右边表的字段为null.3)右外连接,3)右外连接,rightouterjoin...on右
    外连接与leftjoin左右相反。4)全连接,fulljoin...on(不常使用,只能用于outer)4)全连接,on(不常使用,全连接不常使用功能结合了以上三种联军,先执行一次innerjoin,然后把两个表的多余字段都保留,但连接的对应字段为null.如果想将几个表联接起来,JOIN操作中我们可以进行嵌套操作,在有三个表:表1、表2、表3,现在将三个表联接起来:FROM(表1INNERJOIN表2ON表1.序号=表2.序号)INNERJOIN表3ON表1.序号=表3.序号
    8.嵌套查询
    a.用关键字IN,如查询李山的同乡:
    select*fromstudentswherenativein(selectnativefromstudentswherename=’李山’)
     b.使用关键字EXIST,比如,下面两句是等价的:
    select*fromstudentswheresnoin(selectsnofromgradeswherecno=’B2’)
    select*fromstudentswhereexists(select*fromgradeswheregrades.sno=students.snoANDcno=’B2’)
    9.关于排序order
    a.对于排序order,有两种方法:asc升序和desc降序
    b.对于排序order,可以按照查询条件中的某项排列,而且这项可用数字表示,如:selectsno,count(*),avg(mark)fromgradesgroupbysnohavingavg(mark)>85orderby310.其他a.对于有空格的识别名称,应该用"[]"括住。b.对于某列中没有数据的特定查询可以用null判断,如select
     sno,coursenofromgradeswheremarkISNULL
    c.注意区分在嵌套查询中使用的any与all的区别,any相当于逻辑运算“||”而all则相当于逻辑运算“&;&;”d.注意在做否定意义的查询是小心进入陷阱:如,没有选修‘B2’课程的学生:selectstudents.*fromstudents,gradeswherestudents.sno=grades.snoANDgradeso<>’B2’上面的查询方式是错误的,正确方式见下方:select*fromstudentswherenotexists(select*fromgradeswheregrades.sno=students.snoANDcno='B2')11.关于有难度多重嵌套查询的解决思想:如,选修了全部课程的学生:select*fromstudentswherenotexists(select*fromcourseswhereNOTEXISTS(select*fromgradeswheresno=students.snoAND
    cno=courseso))最外一重:从学生表中选,排除那些有课没选的。notexist。用由于讨论对象是课程,所以第二重查询从course表中找,排除那些
     选了课的即可。
    INSERTINTO"表格名("栏位1","栏位2",...)表格名"栏位表格名栏位VALUES("值1","值2",...)值值
    假设我们有一个架构如下的表格:Store_Information表格
    ColumnNameDataTypestore_nameSalesDatechar(50)floatdatetime
    而我们要加以下的这一笔资料进去这个表格:在January10,1999,LosAngeles店有$900的营业额。我们就打入以下的SQL语句:INSERTINTOStore_Information(store_name,Sales,Date)VALUES('LosAngeles',900,'Jan-10-1999')第二种INSERTINTO能够让我们一次输入多
    笔的资料。跟上面刚的例子不如果您想说,同的是,现在我们要用SELECT指令来指明要输入表格的资料。这是不是说资料是从另一个表格来的,那您就想对了。一次输入多笔的资料的语法是:INSERTINTO"表格1"("栏位1","栏位2",...)表格栏位栏位SELECT"栏位3","栏位4",...栏位栏位FROM"表格2"表格以上的语法是最基本的。这整句SQL也可以含有WHERE、GROUPBY、及HAVING等子句,以及表格连接及别名等等。举例来说,若我们想要将1998年的营业额资料放入Store_Information表格,而我们知道资料的来源是可以由Sales_Information表格取得的话,那我们就可以打入以下的SQL:INSERTINTOStore_Information(store_name,Sales,Date)SELECTstore_name,Sales,DateFROMSales_InformationWHEREYear(Date)=1998
     描述UPDATE改变满足条件的所有行的声明了的列/字段的值。只有要更改变满足条件的所有行的声明了的列/字段的值。改的列/子句中出现,改的列/字段需要在SET子句中出现,没有明确修改的字段保持它们原来的数值。原来的数值。缺省时,UPDATE将更新所声明的表和所有子表的记录。如果你希望将更新所声明的表和所有子表的记录。缺省时,只更新所声明的表,子句。只更新所声明的表,你应该使用ONLY子句。使用存在于同个数据库里其它表的信息来更新一个表,使用存在于同个数据库里其它表的信息来更新一个表,有两种方法可以用:使用子查询,子句里声明另外一个表。以用:使用子查询,或者在FROM子句里声明另外一个表。哪个方法更好取决于具体的环境。法更好取决于具体的环境。要更改表,权限,要更改表,你必须对它有UPDATE权限,同样对expression或者权限。condition条件里提到的任何表也要有SELECT权限。参数table现存表的名称(可以有模式修饰)。现存表的名称(可以有模式修饰)column中字段名。必要时,表table中字段名。必要时,字段名可以用子域名或者数组下标修饰。expression赋予列/字段的一个有效的值或表达式。赋予列/字段的一个有效的值或表达式。表达式可以使用表中这个或其它字段的旧数值。其它字段的旧数值。DEFAULT把字段设置为它的缺省值(如果没有缺省表达式赋予它,那么就是把字段设置为它的缺省值(如果没有缺省表达式赋予它,
     NULL)。NULL)fromlist一个表表达式的列表,允许来自其它表中的字段出现在一个表表达式的列表,允许来自其它表中的字段出现在WHERE条件里。这个类似于可以在一个SELECT语句的FROM子句里声明表列表。请注意目标表绝对不能出现在fromlist里,除非你
    是在使用(这个时候,它必须以fromlist的一个别名的形式出现)的一个别名的形式出现)一个自连接这个时候,。
    condition一个表达式,类型。一个表达式,返回boolean类型。只有这个表达式返回true的行被更新。被更新。输出成功完成后,UPDATE命令返回形如成功完成后,
    UPDATEcount的命令标签。是更新的行数。的命令标签。count是更新的行数。如果count是0,那么没有的行(这个不认为是错误)符合condition的行(这个不认为是错误)。注意子句的时候,在出现FROM子句的时候,实际上发生的事情是目标表和fromlist里提到的表连接在一起,并且每个连接输出行都代表一个目标表的更里提到的表连接在一起,新操作。的时候,新操作。再使用FROM的时候,你应该保证连接为每个需要修改的行最多生成一个输出行。换句话说,行最多生成一个输出行。换句话说,一个目标行不应该和超过一行来自其它表的数据行连接。如果它连接了多于一个行,那么连接行来自其它表的数据行连接。如果它连接了多于一个行,
     里面将会只有一行用于更新目标行,里面将会只有一行用于更新目标行,但是使用哪行是一个很难预期的事情。的事情。
    因为这个不确定性,只再子查询里面引用其它表是安全的,因为这个不确定性,只再子查询里面引用其它表是安全的,尽管通常更难读并且比使用连接也更慢些。常更难读并且比使用连接也更慢些。例子把表films里的字段kind里的词Drama用Dramatic代替:代替:'Dramatic'UPDATEfilmsSETkind='Dramatic'WHEREkind='Drama';中的一行的温度记录并且把降水设置为缺省值:调整表weather中的一行的温度记录并且把降水设置为缺省值:UPDATEweatherSETtemp_lo=temp_lo+1,temp_hi=temp_lo+15,prcp=DEFAULTWHEREcity='SanFrancisco'ANDdate='2003-07-03';Francisco''2003-07公司客户的销售的销售计数,子句语法:增加负责Acme公司客户的销售的销售计数,使用FROM子句语法:UPDATEemployeesSETsales_count=sales_count+1FROMaccountsWHEREaccounts.name='AcmeCorporation'ANDemployees.id=accounts.sales_person;执行同样的操作,子句里的子查询:执行同样的操作,使用WHERE子句里的子查询:
    UPDATEUPDATEemployeesSETsales_count=sales_count+1WHEREid=(SELECTsales_personFROMaccountsWHEREname='Acme
     Corporation');试图带着库存量插入一个新的库存项。试图带着库存量插入一个新的库存项。如果该项存在,如果该项存在,则更新现有项的库存数。要做这件事情而又不使整个事务失效,的库存数。要做这件事情而又不使整个事务失效,使用保留点
    。(savepoints)savepoints)BEGIN;--其它操作SAVEPOINTsp1;VALUES('ChateauINSERTINTOwinesVALUES('ChateauLafite2003','24');假设上面的因为一个唯一键字违反而失效,--假设上面的因为一个唯一键字违反而失效,因此现在我们发出这些命令:--因此现在我们发出这些命令:ROLLBACKTOsp1;UPDATEwinesSETstock=stock+24WHEREwinename='ChateauLafite2003';继续其它操作,--继续其它操作,最后COMMIT;兼容性这条命令遵循SQL标准。只是FROM子句是PostgreSQL扩展。标准。扩展。选项,在这个选项下,有些其它数据库系统提供一个FROM选项,在这个选项下,认为目里列出。标表会再次在FROM里列出。这不是PostgreSQL解析FROM的方移植使用这类扩展的应用的时候要注意。式。移植使用这类扩展的应用的时候要注意。
    举例子说吧建表createtabletest_1(first_namechar(15),last_namechar(20));添加列altertabletest_1addhire_datedate;
     改列名altertabletest_1renamecolumnhire_datetohire_name_date;改类型altertabletest_1modifyhire_name_datevarchar2(20);插入语句就用INSERTINTO要插入表名VALUES(要插入的内容1,要插入的内容2,......要插入的内容N);修改就用UPDATA表名SET要修改的列名=新列名WHERE列名=数据;数据导入用INSERTINTO目标表名(SELECT要导的列FROM源表名);
    不知道我说的怎么样
    ALTERTABLE语句
    ALTERTABLE语句用于在已有的表中添加、修改或删除列。
    SQLALTERTABLE语法如需在表中添加列,请使用下列语法:
    ALTERTABLEtable_nameADDcolumn_namedatatype
    要删除表中的列,请使用下列语法:
    ALTERTABLEtable_nameDROPCOLUMNcolumn_name
    注释:注释:某些数据库系统不允许这种在数据库表中删除列的方式(DROPCOLUMNcolumn_name)。
    要改变表中列的数据类型,请使用下列语法:
    ALTERTABLEtable_nameALTERCOLUMNcolumn_namedatatype
    Selecttop20000*fromtabalename(表名)是指把表的前20000条记录查询出来
    如表:学生信息表(学生,,性别,系别号)系别信息表(系别号,系别名)
     1、实体完整性约束--就是常说的主键约束,用来区分两条不同的记录。上面的学生编号建成主键后,通过它可以区分学生的记录。2、参照完整性--就是常说的外键约束,用来保证数据的整合性。上面的学生信息表中的系别号就是一种情况,它必须在系别信息表中存在在可以,系别信息表中的系别号就可以设置成学生信息表的外键。3、域完整性约束--就是常说的check约束上面的学生信息表中的性别字段只能有男或者女,这样就可以建一个check约束,限制该字段只能输入男或者女。
    有两个意义上的重复记录,一是完
    全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。1、对于第一种重复,比较容易解决,使用selectdistinct*fromtableName就可以得到无重复记录的结果集。如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除selectdistinct*into#TmpfromtableNamedroptabletableNameselect*intotableNamefrom#Tmpdroptable#Tmp发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。SQLServerselectidentity(int,1,1)asautoID,*into#TmpfromtableName;selectmin(autoID)asautoIDinto#Tmp2from#TmpgroupbyName,Address;droptabletableName;select*intotableNamefrom#TmpwhereautoIDin(selectautoIDfrom#Tmp2);Bbs.Svn8.Comdroptable#Tmp;Bbs.Svn8.Com
     droptable#Tmp2;本文来自Svn中文网[svn8]转发请保留本站地址:svn8/sql/Oracle/2010062438932.html
    存储过程
    createproctest(@aint,@bvarchar(250))assetnocounton
    setnocountoff
    
    
  • 上一篇资讯: sql语句学习
  • 下一篇资讯: SQL语句和vfp命令学习
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师