登陆注册
18668900000010

第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′;

同类推荐
  • 中国3D打印的未来

    中国3D打印的未来

    自2012年以来,有关3D打印的报道屡见报端,这一新型制造技术引起了全世界的广泛关注。《中国3D打印的未来》作者、中国3D打印技术产业联盟秘书长罗军认为,中国从20世纪90年代初开始涉足3D打印技术,并取得了巨大进展,但与国外同行相比仍存在一定差距。特别是中国3D打印企业普遍存在“小而散”、各自为政的现象,如何发挥整合优势、抱团发展是目前亟需解决的问题。如果能够加强同行合作,抱团发展,形成合力,相信3D打印会成为唯一一项中国有可能赶超世界先进水平的技术。
  • 三维动画审美谈

    三维动画审美谈

    数字时代,美的标准充满更多的不确定性。而三维动画以数字图像形式成为这个图时代的代表。三维动画及三维图像不仅仅是由于应用了仿真数字图像技术而带来的虚拟空间,还有更多的是由三维图像技术所引发或引导的被扩展的图像技术,这些技术无不应用在现代视觉设计领域的各个方面,并且,由此引起社会的追热,引起审美观念的改变。这些改变是在进行中的,变化中的,也是在发展中的。对于未知的美,我们做的只是追寻和记录,我们不知道以后的美将会是什么样,尽管我们苦苦追寻,孜孜探讨,同时也在默默审视。我们在追寻中享受美,在探讨中认知美,在审视中体验美……
  • 玩转手机

    玩转手机

    本书主要包括:手机的发展历史、手机知识、手机的选购与巧用、手机与网络、手机短信等内容。
  • 学校计算机实用技术

    学校计算机实用技术

    本书由杭州市上城区教育学院编著,他们邀请了众多信息技术教育教学的一线专家,认真细致地筛选了学校计算机应用方面的常见问题,提出了解决问题的具体操作方案,旨在帮助一线教育工作者解决可能面临的种种问题,为广大教师提供便捷服务。
热门推荐
  • 爱情,睡醒了

    爱情,睡醒了

    方婷正在筹备一场婚礼的时候,突然新郎王文军有了新欢,不打算结婚了,对外已经派送了请帖,方婷毅然决然的还是要继续自己筹备的婚礼,正在为新郎的人选焦头烂额时,恰巧遇到正在着急结婚的夏雷,两人一拍即合,先解决燃眉之急.......
  • 无限狂飚

    无限狂飚

    我们每天抬头看天,双脚踏在大地上,可曾感受到什么,或许什么也没有,因为都在虚度。哪里还有自己的天空,哪里还有自己的空间?属于自己的时间也被剥夺的所剩无几,深夜可曾抬头看看天上的明月,凌晨可会趴在窗台听不远处车轮滚过的呼啸声……那亿年的天,亿年的地,真的像你我此时所看到的那么普通那么简单吗?从出生到死亡,只不过沧海一瞬,在天地永恒面前,我们微不足道。但存在,就有存在下去的原因和动力。我们是天所生,地所育,教给我们的,就是道——掌握永恒的道!神,神是什么?在我们的世界里,根本没有神的存在,可为什么我们这些无知的人类会把个别人个别的事物称之为神呢?为什么我们自己反而甘于平庸乏味的生活而去崇拜那些创造神话的人呢……天地的存在,就是让你我参悟其中的道,然后成为神。且看一个如你我平凡的人,如何参悟天地之道而站在所有的极品名车的顶峰,被人尊称为车神!
  • 血衣门

    血衣门

    一代血魔,因痴情逃出魔罗界,只为寻求那集了满世芳华的靓影。他化名南卿,取姓为刘,从天华大陆的终极世家——影家,劫走了他为之倾倒的女子——影泯恋。他们在一个偏僻的小城安家落户,并生下一子,取名瀶血。看天才少年刘瀶血怎样获得种种奇遇,俯瞰众生,沸腾这残酷大陆!
  • 不房不撸

    不房不撸

    一个小色胚因撸管过度导致其虚脱身亡,然而灵魂却穿越到一个叫玄天大陆的三流家簇的废物身上,他逆家簇禁令偷入禁地,获得洗髓筑骨,拾得家簇古玉自此战至九天风流天下……真的很黄很暴力
  • 菜根谭每日读

    菜根谭每日读

    本书分为修养身心篇、为人处世篇、交际应酬篇、闲适逍遥篇等,将前人对人生百味的体验,对世事沧桑的慨叹,以及处世经验的沉淀与累积皆融于其中,辑成一部有助于提升世人思想修养的作品。
  • 裁决与审判

    裁决与审判

    天之高,地之广,任吾行天下。路之遥,山之险,笑谈逍遥乐。上可直捣天界,下可玩转冥府。吾即为那审判之雷,吾即为那裁决之电。茫茫幻灵世界,吾踏破轮回!广广灵界八州,吾道破红尘。吾名,江浩灵!
  • 徐闇公先生年谱

    徐闇公先生年谱

    本书为公版书,为不受著作权法限制的作家、艺术家及其它人士发布的作品,供广大读者阅读交流。汇聚授权电子版权。
  • 焚天大道

    焚天大道

    苍茫天道,艰险无数。欲成大道,谁敢焚天?李温偶得石头宝物,为他成为强者带来契机。可是,修炼的路途,从来都不是一帆风顺,看李温如何焚尽重重险阻,成就天道。
  • 时空棋界之五常灵者

    时空棋界之五常灵者

    五常出,五行聚,苍龙现,混沌生脱于三界外,仍在五行中萧瑟一个普通医生意外事件来到了名为天地棋局的神秘空间。。。
  • 珠珠公主

    珠珠公主

    初次邂逅,她花痴的想,这个冰冷的男人好帅。她爱上了他,想走进他的世界。没想到,迎接她的,却是没来由的毒打!一鞭又一鞭,他伤害了她无数次,终于,她冷冷地看着他,嘴角带着一抹讽刺,既然这样,一切都不再一样了呢!