结构化查询语言
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
修改表结构ALTER TABLE
添加字段:
ALTER TABLE 表名 ADD [COLUMN] 字段 名 字段类型 [(宽度)]
例:为SCORE表添加添加两个字段, “平时(N(5,1))”和“期中(N(5,1))”。
修改表结构
修改字段
ALTER TABLE 表名 ALTER [COLUMN] 字段名 字段类型[(宽度)]
SELECT 专业,学号,姓名 FROM 学生 ORDER BY 专业,学号
只显示查询的前几项记录
使用TOP 表达式 [PERCENT]短语可以列出满足条 件的前几个或前百分之几记录 TOP短语要与ORDER BY同时使用才有效 例1、显示入学成绩最高的前五名同学的记录
SELECT * FROM 学生 ORDER BY 入学成绩TOP 5 DCSC
LIKE中的通配符
% _ 0~任意多个字符 任意单个字符
a%b可代表ab,acb,addgb… A_b可代表acb,afb,akb等。
LIKE中的通配符
例1、列出学生表中所有姓李的同学。
SELECT 学号,姓名 FROM 学生 WHERE 姓名 LIKE “李%”
例2、列出学生表中所有不姓李且姓名是 两个字的同学名单
例2、显示入学成绩最高的前50%同学的记录
SELECT * TOP 50 PERCENT FROM 学生 ORDER BY 入 学成绩 DESC
对查询结果分组
使用GROUP BY子句可以对查询结果进行 分组,分组的目的是为了细化统计函数的 作用对象 语法:GROUP BY 分组选项 HAVING 条件 例1、统计各个课号及相应的选课人数
SQL语言的特点
SQL是一种一体化的语言。它包括了数据 定义、数据查询、数据操纵和数据控制 等功能,可以完成数据库活动中的全部 工作。
SQL语言的组成
数据定义:CREATE、DROP(删除)、 ALTER(修改) (删除某记录) 数据操纵:INSERT、UPDATE、DELETE 数据控制:GRANT、REVOKE 数据查询:SELECT(选择工作区)
修改表结构
改变表的结构时,索引表达式、字段和 表的有效性规则、命令、函数等等可能 仍会引用原始字段名,因此有时不能执 行命令。
删除表DROP TABLE
DROP TABLE 表名 执行了 DROP TABLE 之后,所有与被删 除表有关信息都将丢失。 例:删除SCORE表。
6.1.3 数据操纵语言
WHERE—— LIKE
WHERE中的LIKE子句用来进行字符串的匹配。 格式:[NOT] LIKE “字符串” 含义:查找指定的字段值中与匹配符相匹配的记录。 匹配符可以是字符串,也可以含有通配符。 例:查询学号为0108015的同学的详细情况
SELECT * FROM 学生 WHERE 学号 LIKE “0108015”
创建表
例1、使用命令建立数据库XSK,用SQL命令在 该库中建立STUDENT表,结构及要如下。
字段名 学号 姓名 性别 年龄 入学年月 是否党员 备注 字段类型 C C C N D L M 字段长度 7 8 2 3 特殊要求 主索引 不能为空
创建表
例2、在XSK中建立score表,结构如下。
字段名 学号 课号 期末 字段类型 C C N 字段长度 7 5 5 2 小数位数
AS :指定查询结果中列的标题。可省略。
例4、列出学生表中所有学生的年龄。
SELECT 姓名, YEAR(DATE())-YEAR(出生日期) AS 年龄 FROM 学生
例5、求出学生总数。
SELECT COUNT(*) FROM 学生
例6、查询选修了课程的学生人数。
SELECT COUNT(DISTINCT 学号) FROM 成绩
SELECT 学号,姓名 FROM 学生 WHERE 姓 名 NOT LIKE “李%” AND 姓名 LIKE “_ _”
LIKE中的通配符
如果要查询的字符串本身就含有%或_, 就要使用ESCAPE “换码字符”对通配符 进行转义。 例:查询以DB_开头的课程的课程号和学 分。 SELECT 课号,学分 FROM 课程 WHERE 课名 LIKE “DB\_%” ESCAPE "\"
例2、查询既不是计算机专业也不是外语 专业的学生姓名和专业。
SELECT 姓名,专业 FROM 学生 WHERE 专业 NOT IN (“计算机”,“外语”)
WHERE——BETWEEN
WHERE子句中的BETWEEN运算符用来确 定范围。 格式:
BETWEEN…AND…或NOT BETWEEN…AND 其中BETWEEN后是范围的下限(低值),AND 后是范围的上限(高值)。
在VFP中,查询就是一个扩展名为QPR的 查询文件,其中的内容就是一条SELECT 语句。
6.2.1 基本查询
基本Leabharlann Baidu询就是单表查询,:
SELECT ALL|DISTINCT *|列表达式 FROM 学生 ALL:查询结果中包含所有行 ( 包括重复值 ), 是默认设置。 ALL: DISTINCT:在查询结果中剔除重复的行。 注意 每一个 SELECT 子句只能使用一次DISTINCT。 *表示所有字段。 列表达式可以是字段名,表达式,字符串常量、函数等。
基本查询
例1:列出“学生”表中所有同学名单
SELECT * FROM 学生
例2:列出成绩表中所有学生的学号,去 掉重复值。
SELECT DISTINCT 学号 FROM 成绩
SELECT命令中的函数
例3、列出所有学生的学号,姓名和入学成 绩,其中入学成绩四舍五入保留整数。
SELECT 学号,姓名,ROUND(入学成绩,0) AS “入学成绩” FROM 学生
例1、查询所有的男生记录。
SELECT * FROM 学生 WHERE 性别=“男”
例2、求出计算机专业学生入学成绩的平 均分。
SELECT 专业,AVG(入学成绩) AS 入学成绩 平均分 FROM 学生 WHERE 专业=“计算机”
例3、列出非计算机专业的学生名单。
SELECT * FROM 学生 WHERE 专业<>“计算机”
例:在score中,修改“期末”字段为N(5, 1)。
修改表结构
删除字段
ALTER TABLE 表名 DROP [COLUMN] 字段名
例:在student表中,删除“是否党员”字 段。
修改表结构
字段更名
ALTER TABLE 表名 RENAME [COLUMN] 原 字段名 TO 新字段名
例:在STUDENT表中,把“备注”字段 名改为“其它情况”。
如果LIKE后面的匹配串中不含通配符,则 可以用=取代LIKE,用<>取代NOT LIKE
涉及空值的查询
空值指不确定的值, 查询空值要使用 IS NULL, 不能用比较运算符=NULL 例1、列出成绩表缺少期末成绩的学生学号和 课号
SELECT 学号,课号 FROM 成绩 WHERE 期末 IS NULL
6.1 SQL语言概述
SQL——Structured Query Language,结 构化查询语言
1986年,由美国ANSI确定为关系数据库的标 准语言。 1987年,ISO将其定为国际标准。 1989年,ISO提出了具有完整性特征的SQL, 成为SQL89 1992年公布了SQL的新标准,即SQL-92。 SQL99——SQL3
UPDATE
UPDATE 数据库名!表名 SET 字段名1=表 达式1,字段名2=表达式2…WHERE 逻辑表 达式1 AND|OR 逻辑表达式2 如果省略了 WHERE 子句,在列中的每一行 都用相同的值更新。 例:将STUDENT表中所有99级学生的“入 学年月”改为“1999/09/10”。
INSERT DELETE UPDATE
插入记录INSERT
INSERT INTO 表名 [字段名1,字段名2…] VALUE(表达式1,表达式2…) 如果要插入表中所有字段的数据,可省略字段 名。 如果省略了字段名,则必须按照表结构定义字 段的顺序来指定字段值。 例1、向STUDENT表中添加记录。
例1、列出入学成绩在560分到600分之间 的学生名单和成绩。
SELECT 姓名,入学成绩 FROM 学生 WHERE 入学成绩 BETWEEN 560 AND 600 上述命令还可写成如下形式: SELECT 姓名,入学成绩 FROM 学生 WHERE 入学成绩>=560 AND 入学成绩<=600
插入记录
INSERT INTO 表名 FROM ARRAY 数组名 INSERT INTO 表名 FROM MEMVAR 把内存变量的内容插入到与它同名的字段中。 如果某一字段不存在同名的内存变量,则该字 段为空。 例1、从数组向表中添加记录。
例2、利用内存变量向表中添加记录。
删除记录DELETE
6.1.2 数据定义语言
CREATE ALTER DROP
创建表CREATE TABLE
CREATE TABLE 表名 [NAME <长表名 >][FREE](<字段名1><类型>(宽度[,小 数位数)][NULL]|NOT NULL] 要创建数据库表,须先打开数据库。
创建表
在CREATE TABLE中可以使用的数据类型 及说明: C、N 、 D 、 T 、L、M、G
SELECT 课号,COUNT(课号) 选课人数 FROM 成绩 GROUP BY 课号
HAVING条件与WHERE子句的区别:作用 对象不同,WHERE子句作用于表或视 图;HAVING短语作用于组. 例2、查询选修了3门以上课程的学生学 号
6.2 数据查询SELECT
SELECT …FROM…WHERE 功能:从一个表或多个表中查询数据。
SELECT SELECT指定查询哪些字段 使用WHERE子句限定记录 使用FROM子句限定表名
含义:根据WHERE子句的条件表达式,从 FROM子句指定的表中找出满足条件的记录, 再按SELECT子句中的字段表达式,选出记录形 成结果表。
课堂练习
1、查询全体学生的姓名、学号、专业。 2、查全体学生的姓名及其出生年份。 3、查询成绩表中的课号,去掉重复值。 4、查询成绩表中平时,期中,期末的平 均成绩。
6.2.2 带条件查询
WHERE子句可指定查询的条件。 格式:WHERE 条件表达式 AND|OR条件 表达式2…
WHERE——比较操作符
例4、统计计算机专业入学成绩在600分以 上的学生的人数。
SELECT COUNT(姓名) 人数 FROM 学生 WHERE 入学成绩>=600 AND 专业=“计算机”
WHERE——IN
WHERE子句中的IN谓词用来确定查询的集 合。 例1、查询计算机专业和外语专业的学生姓 名和专业。
SELECT 姓名,专业 FROM 学生 WHERE 专业 IN (“计算机”,“外语”) 相当于 SELECT 姓名,专业 FROM 学生 WHERE 专业 =“计算机” OR 专业=“外语”)
DELETE FROM 数据库名 表名[WHERE 逻辑表达 式1 AND|OR 逻辑表达式2] 为指定的表中的记录加删除标记。如果要删除当 前数据库中的表的记录,可省略数据库名,否则 必须加上包含有该表的数据库名。在数据库名的 后面、表名的前面包含感叹号 (!) 分隔符。 例:将STUDENT表中所有男生的记录删除。
例2、查询所有有期末成绩的学生学号和课号
SELECT 学号,课号 FROM 成绩 WHERE 期末 IS NOT NULL
对查询结果排序
使用ORDER BY子句可以对查询结果按照 一个或多个字段的值排序输出 语法:ORDER BY 排序选项1 [ASC|DESC][,排序选项2 ASC|DESC]… 例1、按专业顺序列出学生的学号,姓名 和专业,同一专业按学号排列。
第六章 结构化查询语言
重点: 重点: 1、SELECT命令的使用,如:使用SELECT命令实现基 本查询、条件查询、嵌套查询、多表查询和连接查询。 2、查询结果的处理,输出重定向,查询结果的排序、 查询分组和统计等。 3、用查询设计器构造SELECT语句。 难点: 难点: 1、SELETE命令的使用。特别是条件查询、嵌套查询、 多表查询和连接查询的实现。 2、查询结果的排序、分组和统计处理。