数据库语录 sql面试必会6题经典131

  //www.ark88.ark88.com/Article/Class31/Class32/2003-12-30/Article_20031230201228://www.htmltarget=_blank>http.com/Article/Class31/Class32/2003-12-30/Article_20031230201228--数据操作

  SELECT--从数据库表中检索数据行和列

  INSERT--向数据库表添加新数据行

  DELETE--从数据库表中删除数据行

  UPDATE--更新数据库表中的数据

  --数据定义

  CREATETABLE--创建一个数据库表

  DROPTABLE--从数据库中删除表

  ALTERTABLE--修改数据库表结构

  CREATEVIEW--创建一个视图

  DROPVIEW--从数据库中删除视图

  CREATEINDEX--为数据库表创建一个索引

  DROPINDEX--从数据库中删除索引

  CREATEPROCEDURE--创建一个存储过程

  DROPPROCEDURE--从数据库中删除存储过程

  CREATETRIGGER--创建一个触发器

  DROPTRIGGER--从数据库中删除触发器

  CREATESCHEMA--向数据库添加一个新模式

  DROPSCHEMA--从数据库中删除一个模式

  CREATEDOMAIN--创建一个数据值域

  ALTERDOMAIN--改变域定义

  DROPDOMAIN--从数据库中删除一个域

  --数据控制

  GRANT--授予用户访问权限

  DENY--拒绝用户访问

  REVOKE--解除用户访问权限

  --事务控制

  COMMIT--结束当前事务

  ROLLBACK--中止当前事务

  SETTRANSACTION--定义当前事务数据访问特征

  --程序化SQL

  DECLARE--为查询设定游标

  EXPLAN--为查询描述数据访问计划

  OPEN--检索查询结果打开一个游标

  FETCH--检索一行查询结果

  CLOSE--关闭游标

  PREPARE--为动态执行准备SQL语句

  EXECUTE--动态地执行SQL语句

  DESCRIBE--描述准备好的查询

  还有很多,你参考

  经典sql语句

  baidu、google是很好的学习搜索引擎,

  推荐一下新手学习SQL的基础技术,在baidu搜索以下内容:

  “一网打尽”通用SQL数据库的查询语句

  实例讲解SQLServer中"Update"的用法

  三种数据库利用SQL语句进行高效果分页

  深入讲解SQLServer数据库的嵌套子查询

  实现跨多个表格的数据进行组合的SQL语句

  深入讲解SQLUnion和UnionAll的使用方法

  还有一些基本的语法这里也简单介绍一下,希望对你有用:

  学习SQL应知道的动态SQL语句基本语法

  1、普通SQL语句可以用Exec执行

  eg:Select*fromtableName

  Exec(\'select*fromtableName\')

  Execsp_executesqlN\'select*fromtableName\'--请注意字符串前一定要加N

  2、字段名,表名,数据库名之类作为变量时,必须用动态SQL

  eg:

  declare@fnamevarchar(20)

  set@fname=\'FiledName\'

  Select@fnamefromtableName--错误,不会提示错误,但结果为固定值FiledName,并非所要。

  Exec(\'select\'+@fname+\'fromtableName\')--请注意加号前后的单引号的边上加空格

  当然将字符串改成变量的形式也可

  declare@fnamevarchar(20)

  set@fname=\'FiledName\'--设置字段名

  declare@svarchar(1000)

  set@s=\'select\'+@fname+\'fromtableName\'

  Exec(@s)--成功

  execsp_executesql@s--此句会报错

  declare@sNvarchar(1000)--注意此处改为nvarchar(1000)

  set@s=\'select\'+@fname+\'fromtableName\'

  Exec(@s)--成功

  execsp_executesql@s--此句正确

  3、输出参数

  declare@numint,

  @sqlsnvarchar(4000)

  set@sqls=\'selectcount(*)fromtableName\'

  exec(@sqls)

  --如何将exec执行结果放入变量中?

  declare@numint,

  @sqlsnvarchar(4000)

  set@sqls=\'select@a=count(*)fromtableName\'

  execsp_executesql@sqls,N\'@aintoutput\',@numoutput

  select@num

  此外,如果想要在SQL语句字符串中使用单引号\'\'可以使用\'\'\'\'

  sql语句大全

  SQL查询语句大全集锦

  一、简单查询

  简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的

  表或视图、以及搜索条件等。

  例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。

  代码:SELECT`nickname`,`email`FROM`testtable`WHERE`name`=\'张三\'

  (一)选择列表

  选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。

  1、选择所有列

  例如,下面语句显示testtable表中所有列的数据:

  代码:SELECT*FROMtesttable

  2、选择部分列并指定它们的显示次序

  查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。

  例如:

  代码:SELECTnickname,emailFROMtesttable

  3、更改列标题

  在选择列表中,可重新指定列标题。定义格式为:

  列标题=列名

  列名列标题

  如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列

  标题:

  代码:SELECT昵称=nickname,电子邮件=emailFROMtesttable

  4、删除重复行

  SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认

  为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。

  5、限制返回的行数

  使用TOPn[PERCENT]选项限制返回的数据行数,TOPn说明返回n行,而TOPnPERCENT时,说明n是

  表示一百分数,指定返回的行数等于总行数的百分之几。

  例如:

  代码:SELECTTOP2*FROM`testtable`

  代码:SELECTTOP20PERCENT*FROM`testtable`

  (二)FROM子句

  FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,

  它们之间用逗号分隔。

  在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列

  所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应

  使用下面语句格式加以限定:

  代码:SELECT`username`,citytable.cityid

  FROM`usertable`,`citytable`

  WHEREusertable.cityid=citytable.cityid在FROM子句中可用以下两种格式为表或视图指定别名:

  代码:表名as别名

  表名别名例如上面语句可用表的别名格式表示为:

  代码:SELECT`username`,b.cityid

  FROMusertablea,citytableb

  WHEREa.cityid=b.cityidSELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。

  例如:

  代码:SELECTa.au_fname+a.au_lname

  FROMauthorsa,titleauthorta

  (SELECT`title_id`,`title`

  FROM`titles`

  WHERE`ytd_sales`>10000

  )ASt

  WHEREa.au_id=ta.au_id

  ANDta.title_id=t.title_id此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。

  (三)使用WHERE子句设置查询条件

  WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据:

  代码:SELECT*FROMusertableWHEREage>20WHERE子句可包括各种条件运算符:

  比较运算符(大小比较):>、>=、=、、!>、!=10ANDage

  代码:SELECT*FROM`usertable`ORDERBY`age`DESC,`userid`ASC另外,可以根据表达式进行排序。

  二、联合查询

  UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联

  合查询。

  UNION的语法格式为:

  代码:select_statement

  UNION[ALL]selectstatement

  [UNION[ALL]selectstatement][…n]其中selectstatement为待联合的SELECT查询语句。

  ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。

  联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语

  句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。

  在使用UNION运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选

  择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类

  型,系统将低精度的数据类型转换为高精度的数据类型。

  在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:

  查询1UNION(查询2UNION查询3)

  三、连接查询

  通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。

  在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在

  一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带

  来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行

  查询。

  连接可以在SELECT语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于

  将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。

  SQL-92标准所定义的FROM子句的连接语法格式为:

  代码:FROMjoin_tablejoin_typejoin_table[ON(join_condition)]其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。

  join_type指出连接类型,可分为三种:内连接、外连接和交叉连接。

  内连接(INNERJOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。

  外连接分为左外连接(LEFTOUTERJOIN或LEFTJOIN)、右外连接(RIGHTOUTERJOIN或RIGHTJOIN)

  和全外连接(FULLOUTERJOIN或FULLJOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。

  交叉连接(CROSSJOIN)没有WHERE子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

  连接操作中的ON(join_condition)子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。

  无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:

  代码:SELECTp1.pub_id,p2.pub_id,p1.pr_info

  FROMpub_infoASp1INNERJOINpub_infoASp2

  ONDATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)(一)内连接

  内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。

  内连接分三种:

  1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

  2、不等连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、、!。

  3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

  例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:

  代码:SELECT*

  FROMauthorsASaINNERJOINpublishersASp

  ONa.city=p.city又如使用自然连接,在选择列表中删除authors和publishers表中重复列(city和state):

  代码:SELECTa.*,p.pub_id,p.pub_name,p.country

  FROMauthorsASaINNERJOINpublishersASp

  ONa.city=p.city

  (二)外连接内连接时,返回查询结果集合中的仅是符合查询条件(WHERE搜索条件或HAVING条件)和连接条件

  的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。

  如下面使用左外连接将论坛内容和作者信息连接起来:

  代码:SELECTa.*,b.*FROM`luntan`LEFTJOINusertableasb

  ONa.username=b.username下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:

  代码:SELECTa.*,b.*

  FROMcityasaFULLOUTERJOINuserasb

  ONa.username=b.username

  (三)交叉连接

  交叉连接不带WHERE子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数

  据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

  例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等

  于6*8=48行。

  代码:SELECT`type`,`pub_name`

  FROM`titles`CROSSJOIN`publishers`

  ORDERBY`type`

  SQL数据库语句大全

  1、说明:创建数据库

  CREATEDATABASEdatabase-name

  2、说明:删除数据库

  dropdatabasedbname

  3、说明:备份sqlserver

  ---创建备份数据的device

  USEmaster

  EXECsp_addumpdevice\'disk\',\'testBack\',\'c:\mssql7backup\\MyNwind_1.dat\'

  ---开始备份

  BACKUPDATABASEpubsTOtestBack

  4、说明:创建新表

  createtabletabname(col1type1[notnull][primarykey],col2type2[notnull],..)

  根据已有的表创建新表:

  A:createtabletab_newliketab_old(使用旧表创建新表)

  B:createtabletab_newasselectcol1,col2…fromtab_olddefinitiononly

  5、说明:删除新表

  droptabletabname

  6、说明:增加一个列

  Altertabletabnameaddcolumncoltype

  注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

  7、说明:添加主键:Altertabletabnameaddprimarykey(col)

  说明:删除主键:Altertabletabnamedropprimarykey(col)

  8、说明:创建索引:create[unique]indexidxnameontabname(col….)

  删除索引:dropindexidxname

  注:索引是不可更改的,想更改必须删除重新建。

  9、说明:创建视图:createviewviewnameasselectstatement

  删除视图:dropviewviewname

  10、说明:几个简单的基本的sql语句

  选择:select*fromtable1where范围

  插入:insertintotable1(field1,field2)values(value1,value2)

  删除:deletefromtable1where范围

  更新:updatetable1setfield1=value1where范围

  查找:select*fromtable1wherefield1like’%value1%’---like的语法很精妙,查资料!

  排序:select*fromtable1orderbyfield1,field2[desc]

  总数:selectcountastotalcountfromtable1

  求和:selectsum(field1)assumvaluefromtable1

  平均:selectavg(field1)asavgvaluefromtable1

  最大:selectmax(field1)asmaxvaluefromtable1

  最小:selectmin(field1)asminvaluefromtable1

  11、说明:几个高级查询运算词

  A:UNION运算符

  UNION运算符通过组合其他两个结果表(例如TABLE1和TABLE2)并消去表中任何重复行而派生出一个结果表。当ALL随UNION一起使用时(即UNIONALL),不消除重复行。两种情况下,派生表的每一行不是来自TABLE1就是来自TABLE2。

  B:EXCEPT运算符

  EXCEPT运算符通过包括所有在TABLE1中但不在TABLE2中的行并消除所有重复行而派生出一个结果表。当ALL随EXCEPT一起使用时(EXCEPTALL),不消除重复行。

  C:INTERSECT运算符

  INTERSECT运算符通过只包括TABLE1和TABLE2中都有的行并消除所有重复行而派生出一个结果表。当ALL随INTERSECT一起使用时(INTERSECTALL),不消除重复行。

  注:使用运算词的几个查询结果行必须是一致的。

  12、说明:使用外连接

  A、left(outer)join:

  左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。

  SQL:selecta.a,a.b,a.c,b.c,b.d,b.ffromaLEFTOUTJOINbONa.a=b.c

  B:right(outer)join:

  右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

  C:full/cross(outer)join:

  全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

  12、分组:Groupby:

  一张表,一旦分组完成后,查询后只能得到组相关的信息。

  组相关的信息:(统计信息)count,sum,max,min,avg分组的标准)

  在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据

  在selecte统计函数中的字段,不能和普通的字段放在一起;

  13、对数据库进行操作:

  分离数据库:sp_detach_db;附加数据库:sp_attach_db后接表明,附加需要完整的路径名

  14.如何修改数据库的名称:

  sp_renamedb\'old_name\',\'new_name\'

  sql面试必会6题经典

  目前在职场中很难找到非常合格的数据库开发人员。有人说:“sql开发是一门语言,它很容易学,但是很难掌握。”

  在面试应聘的sqlServer数据库开发人员时,我运用了一套标准的基准技术问题。下面这些问题是我觉得能够真正有助于淘汰不合格应聘者的问题。它们按照从易到难的顺序排列。当你问到关于主键和外键的问题时,后面的问题都十分有难度,因为答案可能会更难解释和说明,尤其是在面试的情形下。

  你能向我简要叙述一下sqlServer2000中使用的一些数据库对象吗?

  你希望听到的答案包括这样一些对象:表格、视图、用户定义的函数,以及存储过程;如果他们还能够提到像触发器这样的对象就更好了。如果应聘者不能回答这个基本的问题,那么这不是一个好兆头。

  null是什么意思?

  null(空)这个值是数据库世界里一个非常难缠的东西,所以有不少应聘者会在这个问题上跌跟头您也不要觉得意外。

  null这个值表示unknown(未知):它不表示“”(空字符串)。假设您的sqlServer数据库里有ANSI_nullS,当然在默认情况下会有,对null这个值的任何比较都会生产一个null值。您不能把任何值与一个unknown值进行比较,并在逻辑上希望获得一个答案。您必须使用ISnull操作符。

  什么是索引?sqlServer2000里有什么类型的索引?

  任何有经验的数据库开发人员都应该能够很轻易地回答这个问题。一些经验不太多的开发人员能够回答这个问题,但是有些地方会说不清楚。

  简单地说,索引是一个数据结构,用来快速访问数据库表格或者视图里的数据。在sqlServer里,它们有两种形式:聚集索引和非聚集索引。聚集索引在索引的叶级保存数据。这意味着不论聚集索引里有表格的哪个(或哪些)字段,这些字段都会按顺序被保存在表格。由于存在这种排序,所以每个表格只会有一个聚集索引。非聚集索引在索引的叶级有一个行标识符。这个行标识符是一个指向磁盘上数据的指针。它允许每个表格有多个非聚集索引。

  什么是主键?什么是外键?

  主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。

  什么是触发器?sqlServer2000有什么不同类型的触发器?

  让未来的数据库开发人员知道可用的触发器类型以及如何实现它们是非常有益的

  触发器是一种专用类型的存储过程,它被捆绑到sqlServer2000的表格或者视图上。在sqlServer2000里,有INSTEAD-OF和after两种触发器。INSTEAD-OF触发器是替代数据操控语言(DataManipulationLanguage,dml)语句对表格执行语句的存储过程。例如,如果我有一个用于TableA的INSTEAD-OF-UPDATE触发器,同时对这个表格执行一个更新语句,那么INSTEAD-OF-UPDATE触发器里的代码会执行,而不是我执行的更新语句则不会执行操作。

  after触发器要在dml语句在数据库里使用之后才执行。这些类型的触发器对于监视发生在数据库表格里的数据变化十分好用。

  您如何确一个带有名为Fld1字段的TableB表格里只具有Fld1字段里的那些值,而这些值同时在名为TableA的表格的Fld1字段里?

  这个与关系相关的问题有两个可能的答案。第一个答案(而且是您希望听到的答案)是使用外键限制。外键限制用来维护引用的完整性。它被用来确保表格里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的值。这个字段就是候选键(通常是另外一个表格的主键)。

  另外一种答案是触发器。触发器可以被用来保证以另外一种方式实现与限制相同的作用,但是它非常难设置与维护,而且性能一般都很糟糕。由于这个原因,微软建议开发人员使用外键限制而不是触发器来维护引用的完整性。

  对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?

  你正在寻找进行与数据操控有关的应聘人员。对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。

  你可以用什么来确保表格里的字段只接受特定范围里的值?

  这个问题可以用多种方式来回答,但是只有一个答案是“好”答案。您希望听到的回答是Check限制,它在数据库表格里被定义,用来限制输入该列的值。

  触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。因此,微软建议使用Check限制而不是其他的方式来限制域的完整性。

  <b?返回参数和output参数之间的区别是什么?>如果应聘者能够正确地回答这个问题,那么他的机会就非常大了,因为这表明他们具有使用存储过程的经验。

  返回参数总是由存储过程返回,它用来表示存储过程是成功还是失败。返回参数总是int数据类型。

  OUTPUT参数明确要求由开发人员来指定,它可以返回其他类型的数据,例如字符型和数值型的值。(可以用作输出参数的数据类型是有一些限制的。)您可以在一个存储过程里使用多个OUTPUT参数,而您只能够使用一个返回参数。

  什么是相关子查询?如何使用这些查询?

  经验更加丰富的开发人员将能够准确地描述这种类型的查询。

  相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会真正请求外部查询的值,从而形成一个类似于循环的状况。</b?返回参数和output参数之间的区别是什么?>

2020-08-10


上一篇:毕业季经典语录 致毕业的青春句子简短

下一篇:心善的语录 心善福报经典语录