关系数据库标准语言SQLWord格式.docx
《关系数据库标准语言SQLWord格式.docx》由会员分享,可在线阅读,更多相关《关系数据库标准语言SQLWord格式.docx(9页珍藏版)》请在冰豆网上搜索。
连接条件>
…][[INTO<
目标>
|[TOFILE<
文件名>
][ADDITIVE]|TOPRINTER[PROMPT]|TOSCREEN]][PREFERENCE<
参照名>
][NOCONSOLE][PLAIN][NOWAIT][WHERE<
连接条件1>
[AND<
连接条件2>
…]AND|OR<
过滤条件1>
[AND|OR<
过滤条件2>
…]]][GROUPBY<
分组列名1>
[,<
分组列名2>
…]][HAVING<
过滤条件>
][UNION[ALL]SELECT命令][ORDERBY<
排序选项1>
[ASC|DESC][,<
排序选项2>
[ASC|DESC]…]]
SELECT说明要查询的数据。
FROM说明要查询的数据来自哪个(些)表。
WHERE说明查询条件,即选择元组的条件。
GROUPBY用于对查询结果进行分组,可以利用它进行分类汇总。
HAVING必须跟随GROUPBY使用,客观存它用来限定分组必须满足的条件。
ORDERBY用来对查询的结果进行排序。
数据查询语句
SQL数据查询命令是SELECT命令。
该命令的基本框架是SELECT…FROM…WHERE,它包含输出字段、数据来源、查询条件等基本子句。
在这种固定格式中,可以不用WHERE,但是SELECT和FROM是必备的。
基本查询
所谓基本查询是指无条件查询,其常用格式是:
SELECT[ALL|DISTINCT][〈别名〉.]〈选项〉[AS〈显示列名〉][,[〈别名〉.]〈选项〉[AS〈显示列名〉…]]FROM〈表名1〉[〈别名1〉][,〈表名2〉[〈别名2〉…]]
其中ALL表示输出所有记录,包括重复记录。
DISTINCT表示输出无重复结果的记录。
基本查询示例
写出对学生表进行如下操作的命令。
(1)列出全部学生信息。
(2)列出全部学生的姓名和年龄(去掉重名的)。
操作1:
SELECT*FROM学生
操作2:
SELECTDISTINCT姓名AS学生名单,YEAR(DATE())-YEAR(出生日期)AS年龄FROM学生
带条件查询
WHERE子句用于指定查询条件,其格式是:
WHERE〈条件表达式〉
其中条件表达式可以是单表的条件表达式,也可以是多表之间的条件表达式,表达式用的比较符为:
=(等于)、<
>
、!
=(不等于)、==(精确等于)、>
(大于)、>
=(大于等于)、<
(小于)、<
=(小于等于)。
带条件查询示例
(1)列出入学成绩在560分以上的学生记录。
(2)求出湖南学生入学成绩平均分。
SELECT*FROM学生WHERE入学成绩>560
SELECT籍贯,AVG(入学成绩)AS入学成绩平均分FROM学生WHERE籍贯=″湖南″
写出对教学管理数据库进行如下操作的命令。
(1)列出非湖南籍的学生名单
(2)列出江苏籍和贵州籍的学生名单
(3)列出入学成绩在560分到650分之间的学生名单
(4)列出所有姓赵的学生名单
(5)列出所有成绩为空值的学生学号和课程号
操作1:
SELECT学号,姓名,籍贯FROM学生WHERE籍贯<
”湖南”
或者
SELECT学号,姓名,籍贯FROM学生WHERE籍贯!
=”湖南”
SELECT学号,姓名,籍贯FROM学生WHERENOT(籍贯=”湖南”)
操作2:
SELECT学号,姓名,籍贯FROM学生WHERE籍贯IN(”江苏”,”贵州”)
SELECT学号,姓名,籍贯FROM学生WHERE籍贯=”江苏”OR籍贯=”贵州”
操作3:
SELECT学号,姓名,入学成绩FROM学生WHERE入学成绩BETWEEN560AND650
SELECT学号,姓名,入学成绩FROM学生WHERE入学成绩>
=560AND入学成绩<
=650
操作4:
SELECT学号,姓名FROM学生WHERE姓名LIKE“赵%”
SELECT学号,姓名FROM学生WHERE姓名=“赵”
SELECT学号,姓名FROM学生WHEREAT(“赵”,姓名)=1
SELECT学号,姓名FROM学生LEFT(姓名,2)=“赵”
操作5:
SELECT学号,课程号FROM选课WHERE成绩ISNULL
嵌套查询
有时候一个SELECT命令无法完成查询任务,而需要一个子SELECT的结果作为查询的条件,即需要在一个SELECT命令的WHERE子句中出现另一个SELECT命令,这种查询称为嵌套查询。
通常把仅嵌入一层子查询的SELECT命令称为单层嵌套查询,把嵌入子查询多于一层的查询称为多层嵌套查询。
VisualFoxPro只支持单层嵌套查询。
1.返回单值的子查询
例:
对教学管理数据库,列出选修”数据库原理”的所有学生的学号
SELECT学号FROM选课WHERE课程号=(SELECT课程号FROM课程WHERE课程名=”数据库原理”)
2.返回一组值的子查询
(1)ANY运算符的用法
对教学管理数据库,列出选修”W01”课的学生中成绩比选修”K02”的最低成绩高的学生的学号和成绩.
SELECT学号,成绩FROM选课WHERE课程号=”W01”AND成绩>
ANY(SELECT成绩FROM选课WHERE课程号=”K02”)
(2)ALL运算符的用法
对教学管理数据库,列出选修”W01”课的学生中成绩比选修”K02”的最高成绩还要高的学生的学号和成绩.
ALL(SELECT成绩FROM选课WHERE课程号=”K02”)
(3)IN运算符的用法(等价于”=ANY”)
对教学管理数据库,列出选修”数据库原理”或”软件工程”的所有学生的学号.
SELECT学号FROM选课WHERE课程号IN(SELECT课程号FROM课程WHERE课程名=”数据库原理”OR课程名=”软件工程”)
多表查询
等值连接
等值连接是按对应字段的共同值将一个表中的记录与另一个表中的记录相连接。
写出对教学管理数据库进行如下操作的命令
(1)输出所有学生的成绩单,要求给出学号,姓名,课程号,课程名和成绩.
(2)列出男生的选课情况,要求列出学号,姓名,课程号,课程名,授课教师和学分数.
(3)列出至少选修”W01”课和”K02”课的学生学号.
操作1:
SELECTa.学号,姓名,b.课程号,课程名,成绩FROM学生a,选课b,课程cWHEREa.学号=b.学号ANDb.课程号=c.课程号
SELECTa.学号,a.姓名AS学生姓名,b.课程号,课程名,e.姓名AS教师姓名,学分FROM学生a,选课b,课程c,授课d,教师eWHEREa.学号=b.学号ANDb.课程号=c.课程号ANDc.课程号=d.课程号ANDd.教师号=e.教师号AND性别=”男”
SELECTa.学号FROM选课a,课程bWHEREa.学号=b.学号ANDb.课程号=”W01”ANDa.课程号=”K02”
非等值连接
非等值连接按对应字段的记录的某种不等值关系进行连接
例:
对教学管理数据库,列出选修”K02”课的学生中,成绩大于学号为”200109”的学生该门课程成绩的那些学生的学号及其成绩.
SELECTa.学号,a.成绩FROM选课a,课程bWHEREa.成绩>
b.成绩ANDa.课程号=b.课程号ANDb.课程号=”K02”ANDb.学号=”200109”
连接查询
内部连接(InnerJoin)
所谓内部连接是指包括符合条件的每个表中的记录。
也就是说是所有满足连接条件的记录都包含在查询结果中。
对教学管理数据库,列出少数民族学生的学号,课程号及成绩.
SELECTa.学号,b.课程号FROM选课a,课程bWHEREa.学号=b.学号AND少数民族否
若采用内部连接则为:
SELECTa.学号,b.课程号FROM选课aINNERJOIN课程bONa.学号=b.学号WHERE少数民族否
外部连接
左外连接
左外连接也叫左连接(LeftOuterJoin),其系统执行过程是将左表的某条记录与右表的所有记录依次比较,若有满足连接条件的,则产生一个真实值记录;
若都不满足,则产生一个含有NULL值的记录。
接着,左表的下一记录与右表的所有记录依次比较字段值,重复上述过程,直到左表所有记录都比较完为止。
连接结果的记录个数与左表的记录个数一致。
右外连接
右外连接也叫右连接(RightOuterJoin),其系统执行过程是右表的某条记录与左表的所有记录依次比较,若有满足连接条件的,则产生一个真实值记录;
接着,右表的下一记录与左表的所有记录依次比较字段值,重复上述过程,直到左表的所有记录都比较完为止。
连接结果的记录个数与右表的记录个数一致。
全外连接
全外连接也叫完全连接(FullJoin),其系统执行过程是先按右连接比较字段值,然后按左连接比较字段值,重复记录不记入查询结果中。
查询结果处理
排序输出(ORDERBY)
格式:
ORDERBY〈排序选项1〉[ASC|DESC][,〈排序选项2〉[ASC|DESC]…]
对教学管理数据库按性别顺序列出学生的学号,姓名,性别,课程名及成绩,性别相同的先按课程后按成绩同高到低排序.
SELECTa.学号,姓名,性别,课程名,成绩FROM学生a,选课b,课程cWHEREa.学号=b.学号ANDb.课程号=c.课程号ORDERBY性别,课程名,成绩DESC
重定向输出(INTO)
[INTO〈目标〉]|[TOFILE〈文件名〉[ADDITIVE]|TOPRINTER]
<
有三种形式:
ARRAY<
数组名>
:
将查询结果存到指定的数组中.
CURSOR<
临时表>
将查询结果存到一个临时表中,这个表的操作与其它表一样,不同的是,它一旦被关闭就会被删除.
DBF<
表>
|TABLE<
将查询结果存到一个表中.
写出对教学管理数据库进行如下操作的命令.
(1)将上题的结果保存到test1.txt文本文件中.
(2)查询学生所学课程和成绩,输出学号,姓名\课程名和成绩,并将查询结果存入testtable表中.
SELECTa.学号,姓名,b.课程号,成绩FROM学生a,选课bWHEREa.学号=b.学号INTOCURSORtest
SELECTa.学号,姓名,课程号,成绩testa,课程bWHEREa.课程号=b.课程号INTOTABLEtestableORDERBYa.学号
输出合并(UNION)
子句格式:
[UNION[ALL]〈SELECT命令〉]
其中,ALL表示结果全部合并,若没有ALL,则重复的记录被自动取掉.
(1)不能合并子查询的结果
(2)两个SELECT命令必须输出同样的列数
(3)两个表各相应列出的数据类型必须相同,数字和字符不能合并.
(4)仅最后一个SELECT命令中可以用ORDERBY子句,且排序选项必须用数字说明.
对教学管理数据库,列出选修”W01”或”K02”课程的所有学生的学号.
SELECT学号FROM选课WHERE课程号=”W01”UNIONSELECT学号FROM选课WHERE课程号=”K02”
分组统计(GROUPBY)与筛选(HAVING)
GROUPBY〈分组选项1〉[,〈分组选项2〉…]
HAVING〈筛选条件表达式〉
(1)分别统计男女生人数
(2)分别统计男女生中少数民族学生的人数
(3)列出成绩平均分大于80分的课程号
SELECT性别,COUNT(性别)FROM学生GROUPBY性别
SELECT性别,COUNT(性别)FROM学生GROUPBY性别WHERE少数民族否
SELECT课程号,AVG(成绩)FROM选课GROUPBY课程号HAVINGAVG(成绩)>
=80
二、数据定义
有关数据定义的SQL命令分为3组,它们是建立(CREATE)数据库对象、修改(ALTER)数据库对象和删除(DROP)数据库对象。
每一组命令针对不同的数据库对象(如数据库、查询、视图等)分别有3个命令。
建立表结构
CREATETABLE|DBF〈表名1〉[NAME〈长表名〉][FREE](〈字段名1〉〈类型〉(〈宽度〉[,〈小数位数〉])[NULL|NOTNULL][CHECK〈条件表达式1〉[ERROR〈出错显示信息〉]]……
功能:
建立表可以完成用表设计器完成的所有功能。
建立一个自由表:
人事档案(编号,姓名,性别,基本工资,出生年月),其中允许出生年月为空值。
CREATETABLED:
\人事管理\人事档案FREE(编号C(7),姓名C(8),性别C
(2),基本工资N(7,2),出生年月DNULL)
删除表
命令格式:
DROPTABLE〈表名〉
DROPTABLE命令直接从磁盘上删除所指定的表文件。
如果指定的表文件是数据库中的表并且相应的数据库是当前数据库,则从数据库中删除了表。
否则虽然从磁盘上删除了表文件,但是记录在数据库文件中的信息却没有删除,此后会出现错误提示。
修改表结构
格式1:
ALTERTABLE〈表名1〉ADD|ALTER[COLUMN]〈字段名〉〈字段类型〉[(〈宽度〉[,〈小数位数〉])]…
可以添加(ADD)新的字段或修改(ALTER)已有的字段,它的句法基本可以与CREATETABLE的句法相对应。
格式2:
ALTERTABLE〈表名〉ALTER[COLUMN]〈字段名〉[NULL|NOTNULL][SETDEFAULT〈表达式][SETCHECK〈逻辑表达式〉[ERROR〈出错显示信息〉]][DROPDEFAULT][DROPCHECK]
定义、修改和删除有效性规则以及默认值定义。
数据操纵
三、数据操纵
插入记录
INSERTINTO〈表名〉[(字段名1[,〈字段名2〉[,…]])]VALUES(〈表达式1〉[,〈表达式2〉[,…]])
在指定的表尾添加一条新记录,其值为VALUES后面表达式的值。
INSERTINTO〈表名〉FROMARRAY〈数组名〉|FROMMEMVAR]
在指定的表尾添加一条新记录,其值来自于数组或对应的同名内存变量。
删除记录
DELETEFROM[〈数据库名〉!
]〈表名〉[WHERE〈条件表达式〉]
从指定表中,根据指定的条件逻辑删除记录。
更新记录
UPDATE[〈数据库名〉!
]〈表名〉SET〈字段名1〉=〈表达式1〉[,〈字段名2〉=〈表达式2〉…][WHERE〈逻辑表达式〉]
用表达式的值更新字段值,WHERE子句指定更新条件,更新满足条件的一些记录的字段值。
如果不使用WHERE子句,则更新全部记录。