■ DDL(Data Definition Language) : DB의 객체를 생성/삭제/수정하는 언어

CREATE 객체 생성
DROP 객체 삭제
ALTER 객체 수정
CREATE TABLE MEMBER
(
    ID       VARCHAR2(50),
    PWD      VARCHAR2(50),
    NAME     VARCHAR2(50),
    GENDER   CHAR(50),
    AGE      NUMBER,
    BIRTHDAY CHAR(50),
    PHONE    CHAR(50),
    REGDATE  DATE
)

DROP TABLE MEMBER;

-- 1. 자료 타입 변경
-- 기존 데이터가 10보다 넘어가는 게 있으면 크기 수정이 안된다.
ALTER TABLE MEMBER MODIFY ID VARCHAR2(10); 

-- 2. 칼럼 삭제
ALTER TABLE MEMBER DROP COLUMN AGE;

-- 3. 행 추가
ALTER TABLE MEMBER ADD EMAIL VARCHAR2(200);

 

■ DML(Data Manipulation Language) : DB의 데이터를 생성/조회/갱신/삭제하는 언어

- CRUD의 개념 : Create(생성), Read(=RETRIEVE읽기/조회), Update(갱신), Delete(삭제)

  - 데이터는 일반적으로 CRUD방식을 통해 관리된다.

INSERT 삽입 *테이블에 삽입한다는 개념으로 INSERT 사용
SELECT 조회 *테이블에서 특정 데이터를 뽑아서 본다는 개념으로 SELECT 사용
UPDATE 갱신
DELETE 삭제

 

[1] INSERT  __ * 코드 원본 출처 : 뉴렉쳐 강의

CREATE TABLE MEMBER
(
    ID       VARCHAR2(50),
    PWD      VARCHAR2(50),
    NAME     VARCHAR2(50),
    GENDER   CHAR(50),
    AGE      NUMBER,
    BIRTHDAY CHAR(50),
    PHONE    CHAR(50),
    REGDATE  DATE
);

-- 대문자를 주로 사용. (대소문자 구분x) / 다만 비교를 할 때는 소문자 사용
INSERT INTO MEMBER(ID, PWD) VALUES('NEW LEC','111');
INSERT INTO MEMBER(ID, PWD) VALUES('DRAGON','111');
SELECT id, name, pwd FROM MEMBER;
-- "  " 안에 임시 헤딩을 사용하면 대문자로 변환되지 않고 소문자를 그대로 출력한다.
SELECT id "user_ID", NAME, PWD FROM MEMBER;

 

[2] UPDATE  __ * 코드 원본 출처 : 뉴렉쳐 강의

CREATE TABLE MEMBER
(
    ID       VARCHAR2(50),
    PWD      VARCHAR2(50),
    NAME     VARCHAR2(50),
    GENDER   CHAR(50),
    AGE      NUMBER,
    BIRTHDAY CHAR(50),
    PHONE    CHAR(50),
    REGDATE  DATE
);

INSERT INTO MEMBER(ID, PWD) VALUES('NEW LEC','111');
INSERT INTO MEMBER(ID, PWD) VALUES('DRAGON','111');

-- 모든 PWD 데이터가 '222'로 바뀐다.
UPDATE MEMBER SET PWD = '222';

UPDATE MEMBER SET PWD = '222' WHERE ID = 'newlec';

-- 문자 데이터의 경우 대소문자를 구분하기 때문에 대소문자까지 일치해야한다.
UPDATE MEMBER SET PWD = '333', name = '손오공' WHERE ID = 'DRAGON';

 

[긴 코드 예시_테이블 생성/수정/삭제 & 데이터 CRUD]

create table scores
(
--변수명 자료형
--//크기는 넉넉하게 준다.
  name  varchar2(100), --byte단위 가변길이
  kor   number(5),     --숫자의 길이 단위
  eng   int, 
  mat   number(5,1),
  prev  char(4)         --byte단위 고정길이
)
/

--////////////////////////////////////////////////////////////////////--
-- DML(Data Manipulation Language) : insert update delete select(CRUD)

--데이터 삽입 - insert into ~~ values ();
insert into scores values('김길동',80,80.5,80.5,'A');
insert into scores values('나길동',90,95,100,'B');
insert into scores values('다길동',75,23,55,'C');
insert into scores values('라길동',88,55.5,60,'A'); --int형에 55.5를 넣으면 반올림이됨
insert into scores(name,kor,eng) values('바길동',99,100);

--데이터 조회 - select ~~ from ~~~ 
select * from scores
select 
   name, kor, eng, mat, prev
from scores
select
   name, kor
from scores
select
   name, kor, eng, mat, prev,
   (kor+eng+mat)/3 as avg
from scores
select
   name, kor, eng, mat, prev,
   rank() over(order by (kor+eng+mat) desc) as rank
from scores

-- 데이터 갱신 - update ~~ set ~~~ where ~~~
update scores set kor = 10;   -- <<모두 갱신
update scores set kor = 85 where name = '나길동'
update scores set eng = 90 where name = '라길동'
update scores set name = '마길동' where name = '다길동';
update scores set name = '다길동' where name = '라길동';  

-- 데이터 삭제 - delete ~~ from ~~~ where ~~~
delete from scores --전체 데이터 삭제
delete from scores where name = '바길동'
delete from scores where 1 = 1; -- 전체 데이터 삭제

--///////////////////////////////////////////////////////////////////--
-- DDL(Data Definition Language) : create(생성), drop(삭제), alter(수정)

-- 테이블 수정
-- 1. 칼럼 추가
-------------칼럼 추가시 이슈사항 : 칼럼을 추가하면 이전의 연산식을 수정해야한다.(사전 데이터 설계의 중요성)
alter table scores add sci int;
alter table scores add commt varchar2(600); --최대 200글자
update scores set sci = 100, commt = '잘했어요.';
select * from scores
-- 2. 칼럼 삭제
alter table scores drop column prev;

-- 테이블 삭제
drop table scores;

>> 결과 (테이블 삭제 전)

 

 

[참조 출처] 뉴렉쳐 강의

1. 테이블 용어

행의 집합을 instance라고도 한다.

 

2. 데이터 타입

- 데이터 타입에는 아래와 같이 여러가지가 있다. 현재 단계에서는 기본 빌트인 데이터 타입만 확인.

원본: 유투브 뉴렉처

[ Oracle Built-in Data Types ]

자료형 예시   종류 최대 길이
Character 'A'
'123'
고정 길이 CHAR(size [BYTE | CHAR]) 4000BYTE
가변 길이* VARCHAR2(SIZE [BYTE | CHAR])
고정 길이 NCHAR(SIZE)
가변 길이* NVARCHAR2(SIZE)
CLOB   대용량 문자   4GB
Numeric 25
3.55
3.55F
  NUMBER(P , S)
* P : 전체 자릿수, S : 소수점 자릿수
38
DATE '2013-11-25' 날짜    
TIMESTAMP   날짜 + 시분초    

 

▶ CHARACTER

 

- CHAR(SIZE [BYTE | CHAR]) 는 고정 길이이다.

  > 고정 길이는 가변 길이 보다 검색 속도가 더 빠르다. (왜냐면, CHARACTER는 구분자를 통해 구분되기 때문)

  > 가급적 고정적인 데이터는 VARCHAR2( ) 보다 CHAR을 사용하는 것이 좋다. 

  > 오라클에서 기본적으로 AL32UTF8 인코딩 방식 사용 [한 글자에 3BYTE]

- VARCHAR2(SIZE [BYTE | CHAR]) 는 가변 길이이다.

  > 지정해둔 사이즈만큼 메모리 공간을 쓰는 것이 아니며, 실제 저장한 문자 크기 만큼만 메모리 공간을 사용한다.

- NCHAR(SIZE)

  > 세계 각국의 문자를 사용할 수 있는 데이터 형태.

  > 오라클에서 기본적으로 AL16UTF16 인코딩 방식 사용 [한 글자에 2BYTE]

  > 고정 길이 문자이면서, 세계 각국 언어(그 중에 한글도 포함)을 쓸 경우엔 NCHAR을 쓰는게 효율적이다.

- NVARCHAR2(SIZE)

CREATE TABLE MEMBER
(
    ID       VARCHAR2(50),
    PWD      NVARCHAR2(50),
    NAME     NVARCHAR2(50),
----GENDER   CHAR(6),       --- 남성, 여성, 기타 // 6 BYTE로 지정
----GENDER   CHAR(2 CHAR),  --- 2 뒤에 CHAR 선택
    GENDER   NCHAR(2),      --- 2 뒤에 CHAR 지정x >> 2 글자라는 의미 
    AGE      NUMBER,
    BIRTHDAY CHAR(50),  --- 2000-03-05   고정길이
    PHONE    CHAR(13),  --- 010-123-2345 고정길이
    REGDATE  DATE
)

SELECT LENGTH('한글') FROM DUAL;    --- 결과 : 2
SELECT LENGTHB('AB') FROM DUAL;     --- 결과 : 2  << 2바이트
SELECT LENGTHB('한글') FROM DUAL;   --- 결과 : 6

--문자 환경설정 확인
SELECT * FROM NLS_DATABASE_PARAMETERS; -- NCHAR은 한글 한글자에 2BYTE사용
[문자도 정렬이 될까?]

※ 문자도 SORTING이 된다 (A,B,C,D,.... 숫자면 1, 2, 3, 4....)
- 아래와 같이 날짜 타입의 데이터를 문자로 변환 후 그 문자의 최소값을 구하는 게 가능하다.

   SELECT * FROM sawon
     WHERE TO_CHAR(sahire,'YYYY-MM-DD') = (SELECT MIN(TO_CHAR(sahire,'YYYY-MM-DD')) FROM sawon) 

 

3. 간단 sql 명령어

간단 sql 명령어 정리

■ 로그인
sqlplus host/password

■ 연결
connect scott/tiger

■ 현재 사용자 출력
show user

■ 테이블 구조 설명 출력
describe tab 
또는
desc tab

■ 잠깐 cmd으로 넘어가기
host >> 잠시 cmd로 이동
exit >> 다시 sql로 넘어감

■ SQL 나가기
exit

 

4. 메모장으로 sql파일 저장 후, CMD에서 실행하기

[1] SQL파일 저장

※ 유의사항 : 사전에 sql파일을 저장할때 인코딩 charset을 ANSI로 설정
why? OS운영체제에 따라 사용하는 인코딩이 다르기 때문(ex. window - MS949)

 

[2] SQL파일 실행하기
1. cmd에서 sql파일 위치로 cd 경로 이동 
2. sqlplust host/password 접속

3. @a로 파일 실행
※ 에러 : 단일 인용부를 지정해 주십시오 << 인코딩이 맞지 않아서다.(파일을 재저장하면 된다)

 

[3] sql파일 수정

edit (파일명) 또는 ed (파일명)
--확장자 제외 파일명 입력

 

 

[참조]

http://www.gurubee.net/lecture/1380

1. 유저 생성 - create user (대상) identified by (비밀번호)

https://ajdahrdl.tistory.com/2

 

[Oracle] 계정 생성 및 권한 부여 방법

Oracle 11g 기준으로 작성된 글입니다. oracle 11g 설치를 다 하신 후에 cmd와 sql developer에서 oracle에 접근해 계정 설정이 가능합니다. 1. cmd에서 계정 설정하기 1) cmd에서 접속하기 sqlplus 로 접속하시면..

ajdahrdl.tistory.com

> 관리자 아이디로 접속 후
create user 계정 identified by 비밀번호

 

2. 권한 부여 - grant connect/ grant resource/grant select ....

[1] 연결 권한 - grant connect to (대상)

grant connect to 계정       --- 연결 권한

 

 

[2] 테이블 권한 부여 - grant resource to (대상)

grant resource to 계정      --- 자원(Table) 생성 관리할 수 있는 권한
-- 위의 2개 명령을 한 번에 처리
grant connect,resource to 계정

▶ 자원 권한 부여

 

[3] 뷰 권한 부여 - grant create view to (대상)

GRANT CREATE VIEW TO 계정

 

[4] 객체 조회 권한 부여 

grant all   -- 모든 권한 부여(위험)
grant select on 테이블 또는 뷰명 to 계정   -- 조회(SELECT) 권한 부여

 

3. 권한 회수(취소) - revoke connect/ revoke resource / grant select...

 

[1] 연결 및 자원 권한 회수

revoke connect,resource from 계정

[2] 객체 조회 권한 회수 - revoke select on (객체) from (대상)

revoke select on 테이블 또는 뷰명 from 계정  -- 권한 회수

scott안에 dept은 있지만 조회가 되지 않음에 대해 이렇게 에러 메세지 노출된다

 

 

 

※ 더 많은 사용자 관련 명령어

https://aileen93.tistory.com/17

 

[Oracle] 오라클 DB 계정 생성 및 사용자 확인

오라클 DB 계정 생성 및 사용자 확인하는 방법 오라클의 관리자 계정은 DBA 권한을 가지고 있어야 하며, 오라클 설치 시 기본적으로 Scott(사용자)가 자동 생성됨 서버에서 ORACLE 접속시   su - oracle

aileen93.tistory.com

 

 

[참조]

- 국비지원수업과정

- 꿈꾸는 개발자 http://www.gurubee.net/lecture/1009

■ 오라클 설치하기
https://misrover.tistory.com/114

 

[오라클 설치] 오라클 XE 설치 및 다운로드

오라클 11g XE 11.2 다운로드 오라클 XE는 오라클 데이터베이스 학습할 때 사용합니다. 인터페이스가 편하고, 무료라서 학습용으로 적합합니다. 오라클 XE는 오라클 홈페이지에서 다운로드 가능합

misrover.tistory.com

 

■ 사용자 생성하기

https://why-dev.tistory.com/71

 

[DATABASE] DDL, DCL_ 객체 생성 및 사용자 조회 권한 부여

■ DDL (Data Definition Language) : 데이터베이스 객체(테이블,뷰,인덱스...)의 구조를 정의 CREATE 객체 생성  *객체 : 사용자, 테이블, 뷰 .... DROP 객체 삭제 ALTER 객체 재정의 ■ DCL(Data Control Langu..

why-dev.tistory.com

 

■ 사용자 로그인하기

[방법1] 웹 브라우저(HTTP SERVICE)에서 Oracle 접속하기

※ 이건 10g 버전의 경우에만 가능하며, 아래와 같은 방식은 DBO관리자가 주로 사용하기 용이

http://127.0.0.1:8080/apex

 

[방법2] CMD창에서 클라이언트 도구 sqlplus.exe 통해 접속하기

sqlplus.exe 계정/암호

 

[방법3] 이클립스에서 접속하기

※ 사용자는 이미 생성된 상태

새로운 Database connection를 만들거다
내가 등록했던 정보 작성후 [Test Connection] 하기 *xe는 오라클 버전이다.
사용자 선택 후 오른쪽 마우스하여 Connect를 누른다.
이클립스 상단에서 [1] 내 오라클 버전 [2] 사용자명 [3] Databse를 선택한다.

 

[방법4] 외부 클라이언트 도구 - ex. SQL developer

 

■ 전체 사용자 조회하기

//모든 사용자 관련 정보를 설명하라
desc all_users

//모든 사용자들 데이터들을 출력하라
select * from all_users;

 

이클립스와 오라클 DBMS를 연결하기

[상황1] 서버가 내 컴퓨터(로컬)에 있을 때 == localhost 사용할 때

 

- 작업 1. (선택사항) 계정 하나 만들기 *이미 계정이 있다면 연결만 하기

※ 여기서는 기존에 있는 hr 계정 활성화하는 것으로 대체

[1] 데이터베이스 로그인 후 HR(임시계정) 잠금 풀기
localhost:8080/apex > 관리 > 데이터베이스 사용자 > 비밀번호(1234등 아무거나) > HR잠금 풀기 설정 후 확인

[2] 로그아웃 후 HR로 로그인하여 객체 브라우저로 이동

 

 

- 작업 2. 오라클 driver파일을 작업 프로젝트로 이동시키기

[1] 오라클's이클립스 연결 파일(driver) 경로로 이동
C:\oraclexe\app\oracle\product\10.2.0\server\jdbc\lib

[2] driver파일을 프로젝트 취상위 경로에 복사하여 이동
ex. OracleStudy폴더에 이동


- 작업 3. 이클립스에서 경로 설정

[1] perpective를 JavaEE로 설정
*JDK 다운시, java SE로 다운받으면 이 설정X


[2] 하단의 [Data Source Explorer] 탭 > [Database Connection] 폴더 선택 후 마우스 오른쪽 > new

 

[3] [New Connection Profile] 윈도우창 설정 후 [NEXT]
    - Connection Profile Types : Oracle 선택
    - Name : Oracle_DBO이름 설정 *아무 이름이나 괜찮음. 한글도 상관 없음. ex) Oracle_hr

 

[4] [New Connection Profile] 윈도우창에 테이블 나타남
    - Drivers 셀렉박스 바로 옆 아이콘 선택, [New Driver Definition] 윈도우창으로 이동 

 


[5] [New Driver Definition] 윈도우창에서 아래와 같이 설정 후 [OK]
    - [Name/Type] Oracle Thin Driver의 나의 오라클 버전(10) 선택
    - [JAR List] 작업2의 [2]에서 옮긴 파일 경로로 경로 변경

 


[6] [New Connection Profile]으로 재이동 후 Properties 작성 후 [Test Connection] 선택  
                                                                                  --> Ping succeeded! 하면 정상연결된 것
    - Service Name : xe ***사용하는 오라클 버전 (Express Edition -- 교육용)
    - Host : localhost
    - User name : hr
    - Password : 1234 *save password 체크

 



[상황2] 서버가 외부에 있을 때 - AWS클라우스 사용 가정


- 작업 1. (선택사항) 아마존에서 계정 생성 후 계정 정보를 획득한다.  *이미 있다면 그것을 사용
* 보안 그룹 > 인바운드 규칙 편집 : 새 규칙 생성 
  rf. 예시) 유형(Oracle-RDS), 프로토콜(TCP), 포트 지정, 사용자는 Anywhere
                                                                                    ---> 외부에서 접속 가능

- 작업 2. 오라클 드라이버 파일을 작업 프로젝트 폴더로 이동시킨다. 

[참조 : 만약 드라이버 파일이 내 폴더 내에 없다면]

[1] mvnrepository.com로 이동

[2] 검색창에 ojdbc6 입력

[3] Files안의 jar파일을 다운

[1] 오라클's이클립스 연결 파일(driver) 경로로 이동
C:\oraclexe\app\oracle\product\10.2.0\server\jdbc\lib

[2] driver파일을 프로젝트 취상위 경로에 복사하여 이동
ex. OracleStudy폴더에 이동

 

- 작업 3. 이클립스에서 경로 설정


[1] [Data Source Explorer] 탭 > [Database Connection] > new 
    - Name : Oracle_AWS_닉네임

 

[2] [New Connection Profile] 
    - [Name/Type] Oracle Thin Driver의 나의 오라클 버전(10) 선택
    - [JAR List] 작업2의 [2]에서 옮긴 파일 경로로 경로 변경
    * 이미 등록된 드라이버라 할 경우, [Database Connection] 삼각형 아이콘 터치 > Driver수정 (다운받은 버전으로)

 


[3] [Database Connection] 
    - Serivce Name : DATABASE
    - Host : 아마존에 등록한 RDS 엔드포인트
    - 포트 : 아마존에 등록한 RDS 포트
    - Username : 등록한 username
    - Password : 등록한 비번 

/////////////////////////////////////////////////////////////////////////////////

>>> 이클립스와의 연결이 모두 완료되면 Create Dynamic Web Project 선택해서 프로젝트 작업을 시작

/////////////////////////////////////////////////////////////////////////////////

 

 

참조할만한 사이트
gurubee.net

 

 

 

 

 

■ SQL : DBMS에게 질의하는 명령어

    *DBMS : Database + Managment System 

    *무엇을 질의하는가? 구조화된 데이터를 질의한다. 

  [사전적 의미]
  SQL
(/ˈɛs kjuː ˈɛl/, 또는 /ˈsiːkwəl/, Structured Query Language, 구조화 질의어, S-Q-L)는 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.

 

■ 구조화된(=정형화된) 데이터란?

https://kingofbackend.tistory.com/11

 

[DB] 정형, 반정형, 비정형 데이터

데이터베이스의 가장 원초적인 목적은 데이터를 수집하는 것입니다. 내가 필요한 데이터를 수집하기 위해선 먼저 수집 대상이 되는 데이터의 유형을 파악하고 있어야 합니다. 일반적으로 데이

kingofbackend.tistory.com

 

■ 데이터 베이스  : 데이터의 집합

rf. 데이터베이스 관리 시스템을 통해 중복을 없애는 방식으로 결함을 줄일 수 있다.

 

■ 데이터 베이스 계정

- DBO : DATABASE OWNER, DBA(=user(사용자)) 데이터 소유주

- DBA : DATABASE ADMINISTRATOR, 데이터 소유주에게 권한을 받은 사용자 계정

 

데이터 무결성 : 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제값이 일치하는 정확성을 의미한다.

https://coding-factory.tistory.com/221

 

[DB기초] 무결성이란 무엇인가(무결성 제약조건)

 무결성이란? 무결성이란 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제값이 일치하는 정확성을 의미한다 무결성을 유지하는 방법 대표적으로 사용되는 방법은 중앙

coding-factory.tistory.com

 

■ 데이터베이스의 특징 

1. 실시간 접근성(Real-Time Accessibility) : 비정형적인 질의(조회)에 대해 실시간 처리에 의한 응답이 가능

2. 지속적인 변화(Continous Evolution) : 데이터베이스의 상태는 동적이다. 즉 새로운 데이터의 삽입(Insert), 삭제(Delete), 갱신(Update)로 항상 최신의 데이터를 유지해야한다.

3. 동시 공용(Concurrent Sharing) : 데이터베이스는 서로 다른 목적을 가진 여러 응용자들을 위한 것이므로, 다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 한다.

4. 내용에 의한 참조(Content Reference) : 데이터베이스에 있는 데이터를 참조할 때, 데이터 레코드의 주소나 위치에 의해서가 아니라 사용자가 요구하는 데이터 내용으로 찾는다.

 

데이터베이스의 언어 

 

  • DDL (정의어 : Data Definition Language) : 데이터베이스 구조를 정의, 수정, 삭제하는 언어 ( alter, create, drop )
  • DML (조작어 : Data Manipulation Language) : 데이터베이스내의 자료 검색, 삽입, 갱신, 삭제를 위한 언어 ( select, insert, update, delete )
  • DCL (제어어 : Data Control Language) : 데이터에 대해 무결성 유지, 병행 수행 제어, 보호와 관리를 위한 언어 ( commit, rollback, grant, revoke )

 

 

 

 


[출처] 

https://dev-coco.tistory.com/158 [슬기로운 개발생활😃]

 

신입 개발자 기술면접 질문 정리 - 데이터베이스

💡 데이터베이스의 특징에 대해 설명해주세요. 실시간 접근성(Real-Time Accessibility) : 비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야 하며, 지속적인 변화(Continuous Evloution)

dev-coco.tistory.com

https://www.youtube.com/watch?v=pGlkIFrY9QY&list=PLq8wAnVUcTFVq7RD1kuUwkdWabxvDGzfu&index=1 뉴렉처 강의

위키백과

국비지원수업 과정 참고

 

 

+ Recent posts