记录一下基本的SQL语法(里面的示例都是以Oracle里面自带的数据为背景):
1.desc tablename---描述一张表(字段,类型,长度)
2.select empno,sal*12 "All money" from emp;
---给结果项起别名。如含特殊字符或者要保持原有格式,用双引号括起来。
3.任何含空值的数学表达式最后的结果都是空值(NULL)
4.字符串连接符:||
select ename||sal from emp;
单引号包起来字符串。如果字符串内含有单引号,用两个单引号来替代。
5.select distinct deptno , job from emp;
--去掉结果中的重复值。
6.select * from emp where deptno = 10;
--取特定的值的记录。过滤条件,过滤一些记录。
7.select ename,sal,deptno from emp where deptno<>10;
--取值不等于的记录
8.select ename,sal from emp where sal between 800 and 1500;
--取值在什么范围的记录(包含头尾)
等同于select ename,sal from emp where sal >=800 and sal <=1500;
9.select ename,sal,comm from emp where comm is null;
--选空值的记录(is not null;非空值)
10.select ename,sal,comm from emp where sal in(800,1500,2000);
--取出值为800,1500或者2000的记录。
11.select ename,sal,hiredate from emp where hiredate > '20-2月-81';
--日期的选择。
12.and,or,not逻辑操作符都可用。
13.模糊查询:(通配符%)
select ename from emp where ename like '%ALL%';
select ename from emp where ename like '_A%';
14.如字符串中含%,用转义字符'/'或者自定义转义字符
select emane from emp where ename like '%/%%';
select ename from emp where ename like '%$%%' escape '$';
15.select * from dept order by deptno desc;
---降序。默认为升序。
select empno, ename from emp order by empno asc;
--升序,默认的。可不带asc.
16.select ename,sal,deptno from emp order by deptno asc,ename desc;
--多重排序,先按deptno排序,deptno相同时内部再按ename倒序排。
17.select ename, sal*12 annual_sal from emp
where ename not like '_A%' and sal >800 order by sal desc;
--以上总结性Slect语句。
18.SQL函数:
lower(string)
--select lower(ename) from emp;
--select ename from emp where lower(ename) like '_a%';
substr(string,start,all)
--sletect substr(ename,1,3) from emp;--从一个字符开始截取,共截取三个字符。
chr(number) ,ascII(char)
--select chr(65) from dual;把数字转换成ASCII码;
--selcet ascii('A') from dual;
round(number) round(number,num) 还可以是负数哦。--四舍五入。
select round(23.652) from dual; --24
select round(23.652,2) from dual;--23.65
to_char(sal,'$99,999.9999')
--9代表一位数字。数字或者日期转换成其他形式,位数上无数字则不显示。
--可以用0来表示,也代表一位数字。无数字也显示,用0显示。
--select to_char(sal,'$99,999.9999') from emp;
select to_char(hiredate,'YYYY-MM-DD HH:MI:SS') from emp;
select to_char(hiredate,'YYYY-MM-DD HH24:MI:SS') from emp; -24小时制
--记住它。日期转换为特定格式。
select ename, hiredate from emp
where hiredate > to_date('1981-2-20 12:34:56','YYYY-MM-DD HH24:MI:SS');
--转换日期
select sal from emp where sal > to_number('$1,250.00','$9,999.99');
--转换数字。
select ename,sal*12+nvl(comm,0) from emp;
--算术运算中怎样处理空值,nvl如为空值,用0来替代,如不为空值返回其本身的值。
19.多行函数。---多条输入,一条输出。
* select max(sal) from emp;
* select min(sal) from emp;
* select avg(sal) from emp;
select to_char(avg(sal),'9999999.99') from emp;
select round(avg(sal),2) from emp;
* select sum(sal) from emp;
* select count(*) from emp;---求有多少条记录。
select count(distinct deptno) from emp;
select deptno ,job,max(sal) from emp group by deptno,job;
--按照***来分组,组内用函数处理。
* 规则:出现在select列表里面的字段没有出现在组函数里,必须出现在group by里面。
select ename,max(sal) from emp group by deptno;---错误表达式。
select deptno,max(sal) from emp group by deptno;--正确。
子查询:select ename from emp where sal = (select max(sal) from emp);
where--对单条语句进行过滤。
having--对分组进行过滤。
select avg(sal),deptno from emp group by deptno having avg(sal) > 2000;
--以上为单条select语句。总结如下(执行顺序也不能错):
select * from emp --选取数据
where sal>1000 --选择条件
group by deptno --对选取的数据进行分组
having --对分组后的数据进行过滤限制
order by --对最后的结果进行排序。