今天去参加了一个笔试,考到sql的时候懵了,发现长时间的使用hibernate框架让我对sql语句真是越来越陌生了,针对笔试题目回家温习了一下。
首先记忆最清楚的是分页的sql语句,比如查询第10条到第20条数据记录,不同数据库的实现方法也是不一样的
mysql:select * from test limit 10,20--主要使用了limit关键字
oracle:select * from (select t.*,rownum rn from test t) where rn<=20 and rn>=10;
oracle主要使用了子查询和rownum关键字
第二,对group by语句和聚合函数的使用考察
group by语句将记录进行分组,返回的字段信息有的是单体、有的是集合,对于单体的字段我们可以直接添加到select的后面,而对于集合字段必须通过聚合函数处理让其返回值变成单体后才能放到select的后面,因为一条数据库记录是没有办法来显示一个集合字段的;
where语句要放在group by的前面,大致格式如:select field from test t where 条件 group by t.field,如果想要对分组之后的集合字段进行条件判断要使用having()函数而不是where(having()函数跟在group by语句之后).
第三,更改表结构的sql语句
--增加字段--
alter table test add field varchar2(3);
--删除字段--
alter table test drop column field;
--更新字段oracle与mssql的实现不同---
oracle:alter table test modify field varchar2(10);--oracle使用的是modify关键字
mssql:alter table test alter column field type varchar2(10);--mssql使用的是alter column
第四,有关表的join操作
join操作,就其名称来看,是将两个表的信息拼接成一个表
想要拼接,必然两张表要有联系,要有公共的字段即表的外键,以下所说的共用字段
--inner join--
只是拼接两个表中含有公用字段值相同的记录
--left join--
是以左面的表为基准,将右面的表的信息join到左面
若关联的两个表有公共用字段值,则同inner join
若共用字段中左面表有的记录值而右面表没有则将null值join到左面表
--right join--
是以右面的表为基准,将左面的表的信息join到右面
若关联的两个表有公共用字段值,则同inner join
若共用字段中右面表有的记录值而左面表没有则将null值join到右面表
--full join--
相当于left join+right join
第五,oracle的xml数据类型xmltype:用于存储xml文档
create table test(
xml SYS.XMLTYPE;
);
insert into test values(sys.XMLTYPE.createXML('<root>'||'<chid>'||'</child>'||'</root>'));//插入语句
select t.xml.getClobVal() from test t;//查询语句