计算机练习第3章_第1页
计算机练习第3章_第2页
计算机练习第3章_第3页
计算机练习第3章_第4页
计算机练习第3章_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

3.4.1SQL的概述SQL(StructureQueryLanguage)结构化查询语言;非过程化;数据定义(CREATE、DROP、ALTER),数据查询(SELECT),数据操纵(INSERT、UPDATE、DELETE),数据控制(GRANT、REVOKE);3.4.1SQL的概述3.4.2SELECT语句的格式SELECT-SQL命令常用格式:SELECT<输出列名表>/*FROM<表名>[WHERE<记录筛选条件>][ORDERBY<排序依据>[ASC/DESC]][GROUPBY<分组依据>[HAVING<输出条件>]];

SELECT-SQL命令详介SELECT

子句*表示所有字段输出列有以下几种形式:

<字段名>[AS<列标题>]<常量>[AS<列标题>]<函数名>(字段名)[AS<列标题>]

(统计类函数有COUNT/AVG/SUM/MAX/MIN)<表达式>[AS<列标题>]SELECT子句【例1】在“学生”表中查询全体学生的学号、姓名、性别和专业。SELECT学号,姓名,性别,专业编号FROM学生;SELECT子句【例2】在“教师”表中查询所有的字段信息。SELECT教师编号,姓名,性别,出生日期,职称,专业编号FROM教师;SELECT*FROM教师;SELECT子句【例3】查询学生的生源主要来自哪些地方。SELECTDISTINCT

生源FROM学生;查询结果不包含重复记录:在SELECT后使用DISTINCT选项。SELECT子句查询输出常量、表达式的值,可以为常量或表达式取一个有含义的名称作为查询结果的列标题。【例4】查询学生的学号、姓名、籍贯和学校,假设学校为“福州大学”。SELECT学号,姓名,生源,"福州大学"AS学校FROM学生;SELECT子句查询输出常量、表达式的值,可以为常量或表达式取一个有含义的名称作为查询结果的列标题。【例5】查询学生的学号、姓名、和年龄。SELECT学号,姓名,YEAR(DATE())-YEAR(出生日期)AS年龄FROM学生;方法一SELECT子句SELECT学号,姓名,INT((DATE()-出生日期)/365)AS年龄FROM学生;【例5】查询学生的学号、姓名、和年龄。方法二SELECT学号,姓名,(DATE()-出生日期)/365AS年龄FROM学生;方法一、方法二对比SELECT子句聚集函数【例6】查询“学生”表的学生总人数。SELECTCOUNT(*)AS人数FROM学生;SELECT子句SELECT子句【例7】查询显示成绩表中所有学生的平均入学总分、最高入学总分和最低入学总分。SELECTAVG(成绩)AS平均分,MAX(成绩)AS最高分,MIN(成绩)AS最低分FROM成绩;SELECT子句*在聚集函数中使用DISTINCT参数(仅适用于ORACLE和SQLserver,不能用于Access)SELECTCOUNT(专业编号)FROM学生;SELECTCOUNT(DISTINCT专业编号)FROM学生;SELECT-SQL命令详介WHERE子句

条件的表达形式有:

<关系表达式>:含>、<、>=、<=、=、<><字段>[NOT]LIKE"<字符串通配式(含?、*)>"

<字段>[NOT]BETWEEN<值1>AND<值2><字段>[NOT]IN(<值列表>/<SELECT-SQL命令>)

多个条件用AND、OR、NOT组成逻辑表达式WHERE子句<关系表达式>:含>、<、>=、<=、=、<>【例8】查询学生表中非福建籍男生的信息。SELECT*FROM学生WHERE生源<>"福建"and性别="男";WHERE子句【例9】查询学生表中福建和北京籍的男生的信息。SELECT*FROM学生WHERE生源="福建"or生源="北京"

and性别="男";()WHERE子句LIKE运算符的使用:<字段>

[NOT]LIKE"<字符串通配式(含?、*)>"【例10】查询姓王和名字中含有“晓”字的学生的学号、姓名、性别。SELECT学号,姓名,性别FROM学生WHERE姓名like"王*"or姓名like"?晓*";WHERE子句BETWEEN运算符的使用:

<字段>[NOT]BETWEEN<值1>AND<值2>【例11】查询学生表中90年下半年出生的学生人数。SELECTCOUNT(*)AS人数FROM学生WHERE出生日期BETWEEN#1990-6-1#AND#1990-12-31#;WHERE子句【例11】查询成绩表中60分以下和90分以上的信息。SELECT*FROM成绩WHERE成绩<60or

成绩>90;SELECT*FROM成绩WHERE成绩NOTBETWEEN60AND90;WHERE子句IN运算符的使用:

<字段>[NOT]IN(<值列表>)

【例12】查询学生表中“福建”和“北京”籍的学生信息。SELECT*FROM学生WHERE生源="福建"OR生源="北京";SELECT*FROM学生WHERE生源IN("福建","北京");WHERE子句【思考】以下两条SQL语句的查询结果有何不同?

SELECT*FROM成绩WHERE成绩BETWEEN70AND90SELECT*FROM成绩WHERE成绩IN(70,90)WHERE子句IN运算符的使用:

<字段>[NOT]IN(<SELECT-SQL命令>)

在一个SELECT语句的WHERE子句中出现另一个SELECT语句,这种查询称为嵌套查询。内层的查询语句称为子查询,调用子查询的查询语句称为父查询。SQL语言允许多层嵌套查询,即一个子查询中还可以嵌套其他子查询。嵌套查询SELECT学号,姓名

FROM学生

WHERE学号IN

();WHERE子句【例13】查询课程编号为“C0404”且成绩在90分以上的学生学号和姓名。

SELECT学号

FROM成绩

WHERE成绩>90AND课程编号="C0404"相关表例13的相关表SELECT-SQL命令详介FROM子句单表查询:FROM<表名>两表联接查询:实现1)FROM<表名1>,<表名2>WHERE<表名1>.<关联字段>=<表名2>.<关联字段>

实现2)FROM<表名1>[INNER]JOIN<表名2>ON<表名1>.<关联字段>=<表名2>.<关联字段>

FROM子句【例14】查询课程编号为“C0404”且成绩在90分以上的学生学号和姓名。SELECT学号,姓名FROM学生,成绩WHERE学生.学号=成绩.学号and成绩>90AND课程编号="C0404";相关表学生当某一字段在两表中都出现时,应在该字段前加上表前缀加以区别,以隔开。FROM子句方法二【例14】查询课程编号为“C0404”且成绩在90分以上的学生学号和姓名。SELECT学生.学号,姓名FROM学生

INNERJOIN

成绩

ON

学生.学号=成绩.学号WHERE成绩>90AND课程编号="C0404";FROM子句【例15】查询选修课程编号为“C0601”的课程且成绩在60与80分之间(含60与80分)的所有学生的学号、姓名、课程名及成绩。本查询涉及:“学生”、“课程”及“成绩”表。SELECT学生.学号,姓名,课程名称,成绩

FROM学生,成绩,课程

WHERE学生.学号=成绩.学号

AND成绩.课程编号=课程.课程编号

AND课程.课程编号="C0601"AND成绩BETWEEN60AND80;FROM子句方法二【例15】查询选修课程编号为“C0601”的课程且成绩在60与80分之间(含60与80分)的所有学生的学号、姓名、课程名及成绩。SELECT学生.学号,姓名,课程名称,成绩

FROM学生

INNERJOIN

(成绩

INNERJOIN

课程

ON成绩.课程编号=课程.课程编号)

ON

学生.学号=成绩.学号

WHERE课程.课程编号="C0601"AND成绩BETWEEN60AND80;SELECT-SQL命令详介ORDERBY子句[ASC/DESC]

排序依据有以下几种形式:

<字段名><列序号><由AS子句命名的列标题>ORDERBY子句【例16】查询选修了课程编号为“C0601”的学生的学号和成绩,查询结果按成绩降序排列。SELECT学号,成绩FROM成绩WHERE课程编号='C0601'ORDERBY成绩DESC;

2

ORDERBY子句【例17】将学生按生源升序排列,生源地一样的,按照出生日期降序排列。SELECT*FROM学生ORDERBY生源,出生日期DESC;SELECT-SQL命令详介GROUPBY子句GROUPBY

<分组依据>[HAVING<条件>]GROUPBY子句通常和聚集函数一起使用,用来对查询结果分组,目的是为了细化聚集函数的作用对象。如果未对查询结果分组,聚集函数将作用于整个查询结果。

分组依据有以下几种形式:

<字段名><列序号><由AS子句命名的列标题>GROUPBY子句【例18】对学生表按性别分组查询学生人数。SELECTCOUNT(*)AS人数FROM学生GROUPBY性别;性别,GROUPBY子句【例19】查询选课人数在3人以上的课程号及相应的选课人数。如果分组后还要求按一定的条件对这些组进行筛选,最终只需要满足指定条件的组,则可用HAVING短语指定筛选条件。SELECT课程编号,COUNT(*)AS选课人数FROM成绩GROUPBY课程编号HAVINGCOUNT(*)>=3;3.4.4SQL的数据更新命令记录插入语句:INSERT-SQL格式:INSERTINTO<表名>[(<列名1>,<列名2>…)]VALUES(<常量1>,<常量2>…)];功能:将新记录数据添加到指定表中。记录插入语句:INSERT-SQL【例】将一个教师的信息(教师编号:T16,姓名:陈果果,性别:男,出生日期:1968-10-1,职称:教授,专业编号:P05)添加到教师表中。INSERTINTO教师VALUES("T16","陈果果","男",#1968-10-1#,"教授","P05")记录插入语句:INSE

温馨提示

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

评论

0/150

提交评论