第8章 DM数据库单表与多表查询_第1页
第8章 DM数据库单表与多表查询_第2页
第8章 DM数据库单表与多表查询_第3页
第8章 DM数据库单表与多表查询_第4页
第8章 DM数据库单表与多表查询_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

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

文档简介

主讲教师:时间:202x.xx.xx第8章DM数据库单表与多表查询01单表查询02多表查询目录CONTNETS03知识点小结数据库查询是指数据库管理系统按照数据用户指定的条件,从数据库中相关表中找到满足条件的记录过程。查询数据库中的记录有多种方式,可以查询所有的数据,也可以根据自己的需要进行查询。我们可以从一个表/视图中进行查询,也可以从多个表/视图进行查询,本章将详细介绍数据库的单表与多表查询的操作。01单表查询

02多表查询目录CONTNETS03知识点小结单表查询

SELECT语句仅从一个表/视图中检索数据,称单表查询。即<FROM子句>中<普通表>使用的是[<模式名>]<基表名|视图名>。其语法结构:SELECT[字段或其他查询表达式]<FROM子句> [<WHERE子句>][<层次查询子句>] [<GROUPBY子句>] [<HAVING子句>]01PARTONE单表查询简单查询带条件查询集函数简单查询创建数据表如下:简单查询创建数据表如下:简单查询创建数据表如下:查询所有字段:

查询所有字段是指查询表中的所有字段的数据,有两种方式:一种是列出表中的所有字段,不同字段之间用逗号(,)分隔,最后一列后面不需要加逗号;另一种是使用通配符

*

来查询。简单查询例8-1:查询学生的所有信息:方式

1:SELECTzno,sclass,sno,sname,ssex,sbirthFROM"jxgl"."student";方式2:SELECT*FROM"jxgl"."student";方式1中,返回的结果字段的顺序和SELECT语句中指定的顺序一致。方式2中,返回的结果字段的顺序是固定的,和建立表时指定的顺序一致。简单查询查询学生的所有信息:方式

1查询结果:简单查询查询学生的所有信息:方式

2查询结果:简单查询指定字段查询例

8-2:查询学生的学号和姓名。查询语句:SELECTsno,snameFROM"jxgl"."student";查询结果:简单查询避免重复数据查询

DISTINCT关键字可以去除重复的查询记录。和DISTINCT相对的是ALL关键字,即显示所有的记录(包括重复的),而ALL关键字是系统默认的,可以省略不写。例

8-3:查询在student表中的班级。查询语句:SELECTsclassFROM"jxgl"."student";

SELECTDISTINCTsclassFROM"jxgl"."student";简单查询查询结果:

从查询结果,我们可以看出,用DISTINCT关键字后,结果中重复的记录只保留一条。正是我们想要的结果。简单查询为表和字段取别名

当查询数据时,DM_SQL会显示每个输出列的名称。默认的情况下,显示的列名是创建表时定义的列名。例如,student表的列名分别是sno,sname,ssex,sbirth,zno和sclass。当查询student表时,就会相应显示这几个列名。有时为了显示结果更加直观,需要一个更加直观的名字来表示这一列,而不是用数据库中的列的名字。例

8-4:查询学生的学号,成绩。并指定返回的结果中的列名为学号,成绩,而不是sno和grade。查询语句:SELECTsno,gradeFROM"jxgl"."sc";简单查询查询结果:

在使用SELECT语句对列进行查询时,在结果集中可以输出对列值计算后的值。简单查询例8-5:查询sc表中学生的的成绩提高10%,对显示后的成绩列,显示为“修改后成绩”。查询语句:

SELECTsno,grade,grade*1.1"修改后的成绩"FROM"jxgl"."sc";查询结果:01PARTONE单表查询简单查询带条件查询集函数带条件查询

条件查询主要使用关键字WHERE,指定查询的条件WHERE子句常用的查询条件有很多种,如下表所示。带关系运算符和逻辑运算符的查询

DM数据库中,可以通过关系运算符和逻辑运算符来编写“条件表达式”。DM数据库支持的比较运算符有>,<,=!,=(<>),>=,<=;逻辑运算符有AND(&&),OR(||),NOT(!)

例8-6:查询成绩大于90分学生的学号和成绩。

查询语句:SELECTsno,gradeFROM"jxgl"."sc"WHEREgrade>90;

查询结果:带关系运算符和逻辑运算符的查询

例8-7:查询成绩在70分到80分之间(包含70分和80分)学生的学号和成绩。

查询语句:SELECTsno,gradeFROMscWHEREgrade>=70ANDgrade<=80;

查询结果:带关系运算符和逻辑运算符的查询带IN关键字的查询

IN关键字可以判断某个字段的值是否在指定的集合中,如果字段的值在集合中,则满足查询条件,该记录将被查询出来;如果不在集合中,则不满足查询条件。带关系运算符和逻辑运算符的查询

例8-8:查询成绩在集合(65,75,85,95)中的学生的学号和成绩。

查询语句:SELECTsno,gradeFROM"jxgl"."sc"WHEREgradeIN(65,75,85,95);

查询结果:带关系运算符和逻辑运算符的查询带BETWEENAND关键字的查询

BETWEENAND关键字可以判断出某个字段的值是否在指定的范围内,如果在,则满足条件,否则不满足。带关系运算符和逻辑运算符的查询

例8-9:查询成绩在70分到80分之间(包含70分和80分)学生的学号和成绩。

查询语句:SELECTsno,gradeFROM"jxgl"."sc"WHEREgradeBETWEEN75AND80;

查询结果:带关系运算符和逻辑运算符的查询

例8-10:使用BETWEENAND关键字进行查询,查询条件是sno字段的取值从202011030102~202014855406。

查询语句:SELECT*FROM"jxgl"."student"WHEREsnoBETWEEN202011030102AND202014855406;

查询结果:带关系运算符和逻辑运算符的查询

例8-11:使用NOTBETWEENAND关键字查询student表。查询条件是sno字段的取值不在202011030102~202014855406之间。

查询语句:SELECT*FROM"jxgl"."student"WHEREsnoNOTBETWEEN202011030102AND202014855406;

查询结果:带关系运算符和逻辑运算符的查询带ISNULL关键字的空值查询

ISNULL关键字可以用来判断字段的值是否为空值(NULL).如果字段值为空值,则满足查询条件,否则不满足。带关系运算符和逻辑运算符的查询

例8-12:查询没分专业的学生的学号和姓名。

查询条件:没分专业说明专业号为空,即znoISNOTNULL;

查询语句:SELECTsno,sname,znoFROM"jxgl"."student"WHEREznoISNOTNULL;

查询结果:带关系运算符和逻辑运算符的查询带LIKE关键字的查询

LIKE关键字可以匹配字符串是否相等。如果字段的值与指定的字符串相匹配,则满足条件,否则不满足。带关系运算符和逻辑运算符的查询

例8-13:使用LIKE关键字来匹配一个完整的字符串'王松'。

查询语句:SELECT*FROM"jxgl"."student"WHEREsnameLIKE'王松';

查询结果:带关系运算符和逻辑运算符的查询

例8-14:使用LIKE关键字来匹配带有通配符‘%’的字符串‘李%’。

查询语句:SELECT*FROMstudentWHEREsnameLIKE'李%';

查询结果:带关系运算符和逻辑运算符的查询

例8-15:使用LIKE关键字来匹配带有通配符'%'的字符串。

查询语句:SELECT*FROM"jxgl"."student"WHEREsnameLIKE'王%';

查询结果:带关系运算符和逻辑运算符的查询

例8-16:使用NOTLIKE关键字来查询不是姓李的所有人的记录。

查询语句:SELECT*FROM"jxgl"."student"WHEREsnameNOTLIKE'王%';

查询结果:01PARTONE单表查询简单查询带条件查询集函数集函数

为了进一步方便用户的使用,增强查询能力,DM_SQL语言提供了多种内部集函数。集函数又称库函数,当根据某一限制条件从表中导出一组行集时,使用集函数可对该行集作统计操作。带关系运算符和逻辑运算符的查询分组查询

GROUPBY关键字可以将查询结果按某个字段或多个字段进行分组。字段中值相等的为一组。带关系运算符和逻辑运算符的查询

例8-17:按student表的ssex字段进行分组查询。然后显示记录数大于等于10的分组(COUNT(),用来统计记录的条数)。

查询语句:SELECTssex,COUNT(ssex)FROM"jxgl"."student"GROUPBYssexHAVINGCOUNT(ssex)>=10;

查询结果:带关系运算符和逻辑运算符的查询对查询结果排序

从表中查询出来的数据可能是无序的,或者其排列顺序不是用户所期望的顺序。为了使查询结果的顺序满足用户的要求,可以使用ORDERBY关键字对记录进行排序。带关系运算符和逻辑运算符的查询

例8-18:查询student表中所有记录,按照zno字段进行排序。

查询语句:SELECT*FROM"jxgl"."student"ORDERBYzno;

查询结果:带关系运算符和逻辑运算符的查询

例8-19:查询student表中所有记录,按照zno字段的升序方式和sno字段的降序方式进行排序。

查询语句:SELECT*FROM"jxgl"."student"ORDERBYznoASC,snoDESC;

查询结果:带关系运算符和逻辑运算符的查询限制查询结果数量

当使用SELECT语句返回的结果集中行数很多时,为了便于用户对结果数据的浏览和操作,可以使用LIMIT子句来限制被SELECT语句返回的行数。带关系运算符和逻辑运算符的查询

例8-20:在student表中查找从第3名同学开始的3位学生的信息。

查询语句:SELECT*FROM"jxgl"."student"ORDERBYsnoLIMIT3,3;

查询结果:带关系运算符和逻辑运算符的查询聚合函数

聚合函数包括COUNT()、SUM()、AVG()、,MAX()和MIN()。其中,COUNT()用来统计记录的条数;SUM()用来计算字段的值的总和;AVG()用来计算字段的值的平均值;MAX()用来查询字段的最大值;MIN()用来查询字段的最小值。带关系运算符和逻辑运算符的查询

例8-21:使用COUNT()函数统计student表的记录数。

查询语句:SELECTCOUNT(*)AS“学生总人数”FROM"jxgl"."student";

查询结果:带关系运算符和逻辑运算符的查询

例8-22:使用COUNT()函数统计student表不同zno值的记录数。COUNT()函数与GROUPBY关键字一起使用。

查询语句:SELECTzno,COUNT(*)AS“学生总人数”FROM"jxgl"."student"GROUPBYzno;

查询结果:带关系运算符和逻辑运算符的查询SUM()函数

SUM()函数是求和函数。使用SUM()函数可以求表中某个字段取值的总和。例如,可以用SUM()函数来求学生的总成绩。带关系运算符和逻辑运算符的查询

例8-23:使用SUM()函数统计sc表中学号为202011030102的同学的总成绩。

查询语句:selectsno,sum(grade)from"jxgl"."sc"groupbysnohavingsno=202011030102;

查询结果:带关系运算符和逻辑运算符的查询

例8-24:将sc表按照sno字段进行分组,然后,使用SUM()函数统计各分组的总成绩。

查询语句:selectsno,sum(grade)from"jxgl"."sc"groupbysno;

查询结果:带关系运算符和逻辑运算符的查询AVG()函数

AVG()函数是求平均值的函数。使用AVG()函数可以求出表中某个字段取值的平均值。例如,可以用AVG()函数来求平均年龄,也可以使用AVG()函数来求学生的平均成绩。带关系运算符和逻辑运算符的查询

例8-25:使用AVG()函数计算sc表中平均成绩。

查询语句:SELECTAVG(grade)FROM"jxgl"."sc";

查询结果:带关系运算符和逻辑运算符的查询

例8-26:使用AVG()函数计算sc表中不同科目的平均成绩。

查询语句:SELECTcno,AVG(grade)FROM"jxgl"."sc"GROUPBYcno;

查询结果:带关系运算符和逻辑运算符的查询MAX()函数

MAX()函数是求最大值的函数。使用MAX()函数可以求出表中某个字段取值的最大值。例如,可以用MAX()函数来查询最大年龄,也可以使用MAX()函数来求各科的最高成绩。带关系运算符和逻辑运算符的查询

例8-27:使用MAX()函数查询sc表中不同科目的最高成绩。

查询语句:selectcno,max(grade)from"jxgl"."sc"groupbycno;

查询结果:带关系运算符和逻辑运算符的查询

例8-28:使用MAX()函数查询student表中sname字段的最大值。

查询语句:SELECTMAX(sname)FROM"jxgl"."student";

查询结果:带关系运算符和逻辑运算符的查询MIN()函数

MIN()函数是求最小值的函数。使用MIN()函数可以求出表中某个字段取值的最小值。例如,可以用MIN()函数来查询最小年龄,也可以使用MIN()函数来求各科的最低成绩。带关系运算符和逻辑运算符的查询

例8-29:使用MIN()函数查询sc表中不同科目的最低成绩。

查询语句:SELECTcno,MIN(grade)FROM"jxgl"."sc"GROUPBYcno;

查询结果:带关系运算符和逻辑运算符的查询合并查询结果

DM数据库中使用UNION关键字,可以将多个SELECT结果集合并为单个结果集,但要求参合并的结果集对应的列数和数据类型必须相同。在第一个SELECT语句中被使用的列名称也被用于结果的列名称。带关系运算符和逻辑运算符的查询

例8-30:查询女生的信息或出生日期“1997-01-08”以后出生的学生信息。查询语句:SELECT*FROM"jxgl"."student"WHEREssex='女'UNIONSELECT*FROM"jxgl"."student"WHEREsbirth>'1997-01-08';

查询结果:01单表查询

02多表查询目录CONTNETS03知识点小结02PARTTWO多表查询内连接查询外连接查询子查询多表查询内连接查询

内连接查询是最常用的一种查询,也成为等同查询,就是在表关系的笛卡尔积数据记录中,保留表关系中所有相匹配的数据,而舍弃不匹配的数据。多表查询等值连接(innerjoin)

用来连接两个表的条件称为连接条件。如果连接条件中的连接运算符是=时,称为等值连接。多表查询

例8-31:对选修表和课程表做等值连接(返回的结果限制在4条以内)。查询语句:SELECTsno,o,grade,o,cname,ccredit,cdeptFROM"jxgl"."sc"INNERJOIN"jxgl"."course"ontrim(o)=trim(o)LIMIT4;

查询结果:多表查询自然连接(NATURALJOIN)

自然连接操作就是表关系的笛卡尔积中选取满足连接条件的行。具体过程是,首先根据表关系中相同名称的字段进行记录匹配,然后去掉重复的字段。还可以理解为在等值连接中把目标列种重复的属性列去掉则为自然连接。多表查询

例8-32:对选修表和课程表做自然连接(返回的结果限制在4条以内)。查询语句:SELECT*FROM"jxgl"."sc"NATURALJOIN"jxgl"."course"LIMIT4;

查询结果:多表查询不等值连接(INNERJOIN)

在WHERE字句中用来连接两个表的条件称为连接条件。如果连接条件中的连接运算符是=时,称为等值连接。如果是其他的运算符,则是不等值连接。多表查询

例8-33:对选修表和课程表做不等值连接(返回的结果限制在4条以内)。查询语句:select*from"jxgl"."student"innerjoin"jxgl"."course"ono!=olimit4;

查询结果:02PARTTWO多表查询内连接查询外连接查询子查询多表查询外连接

外连接可以查询两个或两个以上的表,外连接查询和内连接查询非常的相似,也需要通过指定字段进行连接,当该字段取值相等时,可以查询出该表的记录。而且,该字段取值不相等的记录也可以查询出来。外连接可分为左连接和右连接。多表查询左外连接(LEFTJOIN)

左外连接的结果集中包含左表(JOIN关键字左边的表)中所有的记录,然后左表按照连接条件与右表进行连接。如果右表中没有满足连接条件的记录,则结果集中右表中的相应行数据填充为NULL。多表查询

例8-34:利用左连接方式查询课程表和选修表。查询语句:SELECTo,ame,o,sc.snoFROM"jxgl"."course"LEFTJOIN"jxgl"."sc"ono=oLIMIT10;

查询结果:多表查询右外连接(RIGHTJOIN)

右外连接的结果集中包含满足连接条件的所有数据和右表(JOIN关键字右边的表)中不满足条件的数据,左表中的相应行数据为NULL。多表查询

例8-35:利用右连接方式查询课程表和选修表。查询语句:SELECTo,ame,o,sc.snoFROM"jxgl"."course"RIGHTJOIN"jxgl"."sc"ono=oLIMIT10;

查询结果:02PARTTWO多表查询内连接查询外连接查询子查询多表查询子查询

当进行查询的时候,若需要的条件是另外一个SELECT语句的结果,这个时候,就要用到子查询。

查询,可以实现多表之间的查询。子查询中可能包括IN,NOTIN,ANY,EXISTS和NOTEXISTS等关键字。子查询中还可能包含比较运算符,如“=”、“!=”、“>”和“<”等。多表查询带IN关键字的子查询

当进行查询的时候,若需要的条件是另外一个SELECT语句的结果,这个时候,就要用到子查询。

子查询中可能包括IN,NOTIN,ANY,EXISTS和NOTEXISTS等关键字。子查询中还可能包含比较运算符,如“=”、“!=”、“>”和“<”等。多表查询

例8-36:查询成绩在集合(65,75,85,95)中的学生的学号和成绩查询条件就是IN(65,75,85,95)。查询语句:SELECTsno,gradeFROM"jxgl"."sc"WHEREgradeIN(65,75,85,95);

查询结果:多表查询

例8-37:查询还没选修过任何课程的student的记录。查询语句:SELECT*FROM"jxgl"."student"WHEREsnoNOTIN(SELECTsnoFROM"jxgl"."sc");

查询结果:多表查询

例8-38:查询选修过课程的student的记录。查询语句:SELECT*FROM"jxgl"."student"WHEREsnoIN(SELECTsnoFROM"jxgl"."sc");

查询结果:多表查询带EXISTS关键字的子查询

exists关键字表示存在,使用exists关键字时,内查询语句不返回查询的记录,而是返回一个真假值。如果内层查询语句查询到满足条件的记录,就会返回一个真值true,否则返回false。当返回true时,外查询进行查询,否则外查询不进行查询。多表查询

例8-39:如果存在“金融”这个专业,就查询所有的课程信息。查询语句:SELECT*

温馨提示

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

评论

0/150

提交评论