SQL是用于访问和处理数据库的标准的计算机语言_第1页
SQL是用于访问和处理数据库的标准的计算机语言_第2页
SQL是用于访问和处理数据库的标准的计算机语言_第3页
SQL是用于访问和处理数据库的标准的计算机语言_第4页
SQL是用于访问和处理数据库的标准的计算机语言_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

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

文档简介

1、sql是用于访问和处理数据库的标准的计算机语言。什么是sql? sql指结构化查询语言sql使我们有能力访问数据库 sql是一种ansi的标准计算机语言编者注:ansi,美国国家标准化组织sql能做什么?sql面向数据库执行査询 sql可从数据库取回数据 sql可在数据库中插入新的记录sql可更新数据库中的数据 sql可从数据库删除记录 sql可创建新数据库sql可在数据库中创建新表sql可在数据库中创建存储过程sql可在数据库中创建视图sql可以设置表、存储过程和视图的权限sql是一种标准但是sql是-门ansi的标准计算机语言,用来访问和操作数据库系统。sql语句用于取回和更新数据库中 的

2、数据。sql可与数据库程序协同工作,比如ms access、db2、i nformix > ms sql server、oracle. sybase以及其他数据库系统。不幸地是,存在着很多不同版本的sql语言,但是为了与ansi标准相兼容,它们必须以相似的方式共 同地來支持一些主要的关键词(比如select、update. delete、insert、where等等)。注释:除了 sql标准之外,大部分sql数据库程序都拥有它们自己的私有扩展!在您的网站中使用sql要创建发布数据库中数据的网站,您需要以下要素: rdbms 数据库程序(比如 ms access, sql server,

3、mysql)服务器端脚木语言(比如php或asp) sql html/ cssrdbmsrdbms指的是关系型数据库管理系统。rdbms是sql的基础,同样也是所有现代数据库系统的基础,比如ms sql server, ibm db2, oracle, mysql 以及 microsoft accessordbms小的数据存储在被称为表(tables)的数据库对象"。表是相关的数据项的集合,它山列和行组成。数据库表一个数据库通常包含一个或多个衣。每个衣由一个名字标识(例如“客户”或者“订单”)。表包含带冇数据 的记录(行)。f面的例子是一个名为"persons"的

4、表:idlastnamefirstnameaddresscity1adamsjoh noxford streetlondon2bushgeorgefifth avenuenew york3carterthomaschangan streetbeijing上面的表包含三条记录(每一条对应一个人)和五个列(id、姓、名、地址和城m) osql语句您需要在数据库上执行的大部分工作都由sql语句完成。下而的语句从表中选取last name列的数据:iki select lastname from persons结果集类似这样:lastnameadamsbushcarter在本教程中,我们将为您讲解各种

5、不同的sql语句。重要事项一定要记住,sql对大小写不敏感!sql语句后面的分号?某些数据库系统要求在每条sql命令的末端使用分号。在我们的教程中不使用分号。分号是在数据库系统中分隔每条sql语句的标准方法,这样就可以在对服务器的相同请求中执行一条以 上的语句。如果您使川的是ms access和sqlserver 2000,则不必在每条sql语句之后使用分号,不过某些 数据库软件要求必须使用分号。sql dml 和 ddl可以把sql分为两个部分:数据操作语言(dml)和数据定义语言(ddl)。sql (结构化查询语言)是用于执行查询的语法。但是sql语言也包含用于更新、插入和删除记录的语法。

6、 查询和更新指令构成了 sql的dml部分:select从数据库表中获取数据 update更新数据库表中的数据 delete 从数据库表屮删除数据 i nsert i nto 向数拯库表中插入数拯sql的数据定义语言(ddl)部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表z 间的链接,以及施加表间的约束。sql中垠重要的ddl语句: create database -仓u建新数据库 alter database修改数据库 create table -创建新表 alter table -变更(改变)数据库表 drop table -川9除表 create index创建索弓i

7、(搜索键) drop index删除索引本章讲解select和select *语句。sql select 语句select语句用于从表中选取数据。结果被存储在一个结果表中(称为结果集)。sql select 语法select列名称from表名称以及:select * from 表名称注释:sql语句对大小写不敏感。select等效于select osql select 实例如需获取名为h last name"和"first name'1的列的内容(从名为"persons'*的数据库表),请使用 类似这样的select语句:select lastna

8、me,firstname from personspersons” 表:idlastnamefirstnameaddresscity1adamsjohnoxford streetlondon2bushgeorgefifth avenuenew york3carterthomaschangan streetbeijing结果:lastnamefirstnameadamsjoh nbushgeorgecarterthomassql select * 实例现在我们希望从”persons”表屮选収所冇的列。请使用符号*取代列的名称,就像这样:select * from persons星号(* )是选取

9、所有列的快捷方式。结果:idlastnamefirstnameaddresscity1adamsjoh noxford streetlondon2bushgeorgefifth avenuenew york3carterthomaschangan streetbeijing在结果集(resultset)中导航山sql查询程序获得的结果被心放在一个结果集中。大多数数据库软件系统都允许使川编程函数在结果 集中进行导航,比如:movetofirst-records get-record-contents move-to-next-record 等等。类似这些编程两数不在本教程讲解z列。如需学习通过两

10、数调用访问数据的知识,请访问我们的ado教 程和php教程。本章讲解select di sti not语句。sql select di sti nct 语句在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词distinct用于返回唯一不同的值。语法:select distinct 列名称 from 表名称使用distinct关键词如果要从hcompany-列中选収所冇的值,我们需要使用select语句:刮 i select company from ordersorders*'表:companyordernumberibm3532w

11、3school2356apple4698w3school6953结果:w3school请注意,在结果集中,w3school被列出了两次。如需从company”列中仅选取唯-不同的值,我们需要使川select distinct语句:select distinct company from orders结果:现在,在结果集中,hw3schoolh仅被列出了一次。where子句用于规定选择的标准。where子句如需有条件地从表中选取数据,可将where 了句添加到select语句。语法i select列名称from农名称where列 运算符值下曲的运算符:可在where子句中使丿ij:操作符描述=等

12、于<>不等于>大于<小于>=大于等于<=小于等于between在某个范围内like搜索某种模式如果只希望选取居住在城市”beijing”中的人,我们需要向select语句添加where子句:注释:在某些版本的sql中,操作符v可以写为!=。 使用where子句persons” 表lastnamefirstnameaddresscityyearadamsjoh noxford streetlondon1970bushgeorgefifth avenuenew york1975carterthomaschangan streetbeijing1980gatesb

13、illxuanwumen 10beijing1985结果:lastnamefirstnameaddresscityyearcarterthomaschangan streetbeijing1980gatesbillxuanwu men 10beijing1985引号的使用请注意,我们在例子屮的条件值周围使丿ij的是单引号。sql使用单引号來环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。文本值:这是正确的:select * from persons where firstname= 1 bush这是错误的:| select * from persons where fi

14、rstname=bush数值:iil这是正确的:iselect * from persons where year>l 965l这是错误的:jiiiselect * from persons where year> 1 1 965 1|ikand和or运算符用于基于一个以上的条件对记录进行过滤。and和or运算符and和or可在where子语句中把两个或多个条件结合起來。如果第一个条件和第二个条件都成立,则and运算符显示一条记录。如果第一个条件和第二个条件中只要冇一个成立,则or运算符显示-条记录。原始的表(用在例子中的):lastnamefirstnameaddresscity

15、adamsjohnoxford streetlondonbushgeorgefifth avenuenew yorkcarterthomaschangan streetbeijingcarterwilliamxuanwu men 10beijingand运算符实例使用and来显示所有姓为"carter”并且名为“thomas”的人:i select * from persons where firstname=1 thomas1 and lastname=1 carter结果:lastnamefirstnameaddresscitycarterthomaschangan street

16、beijingor运算符实例使用or来显示所有姓为"carter"或者名为”thom as”的人:| select * from persons where firstname=* thomas or lastname=carteri结果:lastnamefirstnameaddresscitycarterthomaschangan streetbeijingcarterwilliamxuanwumen 10beijing结合and和or运算符我们也可以把and和or结合起來(使用圆括号來组成复杂的表达式):结果:lastnamefirstnameaddresscityca

17、rterthomaschangan streetbeijingcarterwilliamxuanwumen 10beijingorder by语句用于对结果集进行排序。order by 语句order by语句用于根据指定的列对结果集进行排序。order by语句默认按照升序对记录进行排序。如果您希望按照降序对记录进行排序,可以使用desc关键字。 原始的表(用在例子中的):orders 表:companyordernumberibm3532w3school2356apple4698w3school6953实例1以字母顺序显示公司名称:select company, ordernumber f

18、rom orders order by company结果:companyordernumberapple4698ibm3532w3school6953w3school2356实例2以字母顺序显示公司名称(company),并以数字顺序显示顺序号(ordernumber):select company, ordernumber from orders order by company, ordernumb©r结果:companyordernumberapple4698ibm3532w3school2356w3school6953实例3以逆字母顺序显示公司名称:select compa

19、ny, ordernumbqt from orders order by company desc结果:companyordernumberw3school6953w3school2356ibm3532apple4698实例4以逆字母顺序昭示公司名称,并以数字顺序显示顺序号:i select company, ordernumber from orders order by company desc,ii ordernumber ascis2结果:companyordernumberw3school2356w3school6953ibm3532apple4698注意:在以上的结果中有两个相等的

20、公司名称(w3school)o只有这一次,在笫-列中有相同的值时,笫 二列是以升序排列的。如果第一列中有些值为nulls时,情况也是这样的。i nsert i nto 语句insert into语句用于向表格中插入新的行。语法insert into 表名称 values (值 1, 值 2, )我们也可以指定所要插入数据的列:ii insert into table_ name (列 1,列 2)values (值值 2)” 插入新的行persons11 表:lastnamefirstnameaddresscitycarterthomaschangan streetbeijingsql语句:|

21、 insert into persons values ('gates', 1 bill1z "xuanwumen 101, beijing1)结果:lastnamefirstnameaddresscitycarterthomaschangan streetbeijinggatesbillxuanwumen 10beijing在指定的列中插入数据persons'表:lastnamefirstnameaddresscitycarterthomaschangan streetbeijinggatesbillxuanwumen 10beijingsql语句:inse

22、rt into persons (lastname, address) values (1 wilson 1,1 champs-elysees 1)结果:lastnamefirstnameaddresscitycarterthomaschangan streetbeijinggatesbillxuanwume n 10beijingwilsonchamps-elyseesupdate语句update语句川于修改农中的数拯。语法:! update表名称set列名称=新值where列名称二某值person:lastnamefirstnameaddresscitygatesbillxuanwume

23、n 10beijingwilsonchamps-elysees更新某一行中的一个列我们为 lastname 是"wilson” 的人添加 firstname:i update person set firstname = ffredf where lastname = gilson结果:lastnamefirstnameaddresscitygatesbillxuanwumen 10beijingwilsonfredchamps-elysees更新某一行中的若干列我们会修改地址(address),并添加城市名称(city):update person set address = 1z

24、hongshan 23', city = 1 nanjing iii where lastname = 'wilson'结果:lastnamefirstnameaddresscitygatesbillxuanwu men 10beijingwilsonfredzhongshan 23nanjingdelete语句delete语句用于删除表屮的彳亍。语法ki delete from表名称where列名称=值person:lastnamefirstnameaddresscitygatesbillxuanwu men 10beijingwilsonfredzhongshan

25、23nanjing删除某行fred wilson”会被删除:i delete from person where lastname = wilson结果:lastnamefirstnameaddresscitygatesbillxuanwumen 10beijing删除所有行可以在不删除农的情况卜删除所有的行。这盘味若表的结构、屈性和索引都是完整的:i delete from table_name 一或者:ii delete * from table_namev._top子句top子句用于规定要返回的记录的数h。对丁拥有数千条记录的大型表来说,top r句是非常有川的。注释:并菲所有的数据库系

26、统都支持top子句。sql server 的语法:= select top number i percent column_name(s)| from table_namemysql 和 oracle 中的 sql select top 是等价的mysql语法 select column_name(s) jjfrom table_nameiki limit number例子i select *from personslimit 5oracle语法i select column_name(s)from table namewhere rownum <= number例子ni select

27、*mfrom personsi! where rownum <= 5i福站的爰t用石鬲手审禹):persons 表:idlastnamefirstnameaddresscity1adamsjoh noxford streetlondon2bushgeorgefifth avenuenew york3carterthomaschangan streetbeijing4obamabarackpenn sylva nia avenuewashingtonsql top实例现在,我们希望从上面的”persons“表中选収头两条记录。我们可以使用下面的select语句:select top 2 *

28、 from persons结果:idlastnamefirstnameaddresscity1adamsjohnoxford streetlondon2bushgeorgefifth avenuenew yorksql top percent 实例现在.我们希望从上面的”persons“表中选取50%的记录。我们可以使用下面的select语句:结果:idlastnamefirstnameaddresscity1adamsjohnoxford streetlondon2bushgeorgefifth avenuenew yorklike操作符用于在where子句中搜索列中的指定模式。like操作

29、符like操作符用于在where 了句屮搜索列屮的指定模式。sql like操作符语法| select column_name(s)l from table_nameiki where column_name like patterni0原始的表(甫在囱子中禹):persons 表:idlastnamefirstnameaddresscity1adamsjoh noxford streetlondon2bushgeorgefifth avenuenew york3carterthomaschangan streetbeijinglike操作符实例现在,我们希望从上面的”persons”表中选取

30、居住在以”n”刃:始的城市里的人:我们町以使用下面的select语句:j select * from personsi where city like n%1h%h可用于定义通配符(模式中缺少的字母)。结果集:idlastnamefirstnameaddresscity2bushgeorgefifth avenuenew york例子2接卞來,我们希望从persons-表屮选取居住在以勺”结尾的城市里的人:我们可以使用下面的select语句:°iselect * from personsi1 where city like 1%g结果集:idlastnamefirstnameaddr

31、esscity3carterthomaschangan streetbeijing例子3接下來,我们希望从“persons”表屮选取居住在包含“ion”的城市里的人:我们可以使用下面的select语句:结果集:idlastnamefirstnameaddresscity1adamsjohnoxford streetlondon例子4通过使用not关键字,我们可以从persons”表中选取居住在不包含ton”的城市里的人:我们可以使用下面的select语句:select * from persons where city not like lon%1结果集:idlastnamefirstname

32、addresscity2bushgeorgefifth avenuenew york3carterthomaschangan streetbeijing在搜索数据库中的数据时,您可以使用sql通配符。sql通配符在搜索数据库中的数据时,sql通配符可以替代一个或多个字符。sql通配符必须与like运算符一起使用。在sql中,可使用以下通配符:通配符描述%替代一个或多个字符仅替代一个字符charlist字符列中的任何单一字符acharlist 或者icharlist不在字符列屮的任何单一字符原始的表(用在例子中的):persons 表:idlastnamefirstnameaddresscity

33、1adamsjohnoxford streetlondon2bushgeorgefifth avenuenew york3carterthomaschangan streetbeijing使用%通配符例子1 现在,我们希望从上面的mpersons-表中选取居住在以hneh开始的城市里的人: 我们可以使用下面的select语句: mmw!* ««m wmmw1 仙 !« iimjumwtttutstub12| select * from personsk9i where city like ne%3ji select * from persons 结果集:idlas

34、tnamefirstnameaddresscity2bushgeorgefifth avenuenew york例子2接下来,我们希望从'persons'表中选取居住在包含“lonct的城市里的人:我们可以使用下面的select语句: ii select * from personswhere city like f%lond紀结果集:idlastnamefirstnameaddresscity1adamsjoh noxford streetlondon使用_通配符例子1现在,我们希望从上面的mpersonsi where firstname like '_eorge表

35、屮选取名字的第一个字符之后是heorgen的人:我们可以使用下面的select语句:结果集:idlastnamefirstnameaddresscity2bushgeorgefifth avenuenew york例子2接下來,我们希望从”persons”表中选取的这条记录的姓氏以9”开头,然后是一个任意字符,然后是hr然后是任意字符,然后是herh:我们可以使川下面的select语句:j select * from personswhere lastname like fc_r_er1结果集:idlastnamefirstnameaddresscity3carterthomaschangan

36、 streetbeijing使用charlist通配符现在,我们希望从上面的“persons“表屮选取居住的城m以han或或开头的人:我们可以使用下面的select语句:ii select * from personsiii where city like 1aln%1结果集:idlastnamefirstnameaddresscity1adamsjohnoxford streetlondon2bushgeorgefifth avenuenew york例子2现在,我们希望从上面的”persons“表中选収居住的城市不以或”l”或开头的人:我们可以使用下面的select语句:| select

37、* from personsk9i where city like 1!aln%f结果集:idlastnamefirstnameaddresscity3carterthomaschangan streetbeijingin操作符in操作符允许我们在where子句中规定多个值。sql i n语法| select column_name(s)from table_namewhere column_name in (valuel,value2,)原始的表(在实例中使用:)persons 表:idlastnamefirstnameaddresscity1adamsjoh noxford streetl

38、ondon2bushgeorgefifth avenuenew york3carterthomaschangan streetbeijingi n操作符实例现在,我们希望从上表中选取姓氏为adams和carter的人:我们可以使用下面的select语句:where lastname in ('adams;carter')结果集:idlastnamefirstnameaddresscity1adamsjohnoxford streetlondon3carterthomaschangan streetbeijingbetween操作符在where子句中使用,作用是选取介于两个值之间

39、的数据范围。between操作符操作符:between . and会选取介丁两个值之间的数据范禺。这些值可以是数值.文木或者日期。sql between 语法i select column_name(s)from table_namewhere column_namebetween valuel and value2原始的表(在实例中使用:)persons 表:idlastnamefirstnameaddresscity1adamsjohnoxford streetlondon2bushgeorgefifth avenuenew york3carterthomaschangan streetb

40、eijing4gatesbillxuanwumen 10beijingbetween操作符实例如需以字母顺序显示介于hadamsh (包括)和parte广(不包括)之间的人,请使用下面的sql:select * from personswhere lastname结果集:idlastnamefirstnameaddresscity1adamsjohnoxford streetlondon2bushgeorgefifth avenuenew york重要事项:不同的数据库对between.and操作符的处理方式是冇差异的。某些数据库会列出介于"adams”和hcarter"之

41、间的人,但不包括”adams”和”carter” ;某些数据库会列出介于”adams”和"carter"之间并包括"adams"和"carter"的人;而另一些数据库会列出介于”adams"和”carter”之间的人,包括"adams",但不包括”carter11。所以,请检查你的数据库是如何处理between.and操作符的!实例2如需使用上而的例子显示范围之外的人,请使用not操作符:i select * from personsrjjwhere lastname<ii not between

42、1 adams* and carter1结果集:idlastnamefirstnameaddresscity3carterthomaschangan streetbeijing4gatesbillxuanwumen 10beijing通过使用sql,可以为列名称和表名称指定别名(alias) osql alias表的sql alias语法select column_name(s)as alias name列的sql alias语法j select column_name as alias_nameli5 from table_nameialias实例:使用表名称别名假设我们有两个表分别是:”p

43、ersons"和"product_orders”。我们分别为它们指定别名”p”和”po”。现在,我们希望列出”john adams"的所冇定单。我们可以使用下面的select语句:ji select po.orderld, plastname, p.firstnamewfrom persons as p, product_orders as poiii where p lastname=1 adams 1 and p firstname=1 john 1不使用别名的select语句:i select product_orders orderid, persons

44、lastname, persons.firstname-from persons, product_orderswhere personslastname=1 adams 1 and persons.firstname=1 john'从上而两条select语句您可以看到,别名使查询程序更易阅读和书写。alias实例:使用一个列名别名表 persons:idlastnamefirstnameaddresscity1adamsjohnoxford streetlondon2bushgeorgefifth avenuenew york3carterthomaschangan streetbe

45、ijingsql:| select lastname as family, firstname as name|结果:familynameadamsjohnbushgeorgecarterthomassql join用于根据两个或多个表中的列之间的关系,从这些表中查询数据。join 和 key冇时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行join。数拥库中的表可通过键将彼此联系起来。主键(primary key)是一个列,在这个列中的每一行的值都是 唯一的。在表中,每个主键的值都是唯一的。这样做的冃的是在不重复每个表中的所有数拥的情况下,把 表间的数据交叉捆绑在一起

46、。请看"persons"表:ld_plastnamefirstnameaddresscity1adamsjohnoxford streetlondon2bushgeorgefifth avenuenew york3carterthomaschangan streetbeijing请注意,”ld_p'列是persons表中的的主键。这意味着没有两行能够拥有相同的ld_p°即使两个人的 姓名完全相同,ld_p也可以区分他们。接下来请看"orders”表:ld_oordernold_p1778953244678332245614245621534764

47、65请注意,td_o”列是orders表屮的的主键,同时,“orders”表中的td_p列用于引用“persons” 表中的人,而无需使用他们的确切姓名。请留意,”ld_p”列把上而的两个表联系了起來。引用两个表我们可以通过引用两个表的方式,从两个表中获取数据:谁订购了产品并且他们订购了什么产品?i select persons lastname, persons.firstname, orders.ordernofrom persons, ordersii where persons.id_p = orders.id_p结果集:lastnamefirstnameordernoadamsjoh

48、n22456adamsjoh n24562carterthomas77895carterthomas44678sql join -使用 join除了上面的方法,我们也可以使川关键词join来从两个表中获取数据。如果我们希望列出所有人的定购,可以使用下面的select语句:select personslastname, persons-firstnamez orders.ordernofrom persons| inner join orderson persons.id p = orders.id pii order by persons.lastname结果集:lastnamefirstna

49、meordernoadamsjohn22456adamsjoh n24562carterthomas77895carterthomas44678不同的sql joi n除了我们在上面的例子中使川的inner join (内连接),我们还可以使用其他儿种连接。 下面列出了您可以使用的join类型,以及它们之间的差异。join:如果表中有至少一个匹配,则返回行 left join:即使右表中没有匹配,也从左表返回所有的行 right join:即使左表中没有匹配,也从右表返回所有的行 full join:只要其中一个表中存在匹配,就返回行sql i nner joi n 关键字在表中存在至少一个匹

50、配时,innerjoin关键字返回行。i nner joi n关键字语法i select column_name(s)from table_namelinner join table_name2ii on table_namel colurr.n_narr.e=table_name2 . column_name注释:inner join与join是相同的。原始的表(用在例子中的):persons"表:ld_plastnamefirstnameaddresscity1adamsjohnoxford streetlondon2bushgeorgefifth avenuenew york3carterthomaschangan streetbeiji

温馨提示

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

评论

0/150

提交评论