Oracle 数据库 之检索数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/luckily_star/article/details/80564748

一、简单查询

1.查询所有

select * from  表名


2.投影  把数据一列一列的拿过来

select  列名  from 表名


3.字符串加工   ①拼接   ②使用字符串函数  ③case判断

select    字段名||‘别名’ from  表名

select SUBSTR(字段名,从几开始,到几结束)||'别名' from 表名


扫描二维码关注公众号,回复: 4568014 查看本文章

4.switch  case

select 字段名 case 字段名  when '条件' then

exp:select BID ,case SEX when ‘M’ then substr(CREATOR,0,1)||'先生' when ‘W’ then substr(CREATOR,0,1)||'小姐' end

5.if的使用方法

select 字段名  ,case when  条件  then  字段名||'内容'  when 条件  and 条件 then 字段 ||’ 内容' else 字段 || ‘内容’ end from 表名

exp:      

         select BID,case when PRICE<100 then CREATOR||'良好'

                when PRICE>=100 and PRICE<500 then CREATOR||'中等'
                else CREATOR || ‘优秀’ end from TBEAN


concat(ch1,ch2) 字符串拼接
select BID,case when PRICE<100 then concat(CREATOR,'良好')
when PRICE>=100 and PRICE<500 then concat(CREATOR,'中等')
else concat(CREATOR, ‘优秀’ ) end from TBEAN

replace() 替换
select BID,case when PRICE<100 then concat(CREATOR,'良好')
when PRICE>=100 and PRICE<500 then concat(CREATOR,'中等')
else replace( concat(CREATOR, ‘优秀’,'很好' ) ,'优秀')end from TBEAN


upper() lower() 转换大小写
select BID,case when PRICE<100 then concat(CREATOR,'良好')
when PRICE>=100 and PRICE<500 then concat(CREATOR,'中等')
else upper(concat(CREATOR, ‘优秀’ )) end from TBEAN


length() 获取字符长度 类型保持一致
select BID,case when PRICE<100 then concat(CREATOR,'良好')
when PRICE>=100 and PRICE<500 then concat(CREATOR,'中等')
else to_char(length(concat(CREATOR, ‘优秀’ ))) end from TBEAN


replace(字段,'','')
select 字段 ,relace (字段,'条件',' ') from 表名
select BID,replace(CREATOR,'@',' ')from TBEAN

instr() 获取第一个
select BID,to_char( instr(CREATOR,'@',1,1)) from TEBAN

select BID,trim(CREATOR) from TBEAN


ltrim() rtrim() 左右空格
select BID,ltrim(CREATOR) from TBEAN


initcap()首字母大写 只对英文有效
select BID, initcap(CREATOR) from TBEAN


数据插入操作
select BID ,substr(CREATOR,0,3)||'@' ||substr(CREATOR,4,length()CREATOR) from TBEAN



数字函数
abs()绝对值
select BID,abs(PRICE) from TBEAN

随机数
dbms_random.value() 0-1
elect BID,dbms_random.value(0,100) *PRICE from TBEAN

trunc() 截取
select BID,trunc(dbms_random.value(0,100)) *PRICE from TBEAN

幂函数 power()
select BID,power(price,10) from TBEAN


日期时间类函数

sysdate获取当前日期
insert into TBEAN values('1111111',sysdate,'字段','字段')


dd一个月中第几天
ddd一年中第几天
day星期几
select BID,to_char(CREATIME,'yyyy') from TBEAN 年份

alter session set NLS_DATE_LAGUAGE ='SIMPLIFED CHINESE'
select BID,to_char(CREATIME,'day') from TBEAN 星期几 //英文

截取函数
原样输出的加双引号 日期转字符串 如果非格式化字符 加上""
select BID,to_char(creatime,'yyyy"年"MM"月"dd"日" hh24 mi ss ') from TBEAN

if条件
when中不能出现函数
select aid, case when aprice<100 then PRICE+100000000
else aprice
end ,case whenaprice<100 tnen replace (statu,'穷逼','不再是穷逼')
else statu
end from
(select BID as aid ,PRICE as aprice,
case when PRICE<100 then concat(CREATOR,'穷逼')
when PRICE>=100 and PRICE<500 then concat(CREATOR,'中产')
else to_char(length(concat(CREATOR, ‘富豪’ ))) end as statu from TBEAN ) T



二、筛选数据

select * from
(select aid, case when aprice<100 then PRICE+100000000
else aprice
end ,case when ,aprice<100 tnen replace (statu,'穷逼','不再是穷逼')
else statu
end as statu from
(select BID as aid ,PRICE as aprice,
case when PRICE<100 then concat(CREATOR,'穷逼')
when PRICE>=100 and PRICE<500 then concat(CREATOR,'中产')
else to_char(length(concat(CREATOR, ‘富豪’ ))) end as statu from TBEAN ) T) S
where s.statu not like '%不再穷逼%'

where 子句中 不允许出现聚合函数

like
select * from TBEAN where CREATOR like ‘%张%’

not like
select * from TBEAN where CREATOR not like ‘%张%’

between and 数字类型 日期类型
select * from TBEAN where CREATOR between 200 and 500
select * from TBEAN where CREATOR between to_date('2018-05-01','yyyy-mm-dd') and to_date('2018-05-10','yyyy-mm-dd')


in
select * from TBEAN where price in(200,500,1000)
not in
select * from TBEAN where price not in(200,500,1000)



exists 存在 就显示前面的sql 不存在就一条不显示
select * from TBEAN where not ( exists (select BID from TBEAN where CREATOR=' 张三'))

not exists




三、分组查询


group by 分组 具有相同属性的数据合并(去重) 与聚合函数一起用 只能用投影计算
请使用count() 来统计数据
注意:不可以查询所有 必须用投影 从投影中选 对谁做分组 就将谁放到投影中
过滤时用having

根据销售员的每月的销售金额做汇总操作
SELECT MM,SUM(MONEY)
FROM
(SELECT T.*,TO_CHAR(T.ORDERTIME,'mm') AS MM FROM T_ORDER T)
GROUP BY MM ORDER BY MM



给业务人员来算提成 如果超过10000000 提成 10%
低于10000000 %5 来提成
问 邓浩宇在5月份可以获取到多少提成


SELECT MM,CASE WHEN MAS>10000000 THEN MAS*0.1 ELSE MAS*0.05 END FROM
(
SELECT MM,sum(money) AS MAS,SALEMAN FROM
(SELECT T.*,TO_CHAR(T.ORDERTIME,'mm') AS MM FROM T_ORDER T)
WHERE MM='05' GROUP BY MM,SALEMAN)

根据银行来统计 该银行每月的成交金额
SELECT orgid,SUM(MONEY) from T_ORDER GROUP BY orgid

SELECT MM,ORGID,SUM(MONEY) FROM
(SELECT T.*,TO_CHAR(ORDERTIME,'mm') as mm from t_order t)
GROUP BY MM,ORGID


select SEX,count(SEX) from TBEAN group by SEX
select count(SEX) from TBEAN group by SEX
select CREATOR ,count(CREATOR) as c from TBEAN group by CREATOR ORDER BY c desc


SELECT SALEMAN,SUM(MONEY) FROM (
SELECT MONEY,SALEMAN FROM T_ORDER GROUP BY MONEY,SALEMAN
HAVING SALEMAN='邓浩宇') GROUP BY SALEMAN


子查询
单行子查询 单行单列

关系自查询 数据加工 关联子查询
查询比本班级学生平均分更高的同学

SELECT * FROM T_STU WHERE score > (SELECT AVG(score) FROM T_STU)


SELECT * FROM TABLE WHERE 字段=
多行子查询 IN NOT IN 单列多行
SELECT * FROM T_STU WHERE STUID NOT IN(SELECT STUID FROM T_STU WHERE STUSEX='女' OR STUSEX='人妖')




关联子查询 不能用hql 复杂sql



有关系的表查询 与你建立主外键无关
多表查询
规则:去重 用内连接 只用左连接
内连接 查询两张存在关系的相同数据
根据连接条件 如果两者都有就会显示
select * from 表名 inner join 表2 on 连接条件
select * from T_ORDER O inner join T_STU S on O.ORDERNUM=S.STUID


左右表概念
因为内连接必须把所有数据显示出来 如果右边数据少就会重复


左连接 以左表为主 显示左表所有数据 右表不够补空 映射相同的找相同的

select * from T_STU s left join T_ORDER o on s.stuid=o.ordernum



没有关系的表查询
SELECT STUNAME,SCORE FROM T_STU
Minus
SELECT SALEMAN,Money FROM T_ORDER



多表联合查询
Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All,对两个结果集进行并集操作,包括重复行,不进行排序;
Intersect,对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
Minus,对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序



分页

--分页查询一
select * from (select a1.*,rownum rn from(select * from student ) a1 where rownum<=5) where rn>=2;
--分页查询二
select a1.* from (select student.*,rownum rn from student where rownum <=5) a1 where rn >=3;
--分页查询三
select a1.* from (select student.*,rownum rn from student) a1 where rn between 3 and 5;











上述中用的表


T_ORDER

/*
Navicat Oracle Data Transfer
Oracle Client Version : 11.2.0.4.0

Source Server : 10.10.44.161
Source Server Version : 110200
Source Host : 10.10.44.161:1521
Source Schema : JAVAZHAO

Target Server Type : ORACLE
Target Server Version : 110200
File Encoding : 65001

Date: 2018-05-31 15:57:25
*/


-- ----------------------------
-- Table structure for T_ORDER
-- ----------------------------
DROP TABLE "JAVAZHAO"."T_ORDER";
CREATE TABLE "JAVAZHAO"."T_ORDER" (
"ORDERNUM" NUMBER NULL ,
"ORDERTIME" DATE NULL ,
"MONEY" NUMBER NULL ,
"SALEMAN" VARCHAR2(255 BYTE) NULL ,
"ORGID" VARCHAR2(255 BYTE) NULL
)
LOGGING
NOCOMPRESS
NOCACHE

;
COMMENT ON COLUMN "JAVAZHAO"."T_ORDER"."ORDERNUM" IS '订单主键';
COMMENT ON COLUMN "JAVAZHAO"."T_ORDER"."ORDERTIME" IS '接单时间';
COMMENT ON COLUMN "JAVAZHAO"."T_ORDER"."SALEMAN" IS '销售员';

-- ----------------------------
-- Records of T_ORDER
-- ----------------------------
INSERT INTO "JAVAZHAO"."T_ORDER" VALUES ('1', TO_DATE('2018-02-01 15:28:18', 'YYYY-MM-DD HH24:MI:SS'), '1000', '邓浩宇', '中国银行');
INSERT INTO "JAVAZHAO"."T_ORDER" VALUES ('2', TO_DATE('2018-02-28 15:29:17', 'YYYY-MM-DD HH24:MI:SS'), '10000000', '邓浩宇', '中国工商银行');
INSERT INTO "JAVAZHAO"."T_ORDER" VALUES ('3', TO_DATE('2018-03-01 15:29:43', 'YYYY-MM-DD HH24:MI:SS'), '10000000000', '周政', '中国建设银行');
INSERT INTO "JAVAZHAO"."T_ORDER" VALUES ('4', TO_DATE('2018-03-15 15:30:00', 'YYYY-MM-DD HH24:MI:SS'), '500', '邓浩宇', '中国银行');
INSERT INTO "JAVAZHAO"."T_ORDER" VALUES ('5', TO_DATE('2018-04-03 15:30:27', 'YYYY-MM-DD HH24:MI:SS'), '500000', '邓浩宇', '药都银行');
INSERT INTO "JAVAZHAO"."T_ORDER" VALUES ('6', TO_DATE('2018-05-31 15:30:56', 'YYYY-MM-DD HH24:MI:SS'), '5000000', '邓浩宇', '招商银行');
INSERT INTO "JAVAZHAO"."T_ORDER" VALUES ('7', TO_DATE('2018-05-31 15:30:56', 'YYYY-MM-DD HH24:MI:SS'), '5000000', '邓浩宇', '招商银行');
INSERT INTO "JAVAZHAO"."T_ORDER" VALUES ('8', TO_DATE('2018-05-31 15:30:56', 'YYYY-MM-DD HH24:MI:SS'), '5000000', '邓浩宇', '招商银行');





TBEAN
/*
Navicat Oracle Data Transfer
Oracle Client Version : 11.2.0.4.0

Source Server : LHQ
Source Server Version : 110200
Source Host : 10.10.44.161:1521
Source Schema : LIUHUAQING

Target Server Type : ORACLE
Target Server Version : 110200
File Encoding : 65001

Date: 2018-05-31 20:18:10
*/


-- ----------------------------
-- Table structure for TBEAN
-- ----------------------------
DROP TABLE "LIUHUAQING"."TBEAN";
CREATE TABLE "LIUHUAQING"."TBEAN" (
"BID" VARCHAR2(255 CHAR) NOT NULL ,
"CREATIME" TIMESTAMP(0) NULL ,
"CREATOR" VARCHAR2(1000 CHAR) NULL ,
"SEX" CHAR(1000 CHAR) NULL ,
"PRICE" NUMBER(11) NULL ,
"PCOUNT" NUMBER(11) NULL
)
LOGGING
NOCOMPRESS
NOCACHE

;

-- ----------------------------
-- Records of TBEAN
-- ----------------------------
INSERT INTO "LIUHUAQING"."TBEAN" VALUES ('31313131', TO_TIMESTAMP(' 2018-05-31 09:30:46', 'YYYY-MM-DD HH24:MI:SS:'), '张三', 'M ', '1000', '1');
INSERT INTO "LIUHUAQING"."TBEAN" VALUES ('dadada', TO_TIMESTAMP(' 2018-05-30 15:28:01', 'YYYY-MM-DD HH24:MI:SS:'), '张三三', 'M ', '-300', null);
INSERT INTO "LIUHUAQING"."TBEAN" VALUES ('131313131', TO_TIMESTAMP(' 2016-10-01 15:51:43', 'YYYY-MM-DD HH24:MI:SS:'), '李四', 'W ', '500', null);
INSERT INTO "LIUHUAQING"."TBEAN" VALUES ('DADADA', TO_TIMESTAMP(' 2018-05-30 15:28:06', 'YYYY-MM-DD HH24:MI:SS:'), '王五', 'M ', '2', '2');
INSERT INTO "LIUHUAQING"."TBEAN" VALUES ('3131313131', TO_TIMESTAMP(' 2018-05-30 15:28:08', 'YYYY-MM-DD HH24:MI:SS:'), '王五', 'W ', '200', '6');

-- ----------------------------
-- Indexes structure for table TBEAN
-- ----------------------------

-- ----------------------------
-- Checks structure for table TBEAN
-- ----------------------------
ALTER TABLE "LIUHUAQING"."TBEAN" ADD CHECK ("BID" IS NOT NULL);
ALTER TABLE "LIUHUAQING"."TBEAN" ADD CHECK ("BID" IS NOT NULL);

-- ----------------------------
-- Primary Key structure for table TBEAN
-- ----------------------------
ALTER TABLE "LIUHUAQING"."TBEAN" ADD PRIMARY KEY ("BID");



TBEAN41
/*
Navicat Oracle Data Transfer
Oracle Client Version : 11.2.0.4.0

Source Server : LHQ
Source Server Version : 110200
Source Host : 10.10.44.161:1521
Source Schema : LIUHUAQING

Target Server Type : ORACLE
Target Server Version : 110200
File Encoding : 65001

Date: 2018-05-31 20:18:21
*/


-- ----------------------------
-- Table structure for TBEAN41
-- ----------------------------
DROP TABLE "LIUHUAQING"."TBEAN41";
CREATE TABLE "LIUHUAQING"."TBEAN41" (
"BID" VARCHAR2(255 CHAR) NOT NULL ,
"CREATIME" VARCHAR2(255 CHAR) NULL ,
"CREATOR" VARCHAR2(255 CHAR) NULL ,
"LASTMODIFIER" VARCHAR2(255 CHAR) NULL ,
"LASTMODIFYRTIME" VARCHAR2(255 CHAR) NULL ,
"BSID" VARCHAR2(255 CHAR) NULL
)
LOGGING
NOCOMPRESS
NOCACHE

;

-- ----------------------------
-- Records of TBEAN41
-- ----------------------------
INSERT INTO "LIUHUAQING"."TBEAN41" VALUES ('4028c98163aadc630163aadc6ca30001', null, null, null, null, '3131313131');
INSERT INTO "LIUHUAQING"."TBEAN41" VALUES ('4028c98163aadc630163aadc6ca30002', null, null, null, null, '3131313131');
INSERT INTO "LIUHUAQING"."TBEAN41" VALUES ('4028c98163aadc630163aadc6ca40003', null, null, null, null, '3131313131');

-- ----------------------------
-- Indexes structure for table TBEAN41
-- ----------------------------

-- ----------------------------
-- Checks structure for table TBEAN41
-- ----------------------------
ALTER TABLE "LIUHUAQING"."TBEAN41" ADD CHECK ("BID" IS NOT NULL);
ALTER TABLE "LIUHUAQING"."TBEAN41" ADD CHECK ("BID" IS NOT NULL);

-- ----------------------------
-- Primary Key structure for table TBEAN41
-- ----------------------------
ALTER TABLE "LIUHUAQING"."TBEAN41" ADD PRIMARY KEY ("BID");

-- ----------------------------
-- Foreign Key structure for table "LIUHUAQING"."TBEAN41"
-- ----------------------------
ALTER TABLE "LIUHUAQING"."TBEAN41" ADD FOREIGN KEY ("BSID") REFERENCES "LIUHUAQING"."TBEAN" ("BID");











猜你喜欢

转载自blog.csdn.net/luckily_star/article/details/80564748
今日推荐