数据库 面试宝典

数据库
一、where与having
	WHERE用于行过滤。
	SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
	
二、字符串与日期,数字之间相互转化
	到字符串:to_char();到日期:to_date();到数字:To_number(char,’format’);
	
三、in与exsits区别
	In:跟在WHERE 子句后面规定多个筛选值(where 列名 in (1,2,3));
		(确定给定的值是否与子查询或列表中的值相匹配。in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选)
	Exsits:将外查询表的每一行,代入内查询作为检验,如果内查询返回的结果取非空值,则EXISTS子句返回TRUE,这一行行可作为外查询的结果行,否则不能作为结果。
		(指定一个子查询,检测行的存在。遍历循环外表,然后看外表中的记录有没有和内表的数据一样的。匹配上就将结果放入结果集中。)
	IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。
	
四、like模糊查询
	通配符:%代替0到多个字符,_代替一个字符
	
五、nvl函数
	Nvl(e1,e2):如果e1的值为null,返回e2,否则返回e1本身;
	Nvl2(e1,e2,e3):如果e1的值为null,返回e3,否则返回e2;
	
六、排序oder by
	升序asc,降序desc,默认为升序;多列排序:oder by 列名,列名
	
七、快速建表,复制数据
1复制表中的数据到新建的表中,表不存在
	create table tableName1 as select * from tableName2 
2复制表中的数据
	insert into tableName select * from tableName  
	
八、大数据量

九、提高查询效率
	1优化SQL查询,去掉不必要的列;2建立查询条件索引;
	
十、UNION, UNION ALL
	UNION 操作符用于合并两个或多个 SELECT 语句的结果集;UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型,每条 SELECT 语句中的列的顺序必须相同。
	UNION 操作符选取不同的值,UNION ALL可以选取重复的数值;
	
十一、常用函数
	Dual,伪表;
	CASCADE,级联删除;
	||,连接字符串;
	SUBSTR (char, n, len),取子字符串,选取n位开始,长度为len的子串;
	LENGTH(char),找出一个字符串的长度;
	INSTR (char, substr),查找子串位置,
	LPAD | RPAD (str,len,padstr),返回字符串str,左/右填充至len长度,长度大于len则缩减;
	TRIM(),移除掉一个字串中的字头或字尾,最常见的用途是移除字首或字尾的空白;
	REPLACE (char, str1, str2),字符串替换,将子串str1替换为str2;
	LOWER(char),变为小写;
	UPPER(char),变为大写
	INITCAP(char),首字母变为大写;
	Floor(),向下取整;
	Ceil(),向上取整;
	Round(),四舍五入;
	
十二、日期相关的函数
	SYSDATE,返回当前日期;
	ADD_MONTHS(date,n)函数可以得到date之前或之后n个月的新日期;
	LAST_DAY(date),返回当前月的最后一天;
	MONTHS_BETWEEN (date1, date2),用于计算date1和date2之间有几个月;
	NEXT_DAY(date,week),返回下周某一天的日期;
	TO_CHAR(date,’day’),返回日期date是周几;
例子:
返回两个日期之间的天数:
	select floor(sysdate - to_date('20161018','yyyymmdd')) from dual;
	
十三、Case when与DECODE
	Case函数一旦满足了某一个WHEN ,则这一条数据就会退出CASE WHEN,而不再考虑其他CASE;
	decode(列名,值1,翻译值1,2,翻译值2,...值n,翻译值n,缺省值);
	
十四、数据库三范式
	1、所有字段值都是不可分解的原子值;
	2、一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中;
	3、每一列数据都和主键直接相关,而不能间接相关;
	
十五、左连接、右连接、内连接
	内连接:INNER JOIN返回两个表中联结字段相等的行;
	左连接:LEFT JOIN返回包括左表中的所有记录和右表中联结字段相等的记录;
	右连接:RIGHT JOIN返回包括右表中的所有记录和左表中联结字段相等的记录;
	
十六、having与聚合函数
	GROUP BY 语句可结合一些聚合函数来使用,HAVING语句在GROUP BY语句后筛选数据。
		SELECT column_name, aggregate_function(column_name)
		FROM table_name
		WHERE column_name operator value
		GROUP BY column_name;
常用的聚合函数
	AVG():返回数值列的平均值;
		SELECT AVG(column_name) FROM table_name
	COUNT():返回匹配指定条件的行数;
		SELECT COUNT(column_name) FROM table_name;
	FIRST()/LAST() :返回指定的列中第一个/最后一个记录的值;
		SELECT FIRST/LAST (column_name) FROM table_name;
	MAX()/MIN() :返回指定列的最大值/最小值;
		SELECT MIN/MAX(column_name) FROM table_name;
	SUM() :返回数值列的总数;
		SELECT SUM(column_name) FROM table_name;
		
十七、视图
	视图是基于 SQL 语句的结果集的可视化的表;视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
	CREATE VIEW view_name AS
	SELECT column_name(s)
	FROM table_name
	WHERE condition

十八、存储过程
	存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
	--1、一组为了完成特定功能的SQL语句集
	--2、第一次编译后再次调用不需要再次编译(高效)
	--3、不同的数据库存储过程定义的方式不同,思路是相同的,语法不同
	CREATE OR REPLACE Procedure myProcedure(Name Varchar2)
Is
--定义各种变量
	ename2 Varchar2(32);
	job2 Varchar2(32);
	Begin
--写业务逻辑处理
	Select ename,job Into ename2,job2   From emp Where ename = Name;
	dbms_output.put_line(ename2);
	End myProcedure;
	
十九、触发器
	触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器可以分为两类:DML触发器和DDL触发器,DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句,DML触发器分为:after触发器(之后触发),insert触发器,update触发器,delete触发器。
	
二十、约束类型
	NOT NULL(非空)、
	UNIQUE(唯一)、
	主键、
	外键、
	CHECK
	
二十一、序列
	序列是一种数据库对象,用来自动产生一组唯一的序号;
	CREATE SEQUENCE sequencename
	 [INCREMENT BY n]             	定义序列增长步长,省略为1
	 [START WITH m]               	序列起始值,省略为1,一经创建不能修改
	 [{MAXVALUE n | NOMAXVALUE}] 	序列最大值,
	 [{MINVALUE n | NOMINVALUE}] 	序列最小值
	 [{CYCLE | NOCYCLE}]         	到达最大值或最小值后,继续产生序列(默认NOCYCLE)
	 [{CACHE n | NOCACHE}];      	CACHE默认是20

二十一、理解rownum
	rownum用于标记结果集中结果顺序的一个字段,它的特点是按顺序标记,而且是连续的,换句话说就是只有有rownum=1的记录,才可能有rownum=2的记录。rownum关键字只能和<或者<=直接关联,如果是>或者=则需要给他起个别名。
	
二十二、oracle分页
	select * from (
		select * from (
			select s.*,rownum rn from student s 
		) where rn<=5)
	 where rn>0
	 
二十三、Oracle数据库体系
	1 Oracle数据库的基本类型:char,varchar2,number,date,clob;
	2 Oracle的物理结构:数据文件,控制文件和日志文件;
	3 Oracle的逻辑结构:
		表空间--最大的逻辑存储结构,与物理上的数据文件相对应;
		段--数据库终端用户将处理的最小单位;
		区--磁盘空间分配的最小单位;
		块--管理存储空间的最基本单位;
			
必背的sql语句
1:oracle 分页
	select * from (select t.*, rownum rn from (select * from menu order by id desc) t where          rownum < 10) where rn >=5
2: mysql 分页
	select * from music where id limit 5,5
3:oracle中如何快速将一张表的数据复制到另外一张表中(另外一张表不存在,另外一张       表存在,但数据为空)

1.不存在另一张表时:
	create  table  新表  as  select * from 将要复制的表
2、存在另一张表时:
	insert  into  新表名  select  字段  from  将要复制的表名
	
4:音乐专辑
查询出special <app:ds:special>表中的id  专辑名 并下面有多少首歌曲
	Select  s.id , min(s.sname),count(m.mid)  from  special s  inner
	join  ms  m  on  s.id=m.id  group  by  s.id
5:快速删除一张表(不可事物回滚,也就是没有日志记录)
	TRUNCATE from 表名
6:inner join
	select 查找信息 from 表名 1 inner join 表名2 on 表名1.列名 = 表名2.列名
7:left join
	左外连接    select 查找信息 from 表名1 left join 表名2 on 表名1.列名 = 表名2.列名
8:right join
	右外连接  select 查找信息 from 表名1 right join 表名2 on 表名1.列名 = 表名2.列名
9:oracle中查询遍历树形结构(start  with)
	select * from extmenu
	start with pid=1
	connect by prior id = pid
快速删除父节点以及父节点下的所有节点:
	Delete from extmenu where id in (
	elect * from extmenu
	start with pid=1
	connect by prior id = pid
	)
10:查询出来60-70,80-90,95-100学生的信息
	select * from stu where chengji between 60 and 70 or between 80 and 90 or between 95 and 100
	select * from stu where chengji > 60 and chengji < 70 or chengji > 80 and chengji < 90 or chengji > 95 and chengji < 100
11:用exists替换in------进行联表查询
	select * from dept where exists(select * from emp where emp.deptno=dept.deptno);
或
	select  *  from  dept  d  inner  join  emp  e  on  d.deptno = e.deptno(只查询出两表共同拥有的字段数据)
12:删除表中的重复数据:
	delete from xin a where a.rowid != (
	select max(b.rowid) from xin b
	where a.name = b.name
	);
13row_number()rank() over ,dense_rank() over 按工资排序
	select sal,
	row_number() over(order by sal desc) rank1,
	rank() over(order by sal desc) rank,
	dense_rank() over(order by sal desc) drank
	from emp
14:select * from (select emp.* from(
	dense_rank() over(partition by departNo order by sal desc)
	rk from emp )
	Where rk=4
  • 12
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z1427094386

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值