标准SQL
2015-09-16 16:27
330 查看
一、SQL语句分类
select语句 查询语句select
DDL 数据定义语言
create table 建立表
drop table 删除表
alter table 修改表
DML 数据操作语言
insert 增加数据
delete 删除数据
update 修改数据
TCL 事务控制语句
commit 提交
rollback 回滚
savepoint 保存点
二、查询语句
1.SQL中的数学运算//一个月按照22 计算 求s_emp表中每个人的每天的平均工资 select salary,salary/22 from s_emp; // 一年按照16个月 计算 显示s_emp每个人的月薪和年薪 select salary,salary*16 from s_emp;
2.字段或者表达式的别名
select salary sal,salary*16 yearsal from s_emp;
SQL中字符串的表达
使用单引号表达
” ’ ’ ‘a’ ‘hello world’
|| 字符串拼接符
select first_name,last_name from s_emp; // 把first_name 和 last_name 拼接起来 select first_name||last_name from s_emp;
4.NULL 值处理
NULL值和任何值做运算结果都是NULL
处理方式:nvl(par1,par2) 可以处理任何类型 但要求par1和par2类型一致。当par1为NULL 时会返回par2对应的值 par1不为NULL就返回par1。
select salary, nvl(salary*12*(1+commission_pct/100),0) from s_emp;
5.数据的排重 distinct
单字段排重:select distinct salary from s_emp;
多字段排重: 当多个字段的值都相同时 才认为是重复的数据
SELECT distinct id,TITLE, SALARY FROM S_EMP;
6.常见的条件运算符
= != > < >= <=
SQL 提供的条件运算符
// 表达一个闭区间 [a,b] where 字段 between a and b; //表达一个字段在一个指定的列表中取值 where 字段 in (值1,值2,值3);
7.null值的判断 : is null
where 字段 is null;
8.模糊查询like
SQL中的通配符 : % 0-n个任意字符
_ 1个任意字符
//查询s_emp 表找出 first_name 中第二个字符是a的 select first_name from s_emp where first_name like '_a%';
特殊的模糊查询
//找出以S_开头的表名 select table_name from user_tables where table_name like 'S\_%' escape '\';
9.,逻辑条件连接符
and
or
not : ca —>not ca
= != ^= <>
<= < >= between a and b not between a and b in not in (注意空值) like not like is null is not null
10.排序子句
语法:select 字段名
from 表名
where 条件
order by 排序标准 排序方式; 排序方式:
升序 默认的 asc 自然顺序 字典顺序
// 按照salary 降序排序显示s_emp 表中的id first_name 和 salary select id,first_name,salary from s_emp order by salary desc;
多字段排序:如果第一排序字段的值相同时 就可以启用第二排序字段对数据进行排列。
//按照salary 降序排序显示s_emp 表中的id first_name 和 salary,如果salary相同则使用id升序排。 select id,first_name,salary from s_emp order by salary desc,id asc;
tips:NULL 值在排序中的处理作为最大值处理.
11.单行函数和组函数
单行函数:针对sql语句处理的每一行都返回一个结果。sql语句影响多少行就返回多少个结果。
组函数:针对sql语句影响的这一组数据 综合处理之后得到一个结果。无论sql语句影响多少行 只返回一个结果。
// upper(par1) 把字符串处理成大写 select first_name,upper(first_name) from s_emp where id=1;
常见组函数:
count(par1) 统计数据的个数
max(par1) 统计最大值
min(par1) 统计最小值
avg(par1) 统计平均值
sum(par1) 统计数据的和
// 统计s_emp 表中的人数 工资的最大值 和 最小值 select count(id),max(salary),min(salary) from s_emp; // 统计s_emp 工资的平均值 和 工资的和 select avg(salary),sum(salary) from s_emp; //特殊的用法 select avg(distinct salary), sum(distinct salary) from s_emp;
tips:组函数 对NULL值的处理方式 忽略NULL。
11.多表查询
select 需要的字段名
from 表名1,表名2
where 表之间的连接条件;
//等值连接 //显示s_dept 表中的部门名 和 部门对应的地区名。 select d.name,r.name from s_dept d,s_region r where region_id=r.id; //非等值连接 // 显示s_emp 表中每个员工的工资 以及对应的工资级别 select salary,grade from s_emp,salgrade where salary between losal and hisal;
12.特殊的连接——自连接:一张物理表中存储了两层业务含义的数据
要把其中的一层数据查询出来。
如何找出所有的领导? 8 个领导 /* 这个找出的是自己管自己的人 */ select id,first_name from s_emp where manager_id=id; /* 把一张物理表 通过起别名看成两张逻辑表 */ select distinct m.id,m.first_name from s_emp e,s_emp m where e.manager_id=m.id;
13.外链接: 外连接的结果集 等于内连接的结果集 加上匹配不上
的记录。(一个也不能少) (+)字段对面的表的数据全部被匹配出来
本质上使用的是NULL 记录匹配
//写一个查询显示每个部门的名字 和 部门对应的地区名 :s_dept s_region select d.name,r.name from s_dept d,s_region r where d.region_id=r.id; // 现在公司的业务扩展了 增加了新的部门 insert into s_dept values(100,'test100',NULL); commit; insert into s_dept values(200,'test200',NULL); commit; // 如何显示所有的部门信息? select d.name,r.name from s_dept d,s_region r where d.region_id=r.id(+)
非等值外链接
//把s_emp 表中每个员工的id salary 以及工资对应的 工资级别显示出来。 select id,salary,grade from s_emp,salgrade where salary between losal and hisal; //给11号涨工资 涨成15000 update s_emp set salary=15000 where id=11; commit; update s_emp set salary=150 where id=21; commit; /* 显示所有的员工的id 和 salary 超出统计范围的 也要显示 */ select id,salary,grade from s_emp,salgrade where salary between losal(+) and hisal(+);
14.SQL99中的内连接
from a表 join b表 on 表的连接条件
where 过滤条件;
from a表 inner join b表 on 表的连接条件
where 过滤条件;
显示每个部门的名字 和 对应的地区的名字
s_dept s_region
select d.name,r.name
from s_dept d,s_region r
where d.region_id=r.id;
select d.name,r.name
from s_dept d join s_region r
on d.region_id=r.id;
select d.name,r.name
from s_dept d inner join s_region r
on d.region_id=r.id;
15.SQL99中的外连接
1)左外连接 :意思就是a表发起连接代表把a表的数据全部匹配出来。依然使用的是
NULL 记录匹配。
from a表 left outer join b表
on 表的连接条件 where 过滤条件;
2) 右外连接
from a表 right outer join b表
on 表的连接条件 where 过滤条件;
// 找出新增加的部门? select d.name,r.name from s_dept d,s_region r where d.region_id=r.id(+); select d.name,r.name from s_dept d left outer join s_region r on d.region_id=r.id; // 改成右外连接 select d.name,r.name from s_region r right outer join s_dept d on d.region_id=r.id;
3)全外连接: 全外连接只是一个逻辑概念,全外连接的结果集
等译左外连接的结果集 加上右外连接的结果
集 然后减去重复的记录。
SQL99语法 from a表 full outer join b表 on 表的连接条件 where 过滤条件; Oracle中的实现 union 合并两个结果集并排重 select id from s_emp union select id from s_emp; union all 合并两个结果集不排重 select id from s_emp union all select id from s_emp;
相关文章推荐
- R语言连接Mysql数据库的步骤及简单使用mysql数据库中的数据
- Sql Server GetDate()和GetUTCDate()
- Oracle数据库在线重做日志被删除的几种恢复方法
- MySQL水平切分实现原理分析
- redis 学习
- Redis学习9之在discuz的文件里加入redis数据库计访问数
- sql求和涉及到null值
- mysql使用update多表多字段更新
- mysql导入导出备份与恢复
- sql点滴44—mysql忘记root密码
- phpredis Floating point exception
- 使用SQLAzureMW进行迁移
- memcached基本配置与使用
- SQL中Merge用法详解
- MySQL---外键的用法
- oracle存储过程如何返回list,并用jdbc调用
- MysqlL-5.6免安装版配置方法
- SQLAlchemy---数据库查询
- 安装sql server2005提示0x7814018e指令应用的0x00000643内存不可read
- oracle存储过程