数据库和SQL⾯试题基础知识(持续更新)
数据库⽅⾯基础知识复习
常问⼩问题;
⼀、like查询⼤⼩写问题:
sql查询结果去重 SELECT distinct name FROM 表;平均数avg
⼀、like查询⼤⼩写问题:
①⽤binary 区分⼤⼩写
select * from blacklist where binary name = 'zhangsan' ;
②在建表的时候,设置好区分⼤⼩的。加以标识
create table table_name(
a varchar (20) binary
)
⼆、like查询引⽤索引问题:
①like'王%' ⽤到索引
②like'%%' 没⽤到索引
③like'%%' 没⽤到索引
三、数据库的默认隔离级别(可重复读(repeatable-read))
读未提交(read-uncommitted)脏读
不可重复读(read-committed)幻读
可重复读(repeatable-read)幻读
串⾏化(serializable)
四、数据库中having使⽤
HAVING语句通常与GROUP BY语句联合使⽤,⽤来过滤由GROUP BY语句返回的记录集。
HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使⽤的不⾜。
五、数据库中exists使⽤(⼀般和in作对⽐)
in只有⼀个字段去匹配,exist返回多个字段匹配??
例如:select * from A where id in(select id from B) 当B表⽐较⼩时候⽤in
select * from A where id exist (select id from B) 当B表⽐较⼩时候⽤in
六、
七、
1、数据库优化
在数据库中查询语句速度很慢,如何优化?
1.建索引
2.减少表之间的关联
3.优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该⾛索引,把数据量⼤的表排在前⾯
4.简化查询字段,没⽤的字段不要,已经对返回结果的控制,尽量返回少量数据
5.尽量⽤PreparedStatement来查询,不要⽤Statement,
6.对字段类型⽤到适当,状态类型(性别)可以⽤tinyint varchar减少内存
2、触发器的作⽤?
触发器是⼀中特殊的存储过程,主要是通过事件来触发⽽被执⾏的。它可以强化约束,来维护数据的完整性和⼀致性,可以跟踪数据库内的操作从⽽不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另⼀个表的数据操作,⽽该操作⼜会导致该表触发器被触发。
3、什么是存储过程?⽤什么来调⽤?
存储过程是⼀个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建⼀次,以后在该程序中就可以调⽤多次。如果某次操作需要执⾏多次SQL,使⽤存储过程⽐单纯SQL语句执⾏要快。调⽤: 1)可以⽤⼀个命令对象来调⽤存储过程。 2)可以供外部程序调⽤,⽐如:java程序。
4、存储过程的优缺点?
优点: 1)存储过程是预编译过的,执⾏效率⾼。 2)存储过程的代码直接存放于数据库中,通过存储过程名直接调⽤,减少⽹络通讯。3)安全性⾼,执⾏存储过程需要有⼀定权限的⽤户。 4)存储过程可以重复使⽤,可减少数据库开发⼈员的⼯作量。缺点:移植性差5、存储过程与函数的区别
存储过程函数
⽤于在数据库中完成特定的操作或者任
务(如插⼊、删除等)
⽤于特定的数据(如选择)
程序头部声明⽤procedure程序头部声明⽤function
程序头部声明时不需描述返回类型程序头部声明时要描述返回类型,⽽且
PL/SQL块中⾄少要包括⼀个有效的
return语句
可以使⽤in/out/in out 三种模式的参数可以使⽤in/out/in out 三种模式的参数
可作为⼀个独⽴的PL/SQL语句来执⾏不能独⽴执⾏,必须作为表达式的⼀部
分调⽤
可以通过out/in out 返回零个或多个值通过return语句返回⼀个值,且改值要与
声明部分⼀致,也可以是通过out类型的
参数带出的变量
SQL语句(DML 或SELECT)中不可调⽤
存储过程SQL语句(DML 或SELECT)中可以调⽤
函数
6、函数的创建和使⽤
语法:
Create function 函数名(参数)
Returns 返回值数据类型
as
begin
SQL语句(必须有return 变量或值)
End
直接执⾏函数 SELECT dbo.函数名('aa') AS result;sql中同样使⽤
常⽤系统存储过程:
exec sp_databases; --查看数据库
exec sp_tables; --查看表
exec sp_columns student;--查看列
exec sp_helpIndex student;--查看索引
exec sp_helpConstraint student;--约束
exec sp_stored_procedures;
exec sp_helptext 'sp_stored_procedures';--查看存储过程创建、定义语句
exec sp_rename student, stuInfo;--修改表、索引、列的名称
exec sp_renamedb myTempDB, myDB;--更改数据库名称
exec sp_defaultdb 'master', 'myDB';--更改登录名的默认数据库
exec sp_helpdb;--数据库帮助,查询数据库信息
exec sp_helpdb master;
系统存储过程使⽤:
--重命名索引
exec sp_rename N'student.idx_cid', N'idx_cidd', N'index';
exec sp_help 'student';
--⾃定义存储过程
create proc | procedure pro_name
[{@参数数据类型} [=默认值] [output],
{@参数数据类型} [=默认值] [output],
....
]
as
SQL_statements
7、内外连接
sql查询面试题及答案1.左外左边主表右边辅表(或者说左边不受限制)(实际结果是A表所有数据,B表对应),select * from A Left JOIN B ON
A.Aid=
B.Bnameid 0
2.右外连接右表是主表(或者说右表不受限制)(实际结果是B表所有数据,A表对应)select * from A Right JOIN B ON A.Aid=B.Bnameid
3.内连接:内连接获取两表的公共部分的记录(实际结果关联字段为基础俩表的数据)Select * from A JOIN B ON A.Aid=B.Bnameid
4.意义不⼤(实际结果两张表联合没有条件情况下,条数 = 图1 * 图2)或者数据⾏数等于第⼀个表中符合查询条件的数据⾏数乘以第⼆个表中符合查询条件的数据⾏数。
select * from A where id in(select id from B)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论