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