oracle 基础SQL语句 多表查询 子查询 分页查询 合并查询 分组查询 group by having order by
select语句学习
. 创建表
create table user(user varchar2(20), id int);
. 查看执行某条命令花费的时间
set timing on;
. 查看表的结构
desc 表名;
. 查询所有列
select * from 表名;
. 查询指定列
select 某列名1,某列名2 from 表名;
. 取消重复行
select distinct 某列名1,某列名2 from 表名;
其中distinct作用在后面多列,只有每行完全相同才会被滤去
. 给某列或者某个表取别名
select 某列名 as 其他名 from 表名 as 其他名;
. 如何处理null值
nvl函数的使用:select nvl(某列名,0) from 表名
当此列为null时将值置为0
. 对时间类型的数据的处理
select 某列1,某列2 from 表名 where 列名='1-1月-1982';
oracle默认的时间格式如上
like
%表示0到多个字符
_表示单个字符
select 某列名 from 表名 where 列名 like G%;
返回首字母为G的列
in
select 某列名 from 表名 where 列名 in(条件a,条件b,条件c);
等同于 select 某列名 from 表名 where 列名 = 条件a,列名 = 条件b,列名 = 条件c;
null的处理
select 某列名 from 表名 where 列名 is null;
不是用等号也不能将null写成''
order by
select 某列名 from 表名 order by 列名 asc; 从低到高asc可省略
select 某列名 from 表名 order by 列名 desc;从高到低
select 某列名 from 表名 order by 列名1 asc,列名2 desc;其中列1和列2之间的逻辑要正确
select 某列名*2 as 别名 from 表名 order by 表名 asc; 使用别名排序达到一个很好的效果
max分组函数:在没有使用order by的时候select后要么全是分组函数,要么就是没有分组函数
select max(列名) from emp;
select 列名1 from 表名 where 列名2=(select max(列名2) from 表名);
select 列名1, max(列名2) from 表名;错误,
min avg sum count 使用类似
group by 和 having的使用
group by用于对查询的结果进行分组统计
having 用于限制分组显示的结果
select avg(列名),max(列名) ,列名x from 表名 group by 列名x;
select avg(列名),max(列名) ,列名x,列名y from 表名 group by 列名x,列名y;
先按列名x分组再按列名y分组
select avg(列名),max(列名) ,列名x from 表名 group by 列名x having avg(列名)>2000;
显示 >2000 的组
1 分组函数只能出现选择列表、having、order by子句中
2 如果在select语句中同时包含有group by ,having,order by那么他们的顺序是group by ,having,order
by
3 在选择列中如果有列、表达式、和分组函数,那么这些列和表达式必须有一个出现在group by子句中,否则会
出错
select 列名1,avg(列名2),max(列名3) from 表名 group by 列名1 having avg(列名2)<2000;
其中列名1就一定要出现在group by 中
多表查询
将表取个别名就行了
对多张表多表查询:
使用select时:
第一步:select ?,?,? from talbe1 a1,table2 a2 where a1.x between a2.x and a2.y;
第一步:select a1.x,a2.y,a1.z from talbe1 a1,table2 a2 where a1.x between a2.x and a2.y;
实现的功能是:显示表1的x、表2的y、表1的z,条件是表1的x在表2的x和y之间;
对一张表进行“多表查询”(自连接):
将一张表取多个别名进行操作:
select ?,?,? from talbe1 a1,table1 a2 where a1.x between a2.x and a2.y;
数据库在执行每个子句sql是从左到右执行的,子句与子句先执行后面的。
子查询
1什么是子查询
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询
2如何进行子查询?
子查询就是将条件不断分解,再将条件不断叠加
单行子查询:select ? from table where 条件=(select ...... select()......);
多行子查询:例1:select ? from table where 条件 in (select ......);
例2:select ? from table where 条件 >all (select ...... );
例2等同于:select * from table where 条件 >(select max()...... );
例3:select ? from table where 条件 >any (select ...... select()......);
例3等同于:select * from table where 条件 >(select min()...... );
多列子查询:select ? from table where (条件1,条件2) = (select a, b where ......);
在from子句中使用子查询:select ? from table a1, (select ? from talbe where..) a2 where ....;
再复杂点:select ? from table a1, (select x, avg(y) w from talbe group by x) a2 where ....; ---此时avg(y)必须有个别名
oracle给表取别名不能用as,报错;给列取别名可以用as。
oracle分页查询(一般用于打印报表时使用)(不同数据库语法不同)
第一步:rownum分页:
select a1.*, rownum rn from (select * from table) a1;
第一步:显示rownum:
select a1.* , rownum rn from (select * from table) a1 where rownum < 某行;
第三步:截取某段
select * from (select a1.* , rownum rn from (select * from table) a1 where rownum <
某行) where rn >某行;
在此基础上要改变查询的内容,所有的操作都是在最内层的括号里或者那两个行号操作。
用查询结果创建新表
create table table2 (列1,列2,列3) as select 列11,列22,列33 from table;
合并查询(oracle特有语法)(据说这些命令效率最高)
1)union 并集
select * from table where 条件1 union select * from table where 条件2;
(将两个select合并,并将重复的多余的去掉)
2)union all
用于同上,但是这个命令不去掉重复的内容
3)intersect 取交集
4)minus 取差集
oracle关于日期格式的问题:
在插入日期数据时默认采用的格式是:dd-mm月-yyyy
如果想用别的格式插入数据需要使用函数:to_date('1991-11-20','yyyy-mm-dd')
oracle 基础SQL语句 多表查询 子查询 分页查询 合并查询 分组查询 group by having order by的更多相关文章
- Oracle常用sql语句(三)之子查询
子查询 子查询要解决的问题,不能一步求解 分为: 单行子查询 多行子查询 语法: SELECT select_list FROM table WHERE expr operator (SELECT s ...
- 使用Oracle数据库实现树形结构表的子-父级迭代(递归)查询和删除,通过级联菜单简单举例
前言: 我们在开发中,常常遇到单表的子-父id级联的表结构,在树形的深度不确定的情况下,一次查询出某个树形结构下的所有具有子-父级关系的数据变得十分困难. 这时,我们使用oracle提供的CONNEC ...
- Oracle 基础 —SQL语句优化的途径
一:SQL语句的优化途径 1.选择合适的Oracle优化器 (1).RBO 基于规则进行优化的优化器 --Oracle 10G 后被抛掉 (2).CBO基于成本(CPU 和 内存的占用率)优化的优 ...
- oracle 基础SQL语句 版本5.7.29
一.表与用户介绍 oracle安装完成后默认会有很多用户,大致分为2类用户:一类是必需的帐户,一类是存储各种应用的帐户,默认密码如下: oracle自带的也会有很多默认表存在: 二.创建用户.创建表空 ...
- oracle 基础SQL语句 增删改
一.SQL操作 查询已创建的数据库:SELECT datname FROM pg_database; 创建数据库:CREATE DATABASE wzxdb; 删除数据库:DROP DATABASE ...
- oracle 基础sql语句
修改date日期时间: update T2_FOODS_STORAGE_IN set create_time =to_date('2020-01-15 12:30:20','yyyy-mm-dd hh ...
- SQL语句,表中的列字段字符串合并 和 字符串拆分成表
研究了两天也没有研究的很明白,但是问题做出来了, 如下表中的字段,第一级是由逗号隔开字符串,第二级是由空格隔开的字符串,现在想取空格字符串中的第几个空格前后的字符串, 所用到的工具,1.是 for x ...
- Oracle常用SQL语句大全
常用Oracle数据库SQL语句汇总. 1.常用操作 --清空回收站purge recyclebin;--查询回收站select * from recyclebin--查询Oracle版本信息sele ...
- Oracle和SQL语句的优化策略(基础篇)
转载自: http://blog.csdn.net/houpengfei111/article/details/9245337 http://blog.csdn.net/uniqed/article/ ...
随机推荐
- PICT实现组合测试用例(二)
上次简单总结了PICT命令的一些用法,这次重新把<软件测试实战>里面有关这一章的内容再总结一次,以巩固理解. 组合测试的概念 组合测试(combinatorial testing)是一种测 ...
- iOS7程序后台运行
介绍 这次 iOS7 对程序后台运行进行了加强,但是仅仅是加强而已,要想像 Android 程序那样自由当然就别想了,苹果这么做主要还是出于电池使用时间考虑,但是这次的加强对大部分程序基本够用. 在介 ...
- OpenGL 加载位图(BMP)贴图
GLuint Texture[1]; HBITMAP hBMP; BITMAP BMP; glGenTextures(1, &Texture[0]); hBMP = (HBITMAP)Load ...
- Swift之基础知识
Swift之基础知识 出于对Swift3.0的学习,写下这篇基本语法的笔记.希望能帮助记忆 -0- 这边提供Swift3.0中文教材,资源链接: https://pan.baidu.com/s/1c2 ...
- centos ssh 免密码登录
最近在学习的过程中遇到这个问题: A主机和B主机: A 免密码登录B: 首先在A的 ~/.ssh 目录中 执行 ssh-keygen -t rsa 一路回车 最后生成连个文件: 将id_rsa.pub ...
- Ajax解决缓存的5种方法
原文:http://www.ido321.com/129.html 1.在ajax发送请求前加上 anyAjaxObj.setRequestHeader(“If-Modified-Since”,”0″ ...
- 【bzoj2440】完全平方数
题意: 求第n个不为完全平方数倍数的数 题解: 网上有人说答案不会超过2n (求证0 0?) 竟然不超过2n 那么很明显就是用二分做了 二分判定就是要求小于等于n的合法的数的个数 不难发现一个数若为完 ...
- HDU-4690 EBCDIC 映射,模拟,沙茶
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4690 纯沙茶模拟题... //STATUS:C++_AC_93MS_228KB #include &l ...
- 让浏览器进行跨域访问, 开发阶段需要跨域访问的测试方案 chrome的快捷方式里面 加 "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --args --disable-web-security
Chrome浏览器 的快捷方式里加一个 命令可以使浏览器进行跨域访问 "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe ...
- linux C编程之makefile
目的: 基本掌握了 make 的用法,能在Linux系统上编程.环境: Linux系统,或者有一台Linux服务器,通过终端连接.一句话:有Linux编译环境.准备: ...