数据库(一)

记录学数据库过程中遇到的知识点。

数据库:用于存储和管理数据,便于程序开发

常见数据库:oracle、informix、DB2、sysbase、SQL server、MySQL、MongoDB

DBA:数据库管理员

//查询emp表中所有成员信息
SELECT * FROM emp;

//查询emp表中empno列以及新的一列:年薪,计算表达式为:empno*12
SELECT empno,empno*12 "年薪" from emp;

//dintinct的作用范围是后面所有的列,重复记录只取一次
SELECT DISTINCT deptno,job from emp;

//where:条件过滤
//查询comm不为空的成员信息
SELECT *from emp where comm is not null

//between表示区间,in表示两个具体的值,in后可加nul,not in后不可加null
select * from emp where sal between 100 and 200
select * from emp where sal in(100,200)

//like:模糊查找
//"%"匹配多个字符,"_"匹配一个字符,escape表示转义字符
//查询姓名以S开头的成员信息
select * from emp where ename like 'S%';

//查询名字中包含"_"的成员
select * from emp where ename like '%\_%'escape'\';

//比较运算符:>    <    !=    =    >=    <=    <>
//逻辑运算符:and    or     not
//集合运算符:in    not in

//排序order by colname|alias|expr|number    列名、别名、表达式、序号
//默认升序ASC,降序为desc,desc只作用于最近的一列
//对comm列进行降序排序,并且nulls last 表示将空值显示在后
select * from emp order by comm desc nulls last

//单行函数:只对一行进行变换,产生一个结果
/*
lower、upper、initcap(首字母大写)
substr(a,b)、substr(a,b,c),取子字符串。a:字符串,b:开始位置,c:取的长度
length字符数、lengthb字节数
concat(连接符||),concat(a,b):'ab'
instr(a,b):判断b是否在a中存在,存在返回第一次出现位置,否则返回0
lpad左填充、rpad右填充。lpad('abc',5,'#')
trim去掉首尾的空格,trim('x' from 'xxlxlxx')去掉首尾的x
replace(str,old,new)
round四舍五入,trunc截断,mod求余,ceil/floor取整
*/

/*转换函数
to_number     to_char    to_date
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day')from dual;
*/

/*日期函数
months_between:两个日期值相差的月数
add_months:加月份
last_day:日期所在月的最后一天
next_day:求指定日期的下一个星期几
select next_day(sysdate,'星期一')from dual;
*/

/*通用函数
nvl(a,b):a为null时,返回b
nvl2(a,b,c):a为null时,返回c,否则返回b
nullif(a,b):a=b返回null,否则返回a
coalesce(a,b,c,...n):从左向右找第一个不为空的值
*/

/*条件表达式
类似if-else。涨工资案例
select empno,
        job,
        sal "涨前薪水",
        case job
            when '总裁' then sal+1000
            when '经理' then sal+800
            else sal+400
        end "涨后" from emp;

或,decode是一个函数,除第一个和最后一个参数之外,中间的参数都是成对出现的
select empno,
        job,
        sal "涨前薪水",
        decode(job,
            '总裁' sal+1000
            '经理' sal+800
            sal+400) "涨后" from emp;

*/

/*分组函数(组函数、聚合函数),具有滤空功能
sum、count、max、min、avg
//统计不同部门的平均工资
select deptno,avg(sal) from emp group by deptno;
//统计不同部门不同职位的平均工资,先按deptno分,再按job分
select deptno,job,avg(sal) from emp group by deptno,job;
//having过滤分组,查询平均薪水大于2000的部门
select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;

//语法:
SELECT  ...  FROM  ...  WHERE  ...  GROUP BY ...  HAVING  ...  ORDER BY
//where先过滤再分组,having先分组再过滤。where更高效一点


    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值