第五章结构化查询语言SQL(精)

合集下载

数据库应用第5章-1_结构化查询语言SQL_V08_2

数据库应用第5章-1_结构化查询语言SQL_V08_2

第5章 结构化查询语言SQL数据库系统应用Data Base System Application张建国哈工大计算机科学与技术学院2008-10-7哈工大计算机学院 张建国 Slide 5-1第5章 结构化查询语言SQL2008-10-72第5章 结构化查询语言SQL本章主要内容SQL概述 基本表的定义、修改与删除 SQL的数据更新 数据记录的插入 数据记录的修改 数据记录的删除 SQL的数据查询 索引的建立与删除 T-SQL语言2008-10-7哈工大计算机学院 张建国Slide 5-3第5章 结构化查询语言SQL5.1 SQL概述1. SQL的发展 SQL(Structured Query Language)意为结构化查询语言. 1974年由Boyce和Chamberlin提出来. 最初在System R关系数据库中实现.该语言功能丰富、语言简捷、使用灵活方便、深受各界欢迎.1986年成为美国国家标准. 1987年成为国际标准SQL86. 1989年,ISO颁布了增强完整性特征的SQL89标准. 1993年,ISO对SQL89标准进行了大量的修改和扩充,推出 SQL2(SQL92).2008-10-7哈工大计算机学院 张建国 Slide 5-4第5章 结构化查询语言SQL5.1 SQL概述(Cont.)SQL是一种通用的、功能极强的关系数据库语言. 各数据库厂家纷纷推出各自支持SQL的软件或与SQL 接 口软件,使自己的数据库可以运行SQL. 许多其他软件(例如图形处理、人工智能、软件工程工具 、软件开发工具等)也利用SQL语言的数据查询功能,作为 自身的一部分,使其数据查询功能更强大. 许多程序设计语言中也都引入了SQL.2008-10-7哈工大计算机学院 张建国Slide 5-5第5章 结构化查询语言SQL5.1 SQL概述(Cont.)2. SQL的特点 (1) 一体化 非关系模型的数据语言 模式数据定义语言:Schema DDL 外模式(子模式)数据定义语言:SubSchema DDL 存储模式数据定义语言: DSDL(Data Storage Definition Language) 数据操纵语言:DML SQL语言 SQL将数据定义语言DDL、数据操纵语言DML和数据控 制语言DCL集成在一起,各种语言风格统一.2008-10-7哈工大计算机学院 张建国 Slide 5-6第5章 结构化查询语言SQL5.1 SQL概述(Cont.)(2) 高度非过程化 非关系语言 通过存取路径存取数据. SQL语言 SQL是一种面向问题的语言,只需提出“做什么”,不必指出“ 怎么做”.存取路径的选择和SQL的操作过程是由系统自动 完成的. (3) 面向集合的操作方式 非关系语言 一次一个记录 SQL 采用集合操作,操作对象和操作结果都是元组的集合.2008-10-7哈工大计算机学院 张建国 Slide 5-7第5章 结构化查询语言SQL5.1 SQL概述(Cont.)(4) 两种使用方式、统一的语法结构 SQL既是自含式语言,又是嵌入式语言. 自含式语言 能独立地在联机方式下使用(命令方式),用户可以在终端键 盘上直接输入SQL命令对DB进行操作. 嵌入式语言 嵌入到高级语言(VB、PB、Java等)程序中,利用主语言(高 级语言)进行计算处理、利用DB语言进行数据管理. 同一条命令在两种操作方式中的语法结构基本一致.2008-10-7哈工大计算机学院 张建国Slide 5-8第5章 结构化查询语言SQL5.1 SQL概述(Cont.)(5) 语言简捷、易学易用 SQL具有很强的功能,但由于其设计巧妙,使得语言十分简捷. 完成其核心功能只用9个动词:数据查询:SELECT(查询) 数据定义:CREATE(创建表、索引、视图) DROP(删除表、索引、视图) ALTER(修改表) 数据操纵:INSERT(插入) DELETE(删除) UPDATE(修改) 数据控制:GRANT(授权) REVOKE(收回授权)2008-10-7哈工大计算机学院 张建国 Slide 5-9第5章 结构化查询语言SQL5.1 SQL概述(Cont.)3. SQL支持三级模式结构 外模式 外模式对应于视图View和部分基本表Base Table 用户可以用SQL语言对基本表和视图进行操作 从用户的观点看基本表和视图是一样的 模式 模式对应于基本表 基本表是独立存在的表 每个基本表对应一个关系2008-10-7哈工大计算机学院 张建国Slide 5-105.1 SQL概述(Cont.)内模式内模式对应于存储文件存储文件是在计算机存储介质中存放的文件形式一个或若干个基本表对应一个存储文件视图视图是从一个或几个基本表或其他视图导出的表视图并不存放实际的数据,仅保存视图的定义使用视图时,根据视图定义,从基本表中取数据因此,视图实际上是一个虚表5.1 SQL 概述(Cont.)SQL 用户2视图3视图2视图1基本表3基本表2基本表1存储文件3存储文件2存储文件1基本表4外模式模式内模式SQL 用户1SQL 用户35.2 基本表的定义、修改与删除1. 基本表的定义格式:CREATE TABLE 表名(列名1 数据类型1 [列级完整性约束条件1][,列名2 数据类型2 [列级完整性约束条件2]]…[,列名n 数据类型n [列级完整性约束条件n]]);表名:基本表的表名列名:属性名数据类型:属性的数据类型,可参考具体数据库系统的数据类型5.2 基本表的定义、修改与删除列级完整性约束条件:相应属性的完整性约束条件NULL/NOT NULL: 该项是否可以取空值UNIQUE: 该项是否具有唯一性CHECK: 该项的取值范围PRIMARY KEY: 设置主码FOREIGN KEY: 设置外码5.2 基本表的定义、修改与删除(Cont.)例:建立一个”学生”表Student和一个”系”表.Student(Sno,Sname,Birthday,Score,Dno)Dpet(Dno,Dname,Dtel)设:学号Sno:CHAR(10),主码姓名Sname:CHAR(8)性别Sex: CHAR(2),取值范围:”男”或”女”出生日期Birthday:SMALLDATETIME考分Score:SMALLINT,取值范围:500~750系号Dno: CHAR(2),系的主码,学生的外码系名Dname: CHAR(30)系电话Dtel: CHAR(13)5.2 基本表的定义、修改与删除(Cont.) CREATE TABLE Dept(Dno CHAR(2) primary key,Dname CHAR(30),Dtel CHAR(13));CREATE TABLE Student (Sno CHAR(10),Sname CHAR(8),Sex CHAR(2) CHECK (Sex=‘男’or Sex=‘女’),Birthday SMALLDATETIME,Score SMALLINT CHECK(Score>=500 and Score<=750, Dno CHAR(2),PRIMARY KEY(Sno),FOREIGN KEY (Dno) REFERENCES Dept(Dno) );5.2 基本表的定义、修改与删除(Cont.)2. 修改基本表格式:ALTER TABLE 表名[ADD 列名数据类型[完整性约束条件]]| [DROP COLUMN 列名]| [ALTER COLUMN 列名数据类型];其中:ADD子句:增加新列及其完整性约束DROP子句:删除指定的列ALTER子句:修改列的定义,包括列名和数据类型5.2 基本表的定义、修改与删除(Cont.)例:在Student表中加入一列性别”民族”,6位字符.ALTER TABLE Student ADD Nation CHAR(6);例:将”民族”的数据类型改为bit.ALTER TABLE Student ALTER COLUMN NationCHAR(8);例:删除”民族”.ALTER TABLE Student DROP COLUMN Nation;5.2 基本表的定义、修改与删除(Cont.)3. 删除基本表格式:DROP TABLE 表名删除基本表时,该表的数据以及在此表上建立的视图及索引全部删除,因此执行删除操作时应特别小心.例:删除基本表Student.DROP TABLE Student;数据库实例设学生-课程数据库中包含三个表:Student(Sno ,Sname,Sex,Birthday,Score,Dname)SC(Sno,Cno ,Grade)Course(Cno ,Cname,CPno,Credit)其中:Sno: CHAR(10); Sname: CHAR(8); Sex: CHAR(2); Birthday: SMALLDATETIME; Score: INT; Dname: CHAR(30)Grade: SMALLINTCno: CHAR(6); Cname: CHAR(30); CPno: CHAR(6);credit: TINYINT学生课程选课分数m n5.3 SQL的数据更新插入数据插入单个元组插入子查询的结果数据修改修改一个元组的数据修改多个元组的数据根据查询结果修改删除数据删除一个元组删除多个元组删除子查询的结果5.3 SQL的数据更新(Cont.)1. 插入数据(1) 插入单个元组格式:INSERT INTO 表名[(列名1[,列名2>,…)]VALUES (常量1[,常量2],…);例:将一个新学生元组的全部属性插入到Student中.•INSERT INTO Student•VALUES('6053610301','李兰','女','1989-3-5',658,'实验学院');5.3 SQL的数据更新(Cont.)例:将一个新学生元组的部分属性插入到Student中. INSERT INTO Student(Sno,Sname,Dname)VALUES('1030310105','王芳','计算机系');未列出的属性列取空值.(2) 插入子查询结果INSERTINTO 表名([列名1[,列名2,……)]子查询;5.3 SQL的数据更新(Cont.)例:建立一个学生平均成绩表SG,包括学号Sno和平均成绩Gavg CREATE TABLE SG(Sno CHAR(10) NOT NULL UNIQUE, Gavg SMALLINT);INSERTINTO SG(Sno,Gavg)SELECT Sno, AVG(Grade)FROM SCGROUP BY Sno;(3) 插入应注意的问题对于表Student和SC若在SC中插入的记录的Sno在Student不存在,则系统不允许插入.5.3 SQL的数据更新(Cont.)2. 修改数据格式:UPDATE 表名SET 列名1=表达式1[,列名2=表达式2]……[WHERE 条件];对满足条件的元组中的指定列用相应的表达式的值修改.(1) 修改一个元组的值例:将学生“6053610301”的性别改为“男”.•UPDATE Student•SET Sex='男'•WHERE Sno='6053610301';5.3 SQL的数据更新(Cont.)(2) 修改多个元组的值例:将课号为“101001”的所有成绩提高10%. UPDATE SCSET Grade=Grade*1.1 Where Cno=‘101001’;例:计算每种商品的金额.UPDATE 商品SET 金额=单价*数量;例:将选修课号为“101001”的成绩每人提高10分. UPDATE SCSET Grade=Grade+10WHERE Cno=‘101001’;(3) 带子查询的修改例:将“计算机系”全体学生的成绩清零.UPDATE SCSET Grade=0WHERE ‘计算机系’= (SELECT DnameFROM StudentWHERE Student.Sno=SC.Sno);(4) 修改应注意的问题对于表Student和SC若修改Student中的Sno,而未修改SC中对应记录的Sno.若修改SC中的Sno,而未修改Student中对应的Sno.5.3 SQL的数据更新(Cont.)5.3 SQL的数据更新(Cont.)3. 删除数据格式:DELETEFROM 表名[WHERE 条件];删除满足条件的元组.(1) 删除一个元组例:删除“6053610301"的学生记录.DELETE FROM Student WHERE Sno=‘6053610301’;5.3 SQL的数据更新(Cont.)(2) 删除多个元组例:删除所有学生的选课记录.DELETEFROM SC;(3) 删除子查询的结果例:删除“计算机系”学生的全部选课记录.DELETEFROM SCWHERE ‘计算机系’=(SELECT DnameFROM StudentWHERE Student.Sno=SC.Sno);5.3 SQL的数据更新(Cont.)(4) 删除操作注意保持数据的一致性一个学生的各种数据可能存放在多个表中,但一个删除语句只能对一个表进行删除,这样可能会引起数据不一致问题.例:删除学生“6053610301”在Student表中的记录后,学生的基本数据被删除了.但在SC表中仍存在该学生的选课及成绩记录,若不删除,将会使数据不一致.解决办法:执行两次删除操作,既删除Student表中6053610301的记录,又删除SC表中6053610301的相关记录.为了保证数据的完整性和一致性,许多系统的DBMS都提供了相应的处理机制.当主表的记录被删除后,其参照关系的相关记录自动删除.5.4 SQL的数据查询查询功能是数据库系统的核心.格式:SELECT [ALL|DISTINCT] */目标列表达式[,目标列表达式2…]FROM 表名/视图名[WHERE 条件表达式][GROUP BY 列名1 [HAVING 条件表达式]][ORDER BY 列名2 [ASC/DESC]];5.4 SQL的数据查询(Cont.)其中:SELECT:表示查询ALL:显示所有满足条件的元组DISTINCT:消除重复元组*:所有列目标列表达式:查询结果,可以有函数运算FROM:从哪些表或视图中查询WHERE:查询条件GROUP BY:按指定的列分组,例如,计算每个学生平均成绩时,要按学号分组HAVING:GROUP BY分组的条件ORDER BY:输出时按指定列排序ASC:升序(缺省值)DESC:降序5.4 SQL的数据查询(Cont.)1. 单表查询(1) 查询指定列例:查询全体学生的学号和姓名.SELECT Sno,SnameFROM Student;在表Student对Sno,Sname进行投影相当于:Π(Student)Sno,SnameSnameSno5.4 SQL的数据查询(Cont.)(2) 按用户要求的顺序查询指定列例:查询全体学生的姓名,学号和所在系的系名. SELECT Sname,Sno,DnameFROM Student;查询结果列的顺序可以与表中列的顺序不一致.SnameSno Dname5.4 SQL的数据查询(Cont.)(3) 查询全部列例:查询全体学生的全部数据.方法1SELECT Sno,Sname,Sex,Birthday,Score,DnameFROM Student;方法2SELECT *FROM Student;5.4 SQL的数据查询(Cont.) (4) 查询经过计算的值例:查询全体学生的学号,姓名和出生年份.SELECT Sno,Sname,YEAR(Birthday)FROM Student;计算学生的年龄:SELECT Sno,Sname,YEAR(GETDATE( ))-YEAR(Birthday) FROM Student;计算学生出生的月份:SELECT Sno,Sname,MONTH(Birthday)FROM Student;5.4 SQL的数据查询(Cont.)(5) 消除取值重复的元组例:查询所有课程名称.SELECT DISTINCT CnameFROM Course;例:查询所有系名.SELECT DISTINCT DnameFROM Student;(6) 查询满足条件的元组查询条件可以通过WHERE 子句实现,其常用的条件有:IN, NOT IN 集合LIKE, NOT LIKE 字符匹配IS NULL,IS NOT NULL 空值AND,OR 多重条件BETWEEN AND, NOT BETWEEN AND 范围=, >, <, <=, >=, !=(<>), !<,!>比较谓词条件5.4 SQL 的数据查询(Cont.)5.4 SQL的数据查询(Cont.)1) 比较大小例:查询“计算机”系全体学生的学号和姓名.SELECT Sno,SnameFROM StudentWHERE Dname=‘计算机’;例:查询全体21岁以下学生的学号和姓名.SELECT Sno,SnameFROM StudentWHERE YEAR(GETDATE( ))-YEAR(Birthday)<=21;5.4 SQL的数据查询(Cont.)2) 在一个范围内查询例:查询全体年龄在20至23岁的学生的学号和姓名. SELECT Sno,SnameFROM StudentWHERE YEAR(GETDATE( ))-YEAR(Birthday)BETWEEN20 AND23;例:查询全体年龄不在20至23岁的学生的学号和姓名. SELECT Sno,SnameFROM StudentWHERE YEAR(GETDATE( ))-YEAR(Birthday)NOT BETWEEN20 AND23;5.4 SQL的数据查询(Cont.)3) 条件为一个集合例:查询“计算机”系和“电气工程”系全体学生的全部数据. SELECT *FROM StudentWHERE Dname IN(‘计算机’,’电气工程’);括号中的内容为一个集合,相当于:SELECT *FROM StudentWHERE Dname=‘计算机’OR Dname=’电气工程’;若查询不是上述系的学生,可用条件:WHERE Dname NOT IN(‘计算机’,’电气工程’);5.4 SQL的数据查询(Cont.)4)字符匹配用谓词LIKE表示字符串匹配,形式为:[NOT] LIKE ‘匹配串’[ESCAPE ‘换码字符’]匹配串中:%表示任意长度的字符串;_表示任意单个字符例:查询“本科生05级03系”学生的全部数据.SELECT *FROM StudentWHERE Sno LIKE‘10503%’;若查询除“本科生05级03系”学生的全部数据,则条件可改为:WHERE Sno NOT LIKE’10503%’;若查询全校“03系”学生的全部数据,则条件可改为:WHERE Sno LIKE’_ _ _03%’;5.4 SQL的数据查询(Cont.)例:查询姓名中有“伟”字的学生的全部数据.SELECT *FROM StudentWHERE Sname LIKE‘%伟%’;若查询所有姓“王”的且姓名仅为两个汉字的学生的全部数据WHERE Sname LIKE‘王_’;若查询的字符串中包含%或_,可用转意符ESCAPE‘<转换码>’例:查询名称为“DB_Design”课程的课号和学分.SELECT Cno,creditFROM CourseWHERE Cname LIKE‘DB\_Design’ESCAPE‘\’;其中:\为转换码,表示该字符码后面的‘\’或‘%’不再具有匹配符的意义,而表示该字符本身.5.4 SQL的数据查询(Cont.)5)空值查询例:查询所有选课但未参加考试学生的学号和课号. SELECT Sno,CnoFROM SCWHERE Grade IS NULL;成绩为空值若查询所有有成绩的学生的学号和课号:WHERE Grade IS NOT NULL;6)多重条件查询例:查询“计算机”系年龄在21岁以下的学生的学号和姓名. SELECT Sno,Sname FROM StudentWHERE Dname=‘计算机’AND YEAR(GETDATE())-YEAR(Birthday) <=21;5.4 SQL的数据查询(Cont.)(7) 对查询结果排序用ORDER BY子句,ASC表示升序,DESC表示降序.例:查询选修了“101001”号课程的学生学号和成绩,并按成绩从高到低排序.SELECT Sno,GradeFROM SCWHERE Cno=‘101001’ORDER BY Grade DESC;若先按成绩从高到低排序,成绩相同者按学号从小到大排序.ORDER BY Grade DESC,Sno;5.4 SQL的数据查询(Cont.)(8) 集函数统计元组个数:COUNT([DISTINCT|ALL]|*)统计一列中值的个数:COUNT([DISTINCT|ALL]<列名>) 对一列求和:SUM([DISTINCT|ALL]<列名>)对一列求平均值:AVG([DISTINCT|ALL]<列名>)求一列中最大值:MAX([DISTINCT|ALL]<列名>)求一列中最小值:MIN([DISTINCT|ALL]<列名>) DISTINCT: 消除重复元组ALL: 所有元组,缺省值例:统计学生总数.SELECT COUNT (*) FROM Student;例:统计男生人数.SELECT COUNT (*) FROM Student WHERE Sex=‘男’;例:统计选修了课程的学生人数.SELECT COUNT (DISTINCT Sno) FROM SC;在SC 中对Sno 投影,然后统计去掉重复元组后的记录个数.例:查找选修“101001”号课程的学生最高分.SELECT MAX (Grade) FROM SCWHERE Cno=‘101001’;5.4 SQL 的数据查询(Cont.)怎样获得尚未选课的学生人数?怎样获得女生人数?例:计算选修“101001”号课程的学生平均成绩.SELECT AVG (Grade) FROM SC WHERE Cno=‘101001’;若显示课号及平均成绩,则:SELECT Cno,AVG (Grade) FROM SCWHERE Cno=‘101001’GROUP BY Cno;例:统计每个学生的平均成绩.SELECT Sno, AVG (Grade) FROM SCGROUP BY Sno;按课号分组5.4 SQL 的数据查询(Cont.)5.4 SQL的数据查询(Cont.)(9) 对查询结果分组分组方法用GROUP BY子句将查询结果按某一列或多列值分组,值相等的为一组.分组的目的进一步细化集函数的作用对象.例:求各门课程的课号及其选修该课的人数.SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno;例:求每一个学生的平均成绩.SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno;5.4 SQL的数据查询(Cont.)若分组后还要按一定条件进行筛选, 可以用HAVING短语指定筛选条件.例:查询选修了3门以上课程的学生学号.SELECT Sno FROM SC GROUP BY SnoHAVING COUNT(*)>=3;先用GROUP语句进行分组,对每组用COUNT统计元组个数,对于每组元组个数大于等于3的学号进行输出.注意WHERE与HAVING语句的区别WHERE:作用于基本表或视图,选择满足条件的元组HAVING:作用于GROUP分成的子组,选择满足条件的组。

第五章结构化查询语言SQL

第五章结构化查询语言SQL
个数据表的名称之间用逗号隔开,在WHERE短语中必须指 定数据表之间进行的连接条件。
现在学习的是第16页,共88页
5.2.2 简单连接查询
在连接查询中引用两个表的公共字段时
1.等值连接
,须在公共字段名前添加表名或表别名 作为前缀,否则系统会提
对于等值连接,连接条件通常是两示个出数错据。表对的于公只共在字一段个的数值据相表等中。出现的
表指定别名,格式为<关系名>. <别名>,
指定别名后,在引用该数据表的字段时,应
以别名作为数据表的前缀。
现在学习的是第17页,共88页
5.2.2 简单连接查询
1.等值连接
例5.13 查询上官小梅所学课程的课程名及其对应的成绩 select 姓名,课程名,成绩 from student s,course c,grade g
结果全部合并;
现在学习的是第8页,共88页
5.2 数据查询
ORDER By<排序项> [ASC|DESC]:ORDER BY子句指定 按哪个字段对查询结果排序,ASC为升序, DESC为降序;
现在学习的是第9页,共88页
Destination可5以.是2 下数列据三种查子询句之一
[INTO Destination]:指定在何处保存查询结果。如果在同 一个查询中同时包含了INTO子句和TO子句,则TO子句不起
名>] ···]
[WHERE <连接条件> [AND <连接条件···]
[AND|OR<过滤条件> [AND |OR <过滤条件> ···]]]
[GROUP By <分组列> [,<分组列···]][HAVING <过滤条件>]

5、 结构化查询语言SQL

5、 结构化查询语言SQL

五、查询排序 SQL使用ORDER BY子句对查询结果进行排序。
排序选项 ASC DESC
功能 升序排列(默认值) 降序排列
[e.g. 4-20]在选课表.dbf中查询选修了课程“C130” 并且成 绩最高的3名学生表的记录,输出学号和成绩。
SELECT TOP 3 学号, 成绩 FROM 选课表 WHERE 课程号="C130" ORDER BY 成绩 DESC
确定集合 课程号 in ("C01", "C02", "C03") 字符匹配 性别 like "男"
1.简单条件查询 [e.g. 4-11] 在学生表.dbf中查询评分大于等于80的学生表记 录。
SELECT * FROM 学生表 WHERE 评分>=80
2.多重条件查询 在WHERE子句中指定多个查询条件时,必须用逻辑运 算符AND、OR或NOT将其连接成复合的逻辑表达式。 [e.g. 4-12] 在选课表.dbf中查询选修课程 “C120”或 “C140”,并且成绩大于等于80的学生表记录。 SELECT * FROM 选课表 WHERE (课程号="C120" OR 课程号="C140") AND 成绩>=80 注意区别:SELECT * FROM 选课表 WHERE 课程号="C120" OR 课程号="C140" AND 成绩>=80
[e.g. 4-17]在选课表.dbf中查询课程号为“C120”的记录,输 出课程号、成绩的最高分和最低分、以及它们之间相差的 分数。 SELECT 课程号,MAX(成绩) AS 最高分,MIN(成绩) AS 最低分 ,MAX(成绩)-MIN(成绩) AS 相差分数 FROM 选课表 WHERE 课程号="C120"

数据库系统及应用第5章 结构化查询语言SQL

数据库系统及应用第5章 结构化查询语言SQL
输入SQL 命令对数据库进行操作;另一种是程序嵌入方式,即在程序设计时将 SQL 语句嵌 入到高级语言程序中,运行程序时自动执行 SQL 语句序列。
5.1 SQL概述
1.SQL简介
SQL功能 数据定义 数据查询 数据操纵 数据控制
命令动词 CREATE、ALTER、DROP SELECT INSERT、DELETE、UPDATE GRANT、REVOKE
国标准。1987年,国际标准化组织(ISO)将其采纳为国际标准,并推荐它为关系型数据 库的标准操纵语言。该标准在1989年稍加扩充,通常被称为“SQL89”或“SQL1”,它 是许多商用关系数据库软件的基础。
5.1 SQL概述
1.SQL简介
SQL 语言具有以下特点。 (1)SQL 语言是一种介于关系代数和关系演算之间的语言,是一种一体化的语言。
(<字段名1> <字段类型> [ (字段宽度 [,<小数位数> ] ) ] [ NULL] [ NOTNULL ] [ CHECK <逻辑表达式1> [ ERROR <出错信息1> ] ] [AUTOINC [ NEXTVALUE <下一值> [STEP <步长>] ] ] [ DEFAULT <表达式1> ]
5.1 SQL概述
2.Visual FoxPro对SQL的支持
Visual FoxPro 支持 SQL 语言的数据定义、数据查询和数据操纵功能,但在具体实现 方面也存在一些差异。另外,由于 Visual FoxPro 自身在安全控制方面的缺陷,所以它没
有提供数据控制功能。
在 Visual FoxPro 中,用户可以使用以下几种方式执行 SQL 语句或命令。 (1)在命令窗口直接输入 SQL 命令。 (2)在程序中嵌入 SQL 语句。

第5章结构化查询语言

第5章结构化查询语言

第5章结构化查询语言结构化查询语言(SQL,Structured Query Language)是一种用于管理关系型数据库的标准化语言,也是数据库操作的基础。

SQL可以实现数据库的创建、查询、插入、更新和删除等操作,可以对数据库中的表、视图等进行管理和操作。

SQL语言包括数据定义语言(DDL)、数据操纵语言(DML)、数据查询语言(DQL)和事务控制语言(TCL)等几个方面。

数据定义语言(DDL)用于定义、修改和删除数据库对象,包括创建数据库(CREATEDATABASE)、创建表(CREATETABLE)、修改表结构(ALTERTABLE)和删除表(DROPTABLE)等。

数据操纵语言(DML)用于对数据库中的数据进行操作,包括插入数据(INSERT)、更新数据(UPDATE)和删除数据(DELETE)等。

数据查询语言(DQL)用于从数据库中查询数据,SQL语句的核心部分,可以实现复杂的数据查询和数据过滤。

常见的查询语句包括SELECT、FROM、WHERE、GROUPBY、HAVING、ORDERBY等。

事务控制语言(TCL)用于控制数据库中的事务,包括BEGINTRANSACTION、COMMIT、ROLLBACK等。

通过TCL语句可以确保数据库的操作具有原子性、一致性、隔离性和持久性(ACID特性)。

SQL语言的特点有以下几个方面:1.简单易学:SQL语言的语法相对简单,易于学习和使用。

2.高效可靠:SQL语言是标准化的数据库操作语言,可以高效地对数据库进行管理和操作。

3.跨平台性:SQL语言是一种通用的数据库操作语言,可以在不同的平台和数据库系统上使用。

4.强大灵活:SQL语言可以实现复杂的数据查询和处理,支持多表联合查询、条件查询、分组统计等功能。

SQL语言在现代数据库管理系统中得到了广泛的应用,是数据库开发和管理中非常重要的一部分。

掌握SQL语言可以更好地进行数据库设计、数据管理和数据分析等工作。

第 5 章 复习 SQL(结构化查询语言)

第 5 章  复习 SQL(结构化查询语言)

在T_SQL中,连接查询有两大类表示 形式,一是符合SQL标准连接谓词表示形 式,二是T_SQL扩展使用关键字JOIN的表 示形式。
① 指定每个表中要用于连接的列。典型的 连接条件在一个表中指定外键,在另一个 表中指定与其关联的键。 ② 指定比较各列的值时要使用的逻辑运算 符,如“=、< >”等。
[^]
BDTWEEN„AND IS NULL
LIKE
IN EXISห้องสมุดไป่ตู้S
模式匹配,字符串匹配操作符
检查一个字段值是否属于一组值之中 检查某一个字段值是否有值,实际上,EXISTS是IS NULL的反义词
4.练习
列出性别为女的学生姓名、家庭住址 SELECT student_name, address FROM student_info WHERE student_sex='女'
SQL查询
函数及统计
分组排序
连接 子查询
5.6 基于多表的连接查询
在关系型数据库中,将一个查询同时 涉及两个或两个以上的表,称为连接查询。 基于多表的查询是通过所谓的连接查 询来完成的。连接是根据各个表之间的逻 辑关系从两个或多个表中查询数据,结果 通常是含有参加连接运算的两个表(或多 个表)的指定列的表。
列出1980年以后出生的学生的情况 SELECT * FROM student_info WHERE born_date >'1980-12-31'
列出所有家住“武汉市”的男学生姓名、电 话号码和家庭住址
SELECT student_name, tele_number, student_sex, address FROM student_info WHERE substring(address,1,3)='武汉市' AND student_sex='男'

第5章SQL结构化查询语言

第5章SQL结构化查询语言

5.2 SELECT查询语句
5.2.1 查询分析器 5.2.2 查询语句格式 5.2.3关于演示数据库的说明
Find Information Using SQL Language
5.2.1 查询分析器
在SQL查询分析器中,既可在全文窗口中输入TransactSQL语句,也可以打开包含Transact-SQL语句的文本 文件,执行语句并在结果窗口中,查看结果。
SELECT bookname,
year(getdate())-year(publishdate) as 出版年数
FROM book
Find Information Using SQL Language
使用DISTINCT短语消除重复的记录
DISTINCT短语能够从结果表中去掉重复的记 录。
【例5-6】查询所有图书所属的出版社。
SELECT bookid AS 书号,bookname 书名,出版社=publish FROM book
Find Information Using SQL Language
显示表达式的值
在SELECT语句后面可以是字段表达式,字 段表达式不仅可以是算术表达式,还可以是 字符串常量、函数等。
【例5-5】 显示BOOK表中所有书名和出版年数。
使用单引号加入字符串
在SELECT语句中,可以在一个字段的前面加上一个单引 号字符串,称为虚拟列名,对后面的字段起说明作用。
【例5-3】显示BOOK表中书名、出版社、价格。 SELECT ’书名’, bookname ,’出版社,’publish,price FROM book
Find Information Using SQL Language
Find Information Using SQL Language

第5章SQL结构化查询语言

第5章SQL结构化查询语言

第5章SQL结构化查询语言SQL(Structured Query Language)是一种用于管理和操作关系型数据库的语言。

它是一种标准化的查询语言,用于从数据库中检索和操作数据。

本章将介绍SQL的基本语法和常用命令,以及如何使用它进行数据查询、插入、更新和删除。

1.SQL语法SQL语法由关键字、函数、操作符和参数组成。

SQL语句通常以分号结尾,并且可以写在一行或多行中。

常见的SQL语句包括:- SELECT语句:用于从数据库中检索数据。

例如:SELECT * FROM table_name;- INSERT语句:用于向数据库中插入新的数据。

例如:INSERT INTO table_name (column1, column2) VALUES (value1, value2);- UPDATE语句:用于更新数据库中的数据。

例如:UPDATEtable_name SET column_name = new_value WHERE condition;- DELETE语句:用于从数据库中删除数据。

例如:DELETE FROM table_name WHERE condition;2.数据查询使用SELECT语句可以从数据库中检索数据。

可以使用通配符*检索所有列,或者指定要检索的列名。

例如,SELECT * FROM customers; 将检索customers表中的所有数据。

可以使用WHERE子句来添加过滤条件,例如:SELECT * FROM customers WHERE age > 18; 将检索年龄大于18的顾客数据。

3.数据插入使用INSERT语句可以向数据库中插入新的数据。

插入数据需要指定插入的表名和要插入的数据的列和值。

例如,INSERT INTO customers (name, age) VALUES ('John', 25); 将向customers表中插入一条名为John,年龄为25的新数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第五章结构化查询语言SQLSQL(Structured Query Language,结构化查询语言)语言是集数据定义、数据查询、数据操纵和数据控制功能于一体的语言,具有功能丰富、使用灵活、语言简捷易学等特点。

SQL语言是关系型数据库的标准数据操纵语言。

VFP也支持这种语言,VFP中的SQL语言具有数据定义、数据查询、数据操纵三项功能,由于VFP的安全问题,VFP中的SQL语言不具有数据控制功能。

SQL语句最主要的功能就是查询功能。

第三节SQL定义功能一、表定义SQL语句1、建立表结构表的建立可以通过表设计器来实现,也可以通过SQL的命令来实现,用SQL建立表结构的命令是:CREATE TABLE。

具体格式如下:CREATE TABLE|DBF 表名1 [NAME <长表名>][FREE](字段名1 类型 [(字段宽度 [,小数位数])][NULL|NOT NULL][CHECK <逻辑表达式>[ERROR <字符型文本信息>]][DEFAULT <表达式>][PRIMARY KEY|UNIQUE][REFERENCES 表名2 [TAG <标识名>]][NOCPTRANS][,字段名2…][,PRIMARY KEY <表达式> TAG <标识名>|,UNIQUE <表达式> TAG <标识名>][,FOREIGN KEY <表达式> TAG <标识名> [NODUP]REFERENCES 表名3 [TAG <标识名>]][,CHECK <逻辑表达式>[ERROR <字符型文本信息>]])|FROM ARRAY <数组名>以上的语法格式看起来很复杂,下面将CREATE TABLE命令中主要的几个短语的功能简单介绍如下,大家可以通过后面具体的例子来熟练地掌握应用CREATE TABLE命令建立表。

CHECK…ERROR:用于定义域的完整性(字段的有效性规则)和出错提示信息。

DEFAULT:用于定义字段的默认值。

PRIMARY KEY:用于定义满足实体完整性的主关键字(主索引)。

UNIQUE:用于建立候选索引,注意这里建立的不是唯一索引。

FOREIGN KEY…REFERENCES:用于建立表之间的联系。

NULL|NOT NULL:说明该字段允许或不允许为空值。

FREE:用于指明所建立的表是自由表,不添加到数据库中。

命令中的TABLE和DBF是等价的,其中TABLE是标准SQL的关键字,DBF是Visual FoxPro 的关键字。

一般来说,使用SQL的CREATE TABLE命令建立表可以实现用表设计器的方法建立表所完成的所有功能。

通常字段的类型用一个字符来表示。

表5.1列出了在CREATE TABLE命令中可以使用的数据类型及说明。

表5.1 数据类型及说明注意:如果建立的是自由表(当前没有打开的数据库或者使用了FREE短语),则很多选项在CREATE TABLE命令中不能使用,如NAME、CHECK、DEFAULT、FOREIGN KEY、PRIMARY KEY 和REFERENCES等。

例1 用命令建立订货管理1数据库。

CREATE DATABASE 订货管理1用SQL CREATE 命令建立仓库1表:CREATE TABLE 仓库1(仓库号C(5) PRIMARY KEY,城市C(10),面积I CHECK(面积>0) ERROR “面积应该大于0!”)例2 用SQL CREATE 命令建立职工1表CREATE TABLE 职工1(仓库号C(5),职工号C(5) PRIMARY KEY,工资I CHECK(工资>=1000 AND 工资<=5000) ERROR “工资值的范围在1000-5000!”DEFAULT 1200,FOREIGN KEY 仓库号TAG 仓库号REFERENCES 仓库1)例3 用SQL CREATE命令建立供应商1表CREATE TABLE 供应商1(供应商号C(5) PRIMARY KEY,供应商名C(20),地址C(20))例4 用SQL CREATE命令建立订购单1表CREATE TABLE 订购单1(职工号C(5),供应商号C(5),订购单号C(5) PRIMARY KEY,订购日期D,FOREIGN KEY 职工号TAG 职工号REFERENCES 职工1,FOREIGN KEY 供应商号TAG 供应商号REFERENCES 供应商1)2、表结构的修改格式1:ALTER TABLE 表名1 ADD|ALTER [COLUMN] <字段名>字段类型[(长度[,小数位数])][NULL|NOT NULL][CHECK <逻辑表达式>[ERROR <字符型文本信息>]][DEFAULT <表达式>][PRIMARY KEY|UNIQUE][REFERENCES 表名2 [TAG <标识名>]]功能:为指定的表添加(ADD)新的字段或修改(ALTER)已有的字段。

说明:该格式可以修改字段的类型、宽度、有效性规则(CHECK)、错误提示信息(ERROR)、默认值(DEFAULT)、定义主关键字(PRIMARY KEY)和联系(REFERENCES)等,但是不能修改字段名,不能删除字段,不能删除已定义的规则等。

修改表的有效性规则和默认值时,字段类型和宽度不能省略。

例5 为订购单1表增加一个货币类型的总金额字段。

ALTER TABLE 订购单1;ADD 总金额Y CHECK 总金额>0 ERROR “总金额应该大于0”例6 将订购单1表的订购单号字段的宽度由原来的5改成6.ALTER TABLE 订购单1 ALTER 订购单号C(6)格式2:ALTER TABLE 表名1 ALTER [COLUMU] 字段名[NULL|NOT NULL][SET DEFAULT <表达式>][SET CHECK <逻辑表达式>[ERROR <字符型文本信息>]][DROP DEFAULT] [DROP CHECK]功能:用于定义、修改、删除有效性规则和默认值。

说明:[SET DEFAULT <表达式>]:重新设置该字段的默认值。

[SET CHECK <逻辑表达式> [ERROR <字符型文本信息>]]:重新设置该字段的有效性规则。

[DROP DEFAULT]:删除字段的默认值。

[DROP CHECK]:删除字段的有效性规则限定。

例7 修改或定义总金额字段的有效性规则。

ALTER TABLE 订购单1ALTER 总金额SET CHECK 总金额>100 ERROR “总金额应该大于100!”例8 删除总金额字段的有效性规则。

ALTER TABLE 订购单1 ALTER 总金额DROP CHECK格式3:ALTER TABLE 表名1 [DROP [COLUMN] <字段名>][SET CHECK <逻辑表达式>[ERROR <字符型文本信息>]][DROP CHECK][ADD PRIMARY KEY <表达式> TAG <标识名> [FOR <逻辑表达式>]][DROP PRIMARY KEY][ADD UNIQUE <表达式>[TAG <标识名>][FOR <逻辑表达式>]][DROP UNIQUE TAG <标识名>][ADD FOREIGN KEY [表达式] TAG <标识名> [FOR <逻辑表达式>]REFERENCES 表名2 [TAG <标识名>]][DROP FOREIGN KEY TAG <标识名> [SA VE]][RENAME COLUMN <原字段名> TO <新字段名>]功能:可以删除指定表中的指定字段、修改字段名(RENAME)、修改指定表的完整性规则,包括主索引、外索引、候选索引以及表的有效性规则的添加和删除。

说明:[DROP [COLUMN] <字段名>]:从指定表中删除指定的字段。

[SET CHECK <逻辑表达式>[ERROR <字符型文本信息>]]:为表指定有效性规则及错误的提示信息。

[DROP CHECK]:删除表的有效性规则。

[ADD PRIMARY KEY <表达式> TAG <标识名> [FOR <逻辑表达式>]]:为表建立主索引,一个表只能有一个主索引。

[DROP PRIMARY KEY]:删除表的主索引。

[ADD UNIQUE <表达式> [TAG <标识名>] [FOR <逻辑表达式>]]:为表建立候选索引,一个表可以有多个候选索引。

[DROP UNIQUE TAG <标识名>]:删除表的候选索引。

[ADD FOREIGN KEY [表达式] TAG <标识名>[FOR <逻辑表达式>] REFERENCES 表名2 [TAG <标识名>]]:为表建立外(非主)索引,与指定的父表建立关系,一个表可以有多个外索引。

[DROP FOREIGN KEY TAG <标识名> [SA VE]]:删除外索引,取消与父表的关系,SA VE子句将保存该索引。

[RENAME COLUMN <原字段名> TO <新字段名>]:修改字段名,<原字段名>指定要修改的字段名,<新字段名>指定修改后新的字段名。

例9 将订购单1表的总金额字段改名为金额。

ALTER TABLE 订购单1 RENAME COLUMN 总金额TO 金额例10 删除订购单1表中的金额字段。

ALTER TABLE 订购单1 DROP COLUMN 金额例11 将订购单1表的职工号和供应商号定义为候选索引(候选关键字),索引名是emp_sup.ALTER TABLE 订购单1 ADD UNIQUE 职工号+供应商号 TAG emp_sup例12 删除订购单1表的候选索引emp_sup。

ALTER TABLE 订购单1 DROP UNIQUE TAG emp_sup。

相关文档
最新文档