常用sql语句总结(一)(查询)
数据操作语句:DML
数据定义语句:DDL
数据控制语句:DCL
(执行顺序------序号)
一、基本查询:
1、
SELECT *
----- 2
FROM 数据来源,…
----- 1; ---数据来源可以是多个表或者其他范围
或者
SELECT 字段,字段…
-----可以列出想要查询的字段名
FROM 数据来源,……;
2、去重复查询(DISTINCT):
SELECT DISTINCT 字段,字段….. FROM 数据来源,…;
3、查询取别名:
SELECT 字段 AS 别名,字段 AS 别名…
-----可以列出查询的字段名
FROM 数据来源,…;
二、限定查询:
4、
SELECT * ------- 3
FROM数据来源,… -------1
WHERE 过滤条件;-------2
(1)SELECT * FROM emp WHERE sal>=1500 AND sal<=1000’;
(2)SELECT * FROM emp WHERE sal BETWEEN 1000 AND 1500;
使用BETWEEN AND 时,数字小的在数字大的前面;
使用(2)只需要执行一次判断,而(1)需要进行两次判断。
5、联合查询
SELECT * FROM emp WHERE job=’CLERK’ UNION ALL SELECT * FROM dept WHERE sal>3000;
使用UNION ALL可以把两个查询结果合并显示,但是有可能出现重复,一般用于或者(OR)并集关系,一般用于替换OR的使用,这样有利于SQL的优化,避免了索引失效而使用了全局扫描,影响性能
6、判空查询
SELECT * FROM emp WHERE comm IS NOT NULL;
SELECT * FROM emp WHERE comm IS NULL;
7、IN查询
SELECT * FROM emp WHERE empno IN(1000,1001,1002);
SELELCT * FROM emp WHERE empno NOT IN(1000,1001,1002);
三、模糊查询
8、
SELECT *
--------3
FROM 数据来源
---------1
WHERE 模糊查询字段 LIKE 模糊查询关键字;
-------2 -----( _:表示一位字符,%:表示任意位数上的任意字符)
SELELCT * FROM emp WHERE ename LIKE ‘%A%’;
四、排序查询
SELECT *
-------3
FROM 数据来源
---------1
WHERE 过滤条件
---------2
ORDER BY 排序字段;
---------4 升序ASC|降序DESC
SELECT empno AS id FROM emp WHERE WHERE sal>100 ORDER BY id DESC;
五、多表查询(连接查询)
内连接(一定要满足条件才能显示):
(1)SELECT no,字段…
---------3
FROM 数据来源A,数据来源B
-----------1
WHERE A.no = B.no;
---------2
消除笛卡儿积
SELECT empno,ename,deptno,dname FROM emp e,dept d WHERE e.deptno = d.deptno;
(2)SELECT no,字段….
FROM 数据来源a INNER JOIN 数据来源 b ON a.no = b.no;
SELECT empno,ename,deptno,dname FROM emp e INNER JOIN dept d ON e.deptno = d.deptno;
外连接:
左外连接:可以让左表不满足过滤条件的也显示
右外连接:可以让右表不满足过滤条件的也显示
全外连接:可以让左右表不满足过滤条件的都显示
使用(+)的方式是ORACLE特有的,mysql没有这种方式;
使用左外连接(+)在右边,右外连接(+)在左边;
左外连接:
(1)SELECT * FROM emp e,dept d WHERE e.deptno = d.deptno(+);
---ORACLE特有
(2)SELECT * FROM emp e LEFT OUTER JOIN dept d ON e.deptno = d.deptno;
-----ORACLE和MYSQL通用
右外连接:
(1)SELECT * FROM emp e,dept d WHERE e.deptno(+) = d.deptno;
(2)SELECT * FROM emp e RIGHT OUTER JOIN dept d ON e.deptno = d.deptno;
全外连接:
SELECT * FROM emp e FULL OUTER JOIN dept d ON e.deptno = d.deptno;
六、常用函数
COUNT(*|字段);
统计查询到的数量
SUM(字段);
计算该字段的数据之和
AVG(字段);
计算该字段的平均数
MAX(字段);
计算出该字段数据中最大的
MIN();
计算出该字段数据中最小的
SYSDATE;
ORACLE中当前时间
NOW();
MYSQL中当前时间
不能在WHERE子语句中使用统计函数
七、分组统计查询
SELECT 字段,字段,分组字段,…..
---------4
FROM 数据来源a,数据来源b….
--------1
WHERE 过滤条件
----------2
GROUP BY 分组字段
--------3
ORDER BY 排序字段 ASC|DESC
---------5
如果需要分组,那么必须把分组字段给查询出来
八、HAVING过滤查询
不能在WHERE子语句中使用统计函数,如果需要在过滤条件中使用统计函数,那么可以使用HAVING;
SELECT 字段,分组字段,….
--------5
FROM 数据来源a,数据来源b…..
------------1
WHERE 过滤条件
-----------2
GROUP BY 分组字段
-----------3
HAVING 对统计函数进行判断
----------4
ORDER BY 排序字段 ASC|DESC;
-------6
SELELCT empno,ename,job,SUM(sal) FROM emp WHERE job<>’班长’
GROUP BY job HAVING SUM(sal)>500 ORDER BY empno;
WHERE子句和HAVING子句的区别:
1、 执行顺序不同,WHERE子句进行过滤是在GROUP BY前执行的,HAVING子句进行过滤是在GROUP BY后执行的
2、 WHERE不能对统计函数进行过滤操作,而HAVING能对统计函数进行统计
九、FROM子查询
SELECT job,avgsql FROM (SELECT job,AVG(sal) AS avgsal FROM emp GROUP BY job)temp WHERE temp.avgsql > 2000;
十、EXISTS子查询
例如:查询出有关部门的雇员
SELECT * FROM emp e EXISTS ( SELECT * FROM dept d WHERE e.deptno = d.deptno );
例如:查询出没有部门的雇员
SELECT * FROM emp e NOT EXISTS( SELECT * FROM dept d WHERE e.deptno = d.deptno );
十一、分页查询
分页查询需要用到伪列ROWNUM(行号),ROWNUM是在查询过程中动态生成的一个列,该列必须从1开始,它不能直接存值到数据表,很一个字段,但不是一个数据表的字段。
ORACLE分页:
cp//当前页数
ls//每页有多少条数据
M=(cp-1)ls+1;//到M条数据结束查询
N=cpls;//从N条数据开始查询
SELECT * FROM (SELECT ROWNUM rn,* FROM emp WHERE rn<=M )temp WHERE temp.rn>=N;
Mysql分页:
Cp:当前页数
Ls:每页几条数据
M=(cp-1)*ls//到M条数据结束查询
N=ls//从N条数据开始查询
SELECT 字段,分组字段,…. --------5
FROM 数据来源a,数据来源b….. ------------1
WHERE 过滤条件 -----------2
GROUP BY 分组字段 -----------3
HAVING 对统计函数进行判断 ----------4
ORDER BY 排序字段 ASC|DESC; -------6
LIMIT M,N;
原文地址:https://www.cnblogs.com/zhangsonglin/p/10780277.html