SQL基础

二、数据定义
SQL的数据定义功能是指定义数据表的结构,包括定义基本表,扩充和删除基本表。
1.定义基本表
命令格式:create table 表名(字段名1 类型(宽度,小数位数)[,字段名2 类型(宽度,小数位数)…])
命令功能:用于创建一个基本表。一个基本表在Visual Foxpro中相当于一个自由表或数据库表,新建的基本表在最低工作区中自动打开。
参数说明:表名与括号之间用空格隔开,表结构的描述放在括号内,字段与类型之间也要有空格,各个字段之间用逗号分开,对系统默认的字段宽度可以省略。
例1:建立一个学生基本情况表:学生(学号,姓名,性别,籍贯,年龄),并显示其结构。
在命令窗口键入以下命令序列
create table student (学号 c (10),姓名 c(8),性别 c (2),籍贯 c(20),年龄 n(3))
list structure
2.修改基本表
修改基本表是指对已定义的基本表增加新的字段或修改已有的字段。如果被修改的基本表已经有了数据,各个记录中新增加的字段值全部为空,以后可用其它命令来填入新值。
命令格式:alter table 表名add |alter [column] 字段名 类型(宽度,小数位数)
命令功能:对已有的表增加新的字段或修改已有字段。
例2:在学生表中新增加两个字段:家庭出身,入团时间
在命令窗口键入以下命令
alter table student add 个人成分 c (10)
alter table student add 入团时间 d
3.删除基本表
命令格式:drop table 表名
命令功能:把给定的表从数据库中移出,并从磁盘上删除。
参数说明:表名必须给出全名。

三、数据操纵
以上介绍的SQL命令只对表的结构进行描述,并未涉及到表中的数据。数据操纵是指对表中得数据进行增加、删除和修改操作。
1.插入(增加)数据
命令格式:insert into 表名(字段名1[,字段名2,…] value (表达式1[,表达式2,…]))
命令功能:在表尾追加一条指定字段值的记录。
命令说明:若指定的表未打开,则Visual Foxpro先在一个新工作区中以独占方式打开该表,然后再把新记录追加到表中。若所指定的表是打开的,insert命令就把新记录追加到这个表中。无论指定的表是否打开,当前工作区并未改变,仍为原当前工作区。
参数说明:字段名1,…为指定新记录的字段名。表达式1,…为新插入记录的字段值,若省略字段名,则必须按照表结构定义的顺序来指定字段值。
例3:向学生表中追加一条记录。
在Visual Foxpro命令窗口键入以下命令序列
insert into student (学号,姓名,性别,年龄) values ("911010001","张三","男",18)
2.修改数据
命令格式:update 表名 set 字段1=表达式1[,字段2=表达式2,…] where 命令功能:以新值更新表中的记录。Where字句用于限定条件,对满足条件的记录予以更新,若省略where字句则对所有记录更新为相同的值。
命令说明:该命令只能用于更新单个表中的数据。
3.删除数据
删除时必须以记录为单位,而不能以属性为单位。一次可以删除一个或几个记录,删除操作仅是逻辑删除。
命令格式:delete from where 命令功能:删除满足条件的记录。


[color=red]四、SQL查询[/color]
SQL查询语句一般称为SQL-Select命令。基本形式是Select-From-Where查询块,多个查询块允许嵌套。SQL查询可以很方便地从一个或多个表中检索数据,查询是高度非过程化的,用户只需说明“做什麽”,而不必指出“如何做”。
SQL查询的基本格式如下:
Select ,,…,;
From ,,…,;
Where 其中:Select子句中的表达式为查询目标,一般为逗号分开的字段名。
From子句为此查询涉及到的所有数据表。
Where子句指出查询目标必须满足的条件。该子句可以省略。
1.简单查询
简单查询是最基本的查询。我们通过例子逐渐引入各种短语。
例4:给出王姓同学的姓名及籍贯。
Select 姓名,籍贯 from student where 姓名=“王”
无论student.dbf事先是否打开,该表将自动打开,查询结果将在弹出的Query窗口中给出。
例5:查看所有同学的全部情况。
Select * from student
Select子句里的*用于表示全部字段。
1)distinct和all
Selectd子句中可用Distinct去掉查询结果中的重复记录。系统默认为All,即输出所有记录。
例6:列出成绩库中所有同学及成绩。
Select distinct 学号,成绩 from cj
2)order by子句
order by子句可用于对查询结果排序。排序关键字可以是字段名或查询结果的序列号,DESC(Descending)表示降序,ASC(Ascending)表示升序。若缺省order by子句排序关键字默认升序,SQL允许多重排序。
例7:查找籍贯是河南的所有同学姓名及年龄,输出结果降序排列。
Select 姓名,籍贯,年龄 from student Where 籍贯=“河南省”order by 年龄 desc
3)between…and…和not between…and…
在where子句中,条件可用between…and…表示二者之间,not between…and…表示不在其间。
例8:查找学生表中年龄介于18和20之间的所有同学,结果按年龄升序排列。
Select 姓名,籍贯,年龄from student Where 年龄 between 18 and 20 Order by 年龄 asc
4)谓词in
在where子句中,条件可以用in表示包含在其后面括号指定的集合中。括号内的元素可以直接列出,也可以是一个子查询模块的查询结果(在嵌套查询中介绍)。
例9:查找学生表中籍贯是云南和贵州的同学。
Select 姓名,性别,籍贯 from student Where 籍贯 in (“云南省”,“贵州省”)
5)like及通配符
在where子句中,条件可以用like指出字符串模式匹配,其后面是字符串常量,其中可使用两个通配符:下划线_代表一个字符,百分号%代表任意多个字符。
例10:查找李姓的所有同学。
Select 姓名,性别,籍贯 from student Where 姓名 like “李%”
6)用as指定查询结果的列名
查询结果的列名一般为字段名,为了方便提示,SQL允许自定义一个新的列名,列名的命名与字段名的命名规则相同,列名与字段名之间用as隔开。
7)为表指定临时别名
有些查询涉及到同一表文件检索两次,就必须引入别名。用户可自行定义别名,只需在from子句中给出,并在select和where子句中用别名字段加以限定。
例11:检索出成绩库中计算机网络和计算机原理成绩都大于70分的同学。
Select x.学号,x.课程,x.成绩,y.课程,y.成绩 from cj x,cj y;
Where x.成绩>70 and x.学号=y.学号 and x.课程="计算机原理"and y.课程="计算机网络"
2.联接查询
前面介绍的简单查询只涉及到一个表,如果查询涉及到两个或多个表,就要进行联接运算。由于SQL是高度非过程化的,所以用户只需在from子句中指出各个表的名称,在where子句中指出联接条件即可,联接运算由系统去完成。
例12:查找出张三的所有成绩。
Select x.学号,x.姓名,y.课程,y.成绩 from student x,cj y;
Where x.学号=y.学号 and x.姓名=“张三”
3.嵌套查询
嵌套是指在Select-from-where查询块内部再嵌入另一个查询块,称之为子查询。由于order by子句是对最终查询结果按顺输出,因此它不能出现在子查询中。
1)用in指出包含在一个子查询模块的查询结果中
在嵌套查询中,where子句的条件常用到谓词in。由于查询的外层用到内层的查询结果,用户事先并不知道内层结果,这里in就不能用一系列or来替代。
例13:查询入团时间在1994年10月以前的所有同学的课程及成绩。
Select * from cj Where 学号 in;
(select 学号 from student where 入团时间 =2
3)存在量词exists和not exists
在嵌套查询钟主查询的where子句中,条件可用exists表示存在。如果子查询结果非空,则满足条件,not exists表示不存在,如果子查询结果为空,则满足条件。


五、数据控制
数据控制是指对数据库各种权限的授予或回收来管理数据库系统。每个用户在系统登录时都要输入用户名和口令,通过了系统的合法性检验后才能使用系统。由于Visual Foxpro 6.0不支持这部分功能,在此略去。

六、小结
通过以上实例我们能够了解到SQL具有高度非过程化、语言一体化、易于使用的特点。它从数据定义开始,能够完成数据的定义、查询、维护和安全控制等一系列操作,是一个功能非常完善的数据库语言,SQL查询可以实现多种查询如简单查询、联接查询、库函数查询等。本文用较为简单的例子进行介绍,以求达到抛砖引玉的作用。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值