1. 程式人生 > >Oracle 資料庫 之檢索資料

Oracle 資料庫 之檢索資料

一、簡單查詢

1.查詢所有

select * from  表名


2.投影  把資料一列一列的拿過來

select  列名  from 表名


3.字串加工   ①拼接   ②使用字串函式  ③case判斷

select    欄位名||‘別名’ from  表名

select SUBSTR(欄位名,從幾開始,到幾結束)||'別名' from 表名


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");