根据提供的文件信息,我们可以归纳出一系列关于Oracle数据库学习的关键知识点,包括SQL语句的基本操作、字符串处理函数、日期格式化、数值转换、聚合函数的使用、子查询的应用、连接查询的不同类型以及更复杂的多表查询等。下面将对这些知识点进行详细解释。 ### 1. Oracle SQL 基础 - **登录SQL Plus**: `sqlplus sys/bjsxtassysdba` 是一种常用的登录方式,其中`sys`是用户名,`bjsxtassysdba`是密码。 - **描述表结构**: 使用 `DESC` 命令可以查看表结构,如 `DESC emp` 可以查看`emp`表的列名和数据类型。 - **查询当前日期**: `SELECT SYSDATE FROM DUAL;` 返回系统当前日期时间。 - **字符串拼接**: 使用 `||` 运算符来拼接字符串,例如 `SELECT emname || 'aa' FROM emp;` 将返回`emp`表中每条记录的`emname`值后加上`aa`。 - **字符串转义字符**: 在使用`LIKE`子句时,如果需要匹配通配符`%`或`_`本身,可以使用转义字符`ESCAPE`,例如 `SELECT name FROM dual WHERE name LIKE '%$%%' ESCAPE '$';` 表示查找包含`%`的`name`。 - **排序**: `ORDER BY` 子句用于按一个或多个列的升序(ASC)或降序(DESC)对结果集进行排序,如 `SELECT name FROM dual ORDER BY id DESC, age ASC;` 按`id`降序排序,如果`id`相同,则按`age`升序排序。 ### 2. 字符串与日期处理函数 - **字符串大小写转换**: `LOWER()` 和 `UPPER()` 函数分别用于转换为小写和大写,例如 `SELECT LOWER(name) FROM dual;` 返回`name`列的小写形式。 - **字符串截取**: `SUBSTR()` 函数用于截取字符串的一部分,如 `SELECT SUBSTR(name, 2, 3) FROM dual;` 截取`name`列从第2个字符开始的3个字符。 - **字符转换**: `CHR()` 和 `ASCII()` 分别用于将数字转换为对应的字符,以及将字符转换为其ASCII码值。 - **格式化输出**: `TO_CHAR()` 函数可以将日期或数字格式化为指定的格式输出,例如 `SELECT TO_CHAR(SAL, '$99,999,9999') FROM emp;` 将`SAL`列的数值格式化为货币形式。 - **日期格式化**: `TO_DATE()` 和 `TO_CHAR()` 可以用于转换日期格式,如 `SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH:MI:SS') FROM DUAL;` 将当前日期时间按照指定格式输出。 ### 3. 聚合函数 - **统计**: `COUNT()`, `SUM()`, `AVG()`, `MAX()`, `MIN()` 等函数用于执行简单的统计数据操作。 - **分组查询**: 使用`GROUP BY`子句可以按照一个或多个列的值进行分组,如 `SELECT DEPTNO, MAX(SAL) FROM EMP GROUP BY DEPTNO;` 计算每个部门的最大薪资。 - **HAVING 子句**: 与`WHERE`子句类似,但用于过滤分组后的结果集,例如 `HAVING AVG(SAL) > 2000` 用于筛选平均薪资大于2000的结果。 ### 4. 复杂查询 - **子查询**: 子查询可以在`WHERE`子句中使用,如 `WHERE SAL IN (SELECT MAX(SAL) FROM EMP GROUP BY DEPTNO)` 用于筛选出每个部门最高薪资的员工。 - **连接查询**: - 内连接: 如 `SELECT ENAME FROM EMP WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME = 'RESEARCH')` 用于找出在研究部门工作的员工。 - 外连接: 如 `SELECT ENAME, DNAME FROM EMP FULL JOIN DEPT ON (E.DEPTNO = D.DEPTNO)` 用于获取所有员工及其所在部门的信息,即使有些员工没有对应部门也显示出来。 - 自连接: 两个表之间基于相同的条件连接自身,通常用于层次结构或一对多关系的数据。 - **NOT IN 和 NOT EXISTS**: `NOT IN` 用于排除某些特定的值,而`NOT EXISTS`则用于排除不存在的行。 ### 5. 视图与多表关联查询 - **视图**: 视图是存储在数据库中的查询结果,可以通过创建视图来简化复杂查询或提供安全层。 - **多表关联查询**: 通过`JOIN`关键字连接多个表,如 `SELECT E.ENAME, S.LOSAL, S.HISAL FROM EMP E, SALGRADE S WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL` 用于查询每个员工的薪资等级范围。 以上是对提供的“oracle学习笔记”中的关键知识点的总结。这些基本的SQL操作和高级查询技术对于熟练掌握Oracle数据库是非常重要的。
2、isqlplus不用装客户端也行。
3、sqlplus sys/bjsxt as sysdba
4、desc emp/dept/salgrade;//显示表结构
5、select sysdate from dual;//显示日期
6、select a*12 "nihao Y" from dual;//别名中有空格用双引号
7、select emname||'aa' from emp;//连接字符
8、select 'wo'||'a''a' from emp;两个单引号代表一个一个点印单引号,返回结果为woa'a
9、select distict a from dual;
10、select name from dual where name is null//空值查找。
11、select name from dual where name like '%a%'//包含a的所有name,like ‘%\%%’包含%的name。 /为转义字符
12、自己定义转义字符
select name from dual where name like '%$%%' escape'$'//name里包含%的纪录,并定义了$为转义字符。
13、select name from dual order by id desc/asc ;--按降序/升序排列
14、select name from dual order by id desc,age asc;--先按id降序排列再按age升序排列。
15、select lower(name) from dual;--name 都小写
16、select substr(name,2,3)from dual;--把name从第二个字母开始截取3个字符。
17、select chr(65)from dual;--转换成A
18、slect ascii(‘A’)from dual;--转换成ascii码65;
19、select to_char(sal,$99,999,9999)from emp
--结果$800.0000 ,$1,600.0000。如果把$换成L则输出¥800.0000 ,¥1,600.0000。如果把99,999,9999换成00,000,0000则输出为$00800.0000,$01,600.0000
20、select to_char(sysdate,'yyyy-mm-dd hh:mi:ss')from dual ;--格式化时间,hh为12进制小时,hh24为24进制小时。
21、select hierdate wehre hierdate> to_date('1981-2-30 12:34:51','yyyy-m-dd hh24:mi:ss');--格式化特定字符串为日期
22、select sal from emp where sal >to_number('$1,250.00','$9,999,00');
23、select to_char (12.356,'999,99') from dual;--12.35
select round(12.356,'999,99') from dual;--12.36
24、组函数:sum avg count max min
25、select count(name)from emp;--统计name不为null的纪录数。
----------------------------------
2、一条综合查询
select avg(sal)
from emp
where sal > 1200 --重点
group by deptno
having avg(sal) > 2000
order by avg(sal) desc
3、select ename
from emp
where sal in (select max(sal) from emp group by deptno) ;--条件返回多条值 ,肯定会出错,因为sal满足的是in后()内的多条值中的一条即可。
4、sql1992不支持全外连接,sql1999支持
select ename,dname from emp e full join dept d on (e.deptno=d.deptno);--把全部记录输出,相当于同时用了左右连接。
5、笛卡尔积出现的例子
select ename,dname from emp,dept;--没有where条件,输出笛卡尔积
6、不用组函数求最高工资
select sal
from emp
where sal not in
(select distinct (e1.sal) from emp e1, emp e2 where e1.sal < e2.sal)
7、可以把一个很长的sql当作一个view
求部门平均工资等级最低的部门名称
select dname
from dept
where deptno =
(select deptno
from (select avg(grade) avgrade, deptno
from (select e.sal, s.grade, e.deptno
from emp e, salgrade s
剩余19页未读,继续阅读
- 粉丝: 23
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- SEW Interface.xlsx 智能设备的相关参数及调试方法\SEW 变频器IO接口说明
- python实现的将 高德地图api内的省市区数据转换为指定表结构的sql语句
- 麒麟系统下Veyon远程控制软件的安装与配置指南
- 滚床SEW MOVIFIT- FC变频器配置手册.docx
- 免费的电脑时钟,副屏显示时间,可以设置字体大小和颜色
- C++语言实现的简单协程库.zip
- 升降机SEW MOVIDRIVE 变频器配置手册.docx
- 中文版infineon比例阀专用控制芯片TLE82453器件手册
- 移载机SEW MOVIDRIVE 变频器配置手册.docx
- C++11语言级别实现的简易数据库连接池.zip