第四章 结构化查询语言Word文档下载推荐.docx
- 文档编号:6838279
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:24
- 大小:28.64KB
第四章 结构化查询语言Word文档下载推荐.docx
《第四章 结构化查询语言Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第四章 结构化查询语言Word文档下载推荐.docx(24页珍藏版)》请在冰点文库上搜索。
数据库名>
[AUTHORIZATION]<
所有者名>
2、语句说明:
(1)功能:
建立一个空数据库,缺省状态下,该数据库为创建者自己所有。
加上授权语句,还可以将此数据库权交给其他人。
(2)语句关键字不区分大小写。
(3)<
>
括号内为必需项
3、例P:
73
二、删除数据库模式
DROP{SCHEMA|DATABASE}<
(1)删除已存在的数据库,包括其中所有对象。
74
2SQL语句对表的操作
一、建立表结构:
1、语句格式:
CREATETABLE[<
.<
.]<
基本表名>
(<
列定义>
….[,<
表级完整性控制>
…])
在当前或给定的数据库中建立一个基本表结构(关系)。
(2)表名自定,要符合命名规则。
(3)列定义一般出现多个,即一个表的属性有多个。
列定义至少包括列名列数据类型两项,必要性可以有该列的完整性控制说明。
3、SQL中常用的数据类型
二进制
Binary(n)
N+4字节
N为1~8000这间的值,但最后用检索输出的是二进制表示
二进数据长度基本相同时可以使用
文本
Text
实际大小
最大可存储231-1
存储文本数据
图形
image
最大可存储231
照片、图、画
整型
Int
4个字节
-231~(231-1)内所有正负整数数
存储可直接运算的数值
Smallint
2个字节
-215~(215-1)内所有正负整数数
Tinyint
1个字节
0~255范围的所有正整数
浮点数据类型
Real
精确到7位小数
存储十进制小数。
采用只入不舍的方式存储。
Float*
8个字节
精确到15位小数
Decimal*Numeric
实际存储空间
Decimal(p,s),p表示总位数,s表示小数点后的位数。
字符型
Char(n)
N字节
若输入的字符少于n,以空格填满。
若超长,则会截掉。
存储字符1-8000个
日期与时间型
Datetime
8个字节(精度3.33ms)
MMDDYYYYhh:
mmAM/PM
1753.1.1~9999.12.3123:
59:
59
存储日期和时间的结合体,引用时用单引号
Smalldatetime
1900.1.1~2079.6.6,精确度1分钟
货币型
Money
精确度为万分之一
用于存储货币
位型
Bit
只能输入0与1,非此值当为1
常用作逻辑变量表真假
A、只有字符与二进制数据类型需要指定长度,其他如整型、日期时间、浮点数据类型,定义时不用指定长度,也就是长度是默认值。
B、不同的数据库系统支持的数据类型各不相同。
在ACCESS中使用SQL的CreateTable语句,数据类型会做自动转换。
4、列完整性约束:
有六种
(1)定义主键约束:
PRIMARYKEY
(2)默认值约束:
DEFAULT<
常量表达式>
(3)单值约束(唯一性约束):
UNIQUE,即在该列上的所有取值必须互不相同,用在某一列不是主键但其值又是唯一的列上。
(4)外码约束:
references<
父表名>
主码>
)
(5)检查约束:
check(<
逻辑表达式>
),用于对该列的取值做限制。
(6)非空/空值约束:
notnull/null,专明此列的值是否可以为空,默认是可空值。
5、示例
(1)createtabletu(总编号Char(6),分类号Char(8),书名Char(16),日期Datetime)
注意:
表名与括号之间用空格分开,字段名与类型之间也必须有空格,各字段之间用逗号分开,可以一行多列或一行列。
系统默认字段长度可以省略。
(2)CREATETABLE商品基本信息表
(货号char(8),货名char(20),进口bit,品牌char(10),单价money);
(3)CREATETABLE商品基本信息表
(货号char(8)PRIMARYKEY,
货名char(20)unique,
进口bit,
品牌char(10),
单价moneycheck(单价>
100),
供应商号char(10)references供应商表(供应商号)
);
注:
ACCESS不支持DEFAULT、check,其他都可以。
6、表级完整性约束:
有四种
(1)主键约束:
PRIMARYKEY(列名,。
。
)
(2)外部键约束:
foreignkey(列名)references父表名(参照主码)
(3)单值约束:
UNIQE(列名。
(4)检查约束:
CHECK(逻辑表达式)
表级约束基本上与列级约束相同,但在写法上有一些差别,另外,表级约束可以一次对多个列定义。
例:
CREATETABLE商品基本信息表
(货号char(8),
货名char(20),
进口bit,
品牌char(10),
500),
供应商号char(10),
PRIMARYKEY(货号,货名),
foreignkey(供应商号)references供应商表(供应商号)
UNIQUE(货名)
外码必须与被参照关系中对应的主码具有完全相同的数据类型。
每个约束都会由系统自动产生一个约束名。
课本例P:
76——77
二、修改表结构:
修改基本表是指对已经定义的基本表增加新的属性名(列)或删除,扩展关系模式
ALTERTABLE[<
.<
<
{ADD<
….|ADD<
表级完整性约束>
….|DROPCOLUMN<
列名>
…|DROP<
约束名>
….}
可以增加也可以删除列或完整性约束
(2)新增的列不能规定为空值;
删除列前要先删除与该列有关的约束,一次增加或删除多个列时,只用一个ADD或DROP。
3、altertabletuadd单价money,总价money;
给图书表增加单价与总价列;
alterabletudrop单价,总价;
删除单价与总价
三、删除基本表
DROPTABLE[<
删除一个表。
该表的所有内容全部都删除。
(2)如果该表与其他有关系,应该先删除关系才能删除表。
3、例:
DROPTABLETU
四、表内容的操作:
1、插入记录(数据)
(1)单行插入记录
语句格式:
P:
78insertinto表名[列名]values(各列值,用逗号分开)
建立tu表
createtabletu(总编号Char(6),分类号Char(8),书名Char(16),日期Datetime)
在表中插入一条记录:
insertintotu(总编号,分类号,书名,日期)values('
0101'
'
TP-1'
计算机应用基础'
1991-01-01'
也可省略为:
insertintotuvalues('
还可能只写入部分列的值:
insertintotu(总编号,书名,日期)values('
0102'
计算机应用'
对应列的值数据类型也要对应书写格式。
如字符、日期要用‘’。
(2)插入多行记录:
可以利用SELECT语句从另一表中获取多条记录并加入到另一表中。
语句格式:
insert[into]表名[列名]<
SELECT子句>
说明:
注意两表的字段应该一致。
79
2、修改记录
(1)语句格式:
80
UPDATE表名SET列名=表达式[WHERE逻辑表达式]
(2)功能:
修改某些列的值,可按条件修改。
图书表TU,设做如下操作:
A、altertabletuadd库存量int,单价money,总价money
B、insertintotu(总编号,库存量,单价)values(‘02001’,2,25)
C、updatetuset总价=单价*库存量
D、updatetuset书名=‘操作系统‘where总编号=‘02001’
E、updatetuset分类号=‘TP34’where书名=‘操作系统‘
课本P:
80
(1)、
(2)——从其他表中获取数据。
3、删除记录
(1)语句格式P:
81
deletefrom表名where逻辑表达式
删除一个表中满足条件的行
(3)例:
deletefromtuwhere库存量isnull——删除库存量为空的记录。
例:
81——82
练习与作业:
1、用create语句建立教师任课表(课程ID,课程名称,系(部门)ID,教师ID,学分,学时,考试类型)并作完整性约束(可用列完整性也可用表完整性)
课程ID为主键,考试类型默认值为“闭卷”,系(部门)ID是系(部门)表的外码,教师ID是教师情况表的外码。
2、说明下面语句的功能:
(1)createtableemlpoyee
(first_nchar(9)notnullprimarykey,
last_nchar(8),
ageint,
citychar(20));
(2)altertableemlpoyeeadd
addresschar(30),
sexchar
(2)default‘男’;
4视图的建立
依赖基本表而产生的虚表,可以是一个几个基本表的映象。
视图的建立与删除不影响基本表,但视图内记录的更新会影响基本的内容。
视图能够增加数据库的安全性,因为视图的使用可以授权。
一、建立视图:
1、语句格式P:
82
createview视图名(列名表)asselect列名表from基本表名
2、功能:
当前数据库中根据SELECT子句的查询结果建立一个视图,视图包括结构与内容。
3、例:
83
4、视图的列名可以自定,列值也可以由基本表的数据计算产生。
如课本P:
84
二、视图内容的修改
语句格式P:
UPDATE视图名SET列名=表达式
与基本表的更新语句一样。
三、修改视图的定义:
语句格式P:
85
ALTERVIEW视图名(列名,。
)ASSELECT子句
例P:
四、删除视图:
语句格式与示例:
85
DROPview视图名
数据定义与数据操作命令概括
建立命令database库名
Createtable表名
view视图名as源表数据
4.5SQL查询
一、SQL—SELECT查询语句格式
1、完整的语句格式:
P86。
SQL-SELECT:
用于检索数据,根据一个或多个表按条件进行查询,产生出一个新表(查询结果)并显示出来。
可以在查询设计器中使用SELECT命令。
2、简单的语句格式:
select*from基本表名
SELECT[ALL|DISTINCT]{<
表达式1>
}[AS<
列名1>
]…|*}
FROM<
表名1>
[临时别名1][,…]
如:
select*fromspk1where分类名="
电视机"
toscreen
SQL中所用到的任何表都不用预先打开。
&
将查询的结果定向到某一窗口中。
二、参数及子句说明:
1.ALL|DISTINCT:
指定要包含在查询结果中的字段、常量和表达式,distinct将排队查询结果中所有重复的行。
——关系运算中的投影运算的具体实现
(1)*:
表示所有的字段,等同于ALL,默认也是ALL;
select*from商品表1;
从商品表中显示所有记录内容(所有的行与列)
例4-1:
selectALL分类名from商品表1;
从商品表中查询商品表1中的所有分类名(有重复值)——P:
88
例4-2:
selectDISTINCT分类名from商品表1;
从商品表中查询商品表1的分类名(去掉重复值)——P:
89
(2)字段函数(列函数P:
89)有:
AVG(字段名)、COUNT(字段名)、MIN(字段名)、MAX(字段名)、SUM(字段名)
例4-7,例4-8,例4-9,例4-10——AS标题名,用于指定该列显示的标题
查询教师情况表中有多少位教师:
SELECTcount教师姓名AS总人数FROM教师情况一览表
查询教师情况表中有几位副教授以上职称的人
SELECTcount(职称)AS高级职称人数FROM教师情况一览表where职称='
教授'
or职称='
副教授'
查询教师情况表中最高工资与最低工资及平均工资:
SELECTmax(工资)as最高工资,min(工资)AS最低工资,avg(工资)AS平均工资FROM教师情况一览表
注意:
部分DBMS只能用单引号,所以尽量采用单引号。
使用列函数后,一般不要在select后再加入其他的列名。
2.FROM子句:
必带的子句,指定要查询的表,并可以为每个表指明别名,多个表同时使用时可以用逗号分开。
例4-11:
92
分析:
关系运算——涉及到三个表,姓名与学号在学生关系(S),课程号与课程名在课程关系(C),成绩在选课关系(SC)。
(1)先做选择:
似乎这个运算可以省略(每个表中基本上所有记录都要)
(2)再做投影:
学生表中投影出学号与姓名——S1;
课程表中投影出课程号与课程名——C1;
(3)最后连接:
按学号相等,将S1与SC连接——SC1(学号,姓名,课程号,成绩);
按课程号相等将SC1与C1连接——SC2(学号,姓名,课程号,成绩,课程名)
表达式为:
(II学号,姓名(S))▷◁SC▷◁(II课程号,课程名(C))
如果用一些其他的数据库管理系统语言来实现上面的功能,则需要多行语句,但用SQL语言,则只要一条语句就行了。
至于它先执行选择还是选做投影或连接,则由系统自定。
从教师情况表和教师任课表中查询每位教师所上课程及课时
use教师教学信息库(在ACCESS中不能用)
select教师姓名,x.教师ID,课程名称,学时from教师情况一览表x,教师任课表ywherex.教师ID=y.教师ID
注:
对两表中都有的列名,要加以声明,声明可以是任意一个源表名。
还可以对同一数据表进行多次查询,以别名代替
4-14
若是要查询同时选修了三门以上课程(含三门),SELECT语句该如何写?
selectdistinctC1.学生证号
from成绩表C1,成绩表C2,成绩表C3,
whereC1.学生证号=C2.学生证号andC1.学生证号=C3.学生证号andC2.学生证号=C3.学生证号andC1.课程号<
C2.课程号andC1.课程号<
C3.课程号andC2.课程号<
C3.课程号
4-15
3.WHERE:
只在查询结果中包含一定的记录,按所指定的筛选条件返回行数(记录)。
还作为表间连接的条件子句。
筛选条件与连接条件的操作符可以有比较操作符与逻辑运算符,如:
(1)比较运算符:
==:
完全相等;
,!
=,#:
不相等
筛选记录:
课本例4-3,4-4,4-12,4-13,4-14,4-15
连接表:
A:
等值连接:
课本例4-6
select*from商品表1x,商品表2ywherex..商品代号=y.商品代号
B:
笛卡儿积连接——省略where子句
Select*from商品表1,商品表2
C:
一般连接(非自然连接):
select*from教师情况一览表x,教师任课表ywherex.教师ID>
y.教师ID
(2)LIKE:
字符串模式匹配,常与%联用;
%:
任意字符,可用于模糊查询,_下划线:
代表一个字符。
格式:
字符型列名[NOT]LIKE字符表达式
模糊查询(不区分大小写)
例4-28select*from商品表1where商品代号like‘DSJ%’
查询姓名中有姓张的教师select*from教师情况表where姓名like‘%张%’
查询姓名为:
张*的教师:
select*from教师情况一览表where教师姓名like'
%张_'
张**的教师:
%张__'
(3)谓词查询:
[NOT]IN:
结果中的一个子集,P:
102
[NOT]IN<
常量表>
|<
子查询>
4-26、例4-27
查询产地不在北京上海的商品。
select*fromspk2where产地NOTIN("
北京"
"
上海"
)等效于:
where产地<
"
AND产地<
select*from教师情况表where职称in(‘教授’,’副教授’)
等效于:
select*from教师情况一览表where职称='
or职称='
讲师'
select*fromspk1where分类名in(“电视机”,”洗衣机”)
等效于。
?
查询职称不是高级职称的教师情况。
select*from教师情况表where职称notin(‘教授’,’副教授’)
IN后还可以是一个子查询:
子查询同样是一个SELECT语句,但其查询的结果要符合WHERE条件的要求。
——也称为嵌套查询
查询与周建林老师同系的教师情况
select*from教师情况表where系号in(select系号from教师情况表where姓名=”周建林”)
此例的IN还可以直接用等号代替
查询与周建林同职称的教师情况
select*from教师情况表where职称in(select职称from教师情况表where姓名=”周建林”)
(4)[NOT]BETWEEN…and….:
在…之间P:
100
如(包含首尾值)或NOTBETWEEN。
例4-22
例:
select*;
fromspk1where单价BETWEEN1000AND4000AND商品代号LIKE"
DSJ%"
where单价>
=1000and单价<
=4000;
查询工资在1000~1500之间的教师情况(包括1000与1500这两个数)
select*from教师情况表where工资between1000and1500
(5)存在量词:
[NOT]EXISTS(子查询)P:
例4-23
查询品牌为‘熊猫’的所有商品。
select*from商品表1whereexists(select产地from商品表2where商品表1.商品代号=商品表2.商品代号and品牌="
熊猫"
selectspk1.*fromspk1,spk2wherespk1.商品代号=spk2.商品代号and品牌='
熊猫'
若select*fromspk1,spk2wherespk1.商品代号=spk2.商品代号and品牌='
——查询的结果将会有何不同?
select*from课程wherenotexists(select*from选课表where课程.课程号=选课表.课程号)——查询没有人选修的课程基本情况。
6)谓词:
ALL|ANY(SOME):
97,98
比较符>
all|any(子查询)
ALL:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四章 结构化查询语言 第四 结构 查询 语言