WebBrowser -> WebServer = request
WebBrowser <- WebServer = response
Webserver 에는 WebServer application 가 존재
Webserver application는 database 를 통해서 데이터를 저장
database는 app으로 oracle, mysql 등이 있다.
8080 포트를 이용해 웹 브라우저를 통해 접속
1521 포트를 이용해 oracle 접속 app (sqlplus)
sqlplus은 터미널을 통해 이용 가능 (터미널을 통해서만 실행 가능한 프로그램이 존재)
service는 자동으로 실행
oracle에서 비밀번호를 제외하고 대소문자를 구분하지 않는다.
명령 프롬프트에서 관지라 생성과 권한 부여 후에 실행할 때
sqlplus 계정, sqlplus 비밀번호를 따로 작성 가능
sqlplus 계정/비밀번호 같이 작성도 가능
sqlplus가 실해중인 상태 : 오라클 데이터베이스와 대화
명령 프롬프트 상태 : 운영체제와 대화
C:\Users\acorn> sqlplus 관리자 계정/설치 시 입력했던 비밀번호
CREATE USER 계정 INDENIFIED BY 비밀번호;
GRANT RESOURCE , CONNECT TO 계정;
RESOURCE : 객체 생성 권한
CONNECT : 접속 권한
CREATE TABLE 테이블명 (
칼럼1 칼럼1_데이터_타입 PRIMARY KEY,
칼럼2 칼럼2_데이터_타입,
칼럼3 칼럼3_데이터_타입
);
예시) table (표) member 생성
CREATE TABLE member (
num NUMBER PRIMARY KEY,
name VARCHAR2(10),
addr VARCHAR2(20)
);
PRIMARY KEY : 반드시 입력해야하는 대표키이자 기본키이며 유일성을 보장한다. 동일한 값이 존재하지 않는다. (unique + not null)
num, name, addr : 칼럼명
NUMBER : 숫자 -> NUMBER(7,2) 처럼 총 자릿수와 소수점 자릿수도 지정 가능
VARCHAR2 : 문자열
NOT NULL : 공백값이 존재할 수 없다
UNIQUE : 중복을 허용하지 않는다
INSERT INTO 테이블명 (칼럼명1, 칼럼명2, 칼럼명3...) VALUES(값1, 값2, 값3,...)
칼럼의 값은 주로 숫자, 문자, 날짜가 저장된다.
숫자 : 원하는 숫자 입력
문자 : ''안에 글자 작성해 입력
날짜 : SYSDATE
모든 칼럼명에 값을 적지 않아도 된다.
ex) INSERT INTO member(num, name) VALUES(2,'해골')
만일 모든 칼럼명에 값을 저장한다면 칼럼명은 생략하고 값만 입력 가능
ex) INSERT INTO member VALUES(3, '원숭이', '상도동')
잘못된 실행 명령어로 오류 발생시
ex) INSERT INTO member VALUS(4, 'XXX', 'YYY'); -> VALUES의 오타 발생
SQL> ED 를 실행
열린 메모장에 오타를 수정해 저장 후 메모장 종료
SQL> / 를 실행
SELECT로 조회하면 다시 맞게 수정된 행이 조회
SELECT 칼럼명1, 칼럼명2, 칼럼명3,... FROM 테이블명;
테이블의 행은 순서가 존재하지 않는다.
칼럼값에 비어있는 값이거나 알 수 없는 상태를 "NULL"이라고 한다.
UPDATE 테이블명
SET 컬럼명2 = '데이터2', 컬럼명3 = '데이터3'
WHERE 컬럼명1 = '수정할 행의 컬럼명1의 데이터 값';
DELETE FROM 테이블명
WHERE 컬럼명1 = '삭제할 행의 컬럼명1의 데이터 값';
만일 WHERE 조건을 적지 않는다면 테이블에 있는 모든 속성이 삭제
INSERT, UPDATE, DELETE는 일시적인 반영이며, 데이터를 영구 반영하려면 COMMIT 실행
최근 COMMIT 이전까지 상태로 다시 되돌아가며, 변경 내용을 취소
CRUD를 실행한 CMD와 다른 CMD를 실행시킬 때
생성한 테이블은 존재하지만 테이블에 저장한 데이터 값들은 반영하지 않는다.
이에 대하여 데이터 값들도 반영하려면 COMMIT을 실행
오늘 날짜를 출력
SELECT SYSDATE FROM DUAL;
DUAL : 컬럼 하나 로우 하나의 DUMMY 테이블이라고 생각하면 편하다 (원래는 view)
DUMMY TABLE : ORACLE에서 1개의 행만 가진 특별한 가상 테이블
테이블의 컬럼명과 속성, 타입이 출력
DESC 테이블명;
테이블의 ROW의 개수만큼 'HELLO!' 출력
SELECT 'HELLO!' FROM 테이블명;
CMD 라인사이즈 변경
SET LINESIZE 숫자
HELLO가 테이블의 ROW의 개수만큼 출력되면서 본래의 테이블 컬럼까지 출력
SELECT 'HELLO', SYSDATE, 컬럼명1, 컬럼명2, 컬럼명3 FROM 테이블명;
산술연산자(*,/,+,-) 사용
SELECT 숫자 산술연산자 숫자 FROM DUAL;
테이블에 있는 모든 컬럼과 속성값이 출력
SELECT * FROM 테이블명;
SELECT 컬럼명1, 컬럼명2, 컬럼명3 FROM 테이블명 ORDER BY 컬럼명1 ASC;
SELECT 컬럼명1, 컬럼명2, 컬럼명3 FROM 테이블명 ORDER BY 컬럼명1 DESC;
조건 삽입 후 선택할 그룹 기준으로 정렬 조건
SELECT 컬럼명1, 컬럼명2 FROM 테이블명 WHERE 컬럼명1 비교연산자 데이터값 ORDER BY 컬럼명1 DESC;
SELECT문 실행순서 예시
3번쨰 SELECT num, name (SELECT num, name FROM member WHERE num >= 2;)
1번쨰 FROM member (SELECT * FROM member;)
2번쨰 WHERE num >= 2 (SELECT num, name, addr FROM member WHERE num >= 2;)
4번쨰 ORDER BY num DESC;
일단 전체 테이블의 모양을 가지고 조건을 충족하는 행만 남아서 조회할 컬럼들만 출력
단, 최종적으로 나온 테이블의 정렬을 오름차순 또는 내림차순 중 지정
|| (파이프 문자)
문자열 연결
SELECT num, name || '님' FROM member; => 결과값 예시는 1 김구라님
컬럼명 name || '님'이라 복잡한 관계로 컬럼명 별칭 지정 가능
SELECT num, name || '님' AS name2 FROM member;
ORACLE "="
1. 비교연산자
2. 대입 연산자
프로그래밍 언어 "="
1. 대입연산자
=> 비교연산자는 "==" 사용
SELECT MAX(컬럼명) FROM 테이블명;
SELECT MAX(컬럼명) AS max_컬럼명1 FROM 테이블명;
AS는 생략 가능
SELECT MIN(컬럼명) FROM 테이블명;
SELECT MIN(컬럼명) AS min_컬럼명1 FROM 테이블명;
AS는 생략 가능
CREATE SEQUENCE 시퀀스명;
프로그래밍에서 변수나 함수명 작성 스타일
ex) my_test_seq : snake case
my-test-seq : kebob case
myTestSeq : camel case
예시
SELECT test_seq.NEXTVAL, num, name, addr FROM member;
NEXTVAL : 시퀀스 객체에서 다음 숫자를 가져오는 함수
INSERT INTO(컬럼명1, 컬럼명2, 컬럼명3) VALUES(시퀀스명.NEXTVAL, 데이터2, 데이터3);
EMP <직원 테이블>
EMPNO : 사원번호
ENAME : 사원 이름
JOB : 직책
MGR : 상사 번호
HIREDATE : 입사일
SAL : 급여
COMM : 성과금
DEPTNO : 부서 번호
꿀팁: 쉬프트 키 누르면서 영문자 치면 대문자로 작성 가능
SET LINESIZE 120
COLUMN ENAME FORMAT A10
COLUMN JOB FORMAT A10
SET PAGESIZE 20
OS의 운영체제와 대화로 간다
현재 디렉토리 확인
os에서 빠져나와 oracle로 돌아간다
@을 사용하여 미리 저장해둔 sql 파일을 일괄 실행이 가능