Oracle---笔记(一)---SQL语言+SQL查询+函数

1SQL语言

定义:操作关系型数据库的标准语言,我们只需要按照SQL语言的语法去写SQL语句就行了,数据库服务器会自动帮我们去解析该SQL语句并执行。
CRUD:就是增删改查 C:create R:查询 U:update D:delete
SQL语言分为五大类:
1)DQL(数据查询语言) select
2)DML(数据操作语言)insert、update、delete
3)DDL(数据定义语言)create、alter、drop
4)DCL(数据控制语言)grant、revoke
5)TCL(事务控制语言) ROLLBACK、SET TRANSACTION ,COMMIT
其中,重点就是DQL和DML
几个概念:
1.元祖:一条数据,又叫一条记录,emp表有14个元祖
2.属性:又叫字段,或列,emp表有8个字段(属性)
3.主键:唯一标识一行的关键字段(和其它行进行区分)

2 SQL查询

在navicat中,多个SQL语句可以一起运行,前提是除了最后一个sql外,前面的sql都要以分号结束
例如:
– 查询emp表的所有字段的数据
select * from emp;
– 查询emp表的部分字段:员工号,姓名,职位,工资
select EMPNO,ENAME,JOB,SAL from EMP

如果要查询表的所有的字段,那么可以用*代替所有字段
注意:
1)oracle中连接多个字符串,要使用”||”作为连接符号,不是+
2)在查询语句中排序: select 字段… from 表 order by 字段 asc或desc
其中:asc代表升序排列,即参与排序的字段的值是从小到大的,可以省略
Desc代表降序排列,即参与排序的字段的值是从大到小的,不能省略
– 查询所有员工的信息,按照工资降序显示,desc不能省略
select * from emp ORDER BY sal DESC
– 查询所有员工的信息,按照工资升序显示,asc可以省略不写
select * from emp ORDER BY sal
按多个字段排序
3) select 字段… from 表 order by 字段1 asc或desc, 字段2 asc或desc
排序规则:先按照第1个字段排序,在第1个字段的值相同情况下,再按第2个字段排序

2.1 where子句

  1. 在where子句中日期类型的值的默认格式并不是yyyy-MM-dd的格式,而是DD(日)-MM月-YY(或RR,代表2位数的年)
    例如:
    select * from emp where HIREDATE=‘17-12月-80’
    2)字符串大小写敏感(字段的值),字段名不区分大小写,字段值区分大小写,(敏感),另外Sql语句中的关键字也不区分大小写。
    3)字符串和日期类型的值要用单引号引起来
    3)在where子句中使用in(set),是指字段的值要出现在set数据集合中,set数据集合中的多个值之间以逗号隔开。比如 where deptno in(10,20),等价于where deptno=10 or deptno=20
    注意:使用in子句本质上就是用它前面字段的值来和set数据集合中的任意一个值进行匹配 , where 字段 in(a,b,c)就等价于where 字段=a or 字段=b or 字段=c
    select * from emp where ename in(‘BLAKE’,‘KING’,‘SMITH’)
    select * from emp where ename =‘BLAKE’ or ename=‘KING’ or ename=‘SMITH’
    4)在where子句中使用between A and B,代表字段的值介于a和b之间(包括边界值),等价于字段>=A and 字段<=B
    – 查询工资在1600到2975之间的员工信息
    select * from emp where sal BETWEEN 1600 and 2975 ORDER BY sal;
    select * from emp where sal>=1600 and sal<=2975 ORDER BY sal

2.2 在where子句中用模糊查询

模糊查询指的是用关键字来查询数据,在数据库中,用like运算符来执行模糊查询,在模糊查询中要用到2个通配符:
1)%代表零或多个字符,2) _ 表示一个字符
– 查询名字以S开头的所有员工
select * from emp where ename like ‘S%’
– 查询名字的第2个字母是L的所有员工
select * from emp where ename like ‘_L%’

2.3 在where子句中判断空值

判断空值的条件:is null,不是”=null”
Is not null:表示不为空

2.4 逻辑运算符

A and B: 两个条件都要成立时,才为true
A or B:两个条件满足一个,就为true
Not:表示取反
比如: not like , not in(a,b,c),is not null

3 函数

3.1 单行函数

单行函数是指返回结果为单行数据的函数,它只能处理一行数据
例如:
–1.INITCAP(ch):将字符串的首字母转换为大写
select INITCAP(‘hello’) from dual
如果查询的内容不属于任何一张表时,此时就在from后面写dual表,
dual代表oracle的虚表,帮我们存储数据
日期函数举例
– 11.MONTHS_BETWEEN(date1, date2):返回日期date1和date2之间月份的差值,用date1-date2
– 查询2018-8-10到今天的月份的差值
select MONTHS_BETWEEN(‘10-8月-18’, ‘10-1月-19’) from dual;
– 12.ADD_MONTHS(date,n):在日期date基础上添加n个月,返回添加后的新日期
select ADD_MONTHS(‘10-8月-18’, -2) from dual;
– 13.NEXT_DAY(date, ch):返回指定日期date后的下一个星期几对应的新日期,ch表示"星期x"
select NEXT_DAY(‘21-1月-19’, ‘星期二’) from dual;
– 14.LAST_DAY(date):返回指定日期date所在月的最后一天
select LAST_DAY(‘21-1月-19’) from dual;

– 15.EXTRACT(time_unit FROM date):返回指定日期date中的日期字段time_unit(MONTH或YEAR,DAY)的值
– 查询当前日期中的月份的值:用sysdate获取当前日期
– select SYSDATE from dual;
select EXTRACT(DAY FROM SYSDATE) from dual;
– 查询员工表中入职日期为1981年的员工信息
select * from emp where EXTRACT(YEAR from HIREDATE)=1981

3.2 单行函数中的转换函数

to_char():可以将数字或日期转换为字符串
– to_char(num,format):使用指定格式format将数字转换为字符串
select TO_CHAR(14.560,‘0099.990’) from dual;
select TO_CHAR(14.560) from dual;
– to_char(date,format):使用指定格式format将日期转换为字符串
– 将当前日期转换为字符串

select TO_CHAR(SYSDATE,‘YYYY-MM-DD HH24:MI:SS’) from dual

select TO_CHAR(TO_DATE(‘20-1月-19’),‘YYYY-MM-DD’) from dual
to_date():可以将字符串转换为日期
– 使用to_date()函数时,如果省略第2个参数,则字符串一定要写成默认的日期格式,例如:
– TO_DATE(‘12-10月-17’),如果指定了第2个参数,则可以按照格式去写字符串,-- 如:TO_DATE(‘2008-10-12’, ‘YYYY-MM-DD’)
insert into emp(empno,ename,job,HIREDATE) values(8810,‘Andy’,‘CLERK’,
TO_DATE(‘2008-10-12’, ‘YYYY-MM-DD’));
insert into emp(empno,ename,job,HIREDATE) values(8811,‘Andy’,‘CLERK’,
TO_DATE(‘12-10月-17’));

3.3 单行函数中的通用函数

1)nvl(e1,e2): 空值替代函数,如果e1为null,就返回e2的值,否则返回e1
– 查询员工的工号,姓名,总收入(工资+奖金)
select empno ,ename, sal+nvl(comm,0) 总收入 from emp ;
– 查询员工的工号,姓名,全年年薪
select empno ,ename, (sal+nvl(comm,0))*12 全年年薪 from emp ;
2)NVL2(exp1, exp2, exp3)

说明:如果表达式exp1的值不为null,则返回exp2的值,否则返回exp3的值。
– nvl2(e1,e2,e3):如果e1不为空,就返回e2,否则返回e3
select empno ,ename, sal+nvl2(comm,comm,0) 总收入 from emp ;

3.4 多行函数

针对一组数据(多条记录)进行运算,只返回一个结果的函数,又叫分组函数或聚合函数。
1)sum():对一组数字(数值类型)进行求和
2)Avg():针对一组数字,求平均值
3)Count():求总记录数(总行数)
4)Max():求最大值
5)Min():求最小值
Count()函数比较特殊:
Count(): 其中的代表所有字段,统计字段所出现的总行数(总记录数),不会跳过字段为空的行,即返回表的总记录数
select count(*) from emp; //返回17,表的总记录数是17

Count(exp):exp可以是表达式或者是字段,返回exp的值不为null的总记录数,跳过exp值为null的行

例如
– 统计领取了奖金的员工的数量
select count(comm) from emp; //返回4,comm字段值不为null的总行数为4

count(distinct(exp)):返回表达式exp值不重复的、非空的记录数目。
也可写成count(distinct exp)
– 查询员工的不同职位且职位不重复的总数量
select count(distinct job) from emp;
注意:在表中,主键的值是不能为空的,在统计表的总记录数时,除了写select count(*) from 表名,还可以写select count(主键) from 表名

猜你喜欢

转载自blog.csdn.net/qq_41532872/article/details/86584699