目录
2.先输入用户名,再输入密码。这种方式输入密码的时候完全不可见。
一、oracle简介
Oracle数据库是美国甲骨文公司提供的分布式数据库产品,是目前Client/Server和Browser/Server架构通用的数据库。
二、SQLPLUS简介
SQLPLUS是Oracle自带的数据库操作程序,界面简单,功能稳定,适合开发和学习使用。启动的方式只需要在运行窗口中输入sqlplus,回车即可。其登录方式有两种:
1.直接输入用户名和密码,中间使用/分割,如下所示
请输入用户名: scott/tiger
2.先输入用户名,再输入密码。这种方式输入密码的时候完全不可见。
请输入用户名:scott
输入口令:
三、SQL查询
1.SQL语句
主要有三种语句:
DML 数据操作语言查询(DQL)和更新(增加、删除、修改)操作。
DDL 数据定义语言定义数据库对象,例如一些数据库设计人员进行表结构的定义。
DCL 数据控制语言控制用户操作权限,一般由DBA(数据库管理员)负责,程序员基本不用学习。
2.Scott账户
Scott是Oracle初创时期的程序员名字,一般登录的密码是tiger。查看Scott账户中存在的表SELECT * FROM tab;scott账户中存在四张表 通过 DESC 表名 查看
3.简单的列查询
查询的结果包含所有的行(条目、记录),依次展示每条数据,唯一能做的是控制显示的列。
其语法格式是:
SELECT [DISTINCT]* 列[别名],列[别名],... 2.控制要显示的数据列
FROM 表名称[别名] 1.确定数据查询来源
【例子】查询每个雇员的编号、姓名和年薪(年薪=基本工资x13)
SELECT empno,ename,sal*13 FROM emp;
也可以给列起列名。
SELECT empno 编号,ename 姓名,sal*13 年薪 FROM emp;
但是在开发过程中注意要减少中文的使用
4.限定查询
限定查询是在简单查询的基础上,显示结果中的行数,即可以只显示一部分记录。
语法结构如下:
SELECT [DISTINCT]* 列[别名],列[别名],... 3.控制要显示的数据列
FROM 表名称[别名] 1.确定数据查询来源
[WHERE 条件(s)]; 2,根据判断条件选择参与的运算行
限定查询主要通过WHERE子句来进行,支持6种运算:
4.1关系运算
运算符 含义
> 左边的值是否大于右边的值
< 左边的值是否小于右边的值
>= 左边的值是否大于等于右边的值
<= 左边的值是否小于等于右边的值
!= 左右两边的值是否不等于
<> 左右两边的值是否不等于
= 左右两边的值是否等于
【例子】查询所有基本工资高于2000的雇员信息。
SELECT * FROM emp WHERE sal>2000;
4.2取值范围运算
取值范围运算使用BETWEEN...AND...,AND两边是区间(闭区间)。
【例子】查询所有在1981年雇佣的雇员信息。
SELECT * FROM emp WHERE hiredate BETWEEN '01-1月 -81' AND '31-12月-81';
4.3基数范围运算
主要使用关键字IN、NOT IN
【例子】查询出雇员编号是7369、7566、7839、8899(不存在)的雇员信息。
此例不能使用BETWEEN...AND,需要使用IN
SELECT * FROM emp WHERE empno IN(7369,7566,7839,8899);
实际上上面的IN操作等同于下面的操作:
SELECT * FROM emp
WHERE empno=7369 OR empno=7566 OR empno=7839 OR empno=8899;
4.4模糊查询
模糊查询使用关键字LIKE,可以只输入一部分查询的内容,其它部分使用两个符号来进行标记:
_ 匹配任意一个字符
% 匹配任意多个字符(0,1,若干)
【例子】查询所有姓名以字母A开头的雇员信息。
SELECT * FROM emp WHERE ename LIKE 'A%';
4.5空判断
【例子】查询不领取佣金的雇员信息。
SELECT * FROM emp WHERE comm IS NOT NULL;
SELECT * FROM emp WHERE NOT comm IS NULL;
4.6 逻辑运算
OR或操作,所有的条件满足一个,结果就满足。
NOT非操作,将结果取反。
【例子】查询所有薪金高于1200的销售信息。
--查询所有薪金高于1200的销售信息。
SELECT * FROM emp WHERE sal>1200 AND job='SALESMAN';
5.查询排序
可以按照指定的列的顺序从大到小或从小到大排序。
语法格式如下:
SELECT [DISTINCT]* 列[别名],列[别名],... 3.控制要显示的数据列
FROM 表名称[别名] 1.确定数据查询来源
[WHERE 条件(s)]; 2,根据判断条件选择参与的运算行
[ORDER BY 字段 [ASC|DESC],字段[ASC|DESC],...] 4.数据排序
【例子】所有员工按照工资从高到低排列。
SELECT * FROM emp ORDER BY sal DESC;
【例子】按照工资从高到低排序,如果工资相同,则按照雇佣日期从晚到早排序。
SELECT * FROM emp ORDER BY sal DESC,hiredate DESC;
【例子】按照年薪排序,年薪越高的越靠前。
--先查询所有的人年薪
SELECT ename,sal*12 income FROM emp;
--增加排序(先起的别名,再用别名可以)
SELECT ename,sal*12 income FROM emp ORDER BY income DESC;
四、单行函数
一、字符串函数
1.1大小写转换
- UPPER 转换为全大写
- LOWER 转换为全小写
- INITCAP 转换为首字母大写,其余字母小写的格式
输入参数:要处理的字符串(包括字符串列,后面不再赘述)
返回值:转换后的字符串
【例子】验证大小写转换函数。
SELECT LOWER('Hello World!') FROM dual;
【例子】查询所有雇员的姓名,要求姓名都是小写
SELECT LOWER(ename) FROM emp;
【例子】显示所有部门的名称和位置,要求首字母大写,其余字母小写。
SELECT INITCAP(dname),INITCAP(loc) FROM dept;
1.2 获取长度
函数名称:LENGTH
输入参数:字符串
返回值:字符串的长度,长度指的是字符数量,在当前环境下所有的字符都占用一个长度。
查询所有雇员的姓名以及姓名的长度,并按照姓名的长度进行倒序排列
--不用别名
SELECT ename,LENGTH(ename)
FROM emp
ORDER BY LENGTH(ename) DESC;
--使用别名
SELECT ename,LENGTH(ename) ln
FROM emp
ORDER BY ln DESC;
二、数字函数
2.1 四舍五入
函数名称:ROUND
输入参数1:要处理的数字
输入参数2:保留的小数位,如果要保留到十位百位则使用负数,例如-1、-2......
返回值:处理后的数字
【例子】验证四舍五入函数。
总结
提示:这里对文章进行总结:
--保留两位小数
SELECT ROUND(123.456,2) FROM dual;
--保留十位
SELECT ROUND(123.456,-1) FROM dual;
【例子】显示所有员工的姓名和工资,要求工资精确到百位(四舍五入)
SELECT ename,ROUND(sal,-2) FROM emp;
2.2 截取
函数名称:TRUNC
输入参数和返回值与ROUND完全一样,这两个函数唯一的区别在于保留整数和小数位的逻辑不同,TRUNC直接舍弃后面的位数。
三、日期函数
3.1 伪列
Oracle中所有的表都有以下两个伪列:
- SYSDATE
当前日期
- SYSTIMESTAMP
当前日期和时间
3.2 日期加减计算
【例子】统计出每一个雇员的雇佣天数。
SELECT ename,SYSDATE-hiredate FROM emp;
3.3 计算两个日期之间的月数
函数名称:MONTHS_BETWEEN
输入参数1:计算日期1,通常是更晚的日期
输入参数2:计算日期2,通常是更早的日期
返回值:相差的月数
【例子】统计所有雇员的姓名和工作年限(要求四舍五入到个位)。
SELECT ename,ROUND(MONTHS_BETWEEN(SYSDATE,hiredate)/12,0) FROM emp;
3.4 加月数
基于某个日期加上指定的月数,得到若干月后的日期。
函数名称:ADD_MONTHS
输入参数1:要计算的日期
输入参数2:月数,一个整数
返回值:计算后的日期
3.5 下一个周几
可以求出基于某个日期后,下一个周几的日期。
函数名称:NEXT_DAY
输入参数1:要计算的日期
输入参数2:周几,支持中文和阿拉伯数字,例如‘星期一’,1-7分别表示周日-周六
返回值:计算后的日期
【例子】下个周一是几号?
--使用中文字符串
SELECT NEXT_DAY(SYSDATE,'星期一') FROM dual;
--使用阿拉伯数字
SELECT NEXT_DAY(SYSDATE,2) FROM dual;
3.6 指定月的最后一天
求出某个日期所在的月的最后一天的日期。
函数名称:LAST_DAY
输入参数:要处理的日期
返回值:处理后的日期
【例子】这个月的最后一天是?
SELECT LAST_DAY(SYSDATE) FROM dual;
【例子】查询每个月倒数第三天雇佣的员工信息
SELECT * FROM emp
WHERE hiredate=LAST_DAY(hiredate)-2;
四、转换函数
主要以转字符串函数作为讲解的函数,其它转换函数不作为重点掌握,因为Oracle本身有数据类型自动转换的功能。
函数名称:TO_CHAR
输入参数1:要转换的数据,本次讲解主要使用的是日期
输入参数2:转换的格式,常见的格式有年(yyyy)、月(mm)、日(dd)、时(hh、 hh24)、分(mi)、秒(ss)。
返回值:固定格式的字符串
【例子】显示当前的日期,要求以符合中国人阅读的格式显示。
SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd') FROM dual;
【例子】拆分日期数据,单独以三列的格式显示年月日。
SELECT TO_CHAR(SYSDATE,'yyyy'),TO_CHAR(SYSDATE,'mm'),TO_CHAR(SYSDATE,'dd') FROM dual;
【例子】查询所有在上半年雇佣的雇员信息。
SELECT * FROM emp WHERE TO_CHAR(hiredate,'mm')<=6;
五、空值转换函数
函数名称:NVL
输入参数1:空值或空值列
输入参数2:要把空值转换的默认值
返回值:如果参数1为NULL,返回值是参数2;如果参数1不为NULL,返回值是原数值。
【例子】查询所有雇员的姓名和月收入(月收入=薪金+佣金)。
SELECT ename,sal+NVL(comm,0) FROM emp;
总结
感觉写一篇里太长了,分着写。