数据操纵语言(DML Data Manipulation Language)
SELECT(查询)
INSERT(插入数据)
UPDATE(更新数据)
DELETE(删除数据)
数据定义语言(DDL Data Definition Language)
CREAT
ALTER
DROP
RENAME
TRUNCATE
数据控制语言(DCL Data Control Language)
GRANT(比如授权远程连接、权限授权)
事件(Transaction)
COMMIT
ROLLBACK
②SELECT * 【SELECT 子句】
①FROM 数据来源(可以是数据表) 【FROM 子句】
注意:
DISTINCT
关键字,可以去除重复信息AS
也可以不用,注意在FROM子句中数据来源使用别名时,不要使用AS
语法
③SELECT * 【SELECT 子句】
①FROM 数据来源(可以是数据表) 【FROM 子句】
②WHERE 过滤条件 【WHERE 子句】
WHERE 子句
是对数据进行条件判断,之后显示出满足条件的数据BETWEEN AND
的使用,小的数据在前,大的数据在后,对日期和数字可用,且BETWEEN AND
被数据认为是一个判断条件,执行效率快,a > b AND a < c
数据库认为是两个判断,执行效率较慢UNION ALL
的使用,用于连接或操作,相比OR
,可以将查询结果显式的合并在一起并且避免索引失效IS
、 IS NOT
、 IN
、NOT IN
LIKE
关键字③SELECT
①FROM
②WHERE 模糊查询的字段 LIKE 模糊查询的条件
排序查询使用关键字ORDER BY
基本语法:
③SELECT * 【SELECT 子句】
①FROM 数据来源(可以是数据表) 【FROM 子句】
②WHERE 过滤条件 【WHERE 子句】
④ORDER BY 排序的字段 ASC|DESC 【ORDER BY 子句】
注意:
ORDER BY
子句在SELECT
子句之后执行,可以使用SELECT
子句中使用的别名
排序的字段内容类型是数字或日期(英文也可以)
WHERE
中定义条件去除后显示(因为笛卡尔积是在产生后被消除不显示,所以数据量的时候不能用多表查询,消耗性能)内连接查询,只查询满足条件的数据,默认的就是内连接查询
可以使用 INNER JION...ON...
关键字在JOIN之后加入另一张数据表,在ON之后消除笛卡尔积
外连接查询分为:左外连接查询、右外连接查询、全外连接查询
左外连接查询和右外连接查询可以使用(+)
来表示,注意位置与名称是相反的,且此写法只在ORACLE中有效,通用的写法如下
FROM (表1) LEFT OUTER JOIN (表2) ON (消除笛卡尔积语句) 左外连接
FROM (表1) RIGHT OUTER JOIN (表2) ON (消除笛卡尔积语句) 右外连接
FROM (表1) FULL OUTER JOIN (表2) ON (消除笛卡尔积语句) 全外连接
COUNT(*|字段名)
统计查询到的内容非空的数据量
SUM(字段名)
对该字段的内容求和
AVG(字段名)
求平均数
MAX(字段名)
求最大值
MIN(字段名)
求最小值
SYSDATE
动态显示当前系统时间
NVL(expression1,expression2)
优先返回expression1的结果,当1的结果为null时,返回expression2的结果,两者都为null时返回null
使用GROUP BY
子句,基本语法如下:
④SELECT * 【SELECT 子句】
①FROM 数据来源(可以是数据表) 【FROM 子句】
②WHERE 过滤条件 【WHERE 子句】
③GROUP BY 字段名 【GROUP BY子句,对满足条件的数据进行分组】
⑤ORDER BY 排序的字段 ASC|DESC 【ORDER BY 子句】
SELECT
子句中使用了统计函数,同时没有BROUP BY
子句的话,SELECT
子句中只允许有统计函数,不允许出现字段名BROUP BY
子句,那么SELECT
子句中出现的字段名必须是分组字段SELECT
子句中出现了嵌套函数,那么该子句中不允许再出现统计函数之外的任何字段HAVING
子句是对分组统计函数统计出的结果进行过滤的句子
⑤SELECT * --查询数据
①FROM 数据来源 --找到数据源
②WHERE 条件判断 --对数据源进行过滤
③GROUP BY 分组字段 --对满足条件的数据分组
④HAVING 对统计函数进行判断 --对分组统计的数据进行过滤
⑥ORDER BY 排序字段 排序方式 --对过滤后的数据进行排序
WHERE
和HAVING
的区别
WHERE
在GROUP BY
子句之前执行,HAVING
在GROUP BY
子句之后执行WHERE
中不能有统计函数,HAVING
中可以使用统计函数对数据进行过滤
子查询就是将一个查询的结果作为另一个查询(主查询)的数据来源或者判断条件的查询,子查询需要使用小括号括起来
常见的子查询有
WHERE
子查询FROM
子查询FROM
后面的数据来源可以是数据表,也可以是一个子查询的结果
使用FROM
子查询注意
FROM
子查询的结果作为主查询的数据来源,子查询结果相当于一张临时数据表别名.字段名
来引用SELECT
子查询HAVING
子查询EXISTS
子查询EXISTS
子查询特征:将主查询中的数据带入到子查询中进行验证,通过返回true,主查询显示该数据,不通过返回false,主查询不显示该数据
NOT EXISTS
子查询与EXISTS
子查询相反
ROWNUM
伪列ROWNUM
是动态的在数据表中生成一列,即一个字段,这列数据不属于数据表是动态生成的且该列数据必须从1开始
DEMO1
SELECT ROWNUM AS rn, empno,ename,job,mgr,hiredate,sal,comm,deptno FROM emp;
SELECT ROWNUM AS rn, empno,ename,job,mgr,hiredate,sal,comm,deptno FROM emp WHERE ROWNUM = 1;
DEMO2 查询第二条数据
SELECT ROWNUM AS rn, empno,ename,job,mgr,hiredate,sal,comm,deptno FROM emp WHERE ROWNUM = 2;
因为ROWNUM
要求该列必须从1开始,因此直接查第二条数据无法完成,需要使用子查询(这是分页查询的基础)
ROWNUM
实现分页查询DEMO
SELECT *
FROM(
SELECT ROWNUM AS rn, empno,ename,job,sal,hiredate,mgr,comm,depto
FROM emp
WHERE ROWNUM <=10) temp
WHERE rn >=6;
通过以上代码可以实现查询第6-10条数据,假如我们要求网页中数据每页显示5条,这刚好是第二页的数据
计算当前页数据的ROWNUM公式如下:
起始位置 m = (cp-1)*ls+1
最终数据位置 n = cp*ls
注:cp表示当前页,ls表示每页显示数据量