处理语言、查询语言

1.事务处理语言(TPL)
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
*/
1.0  DQL(DATA QUERY LANGUAGE)语言:SELECT:
-- 查询语言
-- 简单查询  10种
1.基础查询
   SELECT * FROM 表名;
   SELECT 表别名.列名1 AS 别名1 ,列名2 AS 别名2 FROM 用户名.表名 AS 表别名
2.条件查询
   SELECT * FROM 表名 WHERE 条件;
3.分组查询
   SELECT 列(好几个) , 聚合函数 FROM 表名 GROUP BY 列(好几个);
   -- 聚合函数   MAX() MIN() AVG() SUM() COUNT()
/*
1.确定有几个表
2.确定结果有几列
3.确定条件  WHERE  HAVING  -- 表中的值做筛选用WHERE   
4.要不要分组
5.分组后要不要筛选   -- 聚合值筛选用HAVING
6.要不要排序
*/

   -- 查询EMP表中每个部门的最高工资
   SELECT  DEPTNO,MAX(SAL)  FROM EMP GROUP BY DEPTNO;
   -- 查询EMP表中每个部门每个职位的人数
   SELECT DEPTNO,JOB,COUNT(*)   FROM EMP GROUP BY DEPTNO,JOB;
   -- 查询EMP表中每个部门工资大于1500的人数
   SELECT DEPTNO,COUNT(*)  FROM EMP WHERE SAL>1500 GROUP BY DEPTNO;
   -- 查询哪些部门的CLERK人数大于等于2
   SELECT DEPTNO,COUNT(*) FROM EMP WHERE JOB='CLERK' GROUP BY DEPTNO HAVING COUNT(*)>=2;

4.HAVING查询
  一定是跟在GROUP BY后面,不能单独使用,效果和WHERE一样
  但是 HAVING是对聚合值做筛选
  -- 查询EMP表中部门的最高工资大于3000的部门和对应的最高工资
  SELECT DEPTNO,MAX(SAL)  FROM EMP GROUP BY DEPTNO HAVING MAX(SAL)>3000;

5.排序查询  ORDER BY 列名 ASC/DESC 升序/降序
  -- 查询EMP表所有信息,按照工资升序
  SELECT * FROM EMP ORDER BY SAL ASC;  -- 升序
  SELECT * FROM EMP ORDER BY SAL DESC;  -- 降序

-- SQL的写法顺序
SELECT * FROM 表名 WHERE 条件 GROUP BY 分组的列 HAVING 条件 ORDER BY 列名 ASC/DESC;

-- SQL的执行顺序(很重要,面试会问的)
FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY

6.区间查询   列名 BETWEEN A AND B   [A,B] 包含端点值
  -- 查询工资在2000-3000之间的员工信息  包含2000和3000
  SELECT * FROM EMP WHERE SAL BETWEEN 2000 AND 3000;
  SELECT * FROM EMP WHERE SAL>=2000 AND SAL<=3000;   -- 推荐

7.模糊查询 LIKE
  占位符  _
  通配符  %
  -- 查询姓名是S开头的员工信息
  SELECT * FROM EMP WHERE ENAME LIKE 'S%';
  -- 查询姓名是S结尾的员工信息
  SELECT * FROM EMP WHERE ENAME LIKE '%S';
  -- 查询姓名倒数第二位是S的员工信息
  SELECT * FROM EMP WHERE ENAME LIKE '%S_';
  -- 查询姓名包含S的员工信息
  SELECT * FROM EMP WHERE ENAME LIKE '%S%';

8.空值查询  NULL  NOT NULL
  -- 查询哪些员工没有奖金
  SELECT * FROM EMP WHERE COMM IS NULL;
  -- 查询每个员工的月收入
  SELECT ENAME,SAL+COMM FROM EMP;
  -- 查询哪些员工的奖金低于工资
  SELECT ENAME,COMM,SAL FROM EMP WHERE COMM<SAL
  -- 按照奖金排序
  SELECT * FROM EMP ORDER BY COMM ASC;
  SELECT * FROM EMP ORDER BY COMM DESC;
  -- 计算20号部门的平均奖金
  SELECT AVG(COMM) FROM EMP WHERE DEPTNO=20;
  SELECT ENAME,COMM FROM EMP WHERE DEPTNO=20;
/*  空值的特性   (很重要 面试会问的 30%)
1.空值跟任何值进行数学运算,得到的都是空值
2.空值跟任何值进行关系运算,得到的都是不成立
3.空值不参与任何聚合运算
4.排序的时候,空值永远是最大的
*/


9. IN  
  -- 查询工作是   SALESMAN  /CLERK /ANALYST 的员工信息
  SELECT * FROM EMP WHERE JOB='SALESMAN' OR JOB='CLERK' OR JOB='ANALYST';
  SELECT * FROM EMP WHERE JOB IN ('SALESMAN','CLERK','ANALYST')

10. ROWNUM 
  在查询的结果集中,ROWNUM为结果集的每一行标识一个行号
  可以通过ROWNUM限制查询结果中返回的行数
  
  -- 查询EMP表前五行
  SELECT * FROM EMP WHERE ROWNUM<=5;
  -- 查询EMP表第五行
  SELECT * FROM EMP WHERE ROWNUM>5;  -- 没结果
  
  -- 查询前五行 -  查询前四行
  SELECT * FROM EMP WHERE ROWNUM<=5
  MINUS
  SELECT * FROM EMP WHERE ROWNUM<=4;

  -- 查询第二行到第五行
  SELECT * FROM EMP WHERE ROWNUM<=5
  MINUS 
  SELECT * FROM EMP WHERE ROWNUM<=1

  -- 查询第二行到第五行以及第七行  (考这个题)
  (SELECT * FROM EMP WHERE ROWNUM<=5
  MINUS 
  SELECT * FROM EMP WHERE ROWNUM<=1)
  UNION
  (SELECT * FROM EMP WHERE ROWNUM<=7
  MINUS 
  SELECT * FROM EMP WHERE ROWNUM<=6)



-- 操作符号
1. 算数运算符号   + - * /
2. 关系运算符号  =    >   <   >=   <=   <>     A<B AND B<C
3. 逻辑运算符号  AND NOT  OR
   优先级:  NOT>AND>OR
   -- 查询10号部门和20号部门的CLERK
   SELECT * FROM EMP WHERE (DEPTNO=10 OR DEPTNO=20) AND JOB='CLERK';
   SELECT * FROM EMP WHERE DEPTNO IN (10,20) AND JOB='CLERK';

4. 字符串连接符号   ||   类似PYTHON中的+
   -- 查询EMP表的员工工资,要求显示  XX的工资是XXX
   SELECT ENAME||'的工资是'||SAL FROM EMP;

5. 集合运算符号  交集 并集 补集
   交集:INTERSECT
   并集:UNION ALL  不去重
   并集:UNION      去重
   补集:MINUS
-- 除了UNION ALL之外 其他的都去重, 先排序,然后再去重
-- 查询所返回的列数和列的数据类型【必须】【完全】相同,列名可以不一样

  -- 查询10部门有的并且20号部门也有的职位
  SELECT JOB FROM EMP WHERE DEPTNO=10
  INTERSECT 
  SELECT JOB FROM EMP WHERE DEPTNO=20;
  -- 查询10部门有的但是20号部门没有的职位
  SELECT JOB FROM EMP WHERE DEPTNO=10
  MINUS  
  SELECT JOB FROM EMP WHERE DEPTNO=20;

6. DISTINCT    去重
-- 去重1 DISTINCT
 SELECT DISTINCT JOB FROM EMP;
-- 去重2  分组
 SELECT JOB FROM EMP GROUP BY JOB;
-- 去重3  集合运算
 SELECT JOB FROM EMP
 INTERSECT
 SELECT JOB FROM EMP;

分组>DISTINCT>集合运算



2.0  DML(DATA MANIPULATION LANGUAGE):INSERT、UPDATE、DELETE
-- 插入数据
-- 1.直接插入数据
INSERT INTO 表名(列名1[,列名2]) VALUES (值1[,值2]);
-- 插入多条记录时,需要写多个INSERT语句
-- INSERT INTO 表名(列名1[,列名2]) VALUES (值1[,值2]),(值3[,值4]); -- MYSQL写法  ORACLE 不可以
INSERT INTO 表名(列名1[,列名2]) VALUES (值1[,值2]);
INSERT INTO 表名(列名1[,列名2]) VALUES (值3[,值4]);
-- 2.插入结果集
INSERT INTO 表名(列名1[,列名2]) SELECT 语句;
COMMIT; -- 提交
ROLLBACK; -- 回滚
-- 案例
SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE, E.SAL, E.COMM, E.DEPTNO
 FROM EMP E;

INSERT INTO EMP
  (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
  SELECT * FROM EMP;

COMMIT;


-- 更新
UPDATE 表名 SET 字段=值;   -- 全表更新
UPDATE 表名 SET 字段=值 WHERE 条件;  -- 部分更新
UPDATE 表名 SET 字段1=值1,字段2=值2;  -- 多列更新

-- 删除
DELETE FROM 表名;  -- 全表删除
DELETE FROM 表名 WHERE 条件;  -- 部分删除

TRUNCATE 和  DELETE 的区别  (很重要,面试会问的)(背诵全文,并默写)
/*DDL           DML
不需要提交    需要提交
不能回滚      可以回滚
只能删除全表  也可以删除部分
效率比较高    效率比较低*/

-- DELETE 数据更新 【插入、更新、删除】 记日志 
-- 日志文件变大
-- TRUNCATE 删除数据的同时,删除了日志文件
-- 危害 数据永远无法找回


3.0 DCL (DATA CONTROL LANGUAGE):GRANT 、REVOKE
#案例:
●GRANT 权限/角色 TO 用户;
●CREATE SESSION,CREATE TABLE , CREATE VIEW/FUNCTION TO WF;
●GRANT DBA TO LIXY;

4.0 权限收回
-- 回收权限
REVOKE 权限/角色 FROM 用户




四、ORACLE和MYSQL的差别--了解】
/*1、新建项目的方式

   MYSQL : 创建一个数据库,创建相应的表

2、ORACLE是多用户的, MYSQL是多数据库的

3、ORACLE安全级别要高,MYSQL开源免费

4、实例区别:

  MYSQL是轻量型数据库,开源免费。ORACLE收费,这个不是重点,,重点是它贵。

  MYSQL一个实例可以操作多个库,而ORACLE一个实例只能对应一个库。

  MYSQL安装只有300多兆,ORACLE有3个G。

5、操作的区别

  主键:MYSQL一般使用自动增长型,ORACLE需要使用序列对象。

  单引号处理:MYSQL 里可以用双引号包起字符串,ORACLE里只可以用单引号包 起字符串。

  分页的SQL语句:MYSQL 用 LIMIT,而 ORACLE 需要使用内建视图和 ROWNUM 伪列。

  事务处理:MYSQL 默认是自动提交,而 ORACLE 默认不自动提交,需要用户 CTL 语言进行事务提交。*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值