登陆注册
18254100000010

第10章 Oracle数据库基础——SQL语言(5)

5.4.1 单表查询

单表查询是指查询只涉及一个表的查询。

5.4.1.1 选择表中若干列

选择表中的全部列或部分列,这就是关系代数中介绍的投影运算。

1.查询指定的列

例5-62 查询全体学生的学号、姓名、性别。

SQL>SELECT sno,sname,sex

FROM student

例5-63 查询学校所开的全部课程的课程名和学分。

SQL>SELECT cname,credit

FROM course

2.查询所有的列

例5-64 查询全体课程的详细记录。

SQL>SELECT*

FROM course

3.查询经过计算的值

例5-65 查询全体学生的姓名及其出生年份。

SQL>SELECT sname,2005-age

FROM student

4.用别名来改变查询结果的列标题

从以上查询结果中可以看到,每一列的标题就是列名,有时候列名是拼音代码,意义不是很清楚,为了让结果意义更清楚,可以给列提供一个列的别名。方法是:在列名后加一个空格,然后写上它的别名。显示时就用别名替代列名。

例5-66 查询全体学生的姓名、出生年份和所在的系,要求用小写字母表示所在的系名。

SQL>SELECT sname,′year of birth:′birth,2005-age birthday,

LOWER(dept)department

FROM student

上述查询语句中的birth和birthday是别名,输出时分别替代Year of Birth:和2005-age列表达式。结果如下:

sname birth b irthday d epartment

王勇Year of Birth:1981 cs

吴晨Year of Birth:1982 is

5.4.1.2 选择表中若干行

选择表中满足指定条件的若干行,这就是关系代数中的选择运算。

1.消除取值重复的行

2.查询满足条件的元组

查询满足指定条件的元组可以通过WHERE子句实现。一个WHERE子句用于限定处理的行数,选择满足条件的行。满足WHERE子句中逻辑条件的数据被返回或者被处理。在WHERE子句中可以使用列名或表达式,但不能使用列或表达式的别名。

使用WHERE子句时,应注意列值的表示方法。

如果该列类型为字符型,需使用单引号把字符串括起来,如:WHERE sname=′SMITH′(注意:单引号内字符串的大小写是有区别的)。

如果该列为数字型,不必用引号。如:WHERE sno20。

如果列值取其他列值,可用如下形式表示:WHERE student.sno=sc.sno。这是一种多表联结的形式,将在多表联结中讲述。

在WHERE子句中经常使用算术运算符(+、-、*、/)、联结运算符(||)、比较运算符(、<>、>、<、>、<、IN、BETWEEN AND、LINK、IS NULL)、逻辑运算符(AND、OR、NOT)等各种运算符。

算术运算符用于操作数字类型的数据。

联结运算符用于联结两个字符串。联结的结果是另一个字符串。

比较运算符用于比较两个值或两个表达式,给出一个布尔型的结果TRUE、FALSE、NULL。比较运算符主要用于SQL语句中的WHERE子句中。比较的结果作为条件计算,如果结果是TRUE,则返回查询的行。

逻辑运算符用于将两个比较条件产生的结果进行组合产生单个结果,或者将单个比较结果取反。

这些运算符有优先顺序。级别号越小,优先级别越高。使用括号可以改变优先顺序。括号内部的最先执行。相同优先级别的运算符按从左到右顺序执行。

(1)比较大小

例5-68 查信息系全体学生的名单。

SQL>SELECT sname

FROM student

WHERE dept′IS′

例5-69 查所有年龄在20岁以下的学生姓名及其年龄。

SQL>SELECT sname,age

FROM student

WHERE age<20(或WHERE NOT age>20)

例5-70 查考试成绩有不及格的学生的学号。

SQL>SELECT DISTINCT sno

FROM sc

WHERE grade<60

语句中加了DISTINCT短语,表示某一学生有多门课程不及格,则他的学号只显示一次。

(2)确定范围

例5-71 查询年龄在18至20岁之间的学生的姓名和年龄。

SQL>SELECT sname,age

FROM student

WHERE age BETWEEN 18 AND 20

例5-72 查询年龄不在18至20岁之间的学生姓名和年龄。

SQL>SELECT sname,age

FROM student

WHERE age NOT BETWEEN 18 AND 20

(3)确定集合

例5-73 查信息系(IS)、数学系(MA)和计算机科学系(CS)的学生的姓名和性别。

SQL>SELECT sname,sex

FROM student

WHERE dept IN(′IS′,′MA′,′CS′)

例5-74 查既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。

SQL>SELECT sname,sex

FROM student

WHERE dept NOT IN(′IS′,′MA′,′CS′)

(4)字符匹配

谓词LIKE可以用来进行字符串的匹配。其一般语法格式如下:

[NOT]LIKE′<匹配串>′[ESCAPE′<换码字符>′]

其含义是查找指定的属性列值与<匹配串>相匹配的元组。<匹配串>可以是一个完整的字符串,也可以含有通配符%和。其中:%(百分号)代表任意长度(长度可以为0)的字符串;(下划线)代表任意单个字符。

例5-75 查所有姓王的学生的姓名、学号和性别。

SQL>SELECT sname,sno,sex

FROM student

WHERE sname[not]LIKE′王%′(not 表示不姓王的同学)

例5-76 查姓“欧阳”且全名为三个汉字的学生的姓名。或查询姓名中第二个汉字为“阳”的学生信息。

SQL>SELECT sname

FROM student

WHERE sname LIKE′欧阳′

SQL>SELECT sname,Sno

FROM student

WHERE sname LIKE′阳%′

如果用户要查询的匹配字符串本身就含有%或,比如要查名字为DBDesign的课程的学分,应如何实现呢?这时就要使用ESCAPE′<换码字符>′短语对通配符进行转义。

例5-77 查DBDesign课程的课程号和学分。

SQL>SELECT cno,ccredit

FROM course

WHERE cname LIKE′DB\Design′ESCAPE′\′

ESCAPE′\′短语表示\为换码字符,这样匹配串中紧跟在\后面的字符“”不再具有通配符的含义,而是取其本身含义,被转义为普通的“”字符。

例5-78 查以“DB”开头,且倒数第三个字符为i的课程的详细情况。

SQL>SELECT*

FROM course

WHERE cname LIKE′DB\%i′ESCAPE′\′

(5)涉及空值的查询

例5-79 某些学生选修某门课程后没有参加考试,所以有选课记录,但没有考试成绩,下面查询一下缺少成绩的学生的学号和相应的课程号。

SQL>SELECT sno,cno

FROM sc

WHERE grade IS NULL

例5-80 查所有有成绩的记录的学生学号和课程号。

SQL>SELECT sno,cno

FROM sc

WHERE grade IS NOT NULL

(6)多重条件查询

逻辑运算符AND和OR可用来联结多个查询条件。如果这两个运算符同时出现在同一个WHERE条件子句中,则AND的优先级高于OR,但用户可以用括号改变优先级。

例5-81 查计算机系年龄在20岁以下的学生姓名。

SQL>SELECT sname

FROM student

WHERE dept′CS′AND age<20

例5-82 查计算机系或年龄在20岁以下的学生姓名。

SQL>SELECT sname

FROM student

WHERE dept′CS′OR age<20

5.4.1.3 对查询结果排序

如果没有指定查询结果的显示顺序,DBMS将按其最方便的顺序(通常是元组在表中的先后顺序)输出查询结果。用户也可以用ORDER BY子句指定按照一个或多个属性列的升序(ASC)或降序(DESC)重新排列查询结果,其中升序ASC为默认值。

例5-83 查询选修了C1号课程的学生的学号及其成绩,查询结果按分数的降序排列。

SQL>SELECT sno,grade

FROM sc

WHERE cno′C1′

ORDER BY Grade DESC

当按多列进行排序时,首先由第一列值确定顺序,当第一列值相同时由第二列值确定顺序,以此类推。例如:查询选修了C1号课程的学生的学号及其成绩,查询结果按分数的降序排列,如果成绩相同时按学号的升序排列。

SQL>SELECT sno,grade

FROM sc

WHERE cno′C1′

ORDER BY grade DESC,sno ASC

在查询语句中不仅可以用列名或列的别名进行排序,也可以使用在SELECT子句中列的位置进行排序。例如:

SQL>SELECT sno,grade

FROM sc

WHERE cno′C1′

ORDER BY 2 DESC,1 ASC

5.4.1.4 使用聚组函数

为了进一步增强检索功能,Oracle提供了许多聚组函数。

例5-84 查询学生总人数。

SQL>SELECT COUNT(*)

FROM student

例5-85 查询选修了课程的学生人数。

SQL>SELECT COUNT(DISTINCT Sno)

FROM sc;

因为一个学生选修多门课程,避免重复计算学生数,必须加DISTINCT短语。指定DISTINCT短语,则表示在计算时要取消指定列中的重复值,否则表示不取消重复值。

例5-86 查询学习C3号课程的平均成绩。

SQL>SELECT AVG(Grade)

FROM sc

WHERE cno′C3′;

例5-87 查询学习C3号课程的学生最高分数。

SQL>SELECT MAX(Grade)

FROM sc

WHERE cno′C3′;

同类推荐
  • 现代企业财务软件应用教程

    现代企业财务软件应用教程

    本书内容包括财务软件概论、系统管理、企业应用平台、总账管理、报表管理、薪资管理、固定资产管理、应收款管理、应付款管理等。
  • 中国移动智能手机的秘密

    中国移动智能手机的秘密

    《中国移动智能手机的秘密》是一本关于移动终端和移动互联网的科普书。作者将这18年通信行业中的学习、思考、实践积累成《中国移动智能手机的秘密》与大家分享。书本系统总结了手机的发展历史、TD产业界“从2G向3G演进”的移动终端产业分化重组进程、智能手机的使用方法用方法和应用指南,以及对移动互联网发展独特思考。
  • 条形码技术与应用

    条形码技术与应用

    条形码是一种可供电子仪器自动识别的标准符号,是由一组黑白相间、粗细不同的条、空符号按一定编码规则排列组成的标记,用以表示一定的信息,确认某个物体或规定它的移动,能正确快速地为产、供、销各环节在采集、处理和交换信息时提供标识。
  • 中国网络传播研究2009(第三辑)

    中国网络传播研究2009(第三辑)

    本文以传统社区研究的“场域论”为基础,探讨网络传播中场域性互动对社会舆论的影响。文章首先从传统社区传播的场域性特征出发,探讨网络传播的社区性和场域性。然后分别分析了传统门户、BBS论坛和私人博客等三种主流的网络传播的场域性互动、意见表达和舆论形成的特点。最后结合“张殊凡事件”、“王石捐款”事件以及“黑砖窑”事件,探讨网络传播中的场域性互动对社会舆论从虚拟到现实的影响。
  • 音视频合成制作

    音视频合成制作

    本书共分4篇6章,其中第1篇简介音视频合成的编导基础,第2篇主要介绍Sony Cinescore 1电影音乐自动合成,第3篇主要介绍Vegas 7.0音视频剪辑合成,第4篇主要介绍Adobe Audition 2.0、Cakewalk SONAR 6和Steinberg Nuendo 3的音视频合成。本书可以作为音乐、美术、动画、舞蹈、影视、戏剧等艺术院校视听艺术合成制作课程的教材,也可以作为相关人员的自学用书。
热门推荐
  • 收继婚

    收继婚

    何谓收继婚,《三国志·魏书·乌桓传》载:乌桓族,“父兄死,妻后母执嫂;若无执嫂者,则己子以亲之次妻伯叔焉,死则归其故夫。”此为收继婚最早文字出处,见于蛮夷之族。然中原人士向来视此等行为卑劣如畜生所为,皆不齿。简单来说,就是一个腹黑冷酷杀人如麻好色贪欢不知伦理纲常的皇子看上了自己老子的妃子然后强行霸占当男小三还要逆谋老子的皇位最后成功上位的事儿。--情节虚构,请勿模仿
  • 异界之逆天玄尊

    异界之逆天玄尊

    异界重生,一位神秘的老者,一套玄奥的功法,造就他逆天的战力。他,携手今生的恋人,将如何面对前世的爱人,将如何找寻前世的好友。他,面对着奇境的修士、妖兽、精怪,幻境的斗者、魔法师、召唤师,将如何走向巅峰,执掌天地。仗剑飞驰,遨游天宇,寻龙探宝踏歌行,纷纷扰扰天地间。
  • 韶华倾负:本宫,很跋扈

    韶华倾负:本宫,很跋扈

    那一天,风起云涌,血色染满了她的双眼。临死带着最后的傲气咽下了那口气。------分割线------再次睁开眼,她已不再是她。本宫想干的事,还没有本宫做不到的。给本宫滚远点。不就怀个孕嘛,连路也不让本宫走了?嗯哼?怀着个孩子,还得玩宫斗,尼玛以为我吃撑着了啊。生了个娃子,娃子爹不疼,没关系,娘爱,亲爹不爱,娃子没有父爱,会不会长歪?没关系,众多干爹爱,不怕没父爱。
  • 剑舞春秋

    剑舞春秋

    这本书披着玄幻的皮,侠义为骨,情作魂。一个小男孩的成长史。穿越的阿姐,腹黑的女帝,邻家的师妹。家族与个人权衡,门派与王朝的纠葛,江湖与边疆的厮杀。且看裴长青从一张白纸到一幅泼墨国画的蜕变。让我们成长的是那些逝去的......或许还有......将来的事,将来再说!
  • 世界上最伟大的推销员大全集(超值金版)

    世界上最伟大的推销员大全集(超值金版)

    如果你想成为一名优秀的推销员,创造出不菲的业绩,就要具备良好的心态、修养、品质、习惯、方法、技巧等,而这所有的一切都可以从榜样的身上汲取。通过学习,我们可以积累销售所需要的专业知识,还可以培养推销员所需要的素质和修养。在学习成功人士的经验的时候,积极思考,把学习到的知识和理论运用到实际的推销过程中去,将创造出卓越的业绩。宝剑锋从磨砺出,梅花香自苦寒来,即使我们了解了销售成功的秘决,如果不行动就永远不会成功,希望通过凡禹、吴慧编著的《世界上最伟大的推销员大全集(超值金版)》,每个推销员都切实行动起来,在推销实践中真正体会成功的乐趣,为创造一个辉煌的未来而努力。
  • 鸿蒙帝尊

    鸿蒙帝尊

    一名沦为奴隶的侯府庶子,遇到了一名自称血衣大帝的女童……自此,他背负开天之命,为帝中之尊。
  • 孟子:敢于选择自己

    孟子:敢于选择自己

    一辈子多长?一百年够长了。它代表什么?100乘以52周,等于5200周。再乘以一周7天,等于36400天。或者接近90万小时。成功人生是需要策划的,一个懵懵懂懂的人,他始终不会找到自己的方向。其实,在我们每个人的身上都有可以立即支取的能力,只要我们下定决心要有所改变,那么长久以来所做的美梦便可以实现。
  • 告诉你一个托尔斯泰的故事

    告诉你一个托尔斯泰的故事

    精选了托尔斯泰人生中富有代表性的事件和故事,以点带面,从而折射出他充满传奇的人生经历和各具特点的鲜明个性。通过阅读《告诉你一个托尔斯泰的故事》。我们不仅要了解他的生活经历,更要了解他的奋斗历程,以及学习他在面对困难、失败和挫折时所表现出来的杰出品质。
  • 穿越白蛇传

    穿越白蛇传

    穿越进了白蛇传,成为了许仙,在这道家林立,妖魔鬼怪纷起的世道里,许仙不再受世道的束缚,命运从此逆转………………………………………………这一年许仙修道,立志要做全天下最幸福的护花高手。于是人妖情来了。
  • 培根论文集(语文新课标课外必读第二辑)

    培根论文集(语文新课标课外必读第二辑)

    《培根论文集》萃取了培根一生著述的精华,内容包括培根对人与自己、人与社会、人与他人以及人与自然等各方面关系的看法。从“论真理”、“论死亡”等篇章中,可以看到一个热情于哲学的培根。从“论权位”、“论野心”等篇章中,可以看到一个热衷于政治、深涪官场运作的培根。从“论爱情”、“论友情”等篇章中,可以看到一个富有生活情趣的培根。从“论逆境”、“论残疾”等篇章中,可以看到一个自强不息的培根。从“论狡猾”、“论言谈”等篇章中,可以看到一个工于心计、老于世故的培根。