登陆注册
24892200000010

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

5.4.1 单表查询

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

5.4.1.1 选择表中若干列

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

1.查询指定的列

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

SQL>SELECT sno,sname,***

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,***

FROM student

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

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

SQL>SELECT sname,***

FROM student

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

(4)字符匹配

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

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

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

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

SQL>SELECT sname,sno,***

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

同类推荐
  • 信息革命

    信息革命

    随着经济社会的快速发展,电子产品走进了千家万户,与电子产品相伴的信息技术也已渗透到人们生产生活的方方面面。加强信息技术普及,已成为业内人士的共识。鉴于此,在有关部门的大力支持下,经过认真筹划,我们编辑出版了《信息革命》一书。该书以时间为经,在记述信息技术发展历程的同时,深入浅出地介绍了信息技术的相关知识,对人们更好地利用现代信息技术服务经济社会建设和个人生产生活必将产生积极作用。本书由李大东主编。
  • 数据库原理及Oracle应用

    数据库原理及Oracle应用

    进入21世纪,随着国家信息化步伐的加快及各行业信息化进程的不断加速,社会对专业(非计算机专业)人才的信息技术能力要求越来越高。为了适应社会对专业人才的要求,全国各高校在重视专业知识培养的同时也非常注重计算机应用能力的训练,即信息技术能力的培养。计算机应用水平已成为衡量高校毕业生综合素质的突出标志之一。
热门推荐
  • 蓦然间的回首

    蓦然间的回首

    聚精会神,漫不经心,忽然明白,顿时感悟。突然回头,不经意回首经历的事情,再次在脑海中回荡,有伤心、有失落、有开心、有快乐,也有着恋恋不舍……
  • 一品皇女太妖娆

    一品皇女太妖娆

    啊喂,本姑娘可是西岑的大皇女哎!你要不要这么无视我,要不要这么高冷啊。不要忘了,你可是本姑娘的皇夫哎。还夜不归宿??哼~~不听话,本姑娘分分钟休了你。某男一个杀气腾腾的眼神丢过去,我就静静的看着你,不说话!呃……你不要用这么深情的目光望着我好吗?本姑娘害怕
  • 宰持大明

    宰持大明

    明朝的那些风花雪月。古代的那些饮食男女。四百年前的官场生态。一个穿越到嘉靖六年的故事。
  • 生命进化之旅

    生命进化之旅

    生命的死亡真的是终结吗?佛家有转世之说,道家也有飞升之举,而儒家直指仁心。生命岂能如同草木,枯萎而烟消云散?东方岚死后一丝真魂不灭,破界而出,飞升灵界而入修门。在灵界的元明星上结识了同来自下层宇宙的其他九个人,开始了探索生命进化之旅,从相识相知到最后生死与共,他们经历了种种机缘与磨难,经过最初的低等生命体、初级生命体、中级生命体、高级生命体四个阶段,最终进入了魔界,去探寻生命的终极阶段——完美生命体的奥秘。。。。。
  • 花花大少:老婆快回家

    花花大少:老婆快回家

    她放肆的拿手戳着他的胸口,笑得一脸无害。初见面,她是被他强吻的倒霉女,他是被她弄的颜面扫地的猥琐男。他发誓,一定要让这个不知天高地厚的女人付出代价。再见面,她是他的相亲对象。一场没有新郎的婚礼,她嫁给了这个游戏人间的花花大少。自此,他是她的丈夫,而她,是他的妻子,合作愉快。
  • 致青春:囚光

    致青春:囚光

    【不正经版简介:某乖乖“傻白甜”萌妹的黑化强悍史。【正经版简介:纯真岁月,她遇上了他;最美年华,她爱上了他;璀璨巅峰,他一去不返;从此,这世间再无言黎璎,只有黎陌殇,陌上花开人如玉,躲不过情殇。她,早已经不是当初纯真的黎璎妹妹,也不是那个光彩照人的舞后,亦不是养尊处优的千金大小姐……情海囚禁在芳华,他赋予她新生;囚笼松懈,冰封的心开始融化,然而,没想到的是,他,还活着……曾经,那个少年,早已经是昔日的云烟。从此,世间多了一个传奇……一场,来自青春的镇魂曲…【小剧场:“小璎儿,我愿以我余生,还你青春不悔”“这一次,我不会再放手”【书友群:650470579
  • 共和国科学拓荒者传记系列:王淦昌传

    共和国科学拓荒者传记系列:王淦昌传

    这是一套记述我国著名科学家的成长以及他们艰辛的科研历程的纪实文学作品。这些大科学家走过了近一个世纪的人生历程。他们生在战乱年代,山河破碎、民生凋敝,骨肉同胞饱受欺凌;他们忍辱负重、负笈海外、卧薪尝胆、发奋自强;他们学业有成、毅然归国、隐姓埋名、白手起家、自力更生、科学拓荒,为国家造“争气弹”。以“两弹一星”为标志,他们在国防和高科技领域中取得了重大突破,打破大国封锁与孤立,使新生的共和国政权站稳了脚跟。世纪人生,百年追梦,爱国奉献,砥砺创新,科技强国,这是大科学家们一生的真实写照。这些共和国的功臣,他们都是顶天立地的中国人,是值得历史记住的科学英模。
  • 陈二狗的逆袭人生

    陈二狗的逆袭人生

    他高考差二十多分没进入大学,于是父母整日对他唉声叹气,恨铁不成钢。他相了一次亲,那女孩却因为他人穷志短而生气的夺门而去。今年过年他那在大城市的表哥又开着那辆奥迪a6来到他家大次炫耀他如何赚得了大把的钞票,这使得他的父母好不自在,也让他的脸上火辣辣的痛。晚上他一个人喝得大醉,他摇摇晃晃的来到门外的空地上手指着浩瀚的夜空喊道:“你们这些瞧不起我的人都给我听着!我陈二狗是个男人!不是孬种!我要让你们知道我陈二狗的厉害!从明天开始,我就要开始逆袭我的人生!······
  • 魔魂刺客

    魔魂刺客

    意外解开身世之谜,让杀手之王陈墨步入复仇的深渊。杀与爱,血与泪,无情与冷酷交织,昔日的同伴变成生死仇敌,失手将自己最爱的人葬送黄泉。入魔界,斩血蛊,虫族卑劣的手段让他陷入四位至尊主神的豪赌之中。战异界,争霸主,斩杀天下人又如何?“我甘愿与恶魔为伍,只是为了了却我心中未完成的那个夙愿而已。”陈墨如是说到。
  • 大宋第一人

    大宋第一人

    “大丈夫立于天地之间,当携六尺青锋,创不世功业,何人敢为阵前卒?”“文官不爱财,武官不惜命。”泱泱华夏,何惧宵小?“作诗有何难,出口便是锦绣文。”“荒谬,圣上犹在,谈何登基?”汴京城内车水马龙,川流不息,勾栏瓦肆文人墨客,贩夫走卒,谈笑自若……往事越千年,且看现在小年轻如何混迹在北宋年间。一切尽在大宋第一人。每日早九点中午一点晚上八点准时更新。新书上传望诸位多多支持。