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 语言进行事务提交。*/
处理语言、查询语言
最新推荐文章于 2023-05-02 22:38:35 发布