A. 如何建立仓库sql数据表关系
市 面上所谓的破解软件都一般是没有破解完的,软件功能不全的,
我 们公司使用的易 顺 佳 软件不错。
很 详细的帮助文件与使用视频。
B. 用SQL语句复制仓库表生成名为BAK的表文件
SQL 不支持对表的直接备份。
--你可以考虑把指定的表以文本文件的形式来进行备份/恢复
if exists(select 1 from sysobjects where name= 'File2Table ' and objectproperty(id, 'IsProcere ')=1)
drop procere File2Table
go
/*--实现数据导入/导出的存储过程
可以实现导入/导出 整个数据库/指定表 到文本文件
/*--调用示例
导出调用示例
--导出指定表,这里指定导出表:地区资料 和 基本信息,文件名前缀为:zj
exec file2table 'zj ', ' ', ' ', 'd:\ ', 'xzkh_sa ', '地区资料,基本信息 '
--导出整个数据库到c:\docman目录下,无文件前缀
exec file2table 'zj ', ' ', ' ', 'd:\txt\ ', 'xzkh_sa '
导入调用示例
--导入指定表,这里指定导出表:地区资料 和 基本信息,文件名前缀为:zj
exec file2table 'zj ', ' ', ' ', 'c:\zj ', 'xzkh_sa ', '地区资料,基本信息 ',0
--导入整个数据库从c:\docman目录下,无文件前缀
exec file2table 'zj ', ' ', ' ', 'C:\docman\ ', 'xzkh_sa ', ' ',0
--*/
create procere File2Table
@servername varchar(200)--服务器名
,@username varchar(200)--用户名,如果用NT验证方式,则为空 ' '
,@password varchar(200)--密码
,@path varchar(1000)--目录名+文件前缀,目录名必须以 '\ '结束,文件名自动用表名.txt
,@dbname varchar(500)--数据库名
,@tbname varchar(8000)= ' '--表名列表,如果不指定,则表示所有用户表
,@isout bit=1--1为导出(默认),0为导入
as
declare @sql varchar(8000),@sql1 varchar(8000)
declare @tbstation int,@filestation int
--初始化数据处理语句
select @sql= 'bcp " '+@dbname+ '.. '
,@tbstation=len(@sql)+1
,@sql=@sql
+case when @isout=1 then ' " out ' else ' " in ' end
+ ' " '+@path
,@filestation=len(@sql)+1
,@sql=@sql
+ '.txt " /c '+ ' /S " '+@servername
+case when isnull(@username, ' ')= ' ' then ' '
else ' " /U " '+@username end
+ ' " /P " '+isnull(@password, ' ')+ ' " '
--数据导入/导出处理
--定义数据处理的游标
set @sql1= 'declare #tb cursor for select name from '
+@dbname+ '..sysobjects where xtype= ' 'U ' ' '
+case when isnull(@tbname, ' ')= ' ' then ' '
else ' and name in ( ' ' '+replace(@tbname, ', ', ' ' ', ' ' ')+ ' ' ') ' end
exec(@sql1)
open #tb
fetch next from #tb into @tbname
while @@fetch_status=0
begin
select @sql1=stuff(@sql,@tbstation,0,@tbname)
,@sql1=stuff(@sql1,@filestation+len(@tbname),0,@tbname)
exec master..xp_cmdshell @sql1,no_output
fetch next from #tb into @tbname
end
close #tb
deallocate #tb
go
C. 6.仓库管理系统中的表结构如下所示,请根据要求写出SQL命令完成下题:
--1--
select*from仓库where面积>350
--2--
select仓库号,avg(工资)from职工
--3--
select姓名,工资intozgxxfrom职工
--4--
select姓名from职工where姓名like('张%')
--5--
select姓名,工资from职工where仓库号='WH1'
--6--
select*from订单where订购日期like('2008%06%')
--7--
select*from订单where职工号='E1'
--8--
select供应商号,sum(订单数量)as合计订单数from订单groupby供应商号
--9--
select职工号,sum(订单数量)as合计订单数from订单groupby职工号
--10--
select*from供应商where供应商名like('%北京%')
--11--
update职工set仓库号='WH4'where姓名='孙小空'
--12--
selectsum(面积)面积总和from仓库
--13--
selectcount(职工号)as人数,仓库号from职工groupby仓库号
D. SQL的题目,最基础的~等~~
1. 从职工关系中检索所有工资值。
答:select 工资 from 职工表
2. 检索仓库关系中的所有记录
答:select * from 仓库表
3. 检索工资多于1230元的职工号
答:select 职工号 from 职工表 where 工资>1230
4.检索哪些仓库有工资多于1210元的职工。
答:select distinct 仓库号 from 职工表 where 工资>1210
5. 给出在仓库“wh1”或“wh2”工作,并且工资少于1250元的职工号。
答:select 职工号 from 职工表 where 工资<1250 ;
and (仓库号="wh1" or 仓库号="wh2")
注意:逻辑运算符的优先级从高到低依次为not、and、or。运算符的优先级:括号 算术运算 关系运算 逻辑运算.
说明:前面的几个例子在from之后只指定了一张表,也就是说这些检索只基于一张表。如果有where子句,系统首先根据指定的条件依次检验关系中的每条记录,然后选出满足条件的记录(相当于关系的选择操作),并显示select子句中指定属性的值(相当于关系的投影操作)。
6. 找出工资多于1230元的职工号和他们所在的城市。
答:select 职工表.职工号, 仓库表.城市 from 职工表,仓库表 ;
where 职工表.仓库号=仓库表.仓库号 and 工资>1230
7. 找出工作在面积大于400的仓库的职工号以及这些职工工作所在的城市。
答:select 职工表.职工号, 仓库表.城市, 仓库表.面积 ;
from 职工表,仓库表 where 职工表.仓库号=仓库表.仓库号 ;
and 仓库表.面积>400
说明:以上两题为简单的联接查询.
8. 哪些城市至少有一个仓库的职工工资为1250元
答:
方法一:
Select 仓库表.城市 from 职工表,仓库表 where 职工表.仓库号=仓库表.仓库号 and 职工表.工资=1250
方法二:
select 仓库号 from 职工表 where 工资=1250 into dbf abc.dbf
select 仓库表.城市 from 仓库表,abc where 仓库表.仓库号=abc.仓库号
方法三:
select 城市 from 仓库表 where 仓库号 in (select 仓库号 from 职工表 where 工资=1250)
说明: 这属于嵌套查询. 这类查询所要求的结果出自一个关系,但相关的条件却涉及多个关系.
可以看到,方法三的命令中含有两个select-from-where查询块,即内层查询块和外层查询块,内层查询块检索到的仓库值是wh1和wh2,这样就可以写出等价命令:
select 城市 from 仓库表 where 仓库号 in ("wh1","wh2")
或者
select 城市 from 仓库表 where 仓库号="wh1" or 仓库号="wh2"
9. 查询所有职工的工资都多于1210元的仓库的信息。
答:
方法一:
select 仓库号,min(工资) as 工资 from 职工表 group by 仓库号 into dbf 仓库min工资.dbf
select 仓库表.* from 仓库表,仓库min工资 where 仓库表.仓库号=仓库min工资.仓库号 and 仓库min工资.工资>1210
方法二:
select * from 仓库表 where 仓库表.仓库号 not in (select 仓库号 from 职工表 where 工资<=1210 ) and 仓库表.仓库号 in (select 仓库号 from 职工表)
(错误方法)
select * from 仓库表 where 仓库表.仓库号 not in (select 仓库号 from 职工表 where 工资<=1210 )
注意:上述检索结果错误,会将没有职工的仓库检索出来.如果要求排除那些还没有职工的仓库,检索要求可以叙述为:检索所有职工的工资都大于1210元的仓库的信息,并且该仓库至少要有一名职工.
(错误方法)
select * from 仓库表 where 仓库表.仓库号 in (select 仓库号 from 职工表 where 工资>1210 )
注意:上述查询结果错误。它会查出仓库号为wh1的信息,但wh1的职工工资并不都大于1210。
10. 找出和职工e4挣同样工资的所有职工。
答: Select 职工号 from 职工表 where 工资 in (select 工资 from 职工表 where 职工号="e4")
说明:7、9、10题都是基于多个关系的查询,这类查询所要求的结果出自一个关系,但相关的条件却涉及多个关系.我们称之为嵌套查询。嵌套查询优选含有两个select-from-where查询块的查询结构。
11. 检索出工资在1220元到1240元范围内的职工信息。
答:select * from 职工表 where 工资 between 1220 and 1240
说明: "工资 between 1220 and 1240"等价于"工资>=1220 and 工资<=1240"
如果要求查询工资不在1220元到1240元范围内的职工信息
说明: select * from 职工表 where 工资 not between 1220 and 1240
12. 从供应商关系中检索出全部公司的信息,不要工厂或其他供应商的信息。
Select * from 供应商表 where "公司" $ 供应商名
13. 找出不在北京的全部供应商信息。
Select * from 供应商表 where 地址!="北京"
或者
Select * from 供应商表 where not(地址="北京")
14. 按职工的工资值升序检索出全部职工信息。
答:select * from 职工表 order by 工资
如果需要将结果按降序排列,只要加上desc
select * from 职工表 order by 工资 desc
说明:使用SQL SELECT可以将查询结果排序,排序的短语是order by ,具体格式如下:
order by order_item [ASC|DESC] [,order_item [ASC|DESC]……]
15. 先按仓库号排序,再按工资排序并输出全部职工信息。
答:Select * from 职工表 order by 仓库号,工资
16. 找出供应商所在地的数目。
答:select count(distinct 地址) from 供应商表
注意:除非对表中的记录数进行计数,一般count函数应该使用distinct
比如: select count(*) from 供应商表
查询结果是供应商表中的记录数.
说明:可用于计算检索的函数有:count——计数 sum——求和
avg——计算平均值 max——求最大值 min——求最小值
17. 求支付的工资总数
答:select sum(工资) from 职工表
18. 求北京和上海的仓库职工的工资总和
答: select sum(工资) from 职工表,仓库表 where 职工表.仓库号=仓库表.仓库号 and (城市="北京" or 城市="上海")
方法二:
select sum(工资) from 职工表 where 仓库号 in (select 仓库号 from 仓库表 where 城市="北京" or 城市="上海")
19. 求所有职工的工资都多于1210元的仓库的平均面积
答:Select avg(面积) from 仓库表 where 仓库号 not in(select 仓库号 from 职工表 where 工资<=1210) and 仓库号 in(select 仓库号 from 职工表)
20. 求在wh2仓库工作的职工的最高工资值
答:select max(工资) from 职工表 where 仓库号="wh2"
21. 求每个仓库的职工的平均工资
答:select 仓库号,avg(工资) from 职工表 group by 仓库号
说明:可以利用group by 子句进行分组计算查询.group by短语的格式如下:group by groupcolumn[,groupcolumn……][having filtercondition]
可以按一列或多列分组,还可以用having 进一步限定分组的条件.
注意:where /group by等子句都不能放在from子句之前.
22. 求至少有两个职工的每个仓库的平均工资。
答: select 仓库号,count(*),avg(工资) from 职工表 group by 仓库号 having count(*)>=2
说明:having子句总是跟在group by 子句之后,不可以单独使用.having子句用于限定分组.
23. 找出尚未确定供应商的订购单
答:select * from 订购单表 where 供应商号 is null
24. 列出已经确定了供应商的订购单信息
答:select * from 订购单表 where 供应商号 is not null
E. SQL多表查询的条件问题
就是连接条件
说白了就是2个表根据什么字段进行关联;
关联举个例子说吧:
表a存储了一个人的基本信息,如(学号、姓名、年龄等)
表b存储了这个人的每次考试的信息(学号,成绩等)
那么这连个表是有联系的,那么根据什么联系呢,可以根据这个学员的学号进行关联。
F. 怎样用SQL写一个仓库管理系统
首先配置SQLSERVER2005:
打开”Microsoft SQL Server Management Studio“ 直接用Windows 用户连接进入,再在“安全性”中的“登录名”内的“新建登录名”,你就对应的添好“确定”就可以了。
再在你对应的“数据库”里“安全性”用户,把你建的用户添加进去。
关键地方,查看“服务器 属性”在 “安全性”选上 “SQL Server 和 Windows 身份验证模式”点 “确定”系统会提示你重新启动SQL Server 你“停止”重启一下就配好了。
接着看C#连接SQL Server2005的代码语句:
strcon = strcon + @"Data Source=" + strcons[0];
strcon = strcon + "," + strcons[2] + ";";
strcon = strcon + "Network Library=" + strcons[1] + ";";
strcon = strcon + "Initial Catalog=" + strcons[3] + ";";
strcon = strcon + "User ID=" + strcons[4] + ";";
strcon = strcon + "Password=" + strcons[5] + ";";
strcon = strcon + "Persist Security Info=True";
strcons[0] 服务器名称,一般添机器的IP
strcons[1]协议DBMSSOCN(为tcp/ip协议)
strcons[2]]端口号,一般为1433
strcons[3] 数据库名
strcons[4] 用户名
strcons[5]密码
端口号也要配置一下:
在控制面板里的服务和应用程序中的SQL Server配置管理中的SQL Server 2005网络配置内的SQL
Server2005的协议TCP/IP默认为已禁用,在它的属性设置它的端口号为1433 “确定” 启动。
G. SQL SERVER请教!
二、查询有两个订单及以上的职工的职工号(Eno)和订单数量,写出SQL语句,并对执行结果截图。(15分)
Select eno, count(Ono)
from orders
group by eno
HAVING count(Ono)>=2
三、删除职工’赵一’订单金额在18000及以下的订单记录,写出SQL语句,并对结果截图。(15分)
Delete From orders
Where eno=(select eno from employees where ename='赵一')
and omoney<=18000
四、创建存储过程Get_SumMoney。
1)以职工姓名(Ename)为参数,计算这个职工所获订单的金额(Omoney)总和,写出SQL语句,并对执行结果截图。(15分)
--创建存储过程
alter procere get_summoney
@ename varchar(50),@omoney int output
As
Select @omoney=sum(omoney)
From orders,Employees
where orders.eno=Employees.eno and Employees.ename=@ename
2)使用存储过程Get_SumMoney计算职工 ’赵一’ 获得的订单金额总和,写出SQL语句,并对执行结果截图。(5分)
--执行存储过程
DECLARE @ename varchar(50),@omoney int --定义局部变量
SELECT @ename='赵一'
EXECUTE get_summoney @ename,@omoney OUTPUT
SELECT @omoney 订单的金额
H. SQL语句 统计部分仓库数量
指定要统计的仓库名称
select count(数量) from (select * from tableName where 仓库名称 in ('仓1','仓2','仓3'));
不指定名称
select count(数量) from tableName where rownum<=num; ps:num就是要查几个仓库,可以当参数传入, 上面的仓1 仓2 也可以当参数传入