-- 在数据库中创建用户 并设置密码
-- 建用户 必须用 system 用户 ,普通用户没有权限
CREATE USER ZHOUPENG IDENTIFIED BY 123456;
-- 给 ZHOUPENG 用户授权 ,让该用户可以访问 数据库 并且可以操作数据库中的资源
GRANT
CONNECT , -- 连接角色权限
RESOURCE -- 资源的权限,可以创建各种数据库的对象
TO ZHOUPENG ;
---------------------------------- SQL 查询 -----------------------------------------
SQL:结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,
是一种数据库查询和 程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;
同时也是数据库脚本文件的扩展名。
-- 查询
1 基本查询
2 条件查询
3 子查询
4 关联查询
--- SQL 查询的执行顺序
语法结构 注释 执行顺序
SELECT -- 查询所需的列/字段 ⑤
FROM -- 从哪个表/哪些表中查询 ①
WHERE .. AND ... -- 过滤条件1 AND 过滤条件2 ②
GROUP BY -- 按条件1分组 ,按条件2分组 ③
HAVING .. AND ... -- 分组以后的过滤条件3 ④
ORDER BY -- 按条件1排序 ,按条件2排序 ⑥
1 基本查询
SELECT * -- SELECT 的意思是 查询/选择 要查询的列 , * 是通配符,表示所有(列)
FROM EMP; -- FROM 表示从哪个表查询 , EMP 是我们的员工表。
-- 给EMP员工表的每个字段加个注释
COMMENT ON COLUMN EMP.empno IS '员工编号';
COMMENT ON COLUMN EMP.ENAME IS '员工姓名';
COMMENT ON COLUMN EMP.JOB IS '员工岗位';
COMMENT ON COLUMN EMP.MGR IS '员工领导的编号';
COMMENT ON COLUMN EMP.HIREDATE IS '员工入职时间';
COMMENT ON COLUMN EMP.SAL IS '员工基本工资';
COMMENT ON COLUMN EMP.COMM IS '员工奖金';
COMMENT ON COLUMN EMP.DEPTNO IS '员工的部门编号';
-- 基本查询 之 表的别名
SELECT E.empno,
E.ename,
E.job,
E.mgr,
E.hiredate,
E.sal,
E.comm,
E.deptno
FROM EMP E ; -- E 是 EMP 表的别名 ,设置表的别名 E以后 ,查询或者过滤字段就可以用 E. 来关联出我们需要的列。
-- 简单的单表查询 不需要加别名 ,但是多表查询 必须加 别名;
-- 基本查询 之 列的别名
SELECT E.empno AS "员工编号", -- 这种写法是 列设置别名的标准写法;
E.ename AS 员工姓名 ,
E.job "员工岗位" ,
E.mgr 员工领导编号 -- 这种是我们通常 简化的写法
FROM EMP E ;
----------- 条件查询 -----------
oracle 中的常用数据类型
字符串 VARCHAR2(X) -- x 表示 字符串的最大长度。
数字/数值 NUMBER(X,Y) -- X 是数字的最大长度,Y 是小数部分的长度, 比如 number(7,2) 整数部分最大5位,小数部分2位
日期 DATE
针对上面的三种数据类型 ORACLE 提供了三种转换函数
TO_CHAR(目标字段,输出格式化)
TO_NUMBER() -- 只能将 类似数字的字符 转换成 数值 ,比如 ‘1234’
TO_DATE(目标字段,输出格式化)
SELECT '20200527' 字符串, 20200527 数字, TO_DATE('20200527','YYYY-MM-DD') 日期 FROM DUAL;
-- 对 字符串进行条件过滤
--查出 SCOTT 员工的所有信息
SELECT *
FROM EMP
WHERE ENAME = 'SCOTT'; -- SCOTT 是字符串 必须加 单引号
-- 对 数值类的条件进行过滤
查询出 部门10 中的所有员工
SELECT *
FROM EMP
WHERE DEPTNO = 10 ; -- 10 是数字 所以不用加单引号
SELECT *
FROM EMP
WHERE DEPTNO = '10' ; -- 这里已经做了 隐式转换 ,写SQL的时候 尽量避免使用 隐式转换
-- 对日期格式数据进行过滤
比如查询1981年入职的所有员工
SELECT *
FROM EMP
WHERE TO_CHAR(HIREDATE,'YYYY') = '1981'; ------如果查月份呢???
SELECT *
FROM EMP
WHERE HIREDATE BETWEEN TO_DATE('19810101','YYYY-MM-DD') AND TO_DATE('19811231','YYYY-MM-DD') ;
-- 条件查询之 范围查询 IN ()
查询部门10和部门30中的员工
SELECT *
FROM EMP
WHERE DEPTNO IN (10,30);
查询 WARD 和 ALLEN 的详细信息
SELECT *
FROM EMP
WHERE ENAME IN ('WARD','ALLEN');
-- 条件查询之 范围查询 BETWEEN .. AND
查询工资在1000到2000之间的所有员工
SELECT *
FROM EMP
WHERE SAL BETWEEN 1000 AND 2000; -- BETWEEN AND 中 ,AND前面必须放较小的数值,后面放较大的数值
-- 条件查询之 NULL 值的判断 is NULL
查询没有奖金的员工
SELECT *
FROM EMP
WHERE COMM IS NULL;
反之
SELECT *
FROM EMP
WHERE COMM IS NOT NULL;
-- 模糊查询 / 模糊匹配 LIKE
查询出 名字第一个字母是A的员工
SELECT *
FROM EMP
WHERE ENAME LIKE 'A%' ;-- % 是like中的通配符,表示匹配任意字符
查询出 名字最后一个字母是S的员工
SELECT *
FROM EMP
WHERE ENAME LIKE '%S' ;
查询出 名字中包含字母 O 的员工
SELECT *
FROM EMP
WHERE ENAME LIKE '%O%' ;
查询名字是4个字的员工
SELECT *
FROM EMP
WHERE ENAME LIKE '____'; -- 4个下划线
查询名字是5个字,但是第二字母是 O 的员工
SELECT *
FROM EMP
WHERE ENAME LIKE '_O%'
AND ENAME LIKE '_____';
SELECT *
FROM EMP
WHERE ENAME LIKE '_O___';