상세 컨텐츠

본문 제목

2023.02.07

DB

by 연을 2023. 2. 7. 17:28

본문

728x90

오라클은 문자열을 ' '으로만 묶어야한다.

create table

drop table 테이블명;

Oracle alter table
컬럼 추가 (테이블스키마의 가장 아래쪽) alter table 테이블명 add 컬럼명 컬럼타입(길이);
컬럼 삭제 alter table 테이블명 drop column 컬럼명;
컬럼명 수정 alter table 테이블명 reman column 기존컬럼명 to 새컬럼명 ;
컬럼길이 수정 alter table 테이블명 modify 컬럼명 새타입(새길이);
Mysql alter table
컬럼 추가 alter table 테이블명 add 컬럼명 컬럼타입(길이) first/last/after 컬럼명/before 컬럼명;
컬럼 삭제 alter table 테이블명 drop 컬럼명;
컬럼 수정 alter table 테이블명 change 기존컬럼명 새컬럼명 새타입(새길이);

desc 테이블명;

내가 만든 테이블 목록 보기 : select * from user_tables;

<코드>

select table_name from user_tables;
desc student;
alter table student add birthday char(8);
alter table student drop column math;
alter table student drop column korean;
alter table student drop column english;
alter table student modify gender varchar2(6);
alter table student rename column name to sname;

<결과>

==========================================

테이블 복사 : create table A as select * from B;

  1. B의 스키마와 같은 A테이블이 생성
  2. B의 모든 데이터가 A에 복사된다.

==========================================

index : 검색속도 향상

: create index 인덱스명 on 테이블명(컬럼1,...,컬럼n);

: drop index 인덱스명;

==========================================

인사부 : employees 총무부 : member 자재부 : worker

create synonym worker for employees;

select * from worker;

create synonym member for employees;

select* from member;

==========================================

create sequence s1 increment by 1 start with 1 nocycle

increment by -1

start with 0

minvalue -10

 

ex)

s1.nextval => 0

s1.nextval => -1

...

s1.nextval => -10

s1.nextval => error <= nocycle

                         0    <= cycle

==========================================

partition table : 1개의 큰 테이블을 여러개의 데이터파일에 분리해서 보관하는 것

===========================================

Oracle insert : 데이터를 테이블에 보관/저장/추가
스키마에 나오는 컬러명 순서대로 insert into 테이블명 values(값1,...,값n)
순서가 기억나지 않을때 insert into 테이블명(컬럼명1,...,컬럼명n) values (값1,...,값n);
스키마(테이블)가 이미 존재할때 insert into 테이블명 select * from 테이블명2
스키마(테이블)가 존재하지 않을때 create table 테이블명 select * from 테이블명2
Mysql insert : 데이터를 테이블에 보관/저장/추가
insert into 테이블명 set 컬럼명1=값1,...,컬럼명n=값n 
insert into 테이블명  select * from 테이블명2

<코드>

insert into menu values('아메리카노',2500);
insert into menu values('라떼',3000);
insert into menu values('카푸치노',3200);
insert into menu values('카페모카',3500);
insert into menu values('핫초코',3000);
insert into menu values('매실차',3400);
insert into menu values('유자차',3300);

alter table student modify eng_score number default 0;
alter table student modify kor_score number default 0;
alter table student modify math_score number default 0;
insert into student(sname,gender,birthday) values('김민준','남성','20000327');
insert into student(sname,gender,birthday) values('이서연','여성','20000424');
insert into student(sname,gender,birthday) values('이서준','남성','20000322');
insert into student(sname,gender,birthday) values('유서윤','여성','20000902');
insert into student(sname,gender,birthday) values('윤도윤','남성','20000512');
insert into student(sname,gender,birthday) values('김지우','여성','20001203');
insert into student(sname,gender,birthday) values('박예준','남성','20000607');
insert into student(sname,gender,birthday) values('박민서','여성','20000721');
insert into student(sname,gender,birthday) values('정지후','남성','20000811');
insert into student(sname,gender,birthday) values('최수아','여성','20000207');

<결과>

menu student

==================================================================

연산자
산술연산자 +, -, *, /, ||(연결연산자), remainder() 
비교연산자 =, >, <, <=, >=, !=, <>(같지 않다), in, is null, is not null
컬럼명 between 값1 and 값2 ==
컬럼명 >= 값1 and 걸럼명 <= 값2
like : 문자열데이터의 조건비교 [% : 0개 이상의 문자] [_ : 1개의 문자]
논리연산자 and, or, not
집합연산자 합집합 : union / union all
교집합 : intersect
차집합 : minus

<산술 연산자 코드>

select 3*2+4-2+12/4-3 from dual;
select '이름:'||emp_name||',월급:'||salary||'달러'from worker;

<결과>

<비교 연산자 코드>

select * from student where math_score=0;
select emp_name,salary from employees where salary in (2000,3000,4000,5000,6000);
select emp_name,salary from employees where salary between 2000 and 6000;
select emp_name from employees where emp_name like '% J%';
/*성이 G로 시작하는 사람 찾기*/
select emp_name from employees where emp_name like '% G%';
select emp_name from employees where emp_name like '___ %';/*이름이 세글자*/
select emp_name from employees where emp_name like '% _____';/*성이 다섯글자*/
select * from student where birthday is null;
select emp_name,salary from employees where salary between 5000 and 10000 and emp_name like 'P%';

<결과>

select * from student where math_score=0;

: student table에서 math_score이 0인 사람.
select emp_name,salary from employees where salary 
in (2000,3000,4000,5000,6000);

: employees 테이블에서 salary가 2000,3000,4000,5000,6000인 사람

select emp_name,salary from employees where salary 
between 2000 and 6000;

: employees 테이블에서 salary가 2000에서 6000인 사람
select emp_name from employees where emp_name 
like '% J%';
: employees에서 emp_name 성이 J로 시작하는사람
select emp_name from employees where emp_name
like '% G%';

: employees 테이블에서 emp_name 성이 G로
시작하는 사람
select emp_name from employees where emp_name
like '___ %';

: employees에서 emp_name 이름이 세글자인 사람
select emp_name from employees where emp_name
like '% _____';

: employees에서 emp_name 성이 다섯글자인 사람
select * from student where birthday is null;
: student에서 birthday가 null 일때
select emp_name,salary from employees where salary
between 5000 and 10000 and emp_name like 'P%';

: employees에서 5000에서 10000사이, emp_name 
이름이 P로 시작하는 사람

====================================

delete : 조건에 해당하는 레코드를 테이블에서 제거
테이블의 모든 데이터가
삭제된다.
delete from 테이블명    truncate table 테이블명  drop table 테이블명 
rollback; = 실행취소 schema는 남는다.
rollback 가능
복구 가능
schema는 남는다.
rollback 불가능
복구가 불가능하다.
schema 삭제
rollback 불가능
복구 불가능
delete form 테이블명 where 조건식(연산자,표현식)  => row/record 단위로 삭제
 

delete 했을 경우 하면 안되는 행동

  1. commit;
  2. 정상종료할때
truncate table employees  
create table worker as select * from employees; insert into employees select * from worker;
commit rollback drop
변경한 데이터를 데이터베이스에 마지막으로 반영(확정) 변겅한 데이터를 변경하기 이전 상태로 되돌리기
create는 대상이 되지 않음
1. 사본 작성(생성)
2. 원본 drop
3. 사본 drop
auto commit auto rollback 휴지통에 들어가 있다.
sqlplus, sqldevelope 정상종료 할때 sqlplus, sqldevelope 강제종료 할 때  

<코드>

select * from worker;
delete from worker where salary <=2500;
rollback;
/*매니저 아이디가 null인사람 모두 삭제*/
select * from worker where manager_id is null;
delete from worker where manager_id is null;
/*월급이 5000불이거나 이름이 M으로 시작하는 사람 삭제*/
select * from worker where salary=5000 or emp_name like 'M%';
delete from worker where salary=5000 or emp_name like 'M%';

<결과>

delete from worker where salary <=2500;
: worker의 salary가 2500보다 작을 때
delete from worker where manager_id is null;
: worker의 manager_id가 null일 때
delete from worker where salary=5000 or emp_name like 'M%';
: worker의 salary가 5000이거나 emp_name 이름이 M으로 시작할때

<코드>

create table labor(
emp_id number,
ename varchar2(32)
);
insert into labor select employee_id, emp_name from employees;
select *from labor;

<결과>

create table labor(
emp_id number,
ename varchar2(32)
);
insert into labor select employee_id, emp_name from employees;

=> 타입&길이를 무조건 맞춰야 한다.
만약 insert into labor select emp_name, employee_id from employees;
쓴다면 타입이 맞지 않는다고 값이 들어가지 않는다.

DB.....

변경사항 아니오...

728x90

'DB' 카테고리의 다른 글

2023.02.13  (0) 2023.02.13
2023.02.10  (0) 2023.02.10
2023.02.09  (0) 2023.02.09
2023.02.08  (0) 2023.02.09
2023.02.06  (0) 2023.02.06

관련글 더보기