고객코드 고정 문자열 7자리, 공백 허용하지 않음, 기본키 적용
고객명 가변 문자열 15자리(한글은 5글자), 동백 허용하지 않음
성별 고정 문자열 1자리, 공백허용하지 않음.M(남성), W(여성)
생일 고정 문자열 8자리, 공백 허용하지 않음
전화번호 가변 문자열 15자리, 공백 허용
이메일 가변 문자열 50자리, 공백 허용
누적포인트 숫자 10자리, 소수점 이하 없음

PRIMARY KEY는 무조건 NOT NULL

고객 테이블 구조

테이블명: TB_CUSTOMER

기본키 설정방법: 컬럼명 자료형 PRIMARY KEY

TABLE 생성시 

컬럼명 자료형 NULL/NOT NULL PRIMARY KEY,

컬럼명 자료형 NULL/NOT NULL

 

nVARCHAR2(n)

없으면 고정길이, 있으면 가변길이

없으면 200BYTE, 있으면 400BYTE

크기

없으면 영문 1BYTE 한글 3BYTE 크기를 BYTE 수 단위로 받음, 있으면 유니코드 문자형 모든 문자 2BYTE 크기를 글자의 단위로 받음

문자니까 CHAR필수

 


1) 테이블에 새로운 행을 추가하는 INSERT문

특정한 컬럼에만 DATA를 입력 모든 컬럼에 DATA를 입력
INSERT INTO table name(column_value, ...)
VALUES(column_value,...)
INSERT INTO table_name
VALUES(column_value,...)

새로운 행을 추가하기 위해 insert문을 사용하면 한 번에 하나의 행만 삽입된다. 작성한 칼럼 목록 순서대로 VALUES에 지정된 값이 삽입된다.

 

날짜->' '

숫자-> 그대로

문자-> 자바 CHAR(' ')/String(" ")

           오라클 CHAR/VARCHAR2->' ', 별칭->" "

 

작업단위를 짧게 잡아 COMMIT

 

INSERT 구문에서 오류 발생의 예 

  • 칼럼명에 기술된 목록의 수보다 VALUES 다음에 나오는 괄호 안에 기술한 값의 개수가 적으면 에러가 발생.
  • 칼럼명에 기술된 목록의 수보다 VALUES 다음에 나오는 괄호에 기술한 값의 개수가 많으면 에러가 발생.
  • 칼럼명이 잘못 입력되었을 때
  • 칼럼과 입력할 값의 데이터 타입이 서로 맞지 않은 경우에도 에러가 발생한다.

1>칼럼명을 생략한 INSERT 구문

모든 칼럼에 자료를 입력한 경우에는 굳이 칼럼 목록을 기술하지 않아도 됨. 

단, 디버그 시 용이하지 않으므로 칼럼명을 써 주는것이 좋다.

INSERT INTO DEPT
VALUES(20, 'RESEARCH', 'DALLAS');

NULL은 암시적으로 들어가게 하거나 컬럼 생략시 명시적으로 입력해 줘야 한다.

NULL 값을 갖는 칼럼을 추가하기 위해 NULL 대신 ''를 사용 가능=> NOT NULL일 때 '' 불가능(가장 많이 만나는 오류)

 

--암시적으로 NULL값 삽입
INSERT INTO DEPT(DEPTNO, DNAME)
VALUES(30, 'SALES');
--명시적
INSERT INTO DEPT
VALUES(40, 'OPERATIONS',NULL);

 

--DEPT 테이블의 전체 레코드 삭제
DELETE FROM DEPT;

--DEPT 테이블 삭제
DROP 사용

1. 레코드는 가져오지 않고 기존 테이블의 컬럼만 가져오게 구조 복사

CREATE TABLE 테이블

AS

SELECT 컬럼명, 컬럼명 FROM 테이블 WHERE 1=0;

 

2. 기존 테이블에 존재하는 데이터를 다른 테이블에 입력할 때 

INSERT INTO table_name(column1, column2,...)

SELECT column1, column2,...FROM table_name WHERE 조건;

 

2>테이블의 내용을 수정하기 위한 UPDATE 문

UPDATE table_name

SET column_name1 = value1, column_name2 = value2,...

WHERE conditions; //where절을 빼먹으면 다 업데이트 된다. 주의

1. 테이블의 모든 행 변경

--입사일을 오늘로 수정
UPDATE EMP
SET HIRE_DATE=SYSDATE;

--SYSDATE: 현재 날짜

2. 테이블의 특정 행만 변경

SUBSTR(SUBSTRING): 잘라와라

SELECT * FROM EMP WHERE SUBSTR(HIRE_DATE, 1, 2)='08'; --첫번째부터 2개를 잘라와라, 0번째부터X

 

3.테이블에서 2개 이상의 칼럼 값 변경

테이블에서 하나의 컬럼이 아닌 복수 개의 칼럼 값을 변경하려면 기존 SET절에 콤마를 추가하고 칼럼=값을 추가 하면 된다.

--LAST_NAME 이 Russell인 사원의 급여를 17000로, 커미션 비율이 0.45로 인상된다.
SELECT*
FROM EMP
WHERE LAST_NAME='Russell';

UPDATE EMP
SET SALARY=17000, COMMISSION_PCT=0.45
WHERE LAST_NAME='Russell';

 

3>테이블에 불필요한 행(레코드)를 삭제하기 위한 DELETE문

테이블에 특정 로우(행)의 데이터를 삭제

--새로운 테이블 생성한 후 30번 부서를 삭제
DELETE FROM DEPT WHERE DEPTNO=30;

 

DML

INSERT INTO 테이블명(컬럼, 컬럼,...)

VALUES(값, 값,...)

--EMP01테이블에 EMPLOYEES 테이블에서 부서코드가 30인 직원의 
--사번, 이름, 소속부서, 입사일을 삽입. 
--EMP_MANAGER테이블에 EMPLOYEES 테이블의 부서코드가 30인 직원의 
--사번, 이름, 관리자 사번을 조회하여 삽입.
--두개 이상의 테이블에 INSERT ALL(마지막에 SELECT가 있어야함)을 이용하여 한번에 삽입 가능
--단, 각 서브쿼리의 조건절이 같아야함

INSERT ALL

INTO EMP01
VALUES(EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID, HIRE_DATE)

INTO EMP_MANAGER
VALUES(EMPLOYEE_ID, FIRST_NAME, MANAGER_ID)

SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID, HIRE_DATE, MANAGER_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID=30;

SELECT * FROM EMP01;
SELECT * FROM EMP_MANAGER;
-- EMPLOYEES 테이블의 구조를 복사하여 사번, 이름, 입사일, 급여를 저장할 수 있는
-- 테이블 EMP_OLD와 EMP_NEW 생성

CREATE TABLE EMP_OLD
AS
SELECT EMPLOYEE_ID, FIRST_NAME, HIRE_DATE, SALARY
FROM EMPLOYEES
WHERE 1=0;

CREATE TABLE EMP_NEW
AS
SELECT EMPLOYEE_ID, FIRST_NAME, HIRE_DATE, SALARY
FROM EMPLOYEES
WHERE 1=0;

-- EMPLOYEES 테이블의 입사일 기준으로 2006년 1월 1일 이전에 입사한 사원의 사번, 이름,
-- 입사일, 급여를 조회해서 EMP_OLD 테이블에 삽입하고 그 후에 입사한 사원의 정보는 EMP_NEW 테이블에 삽입

--INSERT ALL INTO EMP_OLD
--VALUES (EMPLOYEE_ID, FIRST_NAME, HIRE_DATE, SALARY)
--SELECT EMPLOYEE_ID, FIRST_NAME, HIRE_DATE, SALARY
--FROM EMPLOYEES WHERE HIRE_DATE <='06.01.01';

INSERT ALL
WHEN HIRE_DATE< '2006/01/01' THEN
    INTO EMP_OLD
    VALUES(EMPLOYEE_ID, FIRST_NAME, HIRE_DATE, SALARY)
WHEN HIRE_DATE >= '2006/01/01' THEN
    INTO EMP_NEW
    VALUES(EMPLOYEE_ID, FIRST_NAME, HIRE_DATE, SALARY)
    
SELECT EMPLOYEE_ID, FIRST_NAME, HIRE_DATE, SALARY
FROM EMPLOYEES;

4>MERGE문

조건을 비교해서 테이블에 해당 조건에 맞는 데이터가 없으면 INSERT문, 있으면 UPDATE를 수행하는 문장

MERGE INTO table_name

       USING(update나 insert 될 데이터 원천)

        ON(update될 조건)

WHEN MATCHED

 

MERGE INTO TB_CUSTOMER CU --CU별칭
    USING TB_ADD_CUSTOMER NC  --NC 별칭
    ON (CU.CUSTOMER_CD = NC.CUSTOMER_CD)
    WHEN MATCHED THEN 
        UPDATE SET  CU.CUSTOMER_NM = NC.CUSTOMER_NM,
                    CU.MW_FLG= NC.MW_FLG,
                    CU.BIRTH_DAY = NC.BIRTH_DAY,
                    CU.PHONE_NUMBER=NC.PHONE_NUMBER
    WHEN NOT MATCHED THEN
        INSERT (CU.CUSTOMER_CD, CU.CUSTOMER_NM, CU.MW_FLG, CU.BIRTH_DAY,
                CU.PHONE_NUMBER, CU.EMAIL, CU.TOTAL_POINT, CU.REG_DTTM)
        VALUES (NC.CUSTOMER_CD, NC.CUSTOMER_NM, NC.MW_FLG, NC.BIRTH_DAY,
                NC.PHONE_NUMBER, '', 0, TO_CHAR(SYSDATE, 'YYYYMMDDHHMISS'));

SELECT * FROM TB_CUSTOMER;

 

'DataBase+SQL' 카테고리의 다른 글

JOIN(조인)  (0) 2023.06.19
SELECT문 함수  (2) 2023.06.16
무결성 제약(CONSTRAINT) 조건  (0) 2023.06.15
SELECT 문으로 특정 데이터를 추출하기  (0) 2023.06.13
데이터 베이스 기초  (0) 2023.06.12

 

이제 실기만 남았다!ㅎㅎ

1.데이터를 조회하기 위한 SELECT

SELECT [DISTINCT]{*, column[Alias],...}

FROM 테이블명;

 

1) SELECT 컬럼, 컬럼 FROM 테이블 => 테이블로부터 컬럼값을 조회해라.

--: 쿼리문 주석

 

2) 칼럼 이름을 명시해서 특정 칼럼만 보기

DEPARTMENTS  테이블에서 부서번호와 부서명출력 (역순)

SELECT DEPARTMENT_ID, DEPARTMENT_NAME FROM DEPARTMENTS;

--사원의 이름과 급여와 입사일자만을 출력하는 SQL문을 작성
SELECT FIRST_NAME, LAST_NAME, SALARY, HIRE_DATE FROM EMPLOYEES;

 

3) 칼럼 이름에 별칭 지정하기

AS로 컬럼에 별칭 부여하기: 칼럼을 기술한 바로 뒤에 AS라는 키워드를 쓴 후 별칭을 기술

별칭에 공백문자나 $,_,# 등 특수 문자를 표현하고 싶거나 대소문자를 구별하고 싶으면 ""을 사용한다. AS를 생략하고 ""를 사용하여 별칭부여가 가능. 한글이라서 묶는게 아니라 공백이 있으면 묶는다.

자바

-문자형: ''

-문자열:""

오라클

문자:''(대소문자 구분)//작은 따옴표

숫자: 그대로

 

4)Concatenation 연산자의 정의와 사용(연결 연산자)

-오라클에서는 여러 개의 컬럼을 연결할 때 사용하기 위해서 Concatenation 연산자를 제공해 준다. 컬럼과 쿤자열 사이에 연산자를 기술

--EMPLOYEES 테이블에서 여러 컬럼을 하나의 문자열로 출력

SELECT FIRST_NAME||'의 직급은'||JOB_ID||'입니다.' AS직급FROM EMPLOYEES;
SELECT FIRST_NAME||'의 직급은'||JOB_ID||'입니다.' "직급"FROM EMPLOYEES;

SELECT FIRST_NAME||'의 직급은'||JOB_ID||'입니다.' 직급 FROM EMPLOYEES;

SELECT FIRST_NAME||'의 입사일은'||HIRE_DATE||'입니다.' 입사일 FROM EMPLOYEES;
SELECT FIRST_NAME||' '||LAST_NAME 이름, SALARY 급여, HIRE_DATE 입사일 FROM EMPLOYEES;

 

5)중복된 데이터를 한번씩만 출력하게 하는 DISTINCT

 

EMPOLOYESS 테이블에서 칼럼 JOB_ID를  표시하되 중복된 값은 한번만 표시

SELECT JOB_ID FROM EMPLOYEES;

=>

SELECT DISTINCT JOB_ID FROM EMPLOYEES;

 

--직원들이 어떤 부서에 소속되에 있는지 소속 부서번호 출력하되 중복되지 않고 한번씩 출력
SELECT DISTINCT DEPARTMENT_ID "소속 부서번호" FROM EMPLOYEES;

 

 

6)WHERE 조건과 비교 연산자

 

--급여를 10000 이상 받는 직원을 대상
SELECT EMPLOYEE_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE SALARY>=10000;

--급여를 3000 미만 받는 작원을 대상
SELECT EMPLOYEE_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE SALARY<3000;

--사원에 급여를 1000 인상하여 사원번호, 사원명, 급여, 인상급여, 입사일을 출력하시오
SELECT EMPLOYEE_ID 사원번호, FIRST_NAME||' '|| LAST_NAME 사원명, SALARY 급여, SALARY+1000 인상급여, HIRE_DATE 입사일
FROM EMPLOYEES;

--EMPLOYEES 테이블에서 부서 번호가 110번인 직원에 관한 모든 정보만 출력하라
SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID=110;

--EMPLOYEES 테이블에서 급여가 5000미만이 되는 직원의 정보 중에서 사번과 이름, 급여를 출력
SELECT EMPLOYEE_ID 사번, FIRST_NAME 이름, SALARY 급여 
FROM EMPLOYEES 
WHERE SALARY<5000;

 

문자 데이터 조회

문자 데이터는 반드시 단일 따옴표 안에 표시. 대소문자를 구분 쿼리문은 구분 안하지만 데이터는 구분

 

날짜 데이터 조회

반드시 단일 따옴표 안에 표시 년/월/일 형식으로 기술

 

--문자 데이터 조회, 날짜 데이터 조회
--이름이 JOHN인 사람의 사원번호와 직원명과 업무ID을 출력, 문자 데이터는 대소문자를 구분하므로
--따옴표 안에 대소문자 구분
SELECT EMPLOYEE_ID 사원번호, FIRST_NAME 직원명, JOB_ID 업무ID 
FROM EMPLOYEES
WHERE FIRST_NAME='John';

--2008년 이후에 입사한 직원, 2008만 입력하면 에러 발생. 리터럴이 형식 문자열과 일치하지 않음
SELECT FIRST_NAME, HIRE_DATE
FROM EMPLOYEES
WHERE HIRE_DATE>='2008/01/01';

 

7)논리 연산자

  • AND 연산자: 조건 모두 만족
  • OR 연산자: 두 가지 조견 중에서 한가지만 만족하더라도 검색할 수 있도록 하기 위해 사용
  • NOT 연산자: 반대되는 논리값
--급여가 5000에서 10000이하 직원 정보 출력
SELECT *
FROM EMPLOYEES 
WHERE SALARY>=5000 AND SALARY<=10000;

--부서번호가 100번이거나 직급이 FI_MGR인 직원
SELECT EMPLOYEE_ID, FIRST_NAME, PHONE_NUMBER, DEPARTMENT_ID, JOB_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID=100 OR JOB_ID='FI_MGR';
--사원 번호가 134이거나 201이거나 107인 직원 정보 출력
SELECT *
FROM EMPLOYEES
WHERE EMPLOYEE_ID=134 OR EMPLOYEE_ID=201 OR EMPLOYEE_ID=107;

BETWEEN AND 연산자

특정 범위 내에 속하는 데이터를 알아보려고 할 때 BETWEEN AND 연산자를 사용

column_name BETWEEN A AND B

컬럼>=값 AND 컬럼<=값

SELECT EMPLOYEE_ID 직원번호, FIRST_NAME 이름, SALARY 급여
FROM EMPLOYEES
WHERE SALARY BETWEEN 2500 AND 4500;

 

IN 연산자

동일한 칼럼이 여러 개의 값 중에 하나인지를 살펴보기 위해서 간단하게 표현할 수 있는 IN연산자 사용

column_name IN(A, B, C);

 

WHERE EMPLOYEE_ID=177 OR EMPLOYEE_ID=101 OR EMPLOYEE_ID=184

WHERE EMPLOYEE_ID IN(177, 101, 184)
--부서 번호가 10,20,30 중 하나에 소속된 직원의 직원번호, 이름, 급여를 출력
SELECT EMPLOYEE_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE DEPARTMENT_ID=10 OR DEPARTMENT_ID=20 OR DEPARTMENT_ID=30;

SELECT EMPLOYEE_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN (10, 20, 30);

--사원 테이블에서 JOB_ID가 'SA_MAN', 'ST_MAN', 'PU_MAN', 'AC_MGR'인 
--사원번호, 사원명, 직무번호를 출력
SELECT EMPLOYEE_ID, FIRST_NAME, JOB_ID
FROM EMPLOYEES
WHERE JOB_ID IN ('SA_MAN', 'ST_MAN', 'PU_MAN', 'AC_MGR');

8)LIKE 연산자

검색하고자 하는 값을 정확히 모를 경우 와일드카드와 함께 사용하여 원하는 내용을 검색하는 연산자

column_name LIKE pattern

% 문자가 없거나, 하나 이상의 문자가 어떤 값이 오든 상관없다
_ 하나의 문자가 어떤 값이 오든 상관없다.

 

%: 검색하고자 하는 값을 정확히 모를 경우 사용. %는 몇 개의 문자가 오든 상관없다는 의미

%자바: 자바로만 끝나면

자바%: 자바로만 시작하면

%자바%: 무조건 자바가 포함되면

_ _ _:3글자

_D%: 이름의 두번째 글자D

LOWER(FIRST_NAME): 소문자 변환해서 검색

--사원테이블(EMPLOYEES)에서 직무ID에 3번째 _를 포함하고 4번째 자리의 값이 P인 레코드를 조회
SELECT *
FROM EMPLOYEES
WHERE JOB_ID LIKE '___P%';
--ESCAPE
--LIKE 연산으로'%'나 '_'가 포함된 문자를 검색하고자 할때 사용
--'%'나 '_'앞에 ESCAPE로 특수문자를 지정하면 검색할 수 있다.
--특수문자는 아무거나 상관없이 사용가능
--구문 마지막에 ESCAPE에 사용할 문자열만 지정해주면 '_'나'%'를 검색에 사용할 수 있게 도와준다.

SELECT * FROM EMPLOYEES
WHERE JOB_ID LIKE '__\_P%' ESCAPE '\';

SELECT * FROM EMPLOYEES
WHERE JOB_ID LIKE '__$_P%' ESCAPE '$';

9)NULL을 위한 연산자

오라클에서는 컬럼에 NULL값이 저장되는 것을 허용한다.

NULL은 미확정, 알 수없는 값을 의미한다. 0도 빈 공간도 아닌 어떤값이 존재하기는 하지만 어떤 값인지를 알아낼 수 없는 것을 의미. NULL은 연산, 할당, 비교가 불가능

100+NULL=NULL

NULL이 저장되어 있는 경우에는 = 연산자로 판단할 수 없다.

IS NULL, IS NOT NULL을 사용

 

--이름에 a를 포함하지 않은 직원의 직원번호, 이름 출력
SELECT EMPLOYEE_ID, FIRST_NAME
FROM EMPLOYEES
WHERE LOWER(FIRST_NAME) NOT LIKE '%a%';

--커미션을 받지 않는 사원
SELECT EMPLOYEE_ID, FIRST_NAME, COMMISSION_PCT, JOB_ID
FROM EMPLOYEES
WHERE COMMISSION_PCT = NULL;

--커미션을 받지 않는 사원
SELECT EMPLOYEE_ID, FIRST_NAME, COMMISSION_PCT, JOB_ID
FROM EMPLOYEES
WHERE COMMISSION_PCT IS NULL;

--커미션을 받는 사원
SELECT EMPLOYEE_ID, FIRST_NAME, COMMISSION_PCT, JOB_ID
FROM EMPLOYEES
WHERE COMMISSION_PCT IS NOT NULL;

--자신의 직속상관이 없는 직원의 전체 이름과 직원번호, 업무ID를 출력하라
SELECT FIRST_NAME||' '||LAST_NAME 이름, EMPLOYEE_ID 직원번호, JOB_ID 업무ID
FROM EMPLOYEES
WHERE MANAGER_ID IS NULL;

--커미션을 받는 사원만 출력하되 사원번호, 이름, 급여, 수당율, 
--수당금액(계산식 - 급여*수당율)을 출력하라
SELECT EMPLOYEE_ID, FIRST_NAME, SALARY, COMMISSION_PCT, SALARY*COMMISSION_PCT 수당금액
FROM EMPLOYEES
WHERE COMMISSION_PCT IS NOT NULL;

SELECT 컬럼, 컬럼

FROM 테이블

WHERE 조건(별칭X)

ORDER BY 컬럼명 ASC(DESC)

ASC: 오름차순//작은값부터 디폴트

DESC: 내림차순//큰값부터

 

ORDER BY 컬럼

--직원번호, 이름, 급여, 부서번호를 급여가 높은 순으로 출력, EMPLOYEE_ID가 높은 순으로
SELECT EMPLOYEE_ID, FIRST_NAME, SALARY, DEPARTMENT_ID
FROM EMPLOYEES
ORDER BY SALARY DESC, EMPLOYEE_ID DESC;

--입사일이 가장 최근인 직원 순으로 직원번호, 이름, 입사일을 출력하라ㅏ
SELECT EMPLOYEE_ID, FIRST_NAME, HIRE_DATE
FROM EMPLOYEES
ORDER BY HIRE_DATE DESC;

--부서번호가 20, 50번 부서에서 근무하는 모든 사원들의 이름(FIRST_NAME), 부서 번호, 급여를 
--사원의 이름순(알파벳순)으로 출력하라
SELECT FIRST_NAME, DEPARTMENT_ID, SALARY
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN(20,50)
ORDER BY FIRST_NAME;

CREATE TABLE 테이블명

컬럼 자료형 NULL(DEFAULT)/NOT NULL 제약조건,

컬럼 자료형 NULL(DEFAULT)/NOT NULL 제약조건,

컬럼 자료형 NULL(DEFAULT)/NOT NULL 제약조건,...

 

기본 BYTE단위

CHAR 고정 길이 , 자리가 비면 공백으로 채움
우편번호, 주민등록 번호,...
VARCHAR2 가변 길이, 최대 크기:4000BYTE, 최소크기: 1BYTE(영), 3BYTE(한)//Char (3 Char):3글자
VARCHAR2(10): 가변 형식의 10자리 문자열
Hello->Hello
NUMBER
NUMBER(p)
NUMBER(p,s)
NUMBER(전체 자릿수(p, 정수), 소수점이하 자릿수(s, 실수))
BLOB 대용량의 바이너리 데이처를 저장하기 위한 데이터 타입
최대크기: 4GB
CLOB

DATE
대용량의 텍스트 데이터를 저장하기 위한 데이터 타입

날짜 형식을 저장하기 위한 데이터 타입
TIMESTAMF DATE 데이터 타입의 확장된 형태
ROWID 테이블 내 행의 고유 주소를 가지는 64진수 문자 타입
  • 테이블 명과 칼럼명을 부여하기 위한 규칙
  • 반드시 문자(A-Z,a-z)로 시작해야 하며, 컬럼명은 최대 30바이트
  • A~Z까지의 대소문자와 0~9까지의 숫자, 특수기호는 (_, $, #)만 가능하다
  • 오라클에서 사용되는 예약어나 다른 객체명과 중복하여 생성할 수 없다.
  • 공백 허용하지 않는다
  • 대소문자 구별이 없다.
  • 소문자로 저장하려면 ''로 묶어 주어야 한다.
  • 한 테이블에 사용 가능한 컬럼은 최대 255개까지이다.

기존 테이블 복사

기존 테미블과 동일한 구조와 내용을 갖는 테이블을 생성 //기존 테이블의 구조+ 데이터를 그대로 복사하여 새로운 테이블 생성

CREATE TABLE EMPLOYEES02

AS

SELECT * FROM EMPLOYEES;

 

복사본으로 연습 후 반영

 

ALTER TABLE로 테이블 구조 변경

-ALTER TABLE 명령어는 테이블에서 칼럼의 추가, 삭제 , 칼럼의 타입이나 길이를 변경할 때 사용

  • ADD(컬럼명 자료형)절을 사용하여 새로운 칼럼을 추가한다.
  • MODIFY(컬럼명 자료형)절을 사용하여 기존 칼럼을 수정
  • DROP COLUMN 컬럼명절을 사용하여 기존 칼럼을 삭제

ALTER TABLE table_name

ADD(column_name data_type)

 

ALTER TABLE로 기존 칼럼 수정

ALTER TABLE 명령어에 MODIFY절을 사용하여 칼럼을 수정. (데이터 타입, 크기를 변경가능)

ALTER TABLE table_name

MODIFY(column_name data_type expr,...);

 

-해당 칼럼에 자료가 없는 경우

칼럼의 데이터 타입을 변경할 수 있다.

칼럼의 크기를 변경할 수 있다.

-해당 칼럼에 자료가 있는 경우

칼럼의 데이터 타입을 변경할 수 없다.

크기를 늘릴 수는 있지만 현재 가지고 있는 데이터 크기보다 작은 크기로 변경할 수 없다.

 

--이미 존재하는 EMP01 테이블에 입사일 칼럼(CREDATE)을 날짜형으로 추가
ALTER TABLE EMP01
ADD(CREDATE DATE);

DESC EMP01;

--직급을 최대 30자까지 입력할 수 있도록 크기 수정
ALTER TABLE EMP01
MODIFY(JOB VARCHAR2(30));

DESC EMP01;

 

ALTER TABLE로 기존 칼럼명 변경

ALTER TABLE table_name

RENAME COLUMN old_name TO new_name;

 

ALTER TABLE로 기존 칼럼 삭제

ALTER TABLE table_name

DROP COLUMN column_name;

 

DROP TABLE로 테이블 구조 삭제

DROP TABLE table_name;

 

휴지통(recyclebin)

--휴지통 비우기
PURGE RECYCLEBIN;

 

--실수로 지운 테이블이라 삭제를 취소하려면 다음과 같은 명령으로 다시 복구하면 된다.
--flashback table table_name to before drop;

 

--새로운 이름으로 복원하는 방법
FLASHBACK TABLE EMP01 TO BEFORE DROP
RENAME TO EMP02;

 

6) 테이블의 모든 로우를 제거해 TRUNCATE 문

TRUNCATE table table_name; //이 작업은 절대 복원 불가능 완전삭제

 

  • 테이블을 Truncate하면 테이블의 모든 행이 삭제 되고 사용된 공간이 해제된다.
  • TRUNCATE TABLE은 DDL명령이므로 롤백 데이터가 생성되지 않는다.
  • DELETE명령으로 데이터를 지우면 롤백 명령어로 복구 할 수 있지만 TRUNCATE로 데이터를 삭제하면 롤백을 할 수 없다
  • 외래키가 참조중인 데이블은 TRUNCATE 할 수 없다.
  • TRUNCATE 명령을 사용하면 삭제 트리거가 실행되지 않는다.

'DataBase+SQL' 카테고리의 다른 글

JOIN(조인)  (0) 2023.06.19
SELECT문 함수  (2) 2023.06.16
무결성 제약(CONSTRAINT) 조건  (0) 2023.06.15
테이블에 내용을 추가INSERT, 수정UPDATE, 삭제DELETE하기 위한 DML  (0) 2023.06.14
데이터 베이스 기초  (0) 2023.06.12

데이터는 관찰의 결과로 나타난 정량적(양을 헤아리는 것) 혹은 정양적.

데이터 베이스: 조직에 필요한 정보를 얻기 위해 논리적으로 연관된 데이터를 모아 통합, 검색에 용이하게 데이터를 저장하고 수정, 삭제 용이

데이터 베이스 관리 시스템: 지속적으로 유지 관리해야하는 데이터의 집합을 데이터베이스

방대한 양의 데이터를 편리하게 저장하고 효율적으로 관리하고 검색할 수 있는 환경을 제공

 

행: 레코드(로우) 열: 칼럼(구분",")

 

DBMS 장점

  • 데이터의 공유가 가능하다
  • 데이터 중복성이 감소
  • 데이터 불일치를 피할 수 있다
  • 데이터의 무결성을 유지
  • 데이터 보안을 유지
  • 표준화가 가능

공통사용자는 c##<사용자명>의 형태로 이루어지며 PDB사용자는 각 PDB에서 별도로 생성하여 PDB에 로그인

접근이 안되거나 ip가 뜰 때 service들어가서 서버 재구동

oracleServiceXE, oracleListener 

 

1.오라클 서버의 IP주소 필요

2.포트 (기본 포트: 1521)

3.서비스 이름

 

SQL: 구조화된 질의 언어

쿼리문: 대소문자 구분X, 값: 대소문자 구분

DB 상에서 데이터를 읽고 , 쓰고 삭제하는 등 데이터 관리를 위한 프로그램 언어

DDL(Data Definition Language, 데이터 정의어)

-데이터베이스 객체를 생성 또는 변경, 제거 할 때 사용(자동 commit)

CREATE 테이블이나 인덱스, 뷰 등 데이터베이스 객체를 생성
ALTER 이미 생성된 데이터베이스 객체를 수정
DROP 테이블의 데이터를 모두 삭제 (복원이 불가능)
TRUNCATE 생성된 데이터 베이스 객체를 영구히 삭제

 

DML(Data Manipulation Language, 데이터 조작어)

-데이터를 조작하는 역할

SELECT 테이블이나 뷰에 있는 데이터를 조회
INSERT 새로운 데이터를 추가
UPDATE 테이블에서 기존의 데이터를 변경
DELETE 테이블에 저장된 데이터를 삭제

 

TCL(Transaction Control Language, 트랜잭션 처리어)

-트랜젝션 관련 문장으로 데이터 조작어에 의해 변경된 내용을 관리

데이터를 추가, 변경, 삭제한 내용은 파일에 즉각 저장되는 것이 아니다. 따라서 사용자의 실수로 잘못 입력한 명령어라면 언제든지 이전 상태로 되돌릴 수 있다. 실수 없이 완벽하게 입력된 명령어라는 것이 확인될 때에만 영구히 저장하도록 TCL을 사용(all or nothing)

COMMIT 변경된 내용을 영구히 저장
ROLLBACK 변경된 데이터를 적용하지 않고 이전 상태로 되돌림
SAVEPOINT 특정 위치까지를 영구히 저장 혹은 이전 상태로 되돌릴 수 있는 저장점을 만듦.

DCL(Data Control Language, 데이터 제어어)

-사용자마다 데이터를 사용할 수 있는 권한이 달라야 하는데 이렇게 특정 사용자에게 권한을 부여하거나 제거하기 위해서 사용하는 명령어가 DCL

GRANT 사용자에게 작업을 허용하는 특정 권한을 부여
REVOKE 사용자로부터 특정 권한을 제거

 

SQL*Plus(보기가 어렵다.)

-오라클에서 제공하는 기본 개발 도구, 오라클을 설치할 때 함께 설치

hr 계정은 오라클에서 실습을 위하여 제공하는 기본 사용자 계정 및 샘플 데이터베이스(실제 오라클 관련 서적 및 명령 예에서 가장 많이 사용되는 계정)

 

SQL Plus 실행: 명령 프롬프트에 sqlplus sys/비밀번호@localhost:1521/xe as sysdba(CDB_SYS)

SQL>alter pluggable database all open; 

SQL>alter pulggable database all save state; 

 

SQL>alter user hr account unlock; (잠금 해제)(PDB_SYS)
SQL>alter user hr identified by hr1234; (비밀 번호 설정)

 

SQL> select * from tab; (모든 테이블)

 

SQL Developer

1.오라클 서버 IP주소 - localhost(127.0.0.1/192.168.0.1)

2.오라클 서버 port 번호-1521

3.11g->SID//18c->서비스 이름

v 시작 SystemTable

F9 실행

CDB=xe

PDB=xepdb1

SYSDBA=최고권한자

 

[HR 사용자에 저장된 테이블 정보]

EMPLOYEE_ID 사원 번호 HIRE_DATE 입사일
FIRST_NAME
LAST_NAME
사원 이름 SALARY 급여
EMAIL 사원 이메일 COMMISSION_PCT 커미션 비율
PHONE_NUMBER 사원 전화번호 JOB_ID 업무(직무)번호
MANAGER_ID 해당 사원의 상사번호 DEPARTMENT_ID 부서번호(DEPARTMENTS 테이블의 EDPARTMENT_ID와 연결됨)

 

[부서 테이블 (DEPARTMENTS)의 컬럼]

DEPARTMENT_ID 부서번호
DEPARTMENT_NAME 부서명
MANAGER_ID 부서의 매니저번호
EMPLOYEES 테이블의 EMPLOYEE_ID열에 대한 외래키
LOCATION_ID 지역명

1. SQL은 관계 DB를 처리하기 위해 고안된 언어로, 독자적인 문법을 갖는 DB 표준 언어

2. SQLPlus는 SQL 언어를 구현하여 오라클 RDBMS를 관리할 수 있는 오라클 사의 클라이언트 틀 제품면

3.SELECT 문은 데이터베이스로부터 필요한 데이터를 가져온다.

4.DML문은 INSERT, UPDATE, DELETE 문 등으로 구성되며, 행을 삽입하고 변경하고 삭제하는 역할

 

정적 요소의 객체화: $("셀렉터")는 이미<body> 안에 존재하는 요소에 대한 객체화 방식이다.

동적 요소의 객체화: let 객체이름=$("<태그명>")

생성한 요소를 화면에 적용하기

  • A.html(B): A요소의 시작태그와 종료 태그 사이의 내용을 B로 대체한다.
  • remove(): 해당 요소를 삭제한다.
  • A.append(B): A에 B를 추가하다. 태그 사이의 내용을 그대로 유지하면서 B의 내용을 뒤에 추가한다.
  • B.appendTo(A): B를 A에 추가하다.

css("속성"): 속성값 읽기

css("속성","값"): 속성값 변경/ 추가

css({"속성1":"값1","속성2":"값2","속성3":"값3"): 속성값 읽기

addClass("클래스명"): 특정요소에게 CSS클래스를 적용할 겅우에 사용

removeClass("클래스명"):HTML 태그 요소에 적용된 특정 CSS클래스를 제거

ToggleClass("클래스명"):

 

 

'HTML+CSS+자바스크립트' 카테고리의 다른 글

DOM  (0) 2023.06.05
객체  (0) 2023.06.02
객체  (0) 2023.05.31
함수, 이벤트  (0) 2023.05.30
Js변수  (0) 2023.05.26

영어타자가 350타가 넘었다!! 처음에는 100타 정도 나왔었는데ㅋㅋㅋㅋ

의외인건 한글 타자보다 영타가 더 빠르다는 것이다...!

한글타자가 더 느리게 느껴지는 거라고 생각했는데 너무 차이가 난다..

다음에는 한타가 300타 넘게 나오게하고 영타도 360타를 목표를 해봐야겠다! 

DOM(문서 객체 모델)  //트리 구조

  • HTML과 XML 문서에 대한 구조적 정보를 제공하는 양식.
  • 웹 문서(HTML)의 모든 요소를 객체 형식으로 표현한 것->문서 내 특정 요소에 접근하는 방법을 제공
  • 문서 구조나 외양 및 내용을 바꿀 수 있도록 프로그램에서 접근할 수 있는 방법을 제공
  • 자바스크립트를 이용하여 웹 문서에 접근하고 제어할 수 있도록 객체를 사용해 웹 문서를 체계적으로 정리하는 방법
  • 웹 문서를 하나의 객체로 정의, 모든 요소를 '객체'로 인식하고 처리
  • 요소 노드, 텍스트 노드, 속성 노드, 주석노드

트리(계층구조)

노드, 루트, 부모노드, 자식 노드, 형제 노드

 

id선택자로 접근하는 getElementById()메서드//id 빼고 다 element에 s

요소명.getElementById("id명"): 유일값

요소명.querySeletor("css선택자"(#))

요소명.querySeletorAll(): 원소 여러개

class 값으로 접근하는 getElementsByClassName() 메서드

태그 이름으로 접근하는 getElementsByTagName() 메서드

다양한 방법으로 접근하는 querySelector(),querySeletorAll()

노드.querySeletor(선택자)

노드.querySeletorAll(선택자 또는 태그)

 

웹 요소의 내용을 수정하는 innerText, innerHTML

요소명.innerText = 내용//설정

요소명.innerHTML=내용

 

속성을 가져오거나 수정하는 getAttribute(), setAttribute()

getAttribute("속성명")

setAttribute("속성명", "값")

&nbsp: 줄바꿈 없는 공백

 

addEventListener()메서드

요소.addEventListener(이벤트, 함수, 캡처여부);

 

텍스트 노드를 사용하는 새로운 요소 추가하기

1.요소 노드 만들기-createElement()

document.createElement(노드명)

2.텍스트 노드 만들기 - createTextNode()

document.createTextNode(텍스트);

3.자식 노드 연결하기-appendChild()

부모노드.appendChile(자식노드)

document.getElementById("createBtn").addEventListener("click", function(){
        let newItem=document.createElement("li");
        let subject = document.querySelector("#subject");
        let newText = document.createTextNode(subject.value);
        newItem.appendChild(newText);

        let itemList = document.querySelector("#itemList");
        itemList.appendChild(newItem);

        subject.value="";
    })

*기본틀

 document.getElementById().addEventListener("",function(){

    })

parentNode 프로퍼티

노드.parentNode

removeChild()

부모노드,removeChild(자식노드)

 

jQuery는 빠르고 작고 기능이 풍부한 JavaScript라이브러리

 jQuery 라이브러리는 .js 확장자로 작성

 

'HTML+CSS+자바스크립트' 카테고리의 다른 글

jQuery 동적으로 요소 생성하기  (0) 2023.06.12
객체  (0) 2023.06.02
객체  (0) 2023.05.31
함수, 이벤트  (0) 2023.05.30
Js변수  (0) 2023.05.26

객체: 객체에 포함된 데이터 하나를 가리켜 객체의 프로퍼티라고 부른다. 

  • Object()생성자: 권장하지 않음, 코드가 간결한 객체 리터럴을 사용
  • 객체 리터럴: let member = {name: "홍길동", email: "javauser1234@naver.com"}; //=이 아니라 (:)콜론, 프로퍼티들은 쉼표(,)로 구분-프로퍼티 접근: 프로퍼티 값에는 모든 데이터 타입의 값과 표현식을 대입할 수 있다. 변수에 대입된 객체 안의 프로퍼티 값을 읽거나 쓸 때는 마침표(.) 또는 대괄호([]), 객체에 없는 프로퍼티를 읽으려소 하면 undefined, 객체 리터럴 안에 어떠한 프로퍼티도 작성하지 않으면 빈 객체 생성
  • 생성자 함수: 첫글자 대문자 ex) function Hobby
  • ES6의 클래스

자바스크립트는 prototype 기반 언어이다.

객체를 원형(prototype) 형재로 생성, 그 안에 기능을 위한 함수나 변수를 추가

prototype 기반 언어에서의 객체 생성 과정

빈 객체의 생성 아무런 기능이 없는 상태의 빈 객체를 생성
변수(필드)의 추가 빈 객체 안에 변수들을 추가해 넣는다.
함수(메서드)의 추가 빈 객체 안에 함수들을 추가해 놓는다.

JSON(Javascript Object Notation): 텍스트-기반의 경량의 데이터교환형식, 구분형식은 Javascript를 따르지만 언어로부터 완전히 독립적이기 때문에 서로 다른 프로그래밍 언어 간에 데이터 교환하기 위해 현재 가장 널리 사용되는 표기법

자바스크립트에서는 JSON이 두가지 측면으로 사용

자바스크립트의 문법으로 사용

json 자체가 하나의 데이터로서 사용

json의 특징

javascript를 기반으로 만들어졌으며 특정 언어에 종속되지 않는 완벽한 독립적인 텍스트 형식을 가지고 있다.

json 객체의 데이터는 이름(key)/값(value)의 쌍으로 구성{ }

기본형식: let 객체명 = {이름: 값, 이름: 값, 이름:값 };

(with 키워드) 객체명을 with로 선언하고 코드를 줄여준다.

let view = "";

with(info){

view+="이름:"+name;

...

}

json에 배열 데이터 할당하기

let 객체명 = {이름:값, 이름:["값1", "값2", "값n"], 이름: 값};

할당된 데이터에 접근하기 위해서는 "객체명.이름[인덱스]"로 접근

json을 포함하는 json 

let 객체명 = {

하위객체명:{이름:값, 이름:값},

하위객체명:{이름:값, 이름:값},

하위객체명:{이름:값, 이름:값}

};

json 데이터의 하위 제이터로 접근하고자 할 경우는 .을 통하여 계층을 표현한다.//반복 불가능

객체명.하위객체명.값의이름

json을 포함하는 배열//반복가능

let 객체명 = [

하위 객체명 : [

{이름: 값, 이름:값},

{이름: 값, 이름:값},

{이름: 값, 이름:값}

]

};

json 데이터의 하위 데이터로 접근하고자 할 경우는.을 통하여 계층을 표현한다.

객체명.하위객체명[index].값의이름

json을 포함하는 배열

parse() : String 객체를 JSON으로 변환해 준다.

stringify() : JSON 객체를 String으로 변환해 준다.

 

'HTML+CSS+자바스크립트' 카테고리의 다른 글

jQuery 동적으로 요소 생성하기  (0) 2023.06.12
DOM  (0) 2023.06.05
객체  (0) 2023.05.31
함수, 이벤트  (0) 2023.05.30
Js변수  (0) 2023.05.26

+ Recent posts