반응형

기술 공부 노트/SQL 공부 20

인덱스

인덱스가 사용되지 않는 경우 - 인덱스 컬럼은 비교되기 전에 변형이 일어나면 인덱스를 사용할 수 없다. 인덱스는 가공되기 전에 값으로 생성되어 있지 가공된 후의 값을 가지고 있지않다. - 부정형으로 조건을 기술한 경우에도 인덱스를 사용하지 않는다. - 인덱스 컬럼이 null 로 비교되면 사용할 수 없다. 결합인덱스 - 첫번째 컬럼이 검색되지 않으면 소용없다. - 첫번째 컬럼이 '='으로 검색되어야 한다. between이나 like 로 검색되면 효율이 떨어진다. 개발시 인덱스 추출 요령 1. 반복 수행되는 액세스 형태를 찾는다. - 기본키, 외부키, 서브쿼리시 연결고리가 되는 컬럼 2. 분포도가 아주 양호한 컬럼들을 발췌하여 액세스 유형을 조사한다. 3. 자주 넓은 범위의 조건이 부여되는 경우를 찾는다. ..

문자형 데이터에서 엔터값 찾기

SELECT CHARINDEX(char(13), Title), Title FROM EnterTest 이렇게 하면 엔터가 들어간 부분에 인덱스를 구할 수 있다. 그래서 어떤 글을 썼는데, 처음 엔터까지 문장을 끊고 싶으면 substring 을 써서 처리할 수 있다. - substring(0, charindex(char(13), Title) ) 뭐 이런식으로 하면 되나?? 이건 쿼리로 한 건데 물론, 프로그램 소스에서도 처리할 수 있다. 알아서들 해보삼~ 후후후^^

메인쿼리-서브쿼리(Main Query - Sub Query)

Main Query - Sub Query ? 사원테이블에서 최대월급을 받는 사람과 그 월급을 출력하려면.. select ename, max(sal) from emp where sal=max(sal); 이러면 되는 줄 알았건만.. ㅡ,.ㅡ;; '그룹 함수는 허가되지 않습니다' 이건 뭐여~~ 서브쿼리를 사용하자! select ename, sal from emp where sal=(select max(sal) from emp); ENAME SAL ---------- ---------- KING 5000 where 절에 있는 (select max(sal) from emp) 이 서브쿼리다. ? 여기서, JONES의 월급보다 많이 받는 사원들의 이름, 월급을 출력하려면.. select ename, sal from ..

SQL - 조인

1. equi join - 두 테이블 사이에 서로 공통된 컬럼이 있을때 하는 조인 where 절에 증거를 줘야한다. 먼저, emp 테이블 말고 dept 테이블이 있는데 이를 확인하면.. select * from dept; DEPTNO DNAME LOC -------------------------------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 여기있는 deptno 가 emp 테이블과의 연결고리다. emp 테이블에도 deptno가 있는 것을 확인해보라. 그럼 여기서,, 각 사원들의 근무지를 보려면 select ename, loc from emp, dept where emp.deptno=d..

SQL 함수3

max - 최대값을 출력하는 함수 다음과 같이 해보자. emp 테이블에서 월급이 제일 큰것을 출력하려면. select max(sal) from emp; MAX(SAL) --------- 5000 자, 다음은 직업이 SALESMAN 인 사원이 받는 월급 중 가장 많은 월급과 함께 직업을 같이 출력하려면.. select job, max(sal) from emp where job='SALESMAN'; -'단일 그룹의 그룹 함수가 아닙니다' 라는 메시지를 볼수 있다. 여기서 문제가 뭐냐하면, job이 SALESMAN 인 row 는 여러개니까 그것이 다 출력되려고 하고, max 값은 최대값으로 하나만 나오려고 하니까 둘이 다투다가 문제가 생기는 것이다. 따라서, 여기서 필요한 건 뭐?! group by 절이 필요..

SQL 함수2

to_char - 말 그대로 char 로 바꿔주는 함수 바꿀 때 포맷도 줄 수 있느데, 몇개 예를 들어보면 day 는 요일을 반환하고, d 는 일수(?)를 반환한다. 뭐냐하면, 일요일부터 토요일까지 1~7까지의 숫자를 반환한다. 일요일은 1, 월요일은 2, 금요일은 6 이런식으로 반환한다 select hiredate, to_char(hiredate,'day'), to_char(hiredate,'d') from emp; HIREDATE TO_CHAR(HIREDATE,'DAY') TO_CHAR(HIREDATE,'D') --------------------------------------------------------------------- 1980-12-17 수요일 4 1981-02-20 금요일 6 198..

SQL - 함수

upper - 대문자로 출력하는 함수 select upper('Never, give up!!') from dual; 결과 : NEVER, GIVE UP!! lower - 소문자로 출력하는 함수 select upper('Never, give up!!') from dual; 결과 : never, give up!! initcap - 앞글자만 대문자로 출력하는 함수 select upper('Never, give up!!') from dual; 결과 : Never, Give Up!! concat - 연결해서 출력 SQL> select concat(ename, sal) 2 from emp; CONCAT(ENAME,SAL) -------------------- SMITH800 ALLEN1600 WARD1250 .....

SQL 2강

그냥 이어서... -- 연결연산자 || 연결연산자의 장점은 문자열로 표현할수 있다는 것이다. 다음을 입력해보자. select ename || ' 의 월급은 ' || sal from emp; ENAME||'의월급은'||SAL ----------------------- SMITH 의 월급은 800 ALLEN 의 월급은 1600 WARD 의 월급은 1250 -- where 절에 조건을 줘서 특정 데이터만 select -- 사원이름이 SCOTT 인 사원의 이름, 월급? select ename, sal from emp where ename = 'SCOTT'; ENAME SAL ---------- ---------- SCOTT 3000 이름을 줄때 소문자로 쓴다던지, ''(싱글쿼터) 로 감싸주지 않으면 원하는 결과..

SQL 1강

그냥 처음 시작해서 1강임. 범위는 맘데로.. ㅡ,.ㅡ;;; 자~~ 시작!!! * SQL (Structure Query Language) 다음과 같이 5가지로 분류할 수 있다. 1. Query --> select 2. DML --> insert, update, delete 3. DDL --> create, alter, drop, truncate, rename 4. DCL --> grant, revoke 5. TCL --> commit, rollback, savepoint 이제부터는 오라클에서의 예제다. (오라클 설치는 잘 해보자!!) 오라클의 테스트 계정은 scott 이고 pw는 tiger이다. sqlplus을 실행시켜서 접속해보자. cmd창에서 sqlplus scott/tiger 를 입력하자. lock..

반응형