[설치1] Oracle Database Express Edition 11g Release 2 (64-bit) 설치 -> OracleXE112_Win64.zip [설치2] Oracle홈페이지 < 소프트웨어 다운로드 > -> 개발자 도구 -> SQL Developer -> Windows 64-bit with JDK 11 included -> Download -> Download sqldeveloper-23.1.0.097.1607-x64.zip SYS -> Password (oracle 추천) SYSTEM -> Password (oracle 추천) DBSNMP -> 데이터베이스를 모니터링하고 관리하기 위해 Oracle Enterprise Manager의 Management Agent 구성 요소에서 사용하는 계정 <<비밀번호 변경>> [cmd] -> sqlplus 입력 -> [Enter user-name :]에 sys as sysdba 또는 system as sysdba 입력 -> [Enter password :]에 그냥 엔터 -> [SQL>] show user 입력 후 엔터 -> [SQL>] alter user sys identified by {password}; 또는 alter user system identified by {password}; -> [SQL>] conn sys/{password} as sysdba; ★해도 안바뀌니 확인할 것★ -> sqlplus {유저명}/{비밀번호} 입력해도 됨 https://db-engines.com/en/ -> https://db-engines.com/en/ranking https://www.tiobe.com/ -> https://www.tiobe.com/tiobe-index/ ////////////////////////////////////////////////////////////// user명 = scott 추천 CREATE USER {유저명} IDENTIFIED BY {비밀번호}; GRANT RESOURCE,CONNECT TO {유저명}; RESOURCE = 자원 CONNECT = 접속 권한 --계정 언락 ALTER USER scott ACCOUNT UNLOCK; --계정에 암호 재설정 ALTER USER {유저명} IDENTIFIED BY "{암호}"; --.sql경로 [SQL>] @C:\oraclexe\app\oracle\product\{버전}\server\RDBMS\ADMIN\{유저명}.sql @C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\scott.sql --확인 show user --Data -DML [SQL>] CREATE -> INSERT [SQL>] READ -> SELECT [SQL>] UPDATE -> UPDATE [SQL>] DELETE -> DELETE --Table DDL [SQL>] CREATE -> create [SQL>] READ -> desc [SQL>] UPDATE -> alter, rename [SQL>] DELETE -> truncate, drop //////////////////////////////// [INSERT] 생성 INSERT INTO usertable(name, age) VALUES ('james', 20) ; [SELECT] 검색 (DISTINCT * 데이터 중복제거) SELECT DISTINCT * FROM emp WHERE deptno>=20 AND deptno<=30 AND sal IN (1250, 3000) AND ename LIKE '%D%' ORDER BY job DESC, deptno ASC ; [UPDATE] 수정 UPDATE usertable SET age=30 WHERE name='james'; [DELETE] 삭제 DELETE FROM usertable WHERE name='james'; ///////////////////////////// CREATE TABLE {Persons} ( PersonID int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255) ); //생성 CREATE TABLE {TestTable} AS SELECT {customername}, {contactname} FROM {customers}; // 복사본 만들기 DESC {employees} ALTER TABLE {Customers} ADD {Email} varchar(255); //열 추가 ALTER TABLE {Customers} DROP COLUMN {Email}; //열 제거 DROP TABLE {Shippers}; // 테이블 삭제 TRUNCATE TABLE {Categories}; // 데이블의 내부 데이터만 삭제(테이블 삭제X) ////////////////// JOIN(INNER, OUTER, CROSS, SELF JOIN) - INNER JOIN(내부 조인) : 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다. - OUTER JOIN(외부 조인) : 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나온다. - CROSS JOIN(상호 조인) : 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능이다. - SELF JOIN(자체 조인) : 자신이 자신과 조인한다는 의미로, 1개의 테이블을 사용한다. - FROM {A} NATURAL JOIN {B} - FROM {A} JOIN {B} USING(조인컬럼) - FROM {A} JOIN {B} ON 조인조건 between << 비등가 조인 INNER JOIN SELECT <열 목록> FROM <첫 번째 테이블> INNER JOIN <두 번째 테이블> ON <조인 조건> [WHERE 검색 조건] OUTER JOIN - LEFT OUTER JOIN SELECT <열 목록> FROM <첫 번째 테이블(LEFT 테이블)> OUTER JOIN <두 번째 테이블(RIGHT 테이블)> ON <조인 조건> [WHERE 검색 조건] FROM A a LEFT JOIN B b ON a.KEY=b.KEY A 중에서 A와 B가 겹치는 부분 제거 WHERE b.KEY IS NULL - FULL OUTER JOIN FROM A a FULL OUTER JOIN B b ON a.KEY=b.KEY A+B 중에서 A와 B가 겹치는 부분 제거 WHERE a.KEY IS NULL OR b.KEY IS NULL - RIGHT OUTER JOIN FROM A a RIGHT OUTER JOIN B b ON a.KEY=b.KEY B 중에서 A와 B가 겹치는 부분 제거 WHERE a.KEY IS NULL CROSS JOIN SELECT * FROM <첫 번째 테이블> CROSS JOIN <두 번째 테이블> SELF JOIN SELECT <열 목록> FROM <테이블> 별칭A INNER JOIN <테이블> 별칭B [WHERE 검색 조건] ----------------------문자 함수------------------ LOWER('A') = 'a' UPPER('a') = 'A' INITCAP('abcdeFG') = 'Abcdefg' CONCAT('Hello','World') = 'HelloWorld' SUBSTR('HelloWorld',2,5) = 'elloW' LENGTH('HelloWorld') = 10 LENGTHB('한글') = 4 or 8 (프로그램에 따라 글자수*2 or 글자수*4) INSTR('HelloWorld','o',[시작위치,[횟수]]) = 5 TRIM([leading | trailing | both] 제외 문자 FROM 문자열) => TRIM('H' FROM 'HelloWorld') → 'elloWorld' LPAD(문자열, 출력길이, 채울문자), RPAD(문자열, 출력길이, 채울문자) LPAD('World', 10, '*') → '*****World' RPAD('World', 10, '*') → 'World*****' TRANSLATE('helloworld', 'lo', '*$') → 'he**$w$r*d' //문자단위 REPLACE('helloworld', 'lo', '**') → 'hel**world' //문자열단위 SELECT 10*20 FROM dual; //dual은 더미 데이블 ----------------------숫자 함수------------------ ROUND(4.55, 1) = 4.6 //반올림 TRUNC(45.926, 2) = 45.9 //버림 MOD(1600, 300) = 100 //나머지값 CEIL(12.34) = 13 //정수로 올림 FLOOR(12.34) = 12 //정수로 내림 POWER(2, 3) = 8 //제곱 ABS(-3) = 3 //절대값 SQRT(4) = 2 //제곱근 SIGN(-5) = -1 //음수(-1),0,양수(1) 확인 ----------------------날짜 함수------------------ 날짜 ± 숫자(日 단위, 時단위는 숫자/24) SYSDATE // 현재 날짜 및 시간 ROUND(날짜, 형식) // 형식 'YYYY-MM-DD HH:MI:SS' // 'YYYY'4자리 'RR'2자리 // 'MM' 06(숫자) 'MONTH'='MON' JUNE(영문) 6월(한글) // 'DD' 07(숫자) 'DAY'='DY' SUNDAY(영문) 일요일(한글) // 'HH' 1~12시(AM/PM표시없음) 'HH24' 1~24시 // 'SSSSS' 0~86399(하루를 초로 환산하여 표현) // 'AM/PM' 오전 오후 표기 'AM' or 'PM' TRRUNC(날짜, 'YYYY') = 2XXX/01/01 // 월,일 버려짐 MONTHS_BETWEEN('2017/10/10', '2017/07/10') = 3 //두 날짜간의 월수 계산 ADD_MONTHS('2017/07/10', 3) = '2017/10/10' //더한 날짜 계산 NEXT_DAY('2017/07/10', '토요일') = '2017/07/15' //이후 곧바로 오는 해당요일 LAST_DAY('2017/07/10') = '2017/07/31' //해당 월의 마지막 날 ----------------------숫자 출력 형식------------------ 9 숫자의 출력 폭지정. (자리수가 부족하면 생략) 1,234.5600 0 선행 0 표기 (자리수를 반드시 맞춘다.) 001,234,5000 $ 화폐 표기 L 지역 화폐 표기 (각 국가 코드에 따라 다르다.) , 쉼표 위치 지정 . 마침표 위치 지정 MI 음수의 - 기호를 오른쪽에 표기 EEEE 실수 표현법을 이용 TO_CHAR(숫자 or 날짜,출력형식) -> 문자 TO_NUMBER(문자, 출력형식) -> 숫자 TO_DATE(문자, 출력형식)-> 날짜 //형식에 문자열을 추가할 시 ""를 사용 ex) '"오늘 날짜는 "yyyy"년 "mm"월 "dd"일 입니다."' ----------------------일반 함수------------------ NVL(expr1, expr2) // expr1의 값이 NULL일 경우, expr2 값으로 대체 NVL2(expr1, expr2, expr3) // (expr1 == NULL) ? expr3 : expr2; NULLIF(expr1, expr2) // (expr1 == expr2) ? NULL : expr1; COALESCE(expr1, expr2, …, exprn) // 표현식 중 NULL이 아닌 첫 번째 표현식을 반환 ----------------------조건 표현식------------------ CASE 컬럼|표현식 WHEN 비교값1 THEN 리턴값1 [WHEN 비교값2 THEN 리턴값2 WHEN 비교값n THEN 리턴값n ELSE 기본값] END "{별명}" select last_name, job_id, salary, case job_id when 'IT_PROG' then 1.10*salary when 'ST_CLERK' then 1.15*salary when 'SA_REP' then 1.20*salary else salary end "REVISED_SALARY" from employees; DECODE (컬럼|표현식, 찾을값1, 결과1, [찾을값2, 결과2, ... 찾을값n, 결과n, 기본값]) "{별명}" COUNT, MAX, MIN, AVG, SUM, VARIANCE(분산), STDDEV(표준편차) // NULL값 무시 // 무시안하려면 NVL, NVL2를 사용 count(nvl(컬럼,0)) // GROUP BY 설정 없이 일반 컬럼과 기술될 수 없다. ----------------------GROUP BY------------------ 기본 구조 SELECT [DISTINCT] 컬럼, 그룹 함수(컬럼) FROM 테이블명 [WHERE 조건] [GROUP BY Group대상 [HAVING 조건]] [ORDER BY 정렬대상 [ASC/DESC]] COUNT, SUM, AVG, MAX, MIN, STDEV, VAR, STRING_AGG(컬럼 문자열 합치기 NULL제외) //단일 행 서브 쿼리 SELECT [DISTINCT] 컬럼, 컬럼 … FROM 테이블 WHERE 컬럼 <단일 행 연산자> (SELECT 컬럼 FROM 테이블); select last_name, salary from employees where salary > (select salary from employees where last_name = 'Abel'); //여러 번 사용된 단일 행 서브 쿼리 where department_id != (select department_id from employees where last_name = 'Hunold') and salary < (select salary from employees where last_name = 'Hunold');