91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java37: 數據庫(Oracle)

發布時間:2020-07-30 09:08:21 來源:網絡 閱讀:332 作者:浪漫的偷笑 欄目:數據庫

DB2

Oracle

Infomix

MySQL

Sybase

SQLServer



1 什么是數據庫

    數據需要持久保存

    (磁盤文件)

 數據庫(數據庫管理系統)是個軟件

    安全,可靠,高效

 

 數據庫服務器,數據中心


 關系型數據庫

    用表來存儲數據的數據庫

 SQL 通用的關系型數據庫的操作語言

 不同數據庫之間SQL有一定的差異


 NoSQL Not only SQL

    芒果DB......

   

T-SQL

PLSQL


  SQL 中的分類

    DDL(Data Definition Language) 數據定義語言

        create;drop...

    DML(Data Maniplation Language)數據操作語言

        insert;delete;update...

    TCL(Transaction Control Language)事物控制語言

        begin transaction;commit;rollback....

    DQL(Data Query Language) 數據查詢語言

        select...

    DCL(Data Control Language)數據控制語言

        grant;revoke...

 


 安裝Oracle(DBA/OP)

    創建庫(DBA/OP) 

    創建用戶(DBA/OP)

     登陸數據庫(RD)

      訪問數據庫(RD)

文檔

表名,

字段名 ,類型 ,說明



create 語句創建表, 指定表明 表有幾列,列名,每個列的類型

類型:

數字 number(m) 不能超過m

    number(m,n) 一共m位,小數占n位

字符串 varchar2(m) 不能超過m

    (可變長的字符串2版本)

日期 date

    有默認格式 可以修改

    在插入日期時必須要符合這個格式

    對于日期可以使用to_date函數(但是保存在表中的數據還是系統設置的格式)

    第一個參數自己定義的格式

    to_date('2016-10-10','yyyy-mm-dd')

    第二個參數指明自定義格式

    

CREATE TABLE table_name 
    (column_name column_type);

//創建表
create table emp(id number(10),
          name varchar2(50),
          hire_date date,
          salary number(8,2));
//刪除表
DROP TABLE tablename;                
drop table emp;
//查看表的結構(只能看表的結構,不能看數據)
DESC tablename;
desc emp

//給表添加行
插入式可以指定為null
沒有插入的列就為null 除非有默認值
INSERT INTO tablename(
    column_name,column_name,column_name)
    values
    (xxx,xxx,xxx,xxx);

insert into emp(id,name,hire_date,salary)values(101,'lmdtx',to_date('2016-10-10','yyyy-mm-dd'),123123.12);
OR
insert into emp values (101,'lmdtx',to_date('2016-10-10','yyyy-mm-dd'),123123.12);

//修改表中的某些行 where 是根據具體的條件來
UPDATE table_name SET field1=new-value1;
UPDATE table_name SET field1=new-value1, field2=new-value2[WHERE Clause]
update emp set salary=200 where id=101;

刪除表中行
DELETE FROM tablename;
DELETE FROM table_name [WHERE Clause];
delete from emp where id=101;


SELECT * FROM tablename;
SELECT * FROM tablename [WHERE Clause];
select * from emp;
select * from emp where salary>100;
select name,salary from emp where salary>100;


oracle 字符操作:

    varchar和varchar2 低版本還有區別高版本一樣的

    char 和 varchar2的區別:

        char 是定長  char(20)  無論用多少都是20空間

                =》指的是存儲空間

        varchar2是可變長 varchar2(20) 按照實際的給空間

                默認是存儲20個英文字符的空間

    length()


    varchar2 中文:

        一個中文占用幾個字符要看你使用的編碼 

        oracle 不是用的Unicode

        在設計表的時候要注意  一般是中文長度 *3        

查看oracle 的字符編碼 userenv('language')

        

select userenv('language') from dual;

dual表 無實際意義,就是偽表給我們用一些函數使用的



    nvarchar2 類型  是幾個字符就是幾個字符 和編碼無關


char 和varchar2的最大長度

char 2000個

varchar2 4000個

 


字符串的連接 ||  或者用 conncat(m,n)函數

'aa'||'bb'

create table class(
    xing nvarchar2(50),
    ming nvarchar2(50)
);

insert into class values('張','三');
insert into class vlaues('steve','steve')
select xing||ming from class;
select xing||'.'||ming from class;
select concat(xing,ming) from class;
select concat(concat(xing,'.'), ming) from class;



trim 去掉前后空格trim(String);

ltrim 左邊空格

rtrim 右邊空格

lpad 在左邊填充字符到指定長度 lpad(String,50) 默認是空格

rpad 在右邊填充字符到指定長度rpad(String,50,'*')

lower 小寫lower(String)

upper 大寫

initcap 首字母大寫

length 求長度

substr 截取字符串 substr(String,起始位置)  取到結尾

            substr(String,起始位置,取多少個)

            substr(String,-20) 從后往前20個

    從1 開始

instr 在一個字符串中查找字符串  

返回第一次找到的位置    instr(String1,String2) 在String1 中查找String2

從1開始         instr(String1,String2,5) 在String1 中查找String2 從第5個開始找 

           instr(String1,String,5,2)在String1 中查找String2從第5個開始找到的第2個


create table emp(id number(10),
          name varchar2(50),
          hire_date date,
          salary number(8,2));
desc emp;

insert into emp(id,name,hire_date,salary)values(101,'lmdtx',to_date('2016-10-10','yyyy-mm-dd'),123123.12);

select *from emp;

select * from emp where id=102;

select name,salary from emp where salary>1000;

update emp set salary=100 where id=102;

update emp set salary=3000 where id=1011;

update emp set salary=99999 where id>2000;

update emp set salary=99999999999 where id=101;

delete  from emp where id = 010;

delete  from emp where id = 101;

drop table emp;

create table INFO_COST(
  ID number(11) primary key not null,
  COST_DESC VARCHAR2(200),
  BASE_DURATION number(11),
  BASE_COSR number(11,2),
  UNIT_COST number(11,2));
  
insert into INFO_COST(ID,COST_DESC,base_duration,base_cosr,unit_cost
)values(1,'包20小時',20,2.45,0.30);
  
insert into INFO_COST(ID,COST_DESC,base_duration,base_cosr,unit_cost
)values(2,'包40小時',40,3.45,0.30);
  
insert into INFO_COST(ID,COST_DESC,base_duration,base_cosr,unit_cost
)values(3,'包100小時',100,4.45,0.30);

insert into INFO_COST(ID,COST_DESC,base_duration,base_cosr,unit_cost
)values(4,'包200小時',200,5.45,0.30);
  
insert into INFO_COST(ID,COST_DESC,base_duration,base_cosr,unit_cost
)values(5,'普通資費',null,null,0.20);
  
insert into INFO_COST(ID,COST_DESC,base_duration,base_cosr,unit_cost
)values(6,'包月',null,10,null);
  
update INFO_COST set unit_cost= unit_cost+(unit_cost*10) where id<5;
  
delet from INFO_COST WHERE id=5;
  
select COST_DESC,unit_cost from INFO_COST;


create table foo_1(c1 char(5),c2 varchar2(5));
insert into foo_1 values('abc','abc');
select length(c1),length(c2) from foo_1;

create table foo_2(c1 varchar(6));
drop table foo_2;
insert into foo_2 values('你好');
select * from foo_2;
select userenv('language') from dual;
desc dual;


create table foo_3(c1 nvarchar2(2));
insert into foo_3 values('你好');

create table class(
    xing nvarchar2(50),
    ming nvarchar2(50)
);

insert into class values('張','三');
select xing||ming from class;
insert into class values('steve','steve')
select xing||ming from class;
select xing||'.'||ming from class;
select concat(xing,ming) from class;
select concat(concat(xing,'.'), ming) from class;

create table foo_4(c1 varchar(500));
drop table foo_4;
insert into foo_4 values('     the fortification in your pole. It is like a peek your wallet as the thief, 
when you are thinking how to spend several hard-won lepta, when you are wondering whether new money, it has laid background.
    Because of you, then at the heart of the most lax, alert, and most low     of    ');
    
select trim(c1) from foo_4;
select ltrim(c1) from foo_4;
select rtrim(c1) from foo_4;
select lower(c1) from foo_4;
select upper(c1) from foo_4;
select initcap(c1) from foo_4;
select lpad(c1,600) from foo_4;
select lpad(c1,600,'@') from foo_4;
select substr(c1,100) from foo_4;
select substr(c1,100,120) from foo_4;
select substr(c1,-20) from foo_4;
select instr(c1,'of') from foo_4;
select instr(c1,'of',224) from foo_4;
select instr(c1,'of',224,2) from foo_4;



Oracle 日期操作

1日期類型

date 年月日時分秒(基本都是人輸入)

timestamp 年月日時分秒(秒帶小數點)(系統來 時間戳)

sysdate 系統時間

systimestamp 系統時間戳

select sysdate from dual;
select systimestamp from dual;


to_date 把一個字符串轉換為日期

select todate('201610-10','yyyy-mm-dd') from dual;

to_char 把時間轉換為指定的格式

select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
create table foo_5(d1 date);
insert into foo_5 values(to_date('2016/10/10 09:00:00','yyyy/mm/dd hh:mi:ss'));
insert into foo_5 values(sysdate);
select to_char(d1,'yyyy~mm~dd hh34:mi:ss') from foo_5;
select to_char(d1,'yyyy~mm~dd hh34:mi:ss') from foo_5 where d1>sysdate;

last_day 計算所在月的最后一天

months_between 一個日期和另一個日期差幾個月

least 一個日期和給定日期那一個時間更早

返回小的

greatest一個日期和給定日期那一個時間更近

返回大的

create table foo_6(birthday date);
insert into foo_6 values(to_date('1990/09/09','yyyy/mm/hh'));
insert into foo_6 values(to_date('1890/09/09','yyyy/mm/hh'));
insert into foo_6 values(to_date('2016/10/10','yyyy/mm/hh'));
select to_char(last_day(to_date('2016/10/10','yyyy/mm/dd')),'dd') from dual;
select months_between(sysdate, birthday)/12 from foo_6;
select to_char(least(birthday,to_date('2016/08/08','yyyy-mm-dd')),'yyyy-mm-dd') from foo_6;
select least (1, 3 ) from dual 
select to_char(greatest(birthday,to_date('2016/08/08','yyyy-mm-dd')),'yyyy-mm-dd') from foo_6;
select greatest (1, 3 ) from dual


round  對時分秒進行舍入 24小時制 12點后 算明天

trunc    對時分秒直接去掉

select to_char(round(sysdate),'yyyy/mm/dd') from dual;
select to_char(trunc(sysdate),'yyyy/mm/dd') from dual;


用于從一個date或者interval類型中截取到特定的部分 

extract(year from 日期)

extract(MONTH from 日期) 

extract(DAY from 日期)

extract(HOUR from 日期)

extract(MINUTE from 日期)

extract(SECOND from 日期)

select extract(year from sysdate) from dual;
select extract(month from sysdate) from dual;
select extract(day from sysdate) from dual;
select extract(hour from systimestamp) from dual;
select extract(minute from systimestamp) from dual;
select extract(second from systimestamp) from dual;



create 

drop (很少用,必須少用)

alter (很少用,必須少用,在 create 的時候要考慮好)

create table foo_11(
    n1 number(20);
    c1 varchar(50);
    
);
insert into foo_11 values(1,'abc');
insert into foo_11 values(null,'bcd');
insert into foo_11 values(3,null);
select * from foo_11 where c1 is null;


null 相關:


nvl

nvl(arg1,arg2)

如果arg1 為null 返回arg2

如果arg1不為null 返回arg1


nvl2(arg1,arg2,arg3)

如果arg1為null 返回arg3;

如果arg1不為null 返回arg2;

select nvl(c1,'空')from foo_11;
select nvl2(c1,'非空','空') from foo_11;


not null 約束

 指定某些列不能為null

create table foo_12(
    n1 number(20) not null;
    c1 varchar(20) not null;
);


number的舍入(先舍入,在看長度  )

create  table  foo_13(
    n1 number(5),
    n2 number(5,2), //對多的小數位直接舍棄,整數位多報錯
    n3 number(5,-1),//  倒數 變 0  抹掉零頭..先舍入,在看長度  最后一個0不算
);


主鍵 

數據的唯一性


1創建主鍵

主鍵也是列(多列,聯合主鍵)

一般沒有業務含義

唯一標識數據表中的某一行

必須有主鍵

類型組好是number

主鍵不為null

主鍵不能重復

constraint 主鍵約束名 primary key(主鍵列)


create table stu(
  stu_id number(11),
  stu_no number(8),
  stu_name varchar2(50),
  constraint stu_pk primary key(stu_id)
);

insert into stu values(123,100001,'張三');



修改表


刪除:

drop 刪除表

drop table stu;

delete刪除數據 可以恢復,速度慢

delete table stu;
delete table str where stu_id=123;

truncate刪除表內容不能恢復,速度快

truncate table stu;



alter


添加列

如何增加not null列

    增加一個可以為空的列

    update設置值

    將該列改為not null

設置為主鍵

     更麻煩

修改列的屬性

刪除列


create table foo_22
  ( name varchar2(50)
  );
insert into foo_22 values('張三');
insert into foo_22 values('李四');
insert into foo_22 values('王五');
insert into foo_22 values('趙六');
insert into foo_22 values('齊七');

alter table foo_22 add
(
  salary number(8,2)
);

desc foo_22;

select * from foo_22;

alter table foo_22 modify(
  name varchar2(55) not null
);

desc foo_22;

alter table foo_22 add(
  s_id number(8)
);

desc foo_22;

update foo_22 set s_id=3 where name='張三';
update foo_22 set s_id=4 where name='李四';
update foo_22 set s_id=5 where name='王五';
update foo_22 set s_id=6 where name='趙六';
update foo_22 set s_id=7 where name='齊七';

select * from foo_22;

alter table foo_22 drop column s_id;

desc foo_22;
select * from foo_22;


拷貝數據

但是不能復制約束

create table emp2 
as select empno, ename, job,sal
from emp;

create table emp2 
as select empno, ename, job,sal
from emp where ename='lmdtx';

拷貝表結構(在where 子句中 加上一個不成立的條件)但是不能復制約束

create table emp3
as select * from emp
where 1=2;




>= 

<= 

<> 不等于

AND 

OR

select * from emp2 where ename=''

a' or 'b'='b
注入***
select * from emp2 where ename='a' OR 'b'='b';

like 模糊查詢

 % 任意個字符

    M% 開頭是M的

    %M% 有M的

 _ 一個字符

select * from emp2 where ename like 'M%';
select * from emp2 where ename like '%A%';
select * from emp2 where ename like '_A%';



where 子句中的between ** and **


select salary from emp2 where salary between 1500 and 3000;


where 子句 中的 in 和 not in

select salary from emp2 where salary in (100,200,300);
 
select * from emp2 where ename='WARD' or ename='JAMES';

select * from emp2 where ename in ('WARD','JAMES');

select * from emp2 where ename not in ('WARD','JAMES');


where 子句判斷空值 is null 和 is not null

select * from emp2 where ename is null;
select * from emp2 where ename is not null;


where 中 子查詢

select * from emp2 where SAL=(select salary from emp2 where ename='WARD');
select *  from emp2 where ename in (select ename from emp2 where sal<1000 );


where 中 可以使用函數

select * from emp2 where length(ename)>4;


select 列的別名

    select 查詢的結果可以看成是一個邏輯上的一張表

select ename name from emp2;
        列名
             別名

select ename 姓名 from emp2;


去重 distinct

select distinct salary from emp2;


select 中可以使用函數

select ename||job from emp2;
select  ename||'='||job namejob from emp2;//在加上一個別名




聚合函數(聚集函數)


count// null的不計數  統計 主鍵可以查有多行

select count(ename) from emp2;

min

select max(salary) from emp2;

max

select max(salary) from emp2;

sum

select sum(salary) from emp2;

avg

select avg(salary) from emp2;



排序

order by 對查詢的結果 可以根據某個或者幾個列進行排序

    默認 asc 升序  

       desc 降序

  order by 后面也可以使用函數

    多個列

        先按照一個排序 再按照另一個拍 用

select ename,salary from emp2 where salary>1200 order by salary;

select ename,salary from emp2 where salary>1500 order by salary desc;

select ename,salary from emp2 where salary>1500 order by length(ename);

select ename,salary from emp2 orderby salary,length(ename);


















































向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蒲城县| 吉林省| 凤台县| 色达县| 外汇| 阿城市| 疏附县| 清水河县| 吴江市| 色达县| 马鞍山市| 塔城市| 泰和县| 措美县| 肇东市| 民权县| 涟源市| 中西区| 阿荣旗| 花垣县| 陆川县| 吉木乃县| 东辽县| 兴化市| 淮安市| 连城县| 武平县| 抚州市| 安丘市| 南郑县| 广元市| 通江县| 益阳市| 漳州市| 翼城县| 高邑县| 腾冲县| 丰城市| 郎溪县| 肃南| 怀安县|