《SQL-入门新手教程(重要).docx》由会员分享,可在线阅读,更多相关《SQL-入门新手教程(重要).docx(167页珍藏版)》请在课桌文档上搜索。
1、SQ1.是用于访问U1阵的标港的计,机甯什么是SQ1.?SQ1.指结构化查询语言SQ1.使我们有实力访问数据库SQ1.是一种ANSI的标准计算机语言编者注:ANSI,美国国家标准化组织SQ1.能做什么?SQ1.面对数据库执行查沟SQ1.可从数据库取回数据SQ1.可在数据库中插入新的纪隶SQ1.可更新数据库中的数据SQ1.可从数据库删除记录SQ1.可创建新数据库SQ1.可在数据库中创建新表SQ1.可在数据库中创建存储过程SQ1.可在数据库中创建视图SQ1.可以设置表、存储过程和视图的权限SQ1.是一种标潘-但是SQ1.是一nANSI的标准计算机语言,用来访问和操作数据库系统。SQ1.语句用于取I
2、nl和更新数据库中的数据。SQ1.可与数据库程序协同工作,比如MSACCess、DB2、Informix、MSSQ1.Server-.Oracle、Sybase以和其他数据库系统。不幸地是,存在着许多不同版本的SQ1.语言,但是为了与ANSI标准相兼容,它们必需以相像的方式共同地来支持一些主要的关键词(比如SE1.ECT、UPDATE.DE1.ETE.INSERT.WHERE等等)。注释:除了SQ1.标准之外,大部分SQ1.数据库程序都拥有它们自己的私有扩展!在罐的网站中运用SQ1.要创建发布数据库中数据的网站,您须要以下要素:.RDBMS数据库程序(比如MSAccess,SQ1.Server
3、,MySQ1.)服务器端脚本语言(比如PHP或SP)SQ1.HTM1./CSSRDBMSRDBMS指的是关系型数据库管理系统。RDBMS是SQ1.的基础,同样也是全部现代数据库系统的基础,比如MSSQ1.Server,IBMDB2,Oracle,MySQ1.以和MicrosoftAccessoRDBMS中的数据存储在被称为表(tables)的数据库对象中。表是相关的数据项的集合,它由列和行组成CSQ1.语法数据库表一个数据库通常包含一个或多个表。每个表由一个名字标识(例如“客户”或者“订单”)。表包含带有数据的记录(行)。下面的例子是一个名为Persons”的表:Id1.astNameFirs
4、tNameAddressCity1AdamsJohnOxfordStreet1.xndon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijing上面的表包含三条记录(每一条对应个人)和五个列(3、姓、名、地址和城市)。SQ1.语句您须要在数据库上执行的大部分工作都由SQ1.语句完成。下面的语句从表中选取1.astNamc列的数据:SE1.ECT1.astNameFROMPersons在本教程中,我们将为您讲解各种不同的SQ1.语句。肯定要记住,SQ1.对大小写不SQ1.语句后密的分号?某些数据库系统要求在每条SQ1.吩咐的末
5、端运用分号。在我们的教程中不运用分号。分号是在数据库系统中分隔每条SQ1.语句的标准方法,这样就可以在对服务器的相同恳求中执行一条以上的语句。假如您运用的是MSAccess和SQ1.SerVer2000,则不必在每条SQ1.语句之后运用分号,不过某些数据即软件要求必需运用分号。SQ1.DM1.和DD1.可以把SQ1.分为两个部分:数据操作语言(DM1.)和数据定义语言(DD1.)oSQ1.(结构化查询语言)是用于执行查询的语法。但是SQ1.语言也包含用于更新、插入和删除记录的语法。杳询和更新指令构成了SQ1.的DM1.部分: SE1.ECT-从数据库表中获得数据 UPDATE更新数据库表中的数
6、据 DE1.ETE从数据库表中删除数据.Insertinto-向数据库表中插入数据SQ1.的数据定义语言(DD1.)部分使我们有实力创建或删除表格我们也可以定义索引(键),规定表之间的链接,以和施加表间的约束。SQ1.中最重要的DD1.语句:.CREATEDATABASE-创建新数据库 A1.TERDATABASE-修改数据库.Createtable-创建新表.Altertable-变更(变更)数据库表 DROPTAB1.E删除表.Createindex-创建索引(搜寸SQ1.SE1.ECT晒本章讲解SE1.ECT和SE1.ECT*语句。SQ1.SE1.ECT毗SE1.ECT语句用于从表中选取
7、数据。结果被存储在一个结果表中(称为结果集)。SQ1.SE1.ECT语法SE1.ECT列名称FROM表名称以和:SE1.ECTiFROM表名称注郭:SQ1.语句对大小写不敏感。SE1.ECT等效于select,SQ1.SE1.ECT实例如需获得名为“1.astName和FirstName的列的内容(从名为Persons的数据库表),请运用类似这样的SE1.ECT语句:SE1.ECT1.astNamejFirstNameFROMPersonsPersons表:Id1.astNameFirstNameAddressCity1AdamsJohnOxfordStreet1.xndon2BushGeor
8、geFifthAvenueNewYork3CarterThomasChanganStreetBeijing结果:1.astNameFirstNameAdamsJohnBushGeorgeCarterThomasSQ1.SE1.ECT*实例现在我们希望从Persons表中选取全部的列。请运用符号*取代列的名称,就像这样:SE1.ECT*FROMPersons提示:星号(*)是选取全部列的快捷方式。结果:Id1.astNameFirstNamcAddressCity1AdamsJohnOxfordStreet1.ondon2BushGeorgeFifthAvenueNewYork3CarterTh
9、omasChanganStreetBeijing在结果集(reult-8et)中导航由SQ1.杳询程序获得的结果被存放在一个结果集中。大多数数据库软件系统都允许运用编程函数在结果集中进行导航,比如:MoVe-To-FirSt-ReCord、Get-Record-ContentMove-To-Next-Record等等。类似这些编程函数不在本教程讲解之列。如需学习通过函数调用访问数据的学问,请访问我们的ADO教程和PHP教程CSQ1.SE1.ECTDISTINCT附本章讲解Selectdistinct语句。SQ1.SE1.ECTDISTINCT硒在表中,可能会包含重且值。这并不成问题,不过,有时
10、您或许希里仅仅列出不同(distinct)的值。关键词DISTINCT用于返Iq唯一不同的值。语法:SE1.ECTDISTINCT列名称FROM表名称运用DISTINCT关领假如要从Company列中选取余部的值,我们须要运用SE1.ECT语句:SE1.ECTCompanyFROMOrdersPrder8*CompanyOrderNumberIBM3532W3School2356Apple4698W3School6953结果:CompanyIBMW3SchoolAppleW3School请留意,在结果集中,W3School被列出了两次。如需从Company列中仅选取唯一不同的值,我们须要运用S
11、E1.ECTDISTINCT语句:SE1.ECTDISTINCTCompanyFROMOrdersCompanyIBMW3SchoolApple现在,在结果集中,W3School仅被列出了一次。SqlwhereWHERE子句用于规定选算的标准。WHERE-如需方条件地从表中选取数据,可将WHERE子句添加到SE1.ECT语语法SE1.ECT列名称FROM表名称WHERE列运算符值O不等于大于=大于等于=小于等于BETWEEN在某个范围内1.IKE搜寻某种模式注祥:在某些版本的SQ1.中,操作符可以写为!一运用WHERE子句假如只希望选取居住在城市Beijing中的人,我们须要向SE1.ECT语
12、句添加WHERE子句:SE1.ECT*FROMPersonsWHERECity=BeijingPersons表1.astNameFirstNameAddressCityYearAdamSJohnOxfordStreet1.xndon1970BushGeorgeFifthAvenueNewYork1975CarterThomasChanganStreetBeijing1980GatesBillXuanwumen10Beijing1985结果:1.astNameFirstNameAddressCityYearCarterThomasChanganStreetBeijing1980GatesBill
13、Xuanwumen10Beijing1985引号的运用请留意,我们在例子中的条件值四周运用的是单引号。SQ1.运用单引号来环绕文本值(大部分数据库系统也接受双引号)。假如是数值,请不要运用引号。文这是正确的:SE1.ECT*FROMPersonsWHEREFirstName=Bush这是错识的:SE1.ECT*FROMPersonsWHEREFirstName=Bush数值:这是正确的:SE1.ECT*FROMPersonsWHEREYear1965这是错误的:SE1.ECT*FROMPersonsWHEREYeaAI965SQ1.AND&OR运算符ANDOR运算符用于基于一个以上的条件对圮录
14、进行过猛。AND和OR运算符AND和OR可在WHERE子语句中把两个或多个条件结合起来。假如第一个条件和其次个条件都成立,则AND运算符显示一条记求。假如第一个条件和其次个条件中只要力一个成立,则OR运算符显示一条记录。原始的表(用在例子中的):1.astNameFirstNameAddressCityAdamsJohnOxfordStreet1.ondonBushGeorgeFifthAvenueNewYorkCarterThomasChanganStreetBeijingCarterWilliamXuanwumen10BeijingAND运算符实例运用AND来显示全部姓为Carter并且名
15、为Thomas的人:SE1.ECT*FROMPersonsWHEREFirstName=ThomasAND1.astName=1Carter结果:1.astNameFirstNameAddressCityCarterThomasChanganStreetBeijingOR运算符实例运用OR来显示全部姓为-Carter或者名为Thomas的人:SE1.ECT*FROMPersonsWHEREfirstname=Thomas,ORIastname=1Carter结果:1.astNameFirstNameAddressCityCarterThomasChanganStreetBeijingCarte
16、rWilliamXuanwumen10Beijing结合AND和OR运算符我们也可以把AND和OR结合起来(运用网括号来组成困难的表达式):SE1.ECT*FROMPersonsWHERE(FirstName=1ThomasORFirstName=1William)AND1.astName=1Carter结果:1.astNameFirstNameAddressCityCarterThomasChanganStreetBeijingCarterWilliamXuanwumen10BeijingSQ1.ORDERBYORDERBY语句用于对结果集进行排序。ORDERBYMORDERBY语句用于依据
17、指定的列对结果集进行排序。ORDERBY语句默认依据升序对记录进行排序。假如您希望依据降序对记录进行排序,可以运用DESC关健字。原始的表(用在例子中的):Orders表:CompanyOrderNumberIBM3532W3School2356Apple4698W3School6953物1以字母依次显示公司名称:SE1.ECTCompany,OrderNumberFROMOrdersORDERBYCompany结果:CompanyOrderNumberApple4698IBM3532W3School6953W3School2356加2以字母依次显示公司名称(Company),并以数字依次显示
18、依次号(OrderNumber):SE1.ECTCompany,OrderNumberFROMOrdersORDERBYCompany,OrderNumber结果:CompanyOrderNumberApple4698IBM3532W3School2356W3School6953物3以逆字母依次显示公司名称:SE1.ECTCompany,OrderNumberFROMOrdersORDERBYCompanyDESC结果:CompanyOrderNumberW3School6953W3School2356IBM3532Apple4698物4以逆字母依次显示公司名称,并以数字依次显示依次号:SE1
19、.ECTCompany,OrderNumberFROMOrdersORDERBYCompanyDESC,OrderNumberASC结果:CompanyOrderNumberW3School2356W3School6953IBM3532Apple4698*:在以上的结果中有两个相等的公司名称(W3School)o只有这一次,在第一列中有相同的值时,其次列是以升序排列的。假如第一列中方些值为nulls时,状况也是这样的。SQ1.INSERTINTO硝INSERTINTOMINSERTINTO语句用于向表格中插入新的行。语法INSERTINTO表名称VA1.UES(值1,值2,.J我们也可以指定所
20、要插入数据的列:INSERTINTOtable_name(列1,列2,.JVA1.UES(值1,值2)入新的行Persons表:1.astNameFirstNameAddressCityCarterThomasChanganStreetBeijingSQ1.*INSERTINTOPersonsVA1.UES(Gates,Bill;Xuanwumen10,Beijing)结果:1.astNameFirstNameAddressCityCarterThomasChanganStreetBeijingGatesBillXUanWUmen10Beijing在指定的列中插入聂据Persons表:1.as
21、tNameFirstNameAddressCityCarterThomasChanganStreetBeijingGatesBillXuanwumen10BeijingSQ1.语句:INSERTINTOPersons(1.astName,Address)VA1.UES(Wilson;Champs-Elysees)结果:1.astNameFirstNameAddressCityCarterThomasChanganStreetBeijingGatesBillXuanwumen10BeijingWilsonChamps-ElyseesSQ1.UPDATEUpdate语句Update语句用于修改表中
22、的数据.语法:UPDATE表名称SET列名称=新值WHERE列名称=某值Person:1.astNameFirstNameAddressCityGatesBillXUanWUmen10BeijingWilsonChamps-Elysees更新某一行中的一个列我们为lastname是Wilson的人添加firstname:UPDATEPersonSETFirstName=FredWHERE1.astName=,Wilson,结果:1.astNameFiratNameAddressCityGatesBillXUanWUmen10BeijingWilsonFredChamps-Elysees更新某一
23、行中的若干列我们会修改地址(address),并添加城市.名称(City):UPDATEPersonSETAddress=Zhongshan23,City=NanjingWHERE1.astName=Wilson结果:1.astNameFirstNameAddressCityGatesBillXuanwumen10BeijingVVilsonFredZhongshan23NanjingSQ1.DE1.ETEDE1.ETE聃delete语句用于删除表中的行。语法DE1.ETEFROM表名称WHERE列名称=值Person:1.astNameFirstNameAddressCityGatesBil
24、lXuanwumen10BeijingWilsonFredZhongshan23Nanjing陈某行FredWilson会被删除:DE1.ETEFROMPersonWHERE1.astName=Wilson结果:1.astNameFirstNameAddressCityGatesBillXuanwumen10Beijing.除全部行可以在不删除表的状况下删除全部的行。这意味着表的结构、属性和索引都是完整的:DE1.ETEFROMtable-name或者:DE1.ETE*FROMtable_nameSQ1.育级SQ1.TOPTOP的TOP子句用于规定要返回的记录的数目。对于拥有数千条记录的大型表
25、来说,TOP子句是特别有用的。注释:并非全部的数据库系统都支持TOP子句。SQ1.Server的语法:SE1.ECTTOPnumberpercentcolumn_name(三)FROMtable_nameMySQ1.和Oracle中的SQ1.SE1.ECTTOP是等价的MySQ1.语法SE1.ECTcolumn_name(三)FROMtablc-namc1.IMITnumber例子SE1.ECT*FROMPersons1.IMIT5Oracle语法SE1.ECTcolumn_name(三)FROMtable-nameWHEREROWNUM=number例子SE1.ECT*FROMPersons
26、WHEREROWNUMndon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijingIN操作符实例现在,我们希盟从上表中选取姓氏为Adams和Carter的人:我们可以运用下面的SE1.ECT语句:SE1.ECT*FROMPersonsWHERE1.astNameIN(Adams,Carter)结果集:Id1.astNameFirstNameAddressCity1AdamsJohnOxfordStreet1.ondon3CarterThomasChanganStreetBeijingSQ1.BETWEEN就符BETWEEN
27、操作符在WHERE子句中运用,作用是选取介于两个值之间的数据他围。BETWEEN符操作符BETWEEN.AND会选取介于两个值之间的数据他围。这些值可以是数值、文本或者日期。SQ1.BETWEEN语法SE1.ECTCOlUmn_name(三)FROMtable_nameWHEREcolumn_nameBETWEENvalue1ANDvalue2原始的表(在实例中运用:)Persons表:Id1.astNameFirstNameAddressCity1damsJohnOxfordStreet1.xndon2BushGeorgeFifthAvenueNewYork3CarterThomasChan
28、ganStreetBeijing4GatesBillXuanwumen10BeijingBETWEEN探作符实例如需以字母依次显示介于“Adams(包括)和Carter”(不包括)之间的人,请运用下面的SQ1.:SE1.ECT*FROMPersonsBETWEENAdamsANDCarter结果集:Id1.astNameFirstNameAddressCity1AdamSJohnOxfordStreet1.ondon2BushGeorgeFifthAvenueNewYork重要舸(:不同的数据库对BETWEEN.AND操作符的处理方式是有差异的,某些数据库会列出介于Adams和Carter之间
29、的人,但不包括AdamsCarter;某些数据库会列出介于Adams和,Carter之间并包括Adams和Carter”的人;而另一些数据库会列出介于Adams和Carter之间的人,包括Adams,但不包括Cartero所以,请检套你的数据库是如何处理BETWEEN.AND操作符的!物2如需运用上面的例子显示范闱之外的人,请运用NOT操作符:SE1.ECT*FROMPersonsWHERE1.astNameNOTBETWEEN,Adams,ANDCarter结果集:Id1.astNameFirstNameAddressCity3CarterThomasChanganStreetBeijing
30、4GatesBillXuanwumen10BeijingSQ1.Alias(别名)通过运用SQ1.,可以为列名离和表名离指定别名(Aliaa)。SQ1.AUas表的SQ1.Alias语法SE1.ECTcolumn_name(三)FROMtablc-nameASalias_name列的SQ1.Alias语法SE1.ECTcolumn_nameASalias_nameFROMtable_nameAlias实例:运用表名宝甄名假设我们有两个表分别是:Persons和ProducJOrders,我们分别为它们指定别名P和poo现在,我们希望列出“JohnAdams的全部定单。我们可以运用下面的SE1.
31、ECT语句:SE1.ECTpo.OrderID,p.1.astName,p.FirstNameFROMPersonsASp,Product_OrdersSpoWHEREP-1.astName=1AdamsWHEREp.FirstName=John不运用别名的SE1.ECT语句:SE1.ECTProduct_Orders.OrdcrID,PerSonS.1.astName,Persons.FirstNameFROMPersons,Product-OrdersWHEREPersons.1.astName=HansenWHEREPersons-FirstName=1Ola从上面两条SE1.ECT语句您可以看到,别名使查询程序更易阅读和书写。Alias实例:运用一个列名别名表Persons:Id1.astNameFirstN