文档库 最新最全的文档下载
当前位置:文档库 › 2017年SQL面试题收集

2017年SQL面试题收集

2017年SQL面试题收集
2017年SQL面试题收集

2017年SQL面试题收集

1、Insert Into 数据表名称(字段名称1,字段名称2,...) values(字段值1,字段值2,...)

insert into user(username,password,age) values('李老四','6666',45)

2、Update 数据表名称 Set 字段名称=字段值,字段名称=字段值,...[Where 条件]

3、Delete From 数据表

4、下列查询返回在LONDON(伦敦)或SEATTLE(西雅图)的所有雇员:

SELECT * FROM employees WHERE UPPER(city) IN ('LONDON','SEATTLE')

5、下面示例利用DATEDIFF函数,确定在 pubs 数据库中标题发布日期和当前日期间的天数。SELECT DATEDIFF(day, OrderDate, getdate()) AS no_of_days FROM table1

6、返回字符串"wonderful"在 titles 表的 notes 列中开始的位置。

SELECT CHARINDEX('wonderful', notes)

7、下例是检索 titles 表中百分之五十的书。如果 titles 表中包含了 18 行,则将检索前 9 行。SELECT TOP 50 PERCENT title FROM titles

8、字段名称 [Not] Between 起始值 and 终止值

列出BOOK表中30至50元的书

select * from book where price between 30 and 50

9、字段名称 [Not] In(列出值1,列出值2,...)

从BOOK表中列出价格为30,40,50,60的所有书

select * from book where price in(30,40,50,60)

10、字段名称 [Not] Like "通配符"

列出BOOK表中出版社含电的所有记录

select * from book where publishing like '*电*'

列出BOOK表中出版社第一个字是电的所有记录

select * from book where publishing like '电*'

---

select Sum/Count/Avg/Max/Min(字段名称) [As 新名称] From 数据表名称

sum求和:

求出总价格做为合计字段

select sum(price ) as 合计 from book

count统计数量:

统计BOOK表中有多少条记录做为数量字段

select count(id) as 数量 from book

AVG平均:

算出BOOK表中所有书的平均价格

select avg(price) as 平均价格 from book

MAX最大:

列出BOOK表中最贵的书

select max(price) as 最贵书 from book

MIN最小:

select min(price) as 最便宜书 from book

交叉联接:SELECT * FROM table1 CROSS JOIN table2

select x.[name], y.[name] from x left join y on x.[refid] = y.id

select y.[name], x.[name] from x right join y on x.[refid] = y.id

表联接查询

SELECT t1.ProductID, t2.VendorID, https://www.wendangku.net/doc/4d14721144.html,

FROM table1 t1, table2 t2

WHERE t1.VendorID = t2.VendorID

AND StandardPrice > $10

AND Name LIKE 'F%'

SELECT ProductID, talbe2.VendorID, Name

FROM table1 JOIN table2

ON (table1.VendorID = table2.VendorID)

WHERE StandardPrice > $10

AND Name LIKE 'F%'

COMPUTE by 子句

可选 BY 关键字。它基于每一列计算指定的行聚合。

行聚合函数名称。包括 SUM、AVG、MIN、MAX 或 COUNT。

要对其执行行聚合函数的列。

SELECT RateId, ConnectionFee, Rate

FROM UTC_Rate

ORDER BY RateId

COMPUTE SUM(ConnectionFee),SUM(Rate)--Compute用法(总计)

SELECT RateId, ConnectionFee, Rate

FROM UTC_Rate

ORDER BY RateId

COMPUTE SUM(ConnectionFee),SUM(Rate)BY RateId--Compute by用法(小计)DISTINCT

指定 AVG 只在每个值的唯一实例上执行,而不管该值出现了多少次。

SELECT AVG(DISTINCT Rate)—-计算不重复Rate的avg

FROM UTC_Rate

SELECT distinct Rate FROM UTC_Rate

表的复制Select into

SELECT*into newtable FROM oldtable

联合查询 UNION所有查询中的列数和列的顺序必须相同,数据类型必须兼容

SELECT Country, FirstName, LastName FROM Employees

UNION SELECT Country, NULL, NULL FROM Regions;

子查询:

--使用聚合函数

SELECT title FROM titles

WHERE advance >

(SELECT max(advance)

FROM publishers INNER JOIN titles ON

titles.pub_id = publishers.pub_id

WHERE pub_name ='New Moon Books')

--使用all

SELECT title FROM titles

WHERE advance >all

(SELECT advance

FROM publishers INNER JOIN titles ON

titles.pub_id = publishers.pub_id

WHERE pub_name ='New Moon Books')

--嵌套

SELECT field

FROM table1

WHERE id IN

(SELECT id

FROM table2

WHERE title_id IN

(SELECT title_id

FROM table3

WHERE title_id like'PC%'))

--EXISTS 和NOT EXISTS 查找交集与差集

SELECT DISTINCT field FROM table1

WHERE EXISTS

(SELECT* FROM table2WHERE table1.field = table2.field) --等效

SELECT DISTINCT table1.field

FROM table1 INNER JOIN table2

ON table1.field = publishers.field

--差集

SELECT DISTINCT field

FROM table1

WHERE NOT EXISTS

(SELECT* FROM table2WHERE table1.field = table2.field) --等效

SELECT DISTINCT field

FROM table1

WHERE field NOT IN

(SELECT field

FROM table2)

指定组或聚合的搜索条件。HAVING只能与 SELECT 语句一起使用。HAVING 通常在 GROUP BY 子句中使用。如果不使用 GROUP BY 子句,则 HAVING 的行为与 WHERE 子句一样。SELECT id,SUM(price)

FROM Sales

GROUP BY id

HAVING SUM(price)> 10.00--检索超过 $10.00 的每个 ID 的总计

ORDER BY id ;

更新表:

UPDATE titles

SET price = price * 2

WHERE pub_id IN

(SELECT pub_id

FROM publishers

WHERE pub_name ='New Moon Books')

1:找出那些工资高于他们所在部门的manager的工资的员工。

select w.ename,w.sal,w.mgr,m.empno,m.ename,m.sal

from emp w,emp m

where w.mgr=m.empno and w.sal>m.sal

2:哪些人是领导?

select distinct m.ename from emp w,emp m

where w.mgr=m.empno

select ename from emp where empno in(select mgr from emp)

select ename from emp o where exists (select 'a' from emp i where o.empno=i.mgr)

3:哪些人不是领导?

select m.ename from emp m,emp w

where m.empno=w.mgr(+)

and w.mgr is null

select ename from emp where empno not in (select mgr from emp where mgr is not null) select ename from emp o where not exists (select 'a' from emp i where o.empno=i.mgr) 哪个部门没有员工?哪个学生没有选课?哪个部门没有smith这个人?

select ename,emp.deptno,dept.deptno,dname from emp,dept

where emp.deptno(+)=dept.deptno

and ename(+)='SMITH'

and ename is null

4:找出公司里收入最高的前三名员工:

SQL> select rownum, last_name, salary

2 from (select last_name, salary

3 from s_emp

4 order by salary desc)

5 where rownum<=3;

ROWNUM LAST_NAME SALARY

---------- ------------------------- ----------

1 Velasquez 4750

2 Ropeburn 2945

3 Nguyen 2897.5

不用max找出工资最高的人?

5:找出表中的某一行或某几行的数据:

SQL> l

1 select last_name, salary

2 from (select rownum a, b.*

3 from s_emp b)

4* where a=3

SQL> /

LAST_NAME SALARY

------------------------- ----------

Nagayama 2660

6:找出第三行到第五行之间的数据:

SQL> l

1 select last_name, salary

2 from (select rownum a, b.*

3 from s_emp b where rownum<=5)

4* where a between 3 and 5

SQL> /

LAST_NAME SALARY

------------------------- ----------

Nagayama 2660

Quick-To-See 2755

Ropeburn 2945

7:找出那些工资高于他们所在部门的平均工资的员工。

(1):第一种方法:

SQL> select last_name, dept_id, salary

2 from s_emp a

3 where salary>(select avg(salary)

4 from s_emp

5 where dept_id=a.dept_id);

LAST_NAME DEPT_ID SALARY

------------------------- ---------- ---------- Velasquez 50 4750 Urguhart 41 2280 Menchu 42 2375

Biri 43 2090 Catchpole 44 2470

Havel 45 2483.3 Nguyen 34 2897.5 Maduro 41 2660 Nozaki 42 2280 Schwartz 45 2090

10 rows selected.

(2):第二种方法:

SQL> l

1 select https://www.wendangku.net/doc/4d14721144.html,st_name, a.salary, a.dept_id, b.avgsal

2 from s_emp a, (select dept_id, avg(salary) avgsal

3 from s_emp

4 group by dept_id) b

5 where a.dept_id=b.dept_id

6* and a.salary>b.avgsal

SQL> /

LAST_NAME SALARY DEPT_ID AVGSAL

------------------------- ---------- ---------- ----------

Velasquez 4750 50 3847.5

Urguhart 2280 41 2181.5

Menchu 2375 42 2055.16667

Biri 2090 43 1710

Catchpole 2470 44 1995

Havel 2483.3 45 2069.1

Nguyen 2897.5 34 2204

Maduro 2660 41 2181.5

Nozaki 2280 42 2055.16667

Schwartz 2090 45 2069.1

10 rows selected.

8:找出重复数据:

SQL> l

1 select rowid, e.* from a e

2* where e.rowid>(select min(x.rowid) from a x where x.bm=e.bm and x.mc=e.mc); ROWID BM MC

------------------ ---- --------------------

AAABdcAAGAAAAYyAAE 1111 1111

AAABdcAAGAAAAYyAAF 1112 1111

AAABdcAAGAAAAYyAAG 1113 1111

AAABdcAAGAAAAYyAAH 1114 1111

9:删除重复数据:

SQL> l

1 delete from a

2 where rowid in (select rowid from a e

3* where e.rowid>(select min(x.rowid) from a x where x.bm=e.bm and x.mc=e.mc)) SQL> /

10:行列转置

select sname,

max(decode(cname,'wuli',result,null)) wuli,

max(decode(cname,'shuxue',result,null)) shuxue

from stu,cou,rou

where stu.sno=rou.sno

and https://www.wendangku.net/doc/4d14721144.html,o=https://www.wendangku.net/doc/4d14721144.html,o

group by sname

SNAME WULI SHUXUE

---------- ---------- ----------

lisi 89 88

zhangsan 99 98

请在SQL Server中设计表来保存一个树状结构的组织图(假定结构图中只有名称这一项内容需要保存),如果我想查询某一职位下的所有职位,用一个存储过程来实现,你有什么思路?

答:三个字段Id(可以自增), Name ,ParendId ,其中ParendId是父结点的ID。

使用存储过程查询一个职位下的所有职位,存储过程需要一个输入参数,这个参数就是父结点的id,可以查询ParendId等于输入参赛id,查询所有这个职位下的职位的记录。

一个新闻系统,有两张表,news表,new_class表,表结构如下:

表参加原始文档

其中2张表的newsID字段是关联的,请写出您写出classID是101101的新闻标题的SQL语句:

答:select N.title from News N, News_class C where N.NewsId=C.NewsId and C. NewsId=101101

写出一条Sql语句:取出表A中第31到第40记录(SQLServer, 以自动增长的ID作为主键, 注意:ID 可能不是连续的。)

Select top 10 * from a where id not in (select top 30 id from a);go

SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号,LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号。

select top 1 id from table1 orderby lastupdate desc

select id from table1 where lastupdate = (select max(lastipdate) from table1)

写出一条Sql语句:取出表A中第31到第40记录(SQLServer, 以自动增长的ID作为主键, 注意:ID 可能不是连续的。)

Select top 10 * from a where id not in (select top 30 id from a);go

有一人事表,计算两个同时入职的员工的生日的差,用一句 SQL语句将EGTB1中的结果变成EGTB2的结果? Select deffdate(ss,'2005-03-20','2005-03-28') from table there c1.datetime = c2.datetime

SQL中游标的定义?

类似于指针,它用于指向的某一行即为选定或执行到的当前行

基本的步骤:声明游标、打开游标、提取数据、关闭游标。

如何在定义游标的时候使用动态sql语句?

declare @qa nvarchar(200)

declare @i int

declare @sql nvarchar(255)

set @i = 1

while @i <= 5

begin

set @sql = 'declare cur cursor for

select q' + convert(nvarchar(2), @i) + ' from ImportSurveyInfo'

set @i = @i + 1

exec(@sql)

open cur

fetch cur into @qa

select @qa

close cur

deallocate cur

end

产品表销售计划表

ProductID 产品名单价 ProductID 客户名订货数量销售单价

1 name1 110

2 m 2 250

2 name2 220 1 n

3 110

3 name3 330 3 n 1 300

4 name4 440 4 m 2 400

a.是否能删除产品表中的name2?请说明理由与过程。

答案:不能,两表都用ProductId做字段,要删除name2也要删除销售计划表ProductId为2的一行………………………………………………………………………………………………

b.将销售计划表中m客户的产品名为name2的销售单价更换为产品表中相应的单价

update 销售计划表 set 销售单价 = select 单价 from 产品表 inner join 销售计划表

on 产品表.ProductID=销售计划表.ProductID where 客户名=m

…………………………………………………………………………………

c.求销售计划表中各客户各自的销售总金额的sql语句

select total(销售单价*订货数量) as 销售总金额 from 销售计划表 group by 客户名

………………………………………………………………………………

d.求客户中销售总量最大的销售总金额的客户的sql语句

select max(销售单价*订货数量) as 销售总金额 from 销售计划表 group by 客户名

…………………………………………………………………………………

e.什么是事务(transaction)?它有什么好处。

将更改数据库的操作作为一个单元来提交或取消.

原子性(全部执行),

一致性(所有的数据保持一致状态),

隔离性(由并发事物所做的修改必须与任何其他并发事务所做的修改隔离),

持久性(完成事务,对系统的影响是永久性的)………………………………………………………………………………………

f.update table2...数据库为默认设置能不能开始事务?为什么

答案:

数据库开发技巧:

内容:

1、开发人员如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“dat abse.dbo.table_name”,因为sp_depends不能显示出该SP所使用的跨库table或view,不方便校验。

2、开发人员在提交SP前,必须已经使用set showplan on分析过查询计划,做过自身的查询优化检查。

3、高程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点:

a)SQL的使用规范:

i. 尽量避免大事务操作,慎用holdlock子句,提高系统并发能力。

ii. 尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接。

iii. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。

iv. 注意where字句写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序,尽可能的让字段顺序与索引顺序相一致,范围从大到小。

v. 不要在where子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法

正确使用索引。

vi. 尽量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率。

vii. 尽量使用“>=”,不要使用“>”。

viii. 注意一些or子句和union子句之间的替换

ix. 注意表之间连接的数据类型,避免不同类型数据之间的连接。

x. 注意存储过程中参数和数据类型的关系。

xi. 注意insert、update操作的数据量,防止与其他应用冲突。如果数据量超过200个数据页面(400k),那么系统将会进行锁升级,页级锁会升级成表级锁。

b)索引的使用规范:

i. 索引的创建要与应用结合考虑,建议大的OLTP表不要超过6个索引。

ii. 尽可能的使用索引字段作为查询条件,尤其是聚簇索引,必要时可以通过index index_name 来强制指定索引

iii. 避免对大表查询时进行table scan,必要时考虑新建索引。

iv. 在使用索引字段作为条件时,如果该索引是联合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用。

v. 要注意索引的维护,周期性重建索引,重新编译存储过程。

c)tempdb的使用规范:

i. 尽量避免使用distinct、order by、group by、having、join、cumpute,因为这些语句会加重tempdb的负担。

ii. 避免频繁创建和删除临时表,减少系统表资源的消耗。

iii. 在新建临时表时,如果一次性插入数据量很大,那么可以使用select into代替create table,避免log,提高速度;如果数据量不大,为了缓和系统表的资源,建议先create table,然后insert。

iv. 如果临时表的数据量较大,需要建立索引,那么应该将创建临时表和建立索引的过程放在单独一个子存储过程中,这样才能保证系统能够很好的使用到该临时表的索引。

v. 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncate table,

然后drop table,这样可以避免系统表的较长时间锁定。

vi. 慎用大的临时表与其他大表的连接查询和修改,减低系统表负担,因为这种操作会在一条语句中多次使用tempdb的系统表。

d)合理的算法使用:

根据上面已提到的SQL优化技术和ASE Tuning手册中的SQL优化内容,结合实际应用,采用多种算法进行比较,以获得消耗资源最少、效率最高的方法。具体可用AS E调优命令:set statistics io on, set statistics time on , set showplan on 等。

微软提供了以下四种数据库连接方式:

System.Data.OleDb.OleDbConnection

System.Data.SqlClient.SqlConnection

System.Data.Odbc.OdbcConnection

System.Data.OracleClient.OracleConnection

下面我们以范例的方式,来依次说明:

System.Data.SqlClient.SqlConnection

常用的一些连接字符串(C#代码):

SqlConnection conn

= new SqlConnection( "Server=(local);Integrated Security=SSPI;database=Pubs");

SqlConnection conn

= new SqlConnection("server=(local)\\NetSDK;database=pubs;Integrated Security=SSPI");

SqlConnection conn = new SqlConnection(

"Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;");

SqlConnection conn = new SqlConnection(

" data source=(local);initial catalog=xr;integrated security=SSPI;

persist security info=False;workstation id=XURUI;packet size=4096; ");

SqlConnection myConn = new

System.Data.SqlClient.SqlConnection("Persist Security Info=False;Integrated

Security=SSPI;database=northwind;server=mySQLServer");

SqlConnection conn = new SqlConnection(

" uid=sa;pwd=passwords;initial catalog=pubs;data source=127.0.0.1;Connect Timeout=900");

System.Data.OleDb.OleDbConnection

常用的一些连接字符串(C#代码):

OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\MyWeb\81\05\GrocerToGo.mdb");

OleDbConnection conn = new OleDbConnection(

@"Provider=Microsoft.Jet.OLEDB.4.0;Password=;

User ID=Admin;Data Source=grocertogo.mdb;");

OleDbConnection conn = new OleDbConnection(

"Provider=MSDAORA; Data Source=ORACLE8i7;Persist Security Info=False;Integrated Security=yes");

OleDbConnection conn = new OleDbConnection(

"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\bin\LocalAccess40.mdb");

OleDbConnection conn = new OleDbConnection(

"Provider=SQLOLEDB;Data Source=MySQLServer;Integrated Security=SSPI");

System.Data.OracleClient.OracleConnection

常用的一些连接字符串(C#代码):

OracleConnection myConn = new System.Data.OracleClient.OracleConnection(

"Data Source=Oracle8i;Integrated Security=yes");

System.Data.Odbc.OdbcConnection

常用的一些连接字符串(C#代码):

OdbcConnection conn = new OdbcConnection(

"Driver={SQL Server};Server=MyServer;Trusted_Connection=yes;Database=Nort hwind;");OdbcConnection conn = new OdbcConnection(

"Driver={Microsoft ODBC for Oracle};Server=ORACLE8i7;

Persist Security Info=False;Trusted_Connection=yes");

OdbcConnection conn = new OdbcConnection(

"Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\bin\nwind.mdb");OdbcConnection conn = new OdbcConnection(

"Driver={Microsoft Excel Driver (*.xls)};DBQ=c:\bin\book1.xls");OdbcConnection conn = new OdbcConnection(

"Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=c:\bin");

OdbcConnection conn = new OdbcConnection("DSN=dsnname");

其他厂商提供的数据库连接:

DB2Connection myConn = new IBM.Data.DB2.DB2Connection(

"DATABASE = SAMPLE;UID=; PWD=;");

DB2Connection myConn = new IBM.Data.DB2.DB2Connection("DATABASE = SAMPLE");BdpConnection myConn = new Borland.Data.Provider.BdpConnection("assembly=Borl

and.Data.Mssql,Version=1.1.0.0,Culture=neutral,PublicKeyTo ken=91d62ebb5b0d1b1b;

ve

ndorclient=sqloledb.dll;osauthentication=False;database=&l t;database>;usernam

e=;hostname=;password=;provider=MSSQL");

BdpConnection myConn = new Borland.Data.Provider.BdpConnection("assembly=Borl

and.Data.Db2,Version=1.1.0.0,Culture=neutral,PublicKeyToke n=91d62ebb5b0d1b1b;ve

ndorclient=db2cli.dll;database=;username=& lt;user>;

password=;provider=DB2");

Connection Pooling

在SQL Server、OLE DB和。NET框架结构中的Data Provider中,都提供了隐式的连接池连接支持。你可以在ConnectionString中指定不同的参数值控制连接池的行为。比如下面的例子使OLE DB的连接池无效并自动地进行事务处理:

Provider=SQLOLEDB;OLE DB Services=-4;Data Source=localhost;Integrated Security=SSPI;

在SQL https://www.wendangku.net/doc/4d14721144.html, Data Provider中提供了以下参数设置控制连接池的行为:Connection Lifttime、Connection Reset、Enlist、Max Pool Size、Min Pool Size和Pooling.

https://www.wendangku.net/doc/4d14721144.html,连接池FAQ :::::.

摘要

连接池允许应用程序从连接池中获得一个连接并使用这个连接,而不需要为每一个连接请求重新建立一个连接。一旦一个新的连接被创建并且放置在连接池中,应用程序就可以重复使用这个连接而不必实施整个数据库连接创建过程。

当应用程序请求一个连接时,连接池为该应用程序分配一个连接而不是重新建立一个连接;当应用程序使用完连接后,该连接被归还给连接池而不是直接释放。

如何实现连接池

确保你每一次的连接使用相同的连接字符串(和连接池相同);只有连接字符串相同时连接池才会工作。如果连接字符串不相同,应用程序就不会使用连接池而是创建一个新的连接。

优点

使用连接池的最主要的优点是性能。创建一个新的数据库连接所耗费的时间主要取决于网络的速度以及应用程序和数据库服务器的(网络)距离,而且这个过程通常是一个很耗时的过程。而采用数据库连接池后,数据库连接请求可以直接通过连接池满足而不需要为该请求重新连接、认证到数据库服务器,这样就节省了时间。

缺点

数据库连接池中可能存在着多个没有被使用的连接一直连接着数据库(这意味着资源的浪费)。

技巧和提示

1.当你需要数据库连接时才去创建连接池,而不是提前建立。一旦你使用完连接立即关闭它,不要等到垃圾收集器来处理它。

2.在关闭数据库连接前确保关闭了所有用户定义的事务。

3.不要关闭数据库中所有的连接,至少保证连接池中有一个连接可用。如果内存和其他资源是你必须首先考虑的问题,可以关闭所有的连接,然后在下一个请求到来时创建连接池。

连接池FAQ

1.何时创建连接池?

当第一个连接请求到来时创建连接池;连接池的建立由数据库连接的连接字符创来决定。每一个连接池都与一个不同的连接字符串相关。当一个新的连接请求到来时如果连接字符串和连接池使用的字符串相同,就从连接池取出一个连接;如果不相同,就新建一个连接池。

2.何时关闭连接池?

当连接池中的所有连接都已经关闭时关闭连接池。

3.当连接池中的连接都已经用完,而有新的连接请求到来时会发生什么?

当连接池已经达到它的最大连接数目时,有新的连接请求到来时,新的连接请求将放置到连接队列中。当有连接释放给连接池时,连接池将新释放的连接分配给在队列中排队的连接请求。你可以调用close和dispose将连接归还给连接池。

4.我应该如何允许连接池?

对于.NET应用程序而言,默认为允许连接池。(这意味着你可以不必为这件事情做任何的事情)当然,如果你可以在SQLConn ection对象的连接字符串中加进Pooling=true;确保你的应用程序允许连接池的使用。

5.我应该如何禁止连接池?

https://www.wendangku.net/doc/4d14721144.html,默认为允许数据库连接池,如果你希望禁止连接池,可以使用如下的方式:

1) 使用SQLConnection对象时,往连接字符串加入如下内容:Pooling=False;

2) 使用OLEDBConnection对象时,往连接字符串加入如下内容:OLE DB Services=-4;

四大数据库的比较

开放性:

SQL Server

只能在windows上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。而且windows平台的可靠性,安全性和伸缩性是非常有限的。它不象unix那样久经考验,尤其是在处理大数据

Oracle

能在所有主流平台上运行(包括 windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。

Sybase ASE

能在所有主流平台上运行(包括 windows)。但由于早期Sybase与OS集成度不高,因此VERSION 11.9.2以下版本需要较多OS和 DB级补丁。在多平台的混合环境中,会有一定问题。

DB2

能在所有主流平台上运行(包括windows)。最适于海量数据。DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5%。

可伸缩性,并行性

SQL server

并行实施和共存模型并不成熟。很难处理日益增多的用户数和数据卷。伸缩性有限。

Oracle

并行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。如果windowsNT不能满足需要,用户可以把数据库移到UNIX中。 Oracle的并行服务器对各种UNIX平台的集群机制都有着相当高的集成度。

Sybase ASE

虽然有DB SWITCH来支持其并行服务器,但由于DB SWITCH在技术层面还未成熟,且只支持版本12.5以上的ASE SERVER,因为DB SWITCH技术需要一台服务器充当SWITCH,从而在硬件

DB2

具有很好的并行性。DB2把数据库管理扩充到了并行的、多节点的环境。数据库分区是数据库的一部分,包含自己的数据、索引、配置文件、和事务日志。数据库分区有时被称为节点

安全性

SQL server

没有获得任何安全证书。

Oracle Server

获得最高认证级别的ISO标准认证。

Sybase ASE

获得最高认证级别的ISO标准认证。

DB2

获得最高认证级别的ISO标准认证。

性能

SQL Server

多用户时性能不佳

Oracle

性能最高,保持开放平台下的TPC-D和TPC-C的世界记录。

Sybase ASE

性能接近于 SQL Server。但在UNIX平台下的并发性要优与 SQL Server。

DB2

性能较高适用于数据仓库和在线事物处理。

客户端支持及应用模式

SQL Server

C/S结构,只支持windows客户,可以用ADO,DAO,OLEDB,ODBC连接.

Oracle

多层次网络计算,支持多种工业标准,可以用ODBC,JDBC,OCI等网络客户连接。

Sybase ASE

C/S结构,可以用ODBC,Jconnect,Ct-library等网络客户连接。

DB2

跨平台,多层结构,支持ODBC,JDBC等客户

操作简便

SQL Server

操作简单,但只有图形界面。

Oracle

较复杂,同时提供GUI和命令行,在windowsNT和unix下操作相同

Sybase ASE

较复杂,同时提供GUI和命令行。但GUI较差,常常无法及时状态,建议使用命令行。

DB2

操作简单,同时提供GUI和命令行,在windowsNT和unix下操作相同

使用风险

SQL server

完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼

Oracle

长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险。

Sybase ASE

向下兼容, 但是ct-library 程序不益移植。

DB2

在巨型企业得到广泛的应用,向下兼容性好。风险小。

sql数据库基础面试题复习试题考试题_全

不定项选择题(针对以下题目,请选择最符合题目要求的答案,每道题有一项或二项正确答案。针对每一道题目,所有答案都选对,则该题得分,所选答案错误或不能选出所有答案,则该题不得分。题量为50道,每题2分,总分为100分。) 第一章 1、是SQLServer数据库的主数据文件的扩展名。(选择一项) A、.sql B、.mdb C、.ldf D、.mdf 2、在SQL Server 2005中,有系统数据库和用户数据库,下列不属于系统数据库的是()。 (选择一项) A、master B、pubs C、model D、msdb 3、当安装完SQL Server2005数据库时,系统默认当前的超级管理员是( ) (选择一项) A、sa B、master C、administrator D、super 4、在使用SQL Server2005数据库时,有时需要将本机的数据库移动到其他机器上,恢复成对应的数据库使用。移动数据库分两步进行,应包括()和附加数据库(选择一项)A、分离数据库 B、删除数据库 C、新建数据库 D、合并数据库 5、在SQL Server2005中,附加数据库操作是指()(选择一项) A、把SQL Server 数据库文件保存为其他数据文件 B、根据数据库物理文件中的信息,把数据库在SQL Server 2005中恢复 C、把所有该数据库表的数据清空 D、把数据库删除掉 6、某单位由不同的部门组成,不同的部门每天都会生产一些报告、报表等数据,以为都采用纸张的形式来进行数据的保存和分类,随着业务的发展,这些数据越来越多,管理这些报告越来越费力,此时应考虑()(选择一项) A、由多个人来完成这些工作 B、在不同的部门中,由专门的人员去管理这些数据 C、采用数据库系统来管理这些数据 D、把这些数据统一成一样的格式 7、在SQL Server 2005中,对于数据库的定义正确的是()(选择一项) A、数据库是用来描述事物的符号记录 B、数据库是位于用户与操作系统之间的一层数据管理软件

SQL经典面试题及答案

SQL经典面试题及答案 1.一道SQL语句面试题,关于group by 表内容: 2005-05-09 胜 2005-05-09 胜 2005-05-09 负 2005-05-09 负 2005-05-10 胜 2005-05-10 负 2005-05-10 负 如果要生成下列结果, 该如何写sql语句? 胜负 2005-05-09 2 2 2005-05-10 1 2 ------------------------------------------ create table #tmp(rq varchar(10),shengfu nchar(1)) insert into #tmp values('2005-05-09','胜') insert into #tmp values('2005-05-09','胜') insert into #tmp values('2005-05-09','负')

insert into #tmp values('2005-05-09','负') insert into #tmp values('2005-05-10','胜') insert into #tmp values('2005-05-10','负') insert into #tmp values('2005-05-10','负') 1)select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜',sum (case when shengfu='负' then 1 else 0 end)'负' from #tmp group by rq 2) select N.rq,N.勝,M.負 from ( select rq,勝=count(*) from #tmp where shengfu='胜'group by rq)N inner join (select rq,負=count(*) from #tmp where shengfu='负'group by rq)M on N.rq=M.rq 3)select a.col001,a.a1 胜,b.b1 负 from (select col001,count(col001) a1 from temp1 where col002='胜'

Sql常见面试题 受用了

Sql常见面试题受用了 1. 用一条SQL 语句查询出每门课都大于80 分的学生姓名 name kecheng fenshu 张三语文81 张三数学75 李四语文76 李四数学90 王五语文81 王五数学100 王五英语90 A: select distinct name from table where name not in (select distinct name from table where fenshu<=80) select name from table group by name having min(fenshu)>80 2. 学生表如下: 自动编号学号姓名课程编号课程名称分数 1 2005001 张三0001 数学69 2 2005002 李四0001 数学89 3 2005001 张三0001 数学69 删除除了自动编号不同, 其他都相同的学生冗余信息 A: delete tablename where 自动编号not in(select min( 自动编号) from tablename group by 学号, 姓名, 课程编号, 课程名称, 分数) 3. 一个叫team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合. 你先按你自己的想法做一下,看结果有我的这个简单吗? 答:select https://www.wendangku.net/doc/4d14721144.html,, https://www.wendangku.net/doc/4d14721144.html, from team a, team b where https://www.wendangku.net/doc/4d14721144.html, < https://www.wendangku.net/doc/4d14721144.html, 4. 请用SQL 语句实现:从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。请注意:TestDB 中有很多科目,都有1 -12 月份的发生额。AccID :科目代码,Occmonth :发生额月份,DebitOccur :发生额。 数据库名:JcyAudit ,数据集:Select * from TestDB 答:select a.* from TestDB a ,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) b where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur ******************************************************************************* ***** 5. 面试题:怎么把这样一个表儿 year month amount 1991 1 1.1

Oracle_PL_SQL经典练习题

Oracle 作业题 一.创建一个简单的PL/SQL程序块 使用不同的程序块组件工作 使用编程结构编写PL/SQL程序块 处理PL/SQL程序块中的错误 1.编写一个程序块,从emp表中显示名为“SMITH”的雇员的薪水和职位。 declare v_emp emp%rowtype; begin select * into v_emp from emp where ename='SMITH'; dbms_output.put_line('员工的工作是:'||v_emp.job||' ;他的薪水是: '||v_emp.sal); end; 2.编写一个程序块,接受用户输入一个部门号,从dept表中显示该部门的名称与所在位置。方法一:(传统方法) declare v_loc deptcp.dname%type; v_dname deptcp.dname%type; v_deptno deptcp.deptno%type; begin v_deptno :=&部门编号; select loc,dname into v_loc,v_dname from deptcp where deptno=v_deptno; dbms_output.put_line('员工所在地是:'||v_loc||';部门名称是:'||v_dname); exception when no_data_found then dbms_output.put_line('您输入的部门编号不存在,请从新输入,谢谢'); end; 方法二:(使用%rowtype) declare v_dept dept%rowtype; begin select * into v_dept from dept where deptno=&部门号; dbms_output.put_line(v_dept.dname||'--'||v_dept.loc); end; 3.编写一个程序块,利用%type属性,接受一个雇员号,从emp表中显示该雇员的整体薪水(即,薪水加佣金)。(*期末考试试题*) declare v_sal emp.sal%type; begin select sal+comm into v_sal from emp where empno=&雇员号;

SQL经典面试题及答案

1. 用一条SQL 语句查询出每门课都大于80 分的学生姓名 name kechengfenshu 张三语文81 张三数学75 李四语文76 李四数学90 王五语文81 王五数学100 王五英语90 A: select distinct name from table where name not in (select distinct name from table where fenshu<=80) select name from table group by name having min(fenshu)>80 select name from table group by name having count(kecheng)>=3 and min(fenshu)>=80 2. 学生表如下: 自动编号学号姓名课程编号课程名称分数 1 2005001 张三0001 数学69 2 2005002 李四0001 数学89 3 2005001 张三0001 数学69 删除除了自动编号不同, 其他都相同的学生冗余信息 A: delete tablename where 自动编号not in(select min( 自动编号) from tablename group by 学号, 姓名, 课程编号, 课程名称, 分数) 3. 面试题:怎么把这样一个表儿 year month amount 1991 1 1.1 1991 2 1.2 1991 3 1.3 1991 4 1.4 1992 1 2.1 1992 2 2.2 1992 3 2.3 1992 4 2.4 查成这样一个结果 year m1 m2 m3 m4 1991 1.1 1.2 1.3 1.4 1992 2.1 2.2 2.3 2.4

SQL数据库经典面试题(修改笔试题)(有答案)

28、?数据库:抽出部门,平均工资,要求按部门得字符串顺序排序,不能含有"human resource"部门,employee结构如下: employee_id,employee_name,depart_id,depart_name,wage 答:?select depart_name, avg(wage) fromemployee where depart_name〈〉'humanresource'?group by depart_nameorder by depart_name ---—--——----—-——----—--——-—---———----—————-—- 29、 —-—--—---—-—--————-——--——--——? 给定如下SQL数据库:Test(num INT(4))请用一条SQL语句返回num得最小值,但不许使用统计功能,如MIN,MAX等 答: select top1 num from Test orderbynum ----—-----——-—----———----—---—----—-—-—-———-—- 33、一个数据库中有两个表:——----—-—----—--—--——--—----? 一张表为Customer,含字段ID,Name; 一张表为Order,含字段ID,CustomerID(连向Customer中ID得外键),Re venue;?写出求每个Customer得Revenue总与得SQL语句。 建表create table customer?(ID int primary key,Namechar (10)) go create table [order]?(ID int primary key,CustomerID int foreign key references customer(id),Revenue float) go --查询?select Customer、ID, sum(isnull([Order]、Revenue,0))?from customer full join [order]on([order]、custome rid=customer、id) groupby customer、id selectcustomer、id,sum(order、revener) fromorder,customer where customer、id=customerid group by customer、id select customer、id,sum(order、revener)from customer fulljoin order on(order、customerid=customer、id)group bycustomer、id 5数据库(10) a tabel called “performance”contain :name andscore,please用SQL语言表述

常见SQL笔试题

精心整理 SQL笔试题 1.统计查询SQL练习 数据库中表结构如下,字段分别任rg(日期),shengfu(胜负),考察groupby语句的使用:2005-05-09胜 2005-05-09胜 2005-05-09负 2005-05-09负 2005-05-10胜 2005-05-10负 2005-05-10负 如果要生成下列结果,该如何写sql语句? 胜负 2005-05-0922 2005-05-1012 答案: 1)selectrq,sum(casewhenshengfu='胜'then1else0end)'胜',sum(casewhenshengfu='负' then1else0end)'负'from#tmpgroupbyrq 2)selectN.rq,N.胜,M.负from( selectrq,胜=count(*)from#tmpwhereshengfu='胜'groupbyrq)Ninnerjoin (selectrq,负=count(*)from#tmpwhereshengfu='负'groupbyrq)MonN.rq=M.rq 3)selecta.col001,a.a1胜,b.b1负from (selectcol001,count(col001)a1fromtemp1wherecol002='胜'groupbycol001)a,

(selectcol001,count(col001)b1fromtemp1wherecol002='负'groupbycol001)b wherea.col001=b.col001 2.条件判断SQL练习 表中有ABC三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列 答案: select(casewhena>bthenaelsebend), (casewhenb>cthenbeslecend) fromtable_name 3.日期统计SQL练习 请取出tb_send表中日期(SendTime字段)为当天的所有记录?(SendTime字段为datetime型,包含日期与时间) 答案: select*fromtbwheredatediff(dd,SendTime,getdate())=0 4.统计查询SQL练习 有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70 分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路): 大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。 显示格式: 语文数学英语

SQL_面试题含建表语句

Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 建表语句 Create table Student ( S# number(4), Sname varchar2(9) not null, Ssex varchar2(3), Sage date, constraint Student_S#_Pk primary key(S#) ); insert into Student values(1001,'李志国','男',to_date('26-9-1985','dd-mm-yyyy')); insert into Student values(1002,'李甜甜','女',to_date('6-2-1987','dd-mm-yyyy')); insert into Student values(1003,'张小燕','女',to_date('18-11-1984','dd-mm-yyyy')); insert into Student values(1004,'王菲','男',to_date('3-6-1985','dd-mm-yyyy')); insert into Student values(1005,'杜宇','女',to_date('25-4-1986','dd-mm-yyyy')); insert into Student values(1006,'彭大生','男',to_date('28-12-1988','dd-mm-yyyy')); insert into Student values(1007,'王亮','男',to_date('1-8-1983','dd-mm-yyyy')); insert into Student values(1008,'赵婷婷','女',to_date('2-2-1984','dd-mm-yyyy')); Create table Teacher ( T# number(4), Tname varchar2(9) not null, constraint Teacher_T#_Pk primary key(T#) ); insert into Teacher values(2001,'李华'); insert into Teacher values(2002,'王力宏'); insert into Teacher values(2003,'叶平'); insert into Teacher values(2004,'王倩倩'); insert into Teacher values(2005,'李莉莉');

sql经典笔试题目(整理)

一单词解释(2分/个) 34 Data 数据 Database 数据库 RDBMS 关系数据库管理系统 GRANT 授权 REVOKE取消权限 DENY 拒绝权限 DECLARE 定义变量 PROCEDURE存储过程 Transaction事务 TRIGGER触发器继续 continue 唯一 unqiue 主键 primary key 标识列 identity 外键 foreign kdy 检查 check 约束 constraint 二编写SQL语句(5分/题)50 1) 创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话Create table stu (学号 int , 姓名 varchar(8), 年龄 int, 性别 varchar(4), 家庭地址 varchar(50), 联系电话 int ); 2) 修改学生表的结构,添加一列信息, 学历 Alter table stu add 学历 varchar(6); 3) 修改学生表的结构,删除一列信息,家庭住址 Alter table stu drop column 家庭地址 4) 向学生表添加如下信息: 学号姓名年龄性别联系电话学历 1 A 22 男 123456 小学 2 B 21 男 119 中学 3 C 23 男 110 高中 4 D 18 女 114 大学 Insert into stu values('1', 'A', '22', '男' , ' 123456', '小学') Insert into stu values('2', 'B', '21', '男', '119' , '中学') Insert into stu values('3', 'C', '23', '男', '110', '高中') Insert into stu values('4' , 'D', '18', '女', '114', '大学') 5) 修改学生表的数据,将电话号码以11开头的学员的学历改为“大专” Update stu set 学历=’大专’ where 联系电话 like ‘11%’ 6) 删除学生表的数据,姓名以C开头,性别为‘男’的记录删除 Delect from stu where 性别=’男’ and 姓名 like ‘c%’ 7) 查询学生表的数据,将所有年龄小于22岁的,学历为“大专”的,学生的姓名和学号示出来 Select 姓名,学号 from stu where 年龄<22 and 学历=’大专’ 8) 查询学生表的数据,查询所有信息,列出前25%的记录 Select top 25 percent * from stu 9) 查询出所有学生的姓名,性别,年龄降序排列

(完整版)常见SQL笔试题

SQL笔试题 1.统计查询SQL练习 数据库中表结构如下,字段分别任rg(日期),shengfu(胜负),考察group by 语句的使用: 2005-05-09 胜 2005-05-09 胜 2005-05-09 负 2005-05-09 负 2005-05-10 胜 2005-05-10 负 2005-05-10 负 如果要生成下列结果, 该如何写sql 语句? 胜负 2005-05-09 2 2 2005-05-10 1 2 答案: 1)select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜',sum(case when shengfu='负' then 1 else 0 end)'负' from #tmp group by rq 2) select N.rq,N.胜,M.负from ( select rq,胜=count(*) from #tmp where shengfu='胜'group by rq)N inner join

(select rq,负=count(*) from #tmp where shengfu='负'group by rq)M on N.rq=M.rq 3)select a.col001,a.a1 胜,b.b1 负from (select col001,count(col001) a1 from temp1 where col002='胜' group by col001) a, (select col001,count(col001) b1 from temp1 where col002='负' group by col001) b where a.col001=b.col001 2.条件判断SQL练习 表中有A B C 三列,用SQL 语句实现:当A 列大于B 列时选择A 列否则选择B 列, 当B 列大于C 列时选择B 列否则选择C 列 答案: select (case when a>b then a else b end ), (case when b>c then b esle c end) from table_name 3.日期统计SQL练习 请取出tb_send 表中日期(SendTime 字段) 为当天的所有记录?(SendTime 字段为 datetime 型,包含日期与时间)

面试真题及答案SQL面试题目汇总

面试真题 面试范本SQL面试题目汇总 1.触发器的作用? 答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 2.什么是存储过程?用什么来调用? 答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。 3.索引的作用?和它的优点缺点是什么? 答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。 4.什么是内存泄漏? 答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。 5.维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么? 答:我是这样做的,尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

sql数据库面试题及答案

sql数据库面试题及答案 【篇一:sql数据库经典面试题(笔试题)】 =txt>1.一道sql语句面试题,关于group by 表内容: 2005-05-09 胜 2005-05-09 胜 2005-05-09 负 2005-05-09 负 2005-05-10 胜 2005-05-10 负 2005-05-10 负 如果要生成下列结果, 该如何写sql语句? 胜负 2005-05-09 2 2 2005-05-10 1 2 ------------------------------------------ create table #tmp(rq varchar(10),shengfu nchar(1)) insert into #tmp values(2005-05-09,胜) insert into #tmp values(2005-05-09,胜) insert into #tmp values(2005-05-09,负) insert into #tmp values(2005-05-09,负) insert into #tmp values(2005-05-10,胜) insert into #tmp values(2005-05-10,负) insert into #tmp values(2005-05-10,负) 1)select rq, sum(case when shengfu=胜 then 1 else 0 end)胜,sum(case when shengfu=负 then 1 else 0 end)负 from #tmp group by rq 2) select n.rq,n.勝,m.負 from ( select rq,勝=count(*) from #tmp where shengfu=胜group by rq)n inner join (select rq,負=count(*) from #tmp where shengfu=负group by rq)m on n.rq=m.rq 3)select a.col001,a.a1 胜,b.b1 负 from (select col001,count(col001) a1 from temp1 where col002=胜group by col001) a,

java、sql、oracle面试题汇总

1.(口述题)请简述迅雷、 BT 等 p2p 下载软件的实现原理。如何资源分布。解释:A 想来 B 家做客 ,但是遭到了 B 的管家 NAT B 的拒绝 ,理由是 :我从来没有听我家 B 提过你的名字,这时 A 找到了 A,B 都认识的朋友 server,要求 server给 B 报一个信 ,让 B 去跟管家说 A 是我的朋友 ,于是 ,B 跟管家 NAT B 说 ,A 是我认识的朋友 ,这样 A 的访问请求就不会再被管家 NAT B 所拒绝了 .简而言之 ,UDP 打洞 就是一个通过 server保存下来的地址使得彼此之间能够直接通信的过程,server只 管帮助建立连接 ,在建立间接之后就不再介入了 . 2.维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么解 释:尽可能用约束(包括 CHECK 、主键、唯一键、外键、非空字段)实现,这 种方式的效率最好;其次用触发器,这种方式可以保证无论何种业务系统访 问数据库都能维持数据库的完整性、一致性;最后再考虑用自写业务逻辑实现, 但这种方式效率最低、编程最复杂,当为下下之策。 3.A=10,b=20 在不使用第三变量使两值互换 解释 : a=10,b=8 a=a-b b=b+a a=b-a 4.override 与重载的区别 解释: o verride是把继承于父类的方法给覆盖掉 重载是同一个函数名接受不同类型、个数的参数,完成不同的功能,调用起来 方便 5.抽象类跟接口的区别 解释:抽象类可以有非抽象方法,接口中只能有抽象方法。接口可以实现多继 承。 6.try {}里有一个return语句,那么紧跟在这个try 后的 finally{} 里的code 会不会被执行,什么时候被执行,在return前还是后? 解释: inally 里的代码会执行,在return 之前执行 7.实现一个冒泡排序 解释: ArrayList list=new ArrayList(); list.add(76); list.add(4); list.add(786); list.add(43); list.add(21); list.add(432); list.add(10); for(int i=0;i

经典SQL面试题总结

表 Student(S#,Sname,Sage,Ssex) 学生表 CREATE TABLE student ( sid varchar(10) NOT NULL, sName varchar(20) DEFAULT NULL, sAge datetime DEFAULT '1980-10-12 23:12:36', sSex varchar(10) DEFAULT NULL, PRIMARY KEY (sid) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Course(C#,Cname,T#) 课程表 CREATE TABLE course ( cid varchar(10) NOT NULL, cName varchar(10) DEFAULT NULL, tid int(20) DEFAULT NULL, PRIMARY KEY (cid) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; SC(S#,C#,score) 成绩表 CREATE TABLE sc ( sid varchar(10) DEFAULT NULL, cid varchar(10) DEFAULT NULL, score int(10) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8; Teacher(T#,Tname) 教师表 CREATE TABLE teacher ( tid int(10) DEFAULT NULL, tName varchar(10) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 数据:(MySQL) insert into teacher(tid,tName) values (1,'李老师'),(2,'何以琛'),(3,'叶平'); insert into student(sid,sName,sAge,sSex) values ('1001','张三丰','1980-10-12 23:12:36','男'),('1002','张无极','1995-10-12 23:12:36','男'),('1003','李奎','1992-10-12 23:12:36','女'),('1004','李元宝','1980-10-12 23:12:36','女'),('1005','李世明','1981-10-12 23:12:36','男'),('1006','赵六','1986-10-12 23:12:36','男'),('1007','田七','1981-10-12 23:12:36','女'); insert into sc(sid,cid,score) values ('1','001',80),('1','002',60),('1','003',75),('2','001',85),('2','002',70),('3','004',100), ('3','001',90),('3','002',55),('4','002',65),('4','003',60); insert into course(cid,cName,tid) values ('001','企业管理',3),('002','马克思',3),('003','UML',2),('004','数据库',1),('005 ','英语',1); 1、查询“001”课程比“002”课程成绩高的所有学生的学号; select a.S# from (select s#,score from SC where C#='001') a,(select s#,score from SC where C#='002') b where a.score>b.score and a.s#=b.s#; 2、查询平均成绩大于60分的同学的学号和平均成绩;

SQL数据库面试题以及答案精编

S Q L数据库面试题以及 答案精编 Document number:WTT-LKK-GBB-08921-EIGG-22986

Student(S#,Sname,Sage,Ssex)学生表 S#:学号 Sname:学生姓名 Sage:学生年龄 Ssex:学生性别 Course(C#,Cname,T#)课程表C#:课程编号 Cname:课程名称 T#:教师编号 SC(S#,C#,score)成绩表 S#:学号 C#:课程编号 score:成绩 Teacher(T#,Tname)教师表 T#:教师编号: Tname:教师名字 问题:

1、查询“001”课程比“002”课程成绩高的所有学生的学号 select # from (select S#,score from SC where C#='00 1')a, (select s#,score from SC where c#='002')b Whe re > and # = #; 2、查询平均成绩大于60分的同学的学号和平均成绩select S#, avg(score) from sc group by S# having av g(score)>60 3、查询所有同学的学号、姓名、选课数、总成绩 select #, , count#), sum(score) from student left o uter join SC on # = # group by #, Sname 4、查询姓‘李’的老师的个数: select count(distinct(Tname)) from teacher where tname like '李%'; 5、查询没有学过“叶平”老师可的同学的学号、姓名:select #, from Student

SQL常见面试题集(三)

SQL试题集(三) 1.用一条SQL语句 查询出每门课都大于80分的学生姓名  name kecheng fenshu 张三 语文 81 张三 数学 75 李四 语文 76 李四 数学 90 王五 语文 81 王五 数学 100 王五 英语 90 A: select distinct name from table where name not in (select distinct name from table where fenshu<=80) 2.学生表 如下: 自动编号 学号 姓名 课程编号 课程名称 分数 1 2005001 张三 0001 数学 69 2 2005002 李四 0001 数学 89 3 2005001 张三 0001 数学 69 删除除了自动编号不同,其他都相同的学生冗余信息 A: delete tablename where 自动编号 not in(select min(自动编号) from tablename group by 学号,姓名,课程编号,课程名称,分数) 一个叫department的表,里面只有一个字段name,一共有4条纪录,分别是a,b,c,d,对应四个球对,现在四个球对进行比赛,用一条sql语句显示所有可能的比赛组合. 你先按你自己的想法做一下,看结果有我的这个简单吗? 答:select https://www.wendangku.net/doc/4d14721144.html,, https://www.wendangku.net/doc/4d14721144.html, from team a, team b where https://www.wendangku.net/doc/4d14721144.html, < https://www.wendangku.net/doc/4d14721144.html, 请用SQL语句实现:从TestDB数据表中查询出所有月份的发生额都比101

科目相应月份的发生额高的科目。请注意:TestDB中有很多科目,都有 1-12月份的发生额。 AccID:科目代码,Occmonth:发生额月份,DebitOccur:发生额。 数据库名:JcyAudit,数据集:Select * from TestDB 答:select a.* from TestDB a ,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) b where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur ************************************************************************面试题:怎么把这样一个表儿 year month amount 1991 1 1.1 1991 2 1.2 1991 3 1.3 1991 4 1.4 1992 1 2.1 1992 2 2.2 1992 3 2.3 1992 4 2.4 查成这样一个结果 year m1 m2 m3 m4 1991 1.1 1.2 1.3 1.4 1992 2.1 2.2 2.3 2.4 答案一、 select year, (select amount from aaa m where month=1 and m.year=aaa.year) as m1, (select amount from aaa m where month=2 and m.year=aaa.year) as m2, (select amount from aaa m where month=3 and m.year=aaa.year) as m3,

Sql常见面试题

(资料来源:互联网) Sql常见面试题(总结) 1.用一条SQL语句查询出每门课都大于80分的学生姓名 name kecheng fenshu 张三语文 81 张三数学 75 李四语文 76 李四数学 90 王五语文 81 王五数学 100 王五英语 90 A: select distinct name from table where name not in (select distinct name fr om table where fenshu<=80) 2.学生表如下: 自动编号学号姓名课程编号课程名称分数 1 2005001 张三 0001 数学 69 2 2005002 李四 0001 数学 89 3 2005001 张三 0001 数学 69 删除除了自动编号不同,其他都相同的学生冗余信息 A: delete tablename where 自动编号 not in(select min(自动编号) from tablename g roup by 学号,姓名,课程编号,课程名称,分数) 一个叫department的表,里面只有一个字段name,一共有4条纪录,分别是a,b,c,d,对应四个球对,现在四个球对进行比赛,用一条sql语句显示所有可能的比赛组合. 你先按你自己的想法做一下,看结果有我的这个简单吗? 答:select https://www.wendangku.net/doc/4d14721144.html,, https://www.wendangku.net/doc/4d14721144.html, from team a, team b where https://www.wendangku.net/doc/4d14721144.html, < https://www.wendangku.net/doc/4d14721144.html,

请用SQL语句实现:从TestDB数据表中查询出所有月份的发生额都比101科目相应月份的发生额高的科目。请注意:TestDB中有很多科目,都有1-12月份的发生额。 AccID:科目代码,Occmonth:发生额月份,DebitOccur:发生额。 数据库名:JcyAudit,数据集:Select * from TestDB 答:select a.* from TestDB a ,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) b where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur ******************************************************************************* ***** 面试题:怎么把这样一个表儿 year month amount 1991 1 1.1 1991 2 1.2 1991 3 1.3 1991 4 1.4 1992 1 2.1 1992 2 2.2 1992 3 2.3 1992 4 2.4 查成这样一个结果 year m1 m2 m3 m4 1991 1.1 1.2 1.3 1.4 1992 2.1 2.2 2.3 2.4 答案一、 select year, (select amount from aaa m where month=1 and m.year=aaa.year) as m1, (select amount from aaa m where month=2 and m.year=aaa.year) as m2, (select amount from aaa m where month=3 and m.year=aaa.year) as m3, (select amount from aaa m where month=4 and m.year=aaa.year) as m4 from aaa group by year 这个是ORACLE 中做的: select * from (select name, year b1, lead(year) over (partition by name order by year) b2, lead(m,2) over(partition by name order by year) b3,rank()over( partition by name order by year) rk from t) where rk=1; ******************************************************************************* ***** 精妙的SQL语句! 精妙SQL语句

相关文档