《数据库SQL语句补充.ppt》由会员分享,可在线阅读,更多相关《数据库SQL语句补充.ppt(23页珍藏版)》请在三一办公上搜索。
1、数据库SQL语句入门,以SQL Server 2K 为平台有关语句的详细语法,参见自带联机丛书查阅、搜索,1、结构化查询语言(SQL)概况 结构化查询语言(Structured Query Language,简称SQL)的理论是1974年提出的,并在IBM公司的System R上实现。由于它功能丰富、使用方式灵活、语言简洁易学等优点,在计算机工业界和用户中倍受青睐,很快得以推广。后来,美国国家标准局(ANSI)和国际标准化组织(ISO)先后批准SQL作为关系数据库语言的美国及国际标准。至此,SQL就成为关系数据库的标准语言,关系数据库系统一般都支持标准SQL语句。尽管不同的数据库厂商所生产的数
2、据库管理系统(DBMS)都有自己的“方言”,支持程度不同,但还算大同小异。因此,最好以某个DBMS 平台学习SQL语言,以后用到另一个品牌的数据库,只要作相应的修改即可。SQL大小写不敏感,即不区分大小写。,SQL有如下几个比较突出的优点:a、一体化:SQL可以完成包括数据库定义、修改、删除、数据更新、数据查询等数据库生命周期中的全部活动,给用户使用带来很多方便。b、灵活:SQL有两种使用方式。一种是联机交互使用,另一种是嵌入某种高级程序设计语言的程序中。这两种方式的语法结构是统一的。这样既给用户带来了灵活的选择余地,又不会带来不一致的困扰。c、高度非过程化:与高级编程语言相比,SQL对数据库
3、的操作方面是非常有优势的。使用SQL用户只需提出“做什么”,不用了解实现的细节,复杂的过程均由系统自动完成。d、语言简洁,易学易用。虽然SQL的功能很强大,但语法却很简单,只有为数不多的几条命令。SQL功能 命令动词 数据查询 SELECT 数据定义 CREATE、DROP、ALTER 数据操作 INSERT、UPDATE、DELETE 数据控制 GRANT、REVOKE,SQL虽被称为“查询语言”,其功能却包括定义、查询、操纵和控制四个方面,是一个综合、通用、功能强大的关系数据库语言。重点是前三个a、数据定义:用于定义和修改数据库对象。如CREATE TABLE(创建表)、DROP TABL
4、E(删除表)等。b、数据查询:对数据查询操作。如SELECT(查询数据)。*c、数据操纵:对数据的增、删、改和查询操作。如INSERT(插入记录)、DELETE(删除记录)、UPDATE(修改数据)等。*d、数据库控制:控制用户对数据库的访问权限(如GRANT(授予权利)、REVOKE(取消权利);事务控制:控制数据库系统事务的运行(如COMMIT(事务提交),ROLLBACK(事务回滚)等)。SQL功能 命令动词 数据查询 SELECT 数据定义 CREATE、DROP、ALTER 数据操作 INSERT、UPDATE、DELETE 数据控制 GRANT、REVOKE,2、SQL基本查询模块
5、的结构,SELECT基本查询模块的结构 Select distinct|all,From,Where GROUP BY HAVING ORDER BY ASC|DESC,ASC|DESC 说明:SELECT-SQL命令的格式包括三个基本子句:SELECT子句、FROM子句、WHERE子句,还包括操作子句:ORDER子句、GROUP子句以及其他一些选项。基本语义:从 From后的若干关系表 里面 将符合where后 条件表达式 的记录过滤出来,Group分组计算后 找出符合 Having组筛选条件的组 然后按指定列值升/降序排列后,返回select后的 若干字段 上的数据。SELECT子句:指定
6、要显示的属性列FROM子句:指定查询对象(基本表或视图)WHERE子句:指定查询条件 GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。HAVING短语:从得到的各组中,进一步筛选出只有满足指定条件的组ORDER BY子句:对最终的查询结果表按指定列值的升序(asc,默认)或降序(desc)排序,示例数据库,读者-图书数据库:读者表:读者(借书证号,姓名,单位,职称)图书表:图书(书编号,书名,作者,出版单位,单价)借阅表:借阅(借书证号,书编号,借书日期)带下划线的字段表示主码:具有唯一性,不能重复。在一个表中,靠主码来区分各个记录。,
7、2.1简单查询,简例例1:找出姓李的读者姓名及其所在单位。select 姓名,单位from 读者where 姓名 like 李%“姓名”列的取值只要“李”字开头,都会被视作结果之一。若只寻找李姓但单名的作者信息,则like后变为:“李_”。模糊匹配的还有之类的,不细展开。只举一例:联系电话以13或15或18开头,模糊匹配部分写成:1358,2.1 简单查询(select子句),*表示全部字段例2:查看所有读者的全部情况。select*from 读者distinct 和 all 短语distinct表示从查询结果中去掉重复元组,all表示全部显示(默认为all)。例,找出所藏图书的出版单位:se
8、lect distinct 出版单位 from 图书用 as 短语指定查询结果的自定义列名(也称别名)或 原名和别名之间 加空格 例3:用英文字段名列出图书中是由科学出版社出版的所有藏书的书名及出版单位。select 书名 as book,作者 author,出版单位 as publisher from 图书 where 出版单位=科学出版社,2.1 简单查询,用Order by子句指出对查询的最终结果排序Asc表示升序(默认),Desc表示降序例4:查找高等教育出版社的所有图书及单价,结果按单价降序排列。Select 书名,出版单位,单价From 图书Where 出版单位=高等教育出版社Or
9、der by 单价 desc,2.1 简单查询,用Betweenand表示在二者之间(两端都可以取的,即闭区间)例5:查找价格介于10和20元之间的图书种类(去掉重复),结果分别按出版单位 降序 和单价 升序排序。Select distinct 书名,作者,单价,出版单位 From 图书 Where 单价 between 10 and 20 Order by 出版单位 desc,单价,2.1 简单查询,谓词in条件可以用in表示包含在其后括号指定的集合中。例6:查找高等教育出版社和科学出版社图书种类及作者。Select distinct 书名,作者,出版单位From 图书Where 出版单位
10、in(高等教育出版社,科学出版社)Where子句等价于:Where 出版单位=高等教育出版社 or 出版单位=科学出版社,2.1 简单查询,用like指出字符串模式匹配(否定是:not like)下划线_代表任意一个单字符百分号%代表任意多个任意字符(包括0个)汉字是双字符,相当于两个_。例7:查询书名中带有“计算机”三字且其作者姓名的第二个字不是明的图书及作者姓名Select distinct 书名,作者From 图书Where 书名 like%计算机%and 作者 not like _明%,2.1 简单查询,为关系指定临时别名(原名和别名之间要有空格)例8:查找所有单位为计算机系 的读者姓
11、名及职称Select distinct 姓名,职称From 读者 xWhere x.单位=计算机系,2.2 联接查询,例9:(1)找出李某所借的所有图书的书名及借书日期 select 姓名,所借图书:,书名,借书日期 from 图书,读者,借阅 where 读者.借书证号=借阅.借书证号 and 借阅.书编号=图书.书编号 and 姓名=李明 本例中“所借图书:”将直接作为字段值在每一行中显示例9:(2)查找价格在22元以上已借出的图书,结果按单价升序 select 图书.书编号,书名,作者,出版社,单价 from 借阅,图书 where 借阅.书编号=图书.书编号 and 单价=22 ord
12、er by 单价select 子句后的属性列 与 图书.*等效;如直接写成*代表借阅和图书两个关系联接后的所有属性。,2.3 嵌套查询,是指在select查询块内部再嵌入另一个子查询块(Order字句不能出现在子查询当中),用in指出包含在一个子查询模块的查询结果中例10:查找价格在22元以上已借出的图书信息。(同例9)select*from 借阅 where 书编号 in(select 书编号 from 图书 where 单价=22),2.3 嵌套查询,例11:查2007年6月1号以后没有借书的读者借书证号、姓名和单位。select 借书证号,姓名,单位 from 读者 where 借书证号
13、 not in(select 借书证 from 借阅 where 借书日期=2007-06-01),2.4.使用库函数查询,SQL常用统计函数求和函数sum()计算平均avg()求最大值max()求最小值min()计算行数count(或*)简例例13:求科学出版社图书的最高价、最低价、平均价。Select 出版单位,MAX(单价)as最高价,MIN(单价)as最低价,AVG(单价)as平均价From 图书Where 出版单位=科学出版社,2.4 使用库函数查询,分组计算Group byGroup by子句用于产生列函数的分组统计值。其作用是按指定项目对记录分组,然后对每一组分别使用库函数。例1
14、4:求出各出版社图书的最高价、最低价和册数。select 出版单位,MAX(单价)as 最高价,MIN(单价)as 最低价,count(*)as 总册数From 图书Group by 出版单位,2.4 使用库函数查询,Having字句Having字句通常跟随在group by之后,其作用是限定分组检索条件。例14:分别找出借书人数超过1人的单位及人次数。Select 单位,count(*)as 超过1人次From 借阅,读者Where 读者.借书证号=借阅.借书证号Group by 单位Having count(*)=2,2.4 使用库函数查询,存在量词exists和not exists在嵌套
15、查询主查询的where字句中,条件可用exists表示存在。例15:查询经济系是否还清所有借书。如还清,显示该系所有读者的姓名、所在单位和职称。Select 姓名,单位,职称From 读者Where 单位=经济系 and not exists(select*from 读者,借阅 where 读者.借书证号=借阅.借书证号 and 单位=经济系),3.1 添加数据,命令格式 insert into 表名(列名1,列名2,.列名n)values(各相应列的值)简例:例16:添加一条图书记录信息:书编号为554433,书名为数据库原理,作者为李明,出版单位为:人民邮电出版社,单价24元。insert
16、 into 图书(书编号,书名,作者,出版单位,单价)values(554433,数据库原理,李明,人民邮电出版社,24)注:因明确指明了新记录涉及了表中的所有列,表名后的列名列表可省略,即上句可写成:insert into 图书 values(554433,数据库原理,李明,人民邮电出版社,24),3.1 更新数据,命令格式Update set where;简例:例17:将书编号为554433图书的作者和出版单位分别修改为:王为民 和 高等教育出版社。update 图书 set 作者=王为民,出版单位=电子工业出版社 where 书编号=554433注:update salaries set salary=salary*1.2/*将每个员工的工资提高20%*/,3.2 删除数据,命令格式deletefrom where 简例:例18:借书证号“112”所借 书编号为“446988”的图书已经归还,删除该借阅登记。Delete From 借阅Where 借书证号=112 and 书编号=446988,