Oracle 다중쿼리(Multiple row query)
2018-11-29 00:00:00 +0000다중쿼리
- 서브 쿼리의 결과가 여러개인 경우 사용
- 서브 쿼리의 결과를 하나의 값과 비교할 수 도 있고, 두개 이상도 비교 가능
- WHERE 컬럼 = (SELECT ~ ) => 단일로우
-
WHERE 컬럼 IN(SELECT ~ ) =>다중로우
- IN : 검색된 값 중에 하나만 일치하면 참이다
- ANY : 검색된 값 중에 조건에 맞는 것이 하나 이상 있으면 참
-
ALL : 검색된 값과 조건에 모두 일치해야 참
- 컬럼 > ALL(서브쿼리) => 컬럼 > MAX : 가장 큰 값 보다 크다.
-
컬럼 < ALL(서브쿼리) => 컬럼 > MIN: 가장 작은 값 보다 작다.
- 컬럼 > ANY(서브쿼리) => 컬럼 > MIN : 가장 작은 값 보다 크다.
- 컬럼 < ANY(서브쿼리) => 컬럼 > MAX: 가장 큰 값 보다 작다.
SELECT 컬럼
FROM 테이블
WHERE 비교대상 (서브쿼리)
- 두 개 이상의 값을 쿼리로 받아서 비교
SELECT * FROM STUDENT WHERE MAJOR = '화학';
SELECT SNO, SNAME, SYEAR, MAJOR, AVR
FROM STUDENT S
WHERE (AVR,SYEAR) IN (SELECT AVR,SYEAR FROM STUDENT WHERE MAJOR = '화학' )
AND MAJOR != '화학';
FROM절 서브쿼리(Top-N SQL
- FROM 절에 테이블 이름 대신 서브쿼리 사용
- 테이블을 질의하기 편하게 수정하면 데이터 찾기가 쉽다
- 예를 들어 입사를 제일 오래한 사원을 출력 시, 테이블에 입사순서대로 정렬되어있으면 편하다
- FROM에 서브쿼리로 입사순으로 정렬된 테이블을 가져올 수 있다
서브쿼리 SELECT * FROM 테이블이름 ORDER BY DESC
SELECT A.*
FROM (서브쿼리).A
WHERE 조건
- 4.5 환산평점이 가장 높은 3명의 학생을 검색하는 예제
SELECT SNO,SNAME,(AVR/4.0 *4.5) FROM STUDENT ORDER BY 3 DESC;
SELECT ROWNUM, S.*
FROM (SELECT SNO,SNAME,(AVR/4.0 *4.5) FROM STUDENT ORDER BY AVR DESC)S
WHERE ROWNUM <= 3;
Oracle 인덱스, 뷰, 시퀀스, 트랜잭션, 세션 정리
2018-11-29 00:00:00 +0000인덱스(INDEX)
- 데이터를 처음부터 끝까지 찾는 건 Table Full Scan, 인덱스를 통해 검색하는 것은 Index Scan이라고 한다
- 데이터 양이 많을 때 Full Scan을 하면 검색 속도가 느려지고, 일정하지 않다
- 기본키(Primary key)또는 고유키(unique key)일 경우 자동으로 생성됨
- Index Scan은 일정한 검색속도를 제공한다
- Index 생성 시 오히려 성능이 떨어질 수도 있다(튜닝 참고)
- 인덱스 생성
CREATE INDEX index_name
ON table_name(column_name)
- 인덱스 삭제
DROP INDEX 인덱스 이름;
뷰(VIEW)
- 하나 이상의 테이블을 조회하는 SELECT 문을 저장한 객체
- 물리적으로 따로 저장하지 않음
- 쿼리의 복잡도를 낮추고, 보안적인 용도로 사용
뷰 조회 | 기존 테이블 조회 |
---|---|
SELECT * FROM VM_TOP_3 | SELECT C.CNO, C.CNAME, S.AVG_RESULT FROM COURSE C, (SELECT CNO, AVG(RESULT) AS AVG_RESULT FROM SCORE GROUP BY CNO ORDER BY AVG(RESULT) DESC)S WHERE C.CNO = S.CN |
- view 생성
CREATE VIEW VIEW_NAME
AS ( 복잡한 SELECT 쿼리)
- view 삭제
DROP VIEW VW_EMP20;
시퀀스(Sequence)
- 대리 식별자. 특정 규칙에 맞는 연속 숫자를 생성하는 객체. 값이 커지면서, 고유한 값을 생성한다
- 시퀀스는 이전 값을 돌아오게 할 수 없다
- 시퀀스 생성 및 사용
CREATE SEQUENCE Sequence 이름 -- 시퀀스 생성
CREATE SEQUENCE department_id_seq
START WITH 1 -- 어떤 숫자부터 값을 매길 것인지
INCREMENT BY 10; -- 다음 숫자는 얼마만큼 커질 것인지
INSERT IINTO departments -- 시퀀스 사용
VALUES(department_id_seq.NEXTVAL , 'IT Education', 103, 1400);
DROP SEQUENCE SEQUENCE_NAME -- 시퀀스 삭제
트랜잭션(Transaction)
- 실행단위 안에 여러 SQL문이 존재할 수 있다.
- 실행단위 기준으로 실행 되거나, 실행되지 않아야 한다
- 트랜잭션을 취소 하고 싶을 때 ROLLBACK 사용
- 트랜잭션을 영원히 반영하고 싶다면 COMMIT. ROLLBACK되지 않는다
- 트랜잭션 예제
CREATE TABLE NEW_TABLE( -- 테이블 생성
NEW_INDEX NUMBER,
INEW_COUNT NUMBER
);
INSERT INTO NEW_TABLE VALUES(1, 10);
INSERT INTO NEW_TABLE VALUES(2, 10);
COMMIT; -- 데이터 저장(ROLLBACK으로 못돌림)
INSERT INTO NEW_TABLE VALUES(3, 10);
INSERT INTO NEW_TABLE VALUES(4, 10);
ROLLBACK;
-- 데이터 3, 4만 존재
세션(Session)
- 세션은 어떤 활동을 위한 시간이나 기간을 뜻함(게임에서 로그인-로그아웃 기간 같은 것)
- 세션이 여러개라는 건 DB 접속을 여러명이 했다는 뜻
- 만약 A세션에서 데이터를 삭제했다면 B세션에는 반영되지 않는다. 반영하려면 COMMIT을 해야한다
Oracle JOIN 정리
2018-11-28 00:00:00 +0000조인(JOIN)
- 2개 이상의 테이블에서 데이터를 검색하기 위해서 사용
- FROM 절에 두 개 이상의 테이블을 명시한다(View, Subquery도 가능)
- 공통된 컬럼이 없다면, 두 테이블의 공통컬럼을 가진 다른 테이블과 JOIN한 후 목표 테이블과 JOIN
- 두 테이블의 모든 조합 확인
SELECT * FROM 테이블1, 테이블2;
- 만약 테이블1, 테이블 2에 각 각 3개의 정보가 있다면 모든 데이터를 조합하므로 총 9개의 데이터가 나옴
- 조건을 걸어서 데이터에 알맞은 값을 매칭 시켜줘야 함
INNER JOIN 사용법
- 조건에 부합하는 두 테이블의 데이터를 합치는 방식
- 컬럼 사용 시 테이블 구분이 필요
SELECT a컬럼명, b.컬럼명 etc... FROM TABLE_NAME a, TABLE_NAME b
WHERE a.조건컬럼 == b.조건컬럼 (그외 조건이 있다면 추가)
- INNER JOIN ANSI JOIN
- WHERE절에 조건이 길어지만 AND가 많이 늘어남
- 결과는 같은데 표기법이 다름
SELECT a.칼럼명, b.칼럼명 ...
FROM 테이블1 A JOIN테이블2 B
ON 조건
- 3개 이상의 테이블 JOIN
SELECT a.칼럼명, b.칼럼명 ...
FROM 테이블1 A, 테이블2 B
ON 조건
JOIN 테이블3
ON 조건
SEFE JOIN
- 자기 자신의 테이블과 합치는 것
- 찾고자 하는 값이 자신의 테이블에 있을 때 사용
SELECT a.칼럼명, b.칼럼명 ...
FROM 테이블1 A JOIN 테이블1 B
ON A.컬럼 = B.다른컬럼
OUTER JOIN
- INNER JOIN 사용시 테이블 데이터가 매칭되지 않은 정보는 볼 수 없음
- 데이터가 매칭 되지 않더라도 한쪽의 테이블을 전부 보고 싶을 때 OUTER JOIN을 사용함
- 매칭되는 데이터가 없을 때 NULL이 표시
- +표시는 전체를 보고 싶은쪽 반대편에 붙이도록 함
SELECT A.칼럼, B.칼럼 ..
FROM TALBLE1 A, TABLE2 B
WHERE A.칼럼 = B.칼럼(+)
- OUTER JOIN ANSI JOIN
- 전체 데이터를 보고 싶은 쪽을 JOIN에 지정
- 왼쪽 테이블의 데이터를 전체 출력하고 싶다면 LEFT JOIN, 오른쪽일 경우 RIGHT JOIN
SELECT TABLE1 A, TABLE2 B
FROM TABLE1 A LEFT JOIN TABLE2 B
ON A.컬럼 = B.컬럼
SUB QUERY
- 예를들어 ‘평균 연봉보다 많은 사람만 출력하시오’란 예제가 있다면 먼저 평균연봉을 구해야한다
- 이 때 평균연봉을 구한 후 결과를 복사해서 비교하면 2번 실행해야하므로 비효율적이다
- SUB QUERY를 사용해서 결과값을 구한 후 메인쿼리에서 사용할 수 있다
- 서브쿼리를 먼저 작성 후 메인쿼리를 작성한다
SELECT TABLE1 칼럼
FROM TABLE1
WHERE 연봉 > (SELECT AVG(연봉) FROM TABLE1)
Oracle DDL, DML 정리
2018-11-27 00:00:00 +0000테이블 추가
- 테이블을 복사하여 새로운 테이블 만들 때 CREATE 문 사용
- ORI_TABLE을 복사하여 NEW_TABLE을 만든다
- ORI_TABLE의 내용이 그대로 복사된다
CREATE TABLE NEW_TABLE AS SELECT * FROM ORI_TABLE;
- 일부 복사
CREATE TABLE NEW_TABLE AS SELECT 복사할 컬럼 FROM ORI_TABLE;
- 테이블 구조만 복사
CREATE TABLE NEW_TABLE AS SELECT * FROM WHERE 1=0;
- 컬럼을 새로 설정하는 경우
CREATE TABLE NEW_TABLE( NEW_INDEX NUMBER, INEW_COUNT NUMBER );
테이블 변경
- 이미 생성된 데이터베이스 객체 수정
- 테이블에 새 열을 추가, 삭제, 길이 변경 등의 일을 할 수 있음
- 테이블에 열을 추가하는 ADD
ALTER TABLE ITEMNAME ADD 컬럼이름 컬럼자료형;
- 테이블의 열 이름 변경 RENAME
ALTER TABLE 테이블NAME RENAME COLUMN 컬럼명 TO 바꿀 컬럼명
- 열의 자료형 변경 MODIFY
- DESC TABLE_NAME 으로 데이터형이 수정되었는지 확인할 수 있다
ALTER TABLE 테이블NAME MODIFY 컬럼명 수정데이터형
- 열을 삭제하는 DROP
ALTER TABLE NAME DROP COLUMN 컬럼명
- 테이블 이름을 변경하는 RENAME
RENAME TABLE_NAME TO 바꿀 TABLE_NAME
- 테이블의 데이터를 삭제하는 TRUNCATE
- TRUNCATE로 삭제한 테이블은 복구할 수 없다
TRUNCATE TABLE TABLE_NANE
- 테이블의 데이터를 삭제하는 DROP
- DROP으로 삭제한 테이블은 복구할 수 있다
DROP TABLE TABLENAME;
테이블 데이터 처리
- 테이블에 데이터 추가 시 INSERT문 사용
INSERT INTO ITEM VALUES(VALUE, VALUE); // 순서대로 값이 들어갈 때 INSERT INTO NEW_ITEM(NEW_COUNT, NEW_INDEX) VALUES(VALUE, VALUE); // 순서를 지정하고 싶을 때
- 테이블의 데이터 수정 시 UPDATE문 사용
- ROLLBACK; 명령문으로 이전 데이터로 돌아갈 수 있다
UPDATE TABLE_NAME SET 컬럼=VALUE WHERE 조건...
- 테이블에 들어있는 데이터 삭제 시 DELETE 문 사용
DELETE FROM TABLE_NAME WHERE 조건
Oracle 문자열 함수 정리
2018-11-27 00:00:00 +0000오라클 함수
- Oracle 함수란 특정한 결과 값을 얻기 위해 데이터를 입력할 수 있는 특수 명령어
DUAL 테이블이란?
- Oracle의 최고 권한 관리자 계정인 SYS 소유의 테이블
- 임시 연산, 함수의 결과값을 확인할 때 주로 사용
문자 함수
- UPEER(문자열)
- 문자열을 모두 대문자로 변경
- SELECT UPPER(‘AbcdEF’) FROM DUAL;
- 결과 ABCDEF
- LOWER(문자열)
- 문자열을 모두 소문자로 변경
- SELECT LOWER(‘AbcdEF’) FROM DUAL;
- 결과 abcdef
- INITCAP(문자열)
- 첫글자를 대문자로. 나머지는 소문자로 변경
- SELECT INITCAP(‘AbcdEF’) FROM DUAL;
-
결과 Abcdef
-
특정 단어를 찾으려고 하는데, 찾을 대상들이 형식이 다를 때(‘ABcd’, ‘aBcd’) 일원화하여 쉽게 찾을 수 있다
- LENGTH(문자열)
- 문자열의 길이를 구한다
- SELECT LENGTH(‘가나다라’) FROM DUAL;
- 결과 4
- LENGTHB(문자열)
- 문자열의 길이를 바이트 수로 반환한다
- SELECT LENGTHB(‘가나다라’) FROM DUAL;
- 결과 12
-
LENGTH는 문자열 갯수를 반환하지만, LENGTHB는 바이트 수를 반환한다
- SUBSTR(문자열, 시작위치, 추출길이)
- 문자열을 시작위치부터 추출길이만큼 구한다. 시작위치는 1부터 시작
- SELECT SUBSTR(‘가나다라’,2) FROM DUAL;
- 결과 나다라
- 추출길이를 지정하지 않으면 문자 끝까지 추출
- 시작위치에 음수값을 넣으면 끝에서 부터 추출
-
가(-4) 나(-3) 다(-2) 라(-1), 시작위치에 -1을 넣으면 ‘라’가 출력됩니다
- INSTR(대상 문자열 데이터(필수),위치를 찾으려는 부분 문자(필수),위치 찾기를 시작할 대상 문자열 데이터 위치,시작 위치에서 찾으려는 문자가 몇번째인지 지정)
- 문자열안에서 특정 문자를 찾는다
- SELECT INSTR(‘가나다라’, ‘나다’) FROM DUAL;
-
결과 2
- REPLACE(문자열 데이터 또는 열 이름(필수),찾는 문자(필수),대체할 문자)
- 문자를 다른 문자로 바꾼다
- SELECT REPLACE(‘010-1111-2222’, ‘-‘) FROM DUAL;
- 01011112222
-
만약 대체할 문자를 지정하지 않는다면 찾는 문자는 삭제 된다
- LPAD(문자열 또는 열이름(필수),데이터 자릿수(필수),빈공간에 채울 문자)
- 빈 공간이 있다면 왼쪽에 특정 문자로 채움
- SELECT RPAD(‘201204-‘, 14, ‘*’) FROM DUAL;
- 결과 201204-***
-
RPAD는 사용법은 같고, 오른쪽을 특정 문자로 채움
- CONCAT(문자열,문자열)
- 두 문자열을 합침
- SELECT CONCAT(‘AB’,’CD’) FROM DUAL;
-
ABCD
- TRIM(삭제옵션, 삭제할 문자) FROM 원본문자열 데이터(필수)
- 특정 문자 삭제
- SELECT TRIM(‘A’ FROM ‘ABCDEFG’) FROM DUAL;
- BCDEFG
Posts
Interceptor(인터셉터)
Android Studio Install
계층형 게시판
VirtualBox Ubuntu 18.04.2 LTS
TransactionAwareDataSourceProxy Error
Java Coding Conventions
Java Long과 long의 차이
Mybatis 객체 안에 객체 매핑
JavaConfig mariadb 연결
DataTable
관리자 페이지
MappingJackson2JsonView
Spring Javaconfig
게시판 만들기-제품 등록
게시판 만들기-제품 페이지 제작
게시판 만들기-회원탈퇴 및 게시판 삭제 플래그 추가
footer 하단에 고정시키기
bootstrap4 사용법
Spring 데이터 검증 @Valid, BindingResult
brackets 실시간 미리보기
Spring 기본설정(pom.xml, web.xml, encoding)
Vue.js computed, methods, watch
javascript onkeyup
Maria DB Incorrect string value Error
javascript 암호화(md5, base64)
Vue.js template
Vue.js 소개
Nexacro 설명
ControllerAdvice
Batch
html 페이지 로딩 순서
소수구하기(PrimeNumber)
최소공배수,최대공약수
Stream
Lambda(람다식)
inner class(내부 클래스)
final 키워드
file upload
파이썬 빅 데이터 K-평균(K-means)
아나콘다(Anaconda), 주피터 개발환경 세팅
텐서플로우(TensorFlow) 아키텍쳐 및 Session
텐서플로우(TensorFlow)상수, 변수, 함수
머신러닝 기초
한글 리스트 오름차순, 내림차순
연속된 글자의 갯수 출력
java spring5 프로젝트 설정
restController
spring 세팅 및 기본설정
mybatis trim
jquery datepicker
ajax로 데이터 전달/응답 받는법
mybatis error
mybatis 게시판 만들기 순서
Java Jsp Mybatis Dynamic Query
mybatis
git 소개
node.js 개발환경 구축
node.js 기본 내장 모듈
node.js의 전역 객체
node.js http module
node.js event
jdbc
자바빈
jsp, servlet 정리
java null object pattern
다음지도 key 등록(kakao map)
공공 데이터 open api
facebook login api
sourcetree 사용법
JavaScript event3
JavaScript jquery
JavaScript dom
JavaScript ajax
JavaScript 이벤트2
JavaScript 캡슐화
JavaScript Array,내장객체
JavaScript var
JavaScript 객체,생성자
JavaScript 함수,클로저
JavaScript Event
javascript eclipse 자동완성(with tern)
CSS position
HTML5,CSS 선택자
자바 시간 측정
git,eclipse 연동
HTML 기초 정리
Eclipse Web 환경세팅
피보나치의 수
Oracle 반복문,커서,예외,저장 서브프로그램
Oracle PL/SQL
Oracle 다중쿼리(Multiple row query)
Oracle 인덱스, 뷰, 시퀀스, 트랜잭션, 세션 정리
Oracle JOIN 정리
Oracle DDL, DML 정리
Oracle 문자열 함수 정리
Oracle 숫자,날짜,자료형 변환 함수 정리
Oracle 제약조건 정리
Oracle 기초 쿼리 정리
문제2775
DFS
junit
json
algorithmus basic
circular queue(원형큐)
binary search(이진탐색)
port forwarding(포트포워딩)
kakao chatbot(카카오 챗봇)
java io
sort comparable, comparator
Unresolved compilation problem
ArrayList, HashMap
Regular(정규표현식)
Enum Class
String Function
refactoring 이란(상수,제어플래그,assert)
reference,abstract 정리
FileNotFoundException Solve
static
Thread Synchronization(스레드동기화,원자성)
Java Exception(예외처리)
Java 생성자, this, super
roomnum
BeeHouse
Git Reset, Revert
Git Log
Array
stack
pyramid draw
Star Draw(별 그리기4)
Star Draw(별 그리기3)
Star Draw(별 그리기2)
Star Draw(별 그리기1)
Loop(While, For)
자바 데이터 타입, 데이터 연산
시계방향 달팽이 그리기
정수값의 짝수,홀수 갯수 구하기
java, Scanner 정리
draw dog
subscribe via RSS