资源描述
1第第4章章 关系数据库标准语言关系数据库标准语言SQL目 录上一页下一页退 出本本 章章 要要 点点4.1SQL语言的基本概述语言的基本概述4.2数据定义数据定义4.3数据操纵数据操纵4.4数据管理数据管理4.5SQL中的数据查询语句中的数据查询语句1综合统一综合统一 SQL语语言言集集数数据据定定义义(DDL)、数数据据操操纵纵(DML)、数数据据管管理理(DCL)的的功功能能于于一一体体,语语言言风风格格统统一一,可可以以独独立立完完成成数数据据库库的的全全部部操操作作,包包括括定定义义关关系系模模式式、录录入入数数据据及及建建立立数数据据库库、查查询询、更更新新、维维护护数数据据、数数据据库库的的重重新新构构造造、数数据据库库安安全全性性等等一一系系列列操操作作的的要要求求,为为数数据据库库应应用用系系统开发者提供了良好的环境。统开发者提供了良好的环境。2高度非过程化高度非过程化3面向集合的操作方式面向集合的操作方式4以同一种语法结构提供两种使用方式以同一种语法结构提供两种使用方式5语言简洁,易学易用语言简洁,易学易用4.1.1 SQL语言的特点语言的特点4.1.2 SQL语言的基本概念语言的基本概念SQLSQL语语言言支支持持关关系系型型数数据据库库的的三三级级模模式式结结构构。其其中中外外模模式式对对应应于于视视图图(ViewView)和和部部分分基基本本表表(Base Base TableTable),模模式对应于基本表,内模式对应于存储文件。式对应于基本表,内模式对应于存储文件。基基本本表表是是本本身身独独立立存存在在的的表表,在在SQLSQL语语言言中中一一个个关关系系对对应应一一个个表表。一一些些基基本本表表对对应应一一个个存存储储文文件件,一一个个表表可可以以带带若干索引,索引存放在存储文件中。若干索引,索引存放在存储文件中。存存储储文文件件的的逻逻辑辑结结构构组组成成了了关关系系型型数数据据库库的的内内模模式式。而存储文件的物理文件结构是任意的。而存储文件的物理文件结构是任意的。视视图图是是从从基基本本表表或或其其他他视视图图中中导导出出的的表表,它它本本身身不不独独立立存存储储在在数数据据库库中中,也也就就是是说说数数据据库库只只存存放放在在视视力力的的定定义义而而不不存存放放视视图图对对应应的的数数据据,这这些些数数据据仍仍存存放放在在导导出出视视图图的的基本表中,因此视图是一个虚表基本表中,因此视图是一个虚表。数据定义语言DDL用于执行数据定义的操作,如创建或删除表、索引和视图之类的对象。由CREATE、DROP、ALTER命令组成,完成数据库对象的建立(CREATE)、删除(DROP)和修改(ALTER)。4.2.1 定义(创建)表定义(创建)表【格式】CREATE TABLE (,)完完整整性性约约束束NULL|NOT NULL,)【功能】定义(也称创建)一个表。4.2 数据定义数据定义【例例4-1】创建一个表STUD(学生信息表),它由以下字段组成:学号(C,10);姓名(C,8);性别(C,2);班级名(C,10);系别代号(C,2);地址(C,50);出生日期(D);是否团员(L);备注(M)。CREATE TABLE STUD(学学号号C(10),姓姓名名 C(10),性性别别 C(2),班班级级名名 C(10),系系别别代代号号 C(2),地地址址 C(50),出生日期出生日期 D,是否团员是否团员 L,备注备注 M,照片照片 G)LIST STRUCTURE【例例4-2】创建一个表SC(课程成绩表),它由以下字段组成:学号(C,10);课程号(C,2)。CREATE TABLE SC(学号(学号 C(10),课程号),课程号 C(2)LIST STRUCTURE【格格式式】ALTER TABLE ADD (,)完完整整性性约约束束NULL|NOT NULLDROP 完完整整性性约约束束MODIFY 【功能】修改表结构。【说明】ADD子句用于增加指定表的字段变量名、数据类型、宽度和完整性约束条件;DROP子句用于删除指定的的完整性约束条件;MODIFY子句用于修改原有的字段变量的值。【例例4-3】在课程成绩表SC中,增加一个成绩字段变量(N,3)。ALTER TABLE SC ADD 成绩成绩 N(3)LIST STRUCTURE4.2.2 修改表修改表【格式】DROP DATABASE 【功能】删除指定数据库的结构和数据。【说明】谨慎使用。4.2.4 删除表删除表【格式】DROP TALBE 【功能】删除指定表的结构和内容(包括在此表上建立的索引)。【说明】如果只是想删除一个表中的所有记录,则应使用DELETE语句。4.2.3 删除数据库删除数据库 数数据据操操纵纵语语言言是是完完成成数数据据操操作作的的命命令令,一一般般分分为为两两种种类类型的数据操纵,它们统称为型的数据操纵,它们统称为DML:数据检索(常称为查询):寻找所需的具体数据。数据检索(常称为查询):寻找所需的具体数据。数据修改:添加、删除和改变数据。数据修改:添加、删除和改变数据。数数据据操操纵纵语语言言一一般般由由INSERT(插插入入)、DELETE(删删除除)、UPDATE(更更新新),SELETE(检检索索,又又称称查查询询)等等组组成成,由由于于SELETE比比较较特特殊殊,所所以以一一般般又又将将它它以以查查询询(检检索索)语言单独出现。语言单独出现。4.3 数据操纵数据操纵【格式1】INSERT INTO VALUES ()【格式2】INSERT INTO FROM ARRAY|FROM MEMVAR【功能】在指定的表文件末尾追加一条记录。格式1用表达式表中的各表达式值赋值给中的相应的各字段。格式2用数组或内存变量的值赋值给表文件中各字段。【说明】如果某些字段名在INTO子句中没有出现,则新记录在这些字段名上将取空值(或默认值)。但必须注意的是,在表定义说明了NOT NULL的字段名不能取空值。4.3.1 插入记录插入记录:指定表文件中的字段,缺省时,按表文件字段的顺序依次赋值。:指定要追加的记录各个字段的值。【例4-4】在表文件STUD的末尾追加三条记录。*用表达式方式追加第一条记录*INSERT INTO STUD(学学号号,姓姓名名,性性别别,班班级级名名,系系别别代代号号,地地址址,出出生生日日期期,是是否否团团员员);VALUES (011110,李李建建国国,男男,计计0121,01,湖湖 北北 武武 汉汉,09/28/02,.T.)DIMENSION DATA8DATA(1)=011103DATA(2)=李宁李宁DATA(3)=女女DATA(4)=电电0134DATA(5)=02DATA(6)=江西九江江西九江DATA(7)=05/06/85DATA(8)=.F.INSERT INTO STUD FROM ARRAY DATA*用数组方式追加第二条记录*学号学号=011202姓名姓名=赵娜赵娜性别性别=女女班级名班级名=英英0112系别代号系别代号=03地址地址=广西南宁广西南宁出生日期出生日期=02/21/84是否团员是否团员=.F.INSERT INTO STUD FROM MEMVARLIST*用内存变量方式追加第三条记录*【格式】UPDATE SET =,=WHERE 【功能】更新指定表文件中满足WHERE条件子句的数据。其中SET子句用于指定列和修改的值,WHERE用于指定更新的行,如果省略WHERE子句,则表示表中所有行。【说明】更新操作又称为修改操作。【例4-5】将成绩表(SC)中,所有课程号为02的成绩各加5分。UPDATE SC SET 成绩成绩=成绩成绩+5 ;WHERE 课程号课程号=024.3.2 更新记录命令更新记录命令4.3.3 删除记录删除记录【格式】DELETE FROM WHERE 【功能】从指定的表中删除满足WHERE子句条件的所有记录。如果在DELETE语句中没有WHERE子句,则该表中的所有记录都将被删除。【说明】这里的删除是逻辑删除,即在删除的记录前加上一个删除标记“*”。【例4-7】删除STUD表中所有性别为男的记录。DELETE FROM STUD;WHERE 性别性别=“男男”数数据据管管理理(也也称称数数据据控控制制)语语言言是是用用来来管管理理(或或控控制制)用用户户的的访访问问权权限限的的。由由GRANT(授授权权)、REVOTE(回回收收)命命令令组组成成。而而Visual FoxPro 6没没有有这这种种权权限限管理。管理。4.4 数据管理数据管理4.5 SQL中的数据查询语句中的数据查询语句 数据库中的数据很多时侯是为了查询数据库中的数据很多时侯是为了查询的,因此,数据查询是数据库的核心操作。的,因此,数据查询是数据库的核心操作。而在而在SQL语言中,查询语言中有一条查询语言中,查询语言中有一条查询命令,即命令,即SELECT语句。语句。4.5.1 基本查询语句基本查询语句【格式】SELECT ALL|DISTINCT FROM 【功能功能】无条件查询。无条件查询。【说明】ALL:表示显示全部查询记录,包括重复记录。DISTINCT:表示显示无重复结果的记录。【例4-8】显示STUD(学生信息数据表)中的所有记录。SELECT *;FROM STUD命令中的*表示输出显示所有的字段,数据来源是STUD表,表中的内容以浏览方式显示。【例4-9】显示STUD(学生信息数据表)中的所有的学号及与之对应的姓名,同时能去除重名。SELECT DISTINCT 学号,姓名学号,姓名 ;FROM STUD【例4-10】显示SC(课程成绩表)中的所有记录,并将成绩一项乘以0.7。SELECT 学学号号,课课程程号号,成成绩绩*0.7 AS 成绩成绩 FROM SC4.5.2 带条件(带条件(WHERE)的查询语句)的查询语句【格式】SELECT ALL|DISTINCT FROM WHERE 【功能】从一个表中查询满足条件的数据。【说明】由一系列用AND 或 OR 连接的条件表达式组成,条件表达式的格式可以是以下几种:(1 1)2。(2 2)。(3 3)ALLALL()(4 4)ANY ANY|SOME SOME ()(5 5)NOT NOT BETWEEN BETWEEN AND AND (6 6)NOT EXISTS NOT EXISTS ()(7 7)NOT IN NOT IN (8 8)NOT IN NOT IN ()(9 9)NOT LINK NOT LINK SQL支持的关系运算符如下:、!、。【例4-11】显示STUD表中所有男生记录的学号,姓名和性别字段值。SELECT 学号,姓名,性别学号,姓名,性别;FROM STUD WHERE 性别性别=男男【例4-12】显示STUD表中出生日期在85年之间的学生的学号,姓名,出生日期。SELECT 学号,姓名,出生日期学号,姓名,出生日期;FROM STUD ;WHERE 出出生生日日期期 BETWEEN 01/01/85 AND 12/31/86【例4-13】显示STUD表中姓李的学生的学号,姓名,出生日期。SELECT 学号,姓名,出生日期学号,姓名,出生日期;FROM STUD;WHERE 姓名姓名 LIKE “李李%”4.5.3 SQL的复杂查询的复杂查询1连接查询连接查询 【说说明明】在在一一个个数数据据库库中中的的多多个个表表之之间间一一般般都都存存在在着着某某些些联联系系,在在一一个个查查询询语语句句中中同同时时涉涉及及到到两两个个或或两两个个以以上上的的表表时时,这这种种查查询询称称之之为为连连接接查查询询(也也称称为为多多表表查查询询)。在多表之间查询必须处理表与表之间的连接关系。在多表之间查询必须处理表与表之间的连接关系。SELECT ALL|DISTINCT FROM ,表,表2.WHERE 【例4-14】查询并显示各个学生的学号,姓名,各科成绩及课程名。SELECT a.学号,学号,a.姓名,姓名,b.课程名,课程名,c.成绩成绩;FROM STUD a,COURSE b,SC c;WHERE a.学号学号=c.学号学号.AND.b.课程号课程号=c.课程号课程号【例4-15】查询并显示各个学生所学课程的情况。SELECT STUD.学号,学号,STUD.姓名,姓名,COURSE.课程名课程名;FROM STUD,SC,COURSE ;WHERE STUD.学学 号号=SC.学学 号号.AND.SC.课课 程程 号号=COURSE.课程号课程号2连接问题连接问题在SQL语句中,在FROM子句中提供了一种称之为连接的子句,连接分为内连接和外连接,外连接又可分为左外连接、右外连接和全外连接。(1)内连接)内连接内连接是指包括符合条件的每个表的记录,也称之为全记录操作。而上面两个例子就是内连接。【例4-16】查询并显示各个学生的学号,所学课程及课程成绩。SELECT SC.学号,学号,COURSE.课程名,课程名,SC.成绩成绩;FROM SC,COURSE;WHERE SC.课程号课程号=COURSE.课程号课程号如果采用内连接方式,则命令如下:SELECT a.学号,学号,b.课程名,成绩课程名,成绩 ;FROM SC a INNER JOIN COURSE b ON a.课程号课程号=b.课程号课程号将会得到完全相同的结果。(2)外连接)外连接外外连连接接是是指指把把两两个个表表分分为为左左右右两两个个表表。右右外外连连接接是是指指连连接接满满足足条条件件右右侧侧表表的的全全部部记记录录。左左外外连连接接是是指指连连接接满满足足条条件件左左侧侧表表的的全全部部记记录录。全全外外连连接接是是指指连连接接满满足足条条件件表表的的全全部部记录。记录。3嵌套查询嵌套查询 在SQL语句中,一个SELECTFROMWHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询或子查询。【例4-17】显示“李宁”所在班级的学生名单。SELECT 学号,姓名,班级名学号,姓名,班级名;FROM STUD;WHERE 班班级级名名=(SELECT 班班级级名名 FROM STUD WHERE 姓名姓名=李宁李宁)4分组与计算查询分组与计算查询【格式格式】SELECT ALL|DISTINCT FROM WHERE GROUP BY HAVING ORDER BY ASC|DESC 【功能】包括有排序、函数运算和谓词演算【例4-18】按出生日期降序显示STUD表中的学号,姓名,出生日期。SELECT 学号,姓名,出生日期学号,姓名,出生日期;FROM STUD;ORDER BY 出生日期出生日期 DESC【例4-19】按成绩升序显示SC表中的学号,课程号,成绩。SELECT 学号,课程号,成绩学号,课程号,成绩 ;FROM SC ;ORDER BY 成绩成绩【例4-20】按班级分类显示学生的姓名,课程名,成绩,同一班级按分数排序。SELECT a.姓名,姓名,a.班级名,班级名,c.课程名,课程名,b.成绩成绩;FROM STUD a,SC b,COURSE c ;WHERE a.学号学号=b.学号学号 AND b.课程号课程号=c.课程号课程号;ORDER BY a.班级名,班级名,b.成绩成绩;【例4-21】显示成绩在80至90之间的学号,姓名,课程名和成绩。SELECT a.姓名,姓名,c.课程名,课程名,b.成绩成绩 FROM STUD a,SC b,COURSE c WHERE a.学学号号=b.学学号号 AND b.课课程程号号=c.课课程程号号 AND b.成绩成绩 BETWEEN 80 AND 90【例4-22】显示计算机系学生的成绩。SELECT a.姓名,姓名,a.系别代号,系别代号,c.课程名,课程名,b.成绩成绩;FROM STUD a,SC b,COURSE c;WHERE a.学学号号=b.学学号号 AND b.课课程程号号=c.课课程程号号 AND a.系别代号系别代号=“01”【例4-23】显示各班总人数。SELECT 班级名,班级名,COUNT(班级名)(班级名)AS 总人数总人数 ;FROM STUD ;GROUP BY 班级名班级名【例4-24】显示计算机系的学生及所有男学生。SELECT 学号,姓名,系别代号,性别学号,姓名,系别代号,性别 ;FROM STUD;WHERE 系别代号系别代号=01 UNION;SELECT 学号,姓名,系别代号,性别学号,姓名,系别代号,性别;FROM STUD;WHERE 性别性别=男男【例4-25】显示选修了英语或数学科目的学生学号。SELECT 学号,课程号学号,课程号 FROM SC;WHERE 课程号课程号=“01”UNION;SELECT 学号,课程号学号,课程号;FROM SC WHERE 课程号课程号=“02”【例4-26】显示计算机系男生的名单。SELECT 学号,姓名,系别代号,性别学号,姓名,系别代号,性别 ;FROM STUD;WHERE 系别代号系别代号=“01”AND 性别性别=“男男”【例4-27】显示既选修了01课程又选修了02课程学生的名单。SELECT 学号学号;FROM SC;WHERE 课程号课程号=“01”AND 学号学号 IN;(SELECT 学学号号 FROM SC WHERE 课课程程号号=“02”)【例4-28】显示计算机系非男生的名单。SELECT 学号,姓名,系别代号,性别学号,姓名,系别代号,性别;FROM STUD;WHERE 系别代号系别代号=“01”AND 性别性别=“女女”【例4-29】显示选修了01课程而没有选修02课程学生的名单。SELECT 学号学号 ;FROM SC ;WHERE 课程号课程号=“01”AND 学号学号 NOT IN ;(SELECT 学学号号 FROM SC WHERE 课课程程号号=“02”)5查询去向查询去向默 认 情 况 下,查 询 输 出 到 一 个 浏 览 窗 口,用 户 在“SELECT”语句中可使用INTO|TO FILE|TO SCREEN|TO PRINTER子句选择查询去向:INTO ARRAY 数组名:将查询结果保存到一个数组中。CURSOR:将查询结果保存到一个临时表中。DBF|TABLE:将查询结果保存到一个永久表中。TO FILEADDITIVE:将查询结果保存到文本文件中。如果带“ADDITIVE”关键字,查询结果以追加方式添加到指定的文件,否则,以新建或覆盖方式添加到指定的文件。TO SCREEN:将查询结果保在屏幕上显示。TO PRINTER:将查询结果送打印机打印。
展开阅读全文