一、SQL语句共分为5大类:
DQL(data query language) 数据查询语言
DML(data manipulation language)数据操作语言
DDL(DATA definition language)数据定义语言
DCL(DATA control language)数据控制语言
TCL(transaction control language)事务控制语言
二、常见用法
1.在select语句中 chr(10)表示回车换行;
2.Oralce/MySql/SqlServer/Informix 数据库查询前几行/后几行的sql语句
SqlServer
select top 10 * from tablename;
Informix
select first 10 * from tablename;
Oralce
select * from tablename where rownum<=10;
MySql
select * from tableName limit 10
rownum是oracle自己定义的,无论在什么表中都有,表示行编号。
select * from
(
select * from student
where id<100
order by id
)
where rownum<=5
3.Dual是Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中
查询当前用户
select user from dual
查询当前系统时间
select sysdate from dual
查询当前系统时间,并把时间转换成易读的方式
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual
4.select decode(empno,7369,'cxm','nonames') location, ename from scott.emp
decode是oracle内置的函数,在select语句中表示条件。当empno的值为7369时,返回cxm,否则返回nonames,location表示改列的别名。
select case empno when 7369 then 'cxm' when 7499 then 'cxm2' else 'nonames' end location, ename
from scott.emp
case也是内置函数,表示条件,用法如上。
5.查询时,如何给行加上序号,例如:
select rownum,empno,ename,job,sal from scott.emp
rownum就代表序号
6.select rownum,empno,ename,job,sal from scott.emp where sal >= (select avg(sal) from scott.emp)
查询高于平均工资的那些人。
7.往oracle表中插入日期型数据时,要使用to_date函数,例如:
insert into d values(to_date('2012-05-25 16:10:50','yyyy-mm-dd hh24:mi:ss'))
8.删除重复记录
rowid可以唯一标识一行记录,基本多个行的主键相同。所以,按照主键进行group,然后找出最大或最小的记录,其余的记录删除即可。例如:
delete from scott.emp where empno not in (select min(rowid) from scott.emp group by empno)
9.如何找出A表比B表多出的记录:
select id,name from A where id not in (select id from B)
10.如何找出A表和B表中相同的记录:
select id,name from A where id in (select id from B)
DQL(data query language) 数据查询语言
DML(data manipulation language)数据操作语言
DDL(DATA definition language)数据定义语言
DCL(DATA control language)数据控制语言
TCL(transaction control language)事务控制语言
二、常见用法
1.在select语句中 chr(10)表示回车换行;
2.Oralce/MySql/SqlServer/Informix 数据库查询前几行/后几行的sql语句
SqlServer
select top 10 * from tablename;
Informix
select first 10 * from tablename;
Oralce
select * from tablename where rownum<=10;
MySql
select * from tableName limit 10
rownum是oracle自己定义的,无论在什么表中都有,表示行编号。
select * from
(
select * from student
where id<100
order by id
)
where rownum<=5
3.Dual是Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中
查询当前用户
select user from dual
查询当前系统时间
select sysdate from dual
查询当前系统时间,并把时间转换成易读的方式
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual
4.select decode(empno,7369,'cxm','nonames') location, ename from scott.emp
decode是oracle内置的函数,在select语句中表示条件。当empno的值为7369时,返回cxm,否则返回nonames,location表示改列的别名。
select case empno when 7369 then 'cxm' when 7499 then 'cxm2' else 'nonames' end location, ename
from scott.emp
case也是内置函数,表示条件,用法如上。
5.查询时,如何给行加上序号,例如:
select rownum,empno,ename,job,sal from scott.emp
rownum就代表序号
6.select rownum,empno,ename,job,sal from scott.emp where sal >= (select avg(sal) from scott.emp)
查询高于平均工资的那些人。
7.往oracle表中插入日期型数据时,要使用to_date函数,例如:
insert into d values(to_date('2012-05-25 16:10:50','yyyy-mm-dd hh24:mi:ss'))
8.删除重复记录
rowid可以唯一标识一行记录,基本多个行的主键相同。所以,按照主键进行group,然后找出最大或最小的记录,其余的记录删除即可。例如:
delete from scott.emp where empno not in (select min(rowid) from scott.emp group by empno)
9.如何找出A表比B表多出的记录:
select id,name from A where id not in (select id from B)
10.如何找出A表和B表中相同的记录:
select id,name from A where id in (select id from B)