
表是处理数据和建立关系型数据库及应用程序的基本单元。在Vfp中,一个数据库可以包含若干个表,包含在数据库中的表称为数据库表。不包含在数据库中的表称为自由表。数据库表从数据库中移出来,就变为自由表;反之,自由表加入到数据库中,即变为数据库表。数据库表和自由表的 *** 作方法基本相同,但数据库表比自由表新增了许多控制功能。
一建立表结构:
方式一:此种方式创建的是自由表,不推荐。
(1)单击“文件→新建”,在d出的“新建”对话框中,“文件类型”选“表”,单击“新建文件”按钮
(2)在d出的“创建”对话框中输入文件名,单击“保存”,即可打开“表设计器”。
方式二:使用项目管理器。
(1)打开项目文件myvfppjx,依次展开“全部→数据→数据库→ry”,选中“表”,单击右侧的“新建”按钮,d出“新建表”对话框,单击该对话框中的“新建表”按钮
(2)在d出的“创建”对话框中,输入表名“职工档案”,单击“保存”,打开“表设计器”。
方式三:命令方式创建表
(1)在命令窗口输入Open Database ry命令打开ry数据库(不打开数据库,则创建的表不属于任何数据库,是自由表)。
(2)在命令窗口再输入Create命令回车,在d出的“创建”对话框中输入文件名,单击“保存”,也会d出“表设计器”,
方式四:使用“数据库设计器”
(1)单击“文件→打开”,“文件类型”选“数据库”,双击ry数据库的图标或直接在命令窗口输入命令
modify database ry,均可打开“数据库设计器”,(2)右击“数据库设计器”的空白处,选快捷菜单中的“新建表”命令。
二“表设计器”的使用:表设计器包含“字段”、“索引”及“表”三张选项卡,我们使用其中的“字段”选项卡来建立表结构,一行一个字段,每个字段由字段名、类型及宽度等组成。
1字段名:字段名可由字母、数字、下划线及数字组成,但不能以数字开头。数据库表的字段名最长为128个字符,而自由表字段名最长为10字符。字段名可用汉字或英文字母取名。用汉字作字段名比较直观,但在程序代码中引用时较为麻烦,用英文命名。比如,一个字段需命名为“姓名”,我们可用“姓名”二字的汉语拼音的首字母xm来作字段名,这样既便于记忆,在程序代码中引用时又可减少输入的工作量。但在本教程中,为了便于讲解,使用汉字命名字段名。
2 字段类型和宽度:Vfp支持13种字段类型,见下表:
字段类型类型代号宽度说明范围
字符型C1-254存放字符数据任意字符
二进制字符型C1-254任意不经代码页修改而维护的字符数据任意字符
数值型N宽度=1(正负号)+整数部份位数+1(小数点)+小数部份位数存放数值数据,可包含小数
整型I4存放整型值数据
浮点型F同数值型同数值型
双精度型B8双精度浮点数
货币型Y8存放货币数据
日期型D8(固定宽度)存放日期数据
日期时间型T8(固定宽度)存放日期时间型数据
逻辑型L1(固定宽度)存放逻辑数据
备注型M4(固定宽度)存放内容在Frt文件中的位置仅受内存空间的限制
二进制备注型M4(固定宽度)任意不经代码页修改而维护的备注数据仅受内存空间的限制
通用型G4(固定宽度)Ole对象数据仅受内存空间的限制
注:为不能用于内存变量的数据类型。
CHAR(n)数据类型是一种用于存储任意字符串的数据类型,它可以存储单字节或多字节字符,具体取决于数据库的区域设置。
CHAR(n)数据类型的长度为n个字节,其中1 ≤ n ≤ 32,76712。如果你不指定n,那么默认长度为CHAR(1)。
因此,n的值不能超过32,767,而不是4000。4000可能是某些数据库系统或版本的限制。
,?,[ ]。
对 Access 项目(adp 文件)运行选择和更新查询,以及使用这两种查询类型或查找和替换对话框来搜索设置为使用 ANSI-92 标准的数据库时,应使用此通配符集。
ANSI-89 描述传统的 Access SQL 语法,这是 Access 数据库的默认语法。通配符遵循 Microsoft Visual Basic® for Applications (VBA) 规范,而非 SQL ,当需要语法符合 Microsoft SQL Server™ 数据库规范时,则使用 ANSI-92。
扩展资料:
注意事项:
使用参数形式执行SQL命令时,参数数组需与在SQL语句中参数名出现的位置及名称必须完全相同,否则执行不成功,但不会报错。
使用参数形式执行SQL命令时,当字段类型为时间类型时,需要显形声明参数类型为Date,不能采用参数名+值的形式。
参考资料来源:百度百科-access
例:
select from table where name like '%%'
百分号是任意字符,如果查询第一个字母是A的所有姓名
select from table where name like 'A%' 此外一定要用单引号
--注释
--select |字段名1,字段名2 from 表名;
--1)
--查询|检索|获取 所有员工的所有信息
--查询的数据: 员工的所有信息
--数据的来源:员工表 emp
--条件:
select from emp;
--2)
--查询所有的员工名字
select ename from emp;
--3)
--查询所有的员工编号和员工名称,员工上级的编号
--查询的数据: empno,ename,mgr
--数据的来源:员工表 emp
select empno,ename,mgr from emp;
--4)
--查询所有部门部门编号
select deptno from dept;
--5)
--查询出所有员工所在的部门的部门编号
select distinct deptno from emp;
--对查询数据进行去重(非字段去重) distinct
--6)
--查询出所有存在员工的部门的部门编号,以及员工名称
select deptno,ename from emp;
select distinct sal,deptno from emp;
--7)
--查询表达式,结果是表达式的值,显示的字段名就是表达式,计算值
select 1+1 from emp;
select 'a' from emp;
--8)
--给字段取别名 select 字段1 (as) 别名1,字段2 别名2 from 表名 别名; 表的别名不能加as
--查询所有员工的名称(别名为:名字),员工编号(编号)
--别名默认变大写,别名中的内容原封不动出现 ""->中的内容原封不动出现
select 123+456 "get sum" from emp;
select empno as 员工编号,ename "员工 姓名" from emp;
--9)
--字符串 '' 原封不动显示""
select distinct '哈哈' 笑 from emp e;
--10)
--字符串拼接 java中使用+ 这里使用||
--查询 ab--cd 表达式
select distinct 'ab-'||'-cd' from emp;
--查询所有的员工名字,给他们来一个前缀SXT
select 'sxt-'||ename from emp;
--11)
--伪列 : 不存在的列就是伪列 比如:表达式,字符串
--12)
--虚表: 在oracle中不存在的表,也可以说是这个表中没有任何数据,没有任何字段 --oracle中的虚表:dual
--虚表的作用:可以不使用distinct就可以去重的效果,因为里面没有数据,不会出现多行
select from dual;
select distinct 123456 from emp;
select 123456 from dual;
select sysdate from dual;
--比如查询当前时间
--13)
--给每一个员工在原来的基础上+100块钱奖金
--null 空
--null与数字运算,结果还为null
--null与字符串运算,结果原串
--nvl(参数1,参数2) 处理null使用 如果参数1为null,最终结果参数2,如果参数1不为null,最终的结果就是参数1
select comm 原奖金,comm||'100' 新奖金 from emp;
select comm 原奖金,nvl(comm,0)+100 新奖金 from emp
--一节结尾小练习
--查询所有员工的名字, 工种, 年薪(不带奖金)
select ename,job,sal12 年薪 from emp;
--查询所有员工的名字,工种,年薪(带12月奖金的)
select ename,job,(sal+nvl(comm,0))12 年薪 from emp;
--查询所有员工的名字, 工种, 年薪(带一次奖金的)
select ename,job,sal12+nvl(comm,0) 年薪 from emp;
--select |表达式|字符串|伪列|字段1 别名1,字段2 as 别名2 from 表名 别名|结果集 where 行过滤条件;
--执行流程: from-->where-->select确定结果集
-- 查询20部门的员工信息
--数据:
--来源: emp
--条件: deptno=20
select from emp where deptno=20;
-- > < >= <= = != <>
-- 查询工资大于1000的员工的姓名 工作岗位 工资 所属部门编号
--数据: ename,job,sal,deptno
--来源: emp
--条件: sal>1000
select ename,job,sal,deptno from emp where sal=1000;
-- 查询不在20部门工作的员工信息
select from emp where deptno != 20;
select from emp where deptno <> 20;
--where 中不能使用字段的别名
-- 查询员工的年薪大于20000的 员工名称、岗位 年薪
select ename 姓名,job 岗位,(sal+nvl(comm,0))12 sum from emp where ((sal+nvl(comm,0))12)>20000;
select ename 姓名,job 岗位,(sal+nvl(comm,0))12 sum from emp;
select 岗位, sum
from (select ename 姓名, job 岗位, (sal + nvl(comm, 0)) 12 sum from emp)
where sum > 20000;
-- 查询 any(任意一个) some(任意一个) all(所有)
select from emp where deptno = any(10,20);
select from emp where deptno = some(10,20);
--大于最小的
select from emp where sal> any(1500,2000); --薪资>1500的就可以
--大于最大的
select from emp where sal> all(1500,2000); --薪资>2000的就可以
-- 查询 工种不为’SALESMAN’的员工信息 (注意 内容区分大小写)
select from emp where not job ='SALESMAN';
--or或 and并且|都 not取反
-- -检索 工资 1600, 3000员工名称 岗位 工资
select ename,job,sal from emp where sal=1600 or sal=3000;
select ename,job,sal from emp where not (sal=1600 or sal=3000);
-- 工资在2000到3000之间的员工信息
select from emp where sal>2000 and sal<3000;
--between 小范围值 and 大范围的值 两者之间 <= >=
select from emp where sal between 1600 and 3000;
---查询 岗位 为 CLERK 且部门编号为 20的员工名称 部门编号,工资
select ename ,deptno ,sal from emp where job='CLERK' and deptno=20;
-- 查询 岗位 为 CLERK 或部门编号为 20的员工名称 部门编号,工资
select ename ,deptno ,sal,job from emp where job='CLERK' or deptno=20;
--查询 岗位 不是 CLERK 员工名称 部门编号,工资
select ename ,deptno ,sal,job from emp where job!='CLERK';
select ename ,deptno ,sal,job from emp where not job='CLERK';
select ename ,deptno ,sal,job from emp where job<>'CLERK';
-- 查询 岗位 不为 CLERK 并且部门编号不为 20的员工名称 部门编号,工资
select ename ,deptno ,sal,job from emp where job!='CLERK' and deptno!=20;
select ename ,deptno ,sal,job from emp where not (job='CLERK' or deptno=20);
--存在佣奖金的员工名称
select ename,comm from emp where not comm is null;
select ename,comm from emp where comm is not null;
--不存在奖金的员工名称
select ename,comm from emp where comm is null;
--集合
--Union,并集(去重) 对两个结果集进行并集 *** 作,不包括重复行同时进行默认规则的排序;
--Union All,全集(不去重) 对两个结果集进行并集 *** 作,包括重复行,不进行排序 ;
--Intersect,交集(找出重复) 对两个结果集进行交集 *** 作,不包括重复行,同时进行默认规则的排序;
--Minus,差集( 减去重复 ) 对两个结果集进行差 *** 作,不包括重复行,同时进行默认规则的排序
--查询工资大于1500 或 含有佣金的人员姓名
select ename,sal,comm from emp where sal>1500 or comm is not null;
select ename,sal,comm from emp where sal>1500;
select ename,sal,comm from emp where comm is not null;
--并集
select ename,sal,comm from emp where sal>1500
Union
select ename,sal,comm from emp where comm is not null;
select ename,sal,comm from emp where sal>1500
Union all
select ename,sal,comm from emp where comm is not null;
--查询显示不存在雇员的所有部门号。
--求出所有的部门号
select deptno from dept;
--有员工的部门号
select distinct deptno from emp;
select deptno from dept
Minus
select distinct deptno from emp;
-- 查询显示存在雇员的所有部门号。
select deptno from dept
Intersect
select distinct deptno from emp;
--模糊匹配 like %任意任意字符 _一个任意字符 一起使用
--查询员工姓名中包含字符A的员工信息
select from emp where ename like '%A%';
--完全匹配
select from emp where ename like 'SMITH';
--查询员工姓名以'A'结尾的员工信息
select from emp where ename like 'A%';
--查询员工姓名中第二个字母为A的员工信息
select from emp where ename like '_A%';
insert into emp(empno,ename,sal) values(1000,'t_%test',8989);
insert into emp(empno,ename,sal) values(1200,'t_tes%t',8000);
--escape('单个字符')指定转义符
--查询员工姓名中包含字符%的员工信息
select from emp where ename like '%B%%' escape('B');
--当执行插入数据,删除数据,修改的时候,默认开启事务
--可提交 commit
--可回滚 rollback
--多个人中任意一个值就可以
select from emp where sal=1600 or sal=3000 or sal=1500;
select from emp where sal in(1500,1600,3000);
--select 字段 from 结果集 where 行过滤条件 order by 排序字段 desc降序|asc升序(默认);
--执行流程: from--> where-->select-->排序
select empno,ename,sal from emp order by sal desc,empno asc;
--按照奖金升序排序,如果存在null值,所有的奖金null值的数据最先显示
select empno,ename,sal,comm from emp where deptno in (10,30) order by comm asc nulls first;
以上就是关于VFP中创建数据库表全部的内容,包括:VFP中创建数据库表、CHAR(n)数据类型中,n的值不能超过4000对吗、在Access查询的条件中可以匹配任意一个字符的通配符是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)