Oracle数据库初级学习
- 第一天 SQL查询语句
CMD——SQLPLUS----账号 soctt 密码 tiger,输入完成后进入SQL数据库,如图显示即连接成功。
连接成功后 ,我们首先设置一下基本界面,
--设置 每列显示的字符数
set LINES 1000;
set pages 100;
--清屏
host cls

---------------------SQL语句中包含什么信息
DQL
数据库查询语言
SELECT
DML
数据库操作语言
INSERT DELETE UPDATE
DDL
数据库定义语言
CREATE ALTER
DCL
数据库控制语言
GRANT
今天我们主要学习的就是DQL,数据库查询语言。
默认情况下,Orale数据库中有4张表我们需要关注分别是
--查询表
SELECT TABLE_NAME FROM USER_TABLES;
DEPT
EMP
SALGRADE
BONUS
--查询表对应的列
输入DESC DEPT;
DEPTNO
DNAME
LOC
输入DESC EMP;
EMPNO
ENAME
JOB
MGR
HIREDATE
SAL
COMM
DEPTNO
输入DESC SALGRADE;
GRADE
LOSAL
HISAL


/*
DQL语言之列的查询
*/
SELECT 列名 FROM 表名 WHERE 条件
--简单的查询列
SELECT ENAME FROM EMP;(查找EMP表中的ENAME列)
SELECT ENAME,SAL,JOB FROM EMP;(查找EMP表中 ENAME,SAL,JOB三列)
SELECT * FROM EMP;(查找EMP表中所有列)
*通配符:优点简便,缺点效率低

--设置别名的三种方式
1、SELECT ENAME "员工姓名",SAL "薪资" FROM EMP;
2、SELECT ENAME AS "员工姓名",SAL AS "薪资" FROM EMP;
3、SELECT ENAME 员工姓名,SAL "薪资" FROM EMP;
推荐第三种方式,具体效果见下图。

--去掉重复的列
SELECT DISTINCT JOB FROM EMP;
/*
DQL语言之条件查询
*/
有时候我们需要根据一定的条件对数据库中的数据进行查询,下面就简单的介绍一下DQL中的条件查询。
在SQL中,查询语句多用WHERE关键字
--等值查询
SELECT ENAME,SAL FROM EMP WHERE SAL = 3000;
SELECT ENAME,SAL FROM EMP WHERE ENAME = 'SMITH';
SELECT ENAME,SAL FROM EMP WHERE JOB = 'SALESMAN'
--非等值查询
SELECT ENAME,SAL FROM EMP WHERE SAL > 3000;
SELECT ENAME,SAL FROM EMP WHERE SAL < 3000;
SELECT ENAME,SAL FROM EMP WHERE SAL <= 3000;
SELECT ENAME,SAL FROM EMP WHERE SAL >= 3000;
SELECT ENAME,SAL FROM EMP WHERE SAL != 3000;
SELECT ENAME,SAL FROM EMP WHERE SAL <> 3000;
SELECT ENAME,SAL FROM EMP WHERE JOB <> 'SALESMAN';
<>符的意思也为不等号,其他符号意思同JAVA。
--区间
SELECT ENAME,SAL FROM EMP WHERE SAL BETWEEN 800 AND 1600;
--空值判断 null
SELECT ENAME,COMM FROM EMP WHERE COMM IS NULL;
SELECT ENAME,COMM FROM EMP WHERE COMM IS NOT NULL;
--从集合中选取所需要的
SELECT ENAME,SAL FROM EMP WHERE ENAME IN('SMITH','SCOTT','ABCD');
SELECT ENAME,SAL FROM EMP WHERE ENAME NOT IN('SMITH','SCOTT','ABCD');
SELECT ENAME FROM EMP WHERE JOB IN('SALESMAN','CLERK');
--模糊查询
--%代表了任意字符的任意次数
SELECT ENAME FROM EMP WHERE ENAME LIKE 'C%';(开头为C的数据)
SELECT ENAME FROM EMP WHERE ENAME LIKE '%S';(结尾为S的数据)
SELECT ENAME FROM EMP WHERE ENAME LIKE 'S%';(开头为S的数据)
SELECT ENAME FROM EMP WHERE ENAME LIKE '%S%';(数据中任意位置包含S的数据)
--_代表了任意字符的一次
SELECT ENAME FROM EMP WHERE ENAME LIKE '_A%';
SELECT ENAME FROM EMP WHERE ENAME LIKE '__A%';
SELECT ENAME FROM EMP WHERE ENAME LIKE '%A__';
--转义字符
SELECT ENAME FROM EMP WHERE ENAME LIKE '%\%%' ESCAPE '\';
--排序
--ASC(默认)升序desc降序
SELECT * FROM EMP ORDER BY SAL;
SELECT * FROM EMP ORDER BY SAL ASC;
SELECTX * FROM EMP ORDER BY SAL DESC;
SELECT * FROM EMP ORDER BY HIREDATE;
SELECT * FROM EMP ORDER BY ENAME;
SELECT * FROM EMP ORDER BY JOB;
SELECT * FROM EMP ORDER BY JOB,EMPNO;
SELECT * FROM EMP ORDER BY DEPTNO,JOB DESC,EMPNO;
SELECT * FROM EMP WHERE ENAME LIKE '%A%' ORDER BY SAL;
--函数,类似于java中的方法
SELECT ENAME || '的年薪为' || SAL*12 FROM EMP;
SELECT ENAME,(SAL+COMM)*12 FROM EMP;
SELECT * FROM EMP ORDER BY COMM;
COMM=NULL?0:COMM;
--NVL (expr1, expr2)
--若expr1为NULL,返回expr2;expr1不为NULL,返回expr1。
--单行函数
-- 进去一个出来一个
/*
DQL语言之单行函数--数字
(JAVA) ABS CEIL FLOOR ROUND SQRT POW MOD
*/
SELECT SAL/1000,CEIL(SAL/1000) 向上取整,FLOOR(SAL/1000) 向下取整 FROM EMP;
SELECT SAL/1000,ROUND(SAL/1000) 四舍五入 FROM EMP;
SELECT SAL/1000,TRUNC(SAL/1000),TRUNC(SAL/1000,1),TRUNC(SAL/10,-2) FROM EMP;
SELECT MOD(SAL,8000) FROM EMP;
/*
DQL语言之单行函数--字符串
(JAVA) TRIM,REPLACE,SPLIT,SUBSTRING,TOUPPERCASE,TOLOWERCASE,CONCAT,INDEXOF,LIX,CHARAT
*/
SELECT CONCAT(CONCAT('员工的姓名为:',ENAME),'--AAAA') FROM EMP;
SELECT ENAME,UPPER(ENAME),LOWER(ENAME),INITCAP(ENAME) FROM EMP;
SELECT LTRIM(' A B '),RTRIM(' A B '),TRIM(' A B ') FROM EMP;
SELECT ENAME ,LPAD(ENAME,10,'#'),RPAD(ENAME,10,'&') FROM EMP;
SELECT ENAME,INSTR(ENAME,'A') FROM EMP;
SELECT ENAME,LENGTH(ENAME) FROM EMP;
/*
DQL语言之单行函数--日期
(Java)
*/
SELECT SYSDATE FROM DUAL;
SELECT SYSDATE + 13 FROM DUAL;
SELECT ADD_MONTHS(SYSDATE,12) FROM DUAL;
SELECT SYSDATE-HIREDATE FROM EMP;
SELECT MONTHS_BETWEEN(SYSDATE,HIREDATE) FROM EMP;
SELECT LAST_DAY(HIREDATE) FROM EMP;
SELECT NEXT_DAY(SYSDATE,'星期二') FROM DUAL;
/*
DQL语言之单行函数--转换函数
*/
--将日期转成字符串
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'MON') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'DY') FROM DUAL;
--将数字转成字符串
SELECT TO_CHAR(1234.5678,'99999.99999') FROM DUAL;
SELECT TO_CHAR(1234.5678,'00000.00000') FROM DUAL;
SELECT TO_CHAR(1234.5678,'00.00') FROM DUAL;
SELECT TO_CHAR(1234.5678,'99.99') FROM DUAL;
SELECT TO_CHAR(1234.5678,'0000.00') FROM DUAL;
SELECT TO_CHAR(1234.5678,'9999.99') FROM DUAL;
SELECT TO_CHAR(1234.5678,'$00000.00000') FROM DUAL;
SELECT TO_CHAR(1234.5678,'L00000.00000') FROM DUAL;
SELECT TO_CHAR(1234567890,'$000,000,000,000.00') FROM DUAL;
--相反的
SELECT TO_DATE('2012-11-11','YYYY-MM-DD') FROM DUAL;
SELECT TO_NUMBER('123.45600','9999.99999') FROM DUAL;
SELECT TO_NUMBER('123.45600','0000.99999') FROM DUAL;
/*
DQL语言之单行函数--其他函数
*/
--多行(组)函数
-- 无论进去多少个,都出来一个
SELECT MAX(SAL),MIN(SAL),AVG(SAL) FROM EMP;
SELECT COUNT(SAL),SUM(SAL) FROM EMP;
SELECT MAX(ENAME),MIN(ENAME) FROM EMP;
--AVG和sum只能计算纯数字
SELECT AVG(ENAME),SUM(ENAME) FROM EMP;
--空值的处理
SELECT MIN(COMM),MAX(COMM) FROM EMP;
SELECT COUNT(COMM) FROM EMP;
SELECT SUM(COMM) FROM EMP;
SELECT AVG(COMM) FROM EMP;
部分练习:
--1.找出各月倒数第3天受雇的所有员工.
SELECT ENAME,HIREDATE FROM EMP WHERE HIREDATE=LAST_DAY(HIREDATE)-2;
--2.找出早于12年前受雇的员工.
SELECT ENAME,HIREDATE FROM EMP WHERE MONTHS_BETWEEN(SYSDATE,HIREDATE)/12>13;
--3.以首字母大写的方式显示所有员工的姓名.
SELECT INITCAP(ENAME) FROM EMP;
--4.显示正好为5个字符的员工的姓名.
SELECT ENAME FROM EMP WHERE LENGTH(ENAME)=5;
--5.显示不带有"R"的员工的姓名
SELECT ENAME FROM EMP WHERE ENAME NOT LIKE '%R%';
--6.显示所有员工姓名的前三个字符.
SELECT SUBSTR(ENAME,1,3)FROM EMP;
--7.显示所有员工的姓名,用a替换所有"A"
SELECT REPLACE(ENAME,'A','a')ENAME FROM EMP;
--8.显示满10年服务年限的员工的姓名和受雇日期.:
SELECT ENAME,HIREDATE FROM EMP WHERE MONTHS_BETWEEN(SYSDATE,HIREDATE)/12>10;
--9.显示员工的详细资料,按姓名排序.
SELECT * FROM EMP ORD;
--10.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面.
SELECT ENAME,HIREDATE FROM EMP ORDER BY HIREDATE ASC;
--11.显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序.
SELECT ENAME,JOB,SAL FROM EMP ORDER BY JOB DESC,SAL ASC;
--12.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面.
SELECT ENAME,TO_CHAR(HIREDATE,'MM-YYYY') FROM EMP ORDER BY TO_CHAR(HIREDATE,'MM')DESC,TO_CHAR(HIREDATE,'YYYY')ASC;
--14.找出在(任何年份的)2月受聘的所有员工。
SELECT ENAME,HIREDATE FROM EMP WHERE TO_CHAR(HIREDATE,'mm')=2;
--15.对于每个员工,显示其加入公司的天数.
SELECT ENAME,ROUND(SYSDATE-HIREDATE)Day FROM EMP;
--16.显示姓名字段的任何位置包含"A"的所有员工的姓名.
SELECT ENAME FROM EMP WHERE ENAME LIKE '%A%';
Oracle数据库初级学习的更多相关文章
- Oracle数据库初级学习 2
今天我们介绍Oracle数据库中剩余的查询方法,今天的查询方法会比昨天的更为复杂一些(PS:我也是个初学者,请见谅..). 一.分组函数 分组函数是为了区分同一个表中的不同数据而建立,其关键字为GRO ...
- Oracle 数据库 基础学习 (一) SQL基本知识
Oracle 从零开始,不知所措.要掌握一种技能,最好的方式是先学会怎么使用它,然后再深入学习,先有样子,再有技术. 一,什么是数据库? 为什么需要数据库? 数据库实质上是一个信息的列表,或者是一 ...
- 【Oracle教程资源大合集】Oracle数据库免费学习资源汇总
Oracle的产品非常丰富,各类学习资源也五花八门,本文将介绍Oracle官方的免费教程与风哥整理的Oracle视频教程: 1.Oracle帮助中心 Oracle帮助中心也称为Oracle文档中心,这 ...
- oracle 数据库的学习1
1.oracle 数据库常用的基本类型 char(10) -->存储固定长度的字符串 varchar2(10)-->存储可变长的字符串 Date INTEGER -->存储整数 N ...
- Oracle 数据库基础学习 (三) Oracle 四个表结构
Oracle 四个表的 emp dept salgrade bunus 的结构,记住有利于后期SQL语句的学习 雇员表(emp) No. 字段 类型 描述 1 empno NUMBER(4) 表示 ...
- oracle数据库逐步学习总结【基础一】
原创作品,转载请在文章开头显眼位置注明出处:https://www.cnblogs.com/sunshine5683/p/10059955.html 一.oracle的基本命令 1.连接命令 用法:c ...
- Oracle 数据库基础学习 (七) SQL语句综合练习
一.多表查询综合练习 1. 列出高于在30部门工作的所有人员的薪金的员工的姓名.部门名称.部门编号.部门人数 分析: 需要的员工信息: |-emp表:姓名.部门编号 |-dept表:部门名称.部门编 ...
- Oracle 数据库基础学习 (二) 学习小例子:创建一个表,记录商品买卖的情况
运行环境:Oracle database 11g + PL/SQL Developer ex: --创建一个表 create table plspl_test_product( --加入not n ...
- Oracle数据库的学习
复制数据库结构到另外一数据库的的语句,首先在数据库创建链接,比如我在131数据库,dblink_018 的018为链接名称,随便取 ,可在此表查看数据库链接 select * from dba_db_ ...
随机推荐
- btrfs使用方法
创建文件系统 mkfs.btrfs 命令建立一个 btrfs 格式的文件系统.可以用如下命令在设备 sda5 上建立一个 btrfs 文件系统,并将其挂载到 /btrfsdisk 目录下: #mkfs ...
- SQL触发器实例
SQL触发器实例讲解(本文是来自百度文库) 备注:本人建了一个站特价汇,我想记录每个商品的点击量,然后按照点击量来牌名商品,想要提高效率,所以必须得用触发器,下面是本人在百度文库中的找到的学习资料,分 ...
- 文件上传和下载(可批量上传)——Spring(二)
针对SpringMVC的文件上传和下载.下载用之前“文件上传和下载——基础(一)”的依然可以,但是上传功能要修改,这是因为springMVC 都为我们封装好成自己的文件对象了,转换的过程就在我们所配置 ...
- C#报修系统Ⅱ
用户需求: 1.用户可以注册,可以登录. 2.需要一个报修界面,当点击“报修”按钮时,软件会把用户报修的信息保存起来,更新报修次数,同时会清空相应的文本框,软件还要要检查所有文本框是否为空,空的话给出 ...
- 13.KVM安装之网桥
安装必须的几个库和软件(最好下载一个163的yum源,速度快点) $ yum -y install kvm python-virtinst libvirt tunctl bridge-utils vi ...
- linux 之SCP
一.从本地到远程复制 1.复制文件 * 命令格式: 1.scp -P remote_port local_file remote_username@remote_ip:remote_folder 或者 ...
- php总结 --- 2.字符串
字符串 恩聪 正则表达式 恩聪 中文验证 if (preg_match("/[\x{4e00}-\x{9fa5}]{2,4}\s{0,}\w{8,15}/u", $keyword) ...
- hdu 5358 First One
题目链接:hdu 5358 思路不难理解,就是个尺取法而已,floor(log2X) + 1 就是求 X 的二进制表示的位数,对于题目来说这个值最多只是 30+,从这里入手开始枚举,运用尺取法可以达到 ...
- Evolutionary Computing: 1. Introduction
Outline 什么是进化算法 能够解决什么样的问题 进化算法的重要组成部分 八皇后问题(实例) 1. 什么是进化算法 遗传算法(GA)是模拟生物进化过程的计算模型,是自然遗传学与计算机科学相互结合的 ...
- 【Python】下拉框元素的找法
首先,从selenium.webdriver.support.ui里调用Select类,如下: 其次,找到下拉框元素,再找下拉框里要最终选择的元素,如下: 注意:调用Select类后,不必再加clic ...