SQL语句大全

来源:互联网 发布:大众老总途观 知乎 编辑:程序博客网 时间:2024/06/06 04:37

--语 句 功 能
--数据操作
SELECT --从数据库表中检索数据行和列
INSERT --向数据库表添加新数据行
DELETE --从数据库表中删除数据行
UPDATE --更新数据库表中的数据
--数据定义
CREATE TABLE --创建一个数据库表
DROP TABLE --从数据库中删除表
ALTER TABLE --修改数据库表结构
CREATE VIEW --创建一个视图
DROP VIEW --从数据库中删除视图
CREATE INDEX --为数据库表创建一个索引
DROP INDEX --从数据库中删除索引
CREATE PROCEDURE --创建一个存储过程
DROP PROCEDURE --从数据库中删除存储过程
CREATE TRIGGER --创建一个触发器
DROP TRIGGER --从数据库中删除触发器
CREATE SCHEMA --向数据库添加一个新模式
DROP SCHEMA --从数据库中删除一个模式
CREATE DOMAIN --创建一个数据值域
ALTER DOMAIN --改变域定义
DROP DOMAIN --从数据库中删除一个域
--数据控制
GRANT --授予用户访问权限
DENY --拒绝用户访问
REVOKE --解除用户访问权限
--事务控制
COMMIT --结束当前事务
ROLLBACK --中止当前事务
SET TRANSACTION --定义当前事务数据访问特征
--程序化SQL
DECLARE --为查询设定游标
EXPLAN --为查询描述数据访问计划
OPEN --检索查询结果打开一个游标
FETCH --检索一行查询结果
CLOSE --关闭游标
PREPARE --为动态执行准备SQL 语句
EXECUTE --动态地执行SQL 语句

DESCRIBE --描述准备好的查询 


===================SELECT========================

select  列名(字段名),* ,distinct,表达式,函数(包括聚合函数),别名,伪列,子查询,常量
from   表,视图,子查询,别名
where  条件表达式,模糊条件,子查询,join
group by 列名(字段名)
having   条件表达式、聚合函数
order by 列名(字段名),表达式

聚合函数包括max()  min()  avg()  count()  sum() ;

--模糊查询 between ... and ...        select * from emp where sal between 1000 and 5000;

--is null 或者 is not null                  select * from emp where comm is null;

--in 或者 not in                   select * from emp where deptno in (10,20);相当于select * from emp where deptno = 10 or deptno=20;

--like + 通配符          %  --表示任意多个字符/  _ --表示单个字符

select * from emp where job like 'S[^A-Za-z]%';

select * from student where sname like 'S_';

--having 和 where条件区别:

(1)where 子句是对表中的记录进行筛选,而having是对结果集进行筛选
(2)where 子句后面不能接聚合函数,而having后面可以接聚合函数
(3)where 子句不一定要和group by 一起使用,但是having必须和group by 一起使用


--oracle中的分析函数(排位函数)

rank():相同的值排位相同,但是序号会随之跳跃
row_number():相同的值排位不相同,序号是连续的
dense_rank():相同的值排位相同,序号是连续的

如:select empno,ename,job,sal,rank()/row_number()/dense_rank() over(order by sal desc) as AAA from emp;

--自身连接

select sname from s where sno in  (select sc1.snofrom sc sc1,sc sc2where sc1.sno = sc2.sno and sc1.cno = 1  and sc2.cno = 2)


总结做select题目的一个思路:

(1)看题目中要我们显示(列出,查询)什么内容,那么select后面就接什么内容
(2)看select子句后面出现的内容来自哪些表,或者视图,那么from子句后面就接哪些表或视图
(3)如果是多张表查询,首先考虑是否需要将表之间的关系关联(隐士条件),然后再来考虑显示条件(题目中明显的告诉我们的条件)
(4)看select子句后面是否出现了聚合函数,如果出现了聚合函数,还有其他字段不在聚合函数里面,那么这个时候就需要将没有出现在聚合函数里面的字段全部放到group by子句中
(5)是否需要对结果集再次进行筛选,如果需要,使用having子句
(6)如果需要排序使用order by ,desc表示降序, asc表示升序(默认)
(7)如果一个题目比较复杂,一眼看不出如何操作。那么建议大家采用子查询分步骤去做。子查询可以出现在select,from ,where 子句中
(8)如果所需要的信息出自同一张表同一个字段的值进行比较,而我们无法通过同一个字段来表述,那么建议大家采用自身连接查询