SQL基础

来源:互联网 发布:php 500错误如何排查 编辑:程序博客网 时间:2024/06/08 20:15

★查询语句

  • 从表查数据【select】:select * from emp;
  • 简单的运算【dual为空表】:select 2*3 from dual;
  • 任何和空值计算的结果都为空值。
  • 别名:select aaa 别名 from dual;
  • 别名:’xxx’单引号转大写无空格,”xxx”双引号原格式可有空格。
  • 别名:两个单引号”表示一个单引号。
  • 别名:字符串连接符||。
  • 别名:select ename||sal from emp;
  • 消除相同【distinct】:select distinct aaa,bbb from emp;
  • 条件查询【where】:select * from emp where ename='aaa';
  • 在…之间:select * from emp where sal between 800 and 1500;
  • 在…之间:select * from emp where sal >=800 and sal <=1500;
  • 空值处理:is null或者is not null;
  • 在…里面:select * from emp where sal in (1000,1500,2000);
  • 日期处理-特定格式(系统时间):select sysdate from dual;
  • 并且and,或者or,非not。
  • 模糊查询【like】:select * from emp where ename like '_a%';(_代表一个字符,%代表零个多个字符)
  • 转义字符【\】:select * from emp where ename like '%\%%';
  • 指定转移字符【escape】:select * from emp where ename like '%$%%' escape '$';
  • 排序【默认升序asc】:select * from dept order by deptno asc;
  • 排序【降序desc】:select * from dept order by deptno desc;
  • 多字段排序:select ename,sal,deptno from emp order by deptno asc,sal desc;

常用SQL函数

  • 小写【lower(字符串)】:select lower(ename) from emp;
  • 大写【upper(字符串)】:同上。
  • 四舍五入【round(数据)】:select round(25.5) from dual;
  • 四舍五入【round(数据,精度)】:select round(25.567,2) from dual;
  • 特定格式【to_char(数据,格式字符串)】:select to_char(sql,'$99,999.99') from emp;
  • 特定格式:如上,$美元,L本地货币。
  • ★特定格式【日期】:select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;
  • ★字符串转日期【to_date(字符串数据,格式字符串)】:select ename,hiredate from emp where hiredate > to_date('1999-09-01 15:30:30','YYYY-MM-DD HH24:MI:SS');
  • 字符串转数字【to_number(字符串数据,格式字符串)】:select sal from emp where sal > to_number('$1,250.00','$9,999.99');
  • 处理空值计算【nvl(aaa,0)】:如果aaa是空值,用0替代aaa。
  • ★主函数:最大值max(),最小值min(),求和sum(),平均值avg(),记录数count()。
  • 【count(aaa)】:查找aaa不为空的记录数。

★Group by语句

  • 分组:根据deptno分组求出每组的sal平均值select avg(sal) from emp group by deptno;

子查询

  • 查找sal最高的ename:select ename from emp where sal = (select max(sal) from emp);

Having语句

  • 按deptno进行分组,然后求出分组后每一组sal的平均值:select avg(sal) from emp group by deptno;
  • 按deptno进行分组,然后求出分组后每一组sal的平均值大于2000的每一组sal的平均值:select avg(sal) from emp group by deptno having avg(sal) >= 2000;
  • 【having】是对分组进行限制的语句。

前面总结

  • 查询对sal大于1200按照deptno进行分组后avg(sal)>1500的降序排列的avg(sal):
  • select avg(sal) from emp where sal>1200 group by deptno having avg(sal)>1500 order by avg(sal) desc;

扩展

  • select ename,sal from emp join (select max(sal) max_sal,deptno from emp group by deptno) t on (emp.sal=t.max_sal and emp.deptno=t.deptno);

Join on连接

  • 【left outer join on】左外连接,显示左边的表全部数据,连接右边表。
  • 【right outer join on】右外连接,显示右边的表全部数据,连接左边表。
  • 【full outer join on】外连接,显示左右表全部数据。
  • 【inner join on】内连接。
  • 【cross join on】笛卡尔积。
原创粉丝点击