728x90

SQL/Oracle

[SQL] Oracle 게시판 이전글 다음글 쿼리문

우선 이전글 다음글을, 글 번호 +1, -1로 가져오면 에러가 날 수 있다. 글이 삭제됐을지도 모르고, Sequence의 오류가 발생 할 수 있기 때문이다. 처음에는 해당 게시글 번호를 구하여, ROWNUM으로 불러와, -1 +1 한 값을 구하려고 했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 SELECT * FROM ( SELECT ROWNUM AS ROWNUMBER, B.BNO FROM BOARD B ) A WHERE BNO = ( SELECT ROWNUMBER FROM ( SELECT ROWNUM AS ROWNUMBER, B.BNO FROM BOARD B ) A WHERE ROWNUMBER = 10 ..

2021.01.14 게시됨

SQL/Oracle

[SQL] INDEX 의미 / 생성 / 수정 / 삭제 / 조회

인덱스 INDEX란? SELECT시 테이블의 색인 역할을 하여 빠르게 검색 할 수 있게 해주는 책의 책갈피와 같은 것, 일종의 객체. 인덱스의 내부 구조는 B*트리(이진트리)형식으로 구성되어 있다. 장점 DQL(SELECT)시 인덱스에서 찾기 때문에 다량의 데이터가 있는 테이블에서 매우 빠른 속도를 보장한다. 단점 DML(INSERT, DELETE, UPDATE)시 인덱스에도 작업이 이루어지므로 속도가 느려진다. 인덱스 생성 CREATE [UNIQUE] INDEX 인덱스명 ON 테이블명( 컬럼명, 컬럼명, .... | 함수명, 함수계산식); 인덱스 수정 인덱스 삭제 인덱스 조회

2020.12.31 게시됨

[SQL / 기본문법] LENGTH / LENGTHB / INSTR / SUBSTR / PAD / TRIM 문자열 관련 함수 포스팅 썸네일 이미지

SQL/Oracle

[SQL / 기본문법] LENGTH / LENGTHB / INSTR / SUBSTR / PAD / TRIM 문자열 관련 함수

1. LENGTH 문자열 길이를 반환 SELECT LENGTH('오라클'), LENGTHB('오라클'), LENGTH('AAA'), LENGTHB('AAA') FROM DUAL; 2. LENGTHB 문자열의 바이트를 반환 오라클 바이트 규격 -- 영문자(1바이트), 공백(1바이트), 한글(3바이트) 3. INSTR 문자열의 위치를 알려준다. 0이 아닌 1부터 시작한다. -- INSTR('문자열' | 컬럼명, '문자', 찾을 위치의 시작값, 빈도) -- SELECT INSTR('HELLO WORLD', 'O') STR1 -- 문자열의 왼쪽에서부터 찾기(기본사용) -- ,INSTR('HELLO WROLD', 'O', -1) STR2 -- 문자열의 오른쪽에서부터 찾기(-1 : 뒤에서부터) -- ,INSTR('..

2020.12.29 게시됨

SQL/Oracle

[SQL / 기본문법] SUM / AVG / MIN / MAX / COUNT 숫자 관련 함수

SUM 합한 결과 SELECT SUM(SALARY) FROM EMPLOYEE; AVG AVG( 컬럼명 )은 NULL 제외 평균 AVG( NVL ( 컬럼명, 0 ))은 NULL 포함 평균 SELECT AVG(BONUS) 기본평균 , AVG(DISTINCT BONUS) 중복제거평균 , AVG(NVL(BONUS,0)) NULL포함평균 FROM EMPLOYEE; MIN 최소값 SELECT MIN(EMAIL), MIN(HIRE_DATE), MIN(SALARY) FROM EMPLOYEE; MAX 최대값 SELECT MAX(EMAIL), MAX(HIRE_DATE), MAX(SALARY) FROM EMPLOYEE; COUNT COUNT( * )은 NULL값을 포함해서 카운트 한다. COUNT( 컬럼명 )은 NULL값을..

2020.12.29 게시됨

[SQL / 기본문법] BETWEEN AND / LIKE (%, _) / IN / 연산자 우선순위 포스팅 썸네일 이미지

SQL/Oracle

[SQL / 기본문법] BETWEEN AND / LIKE (%, _) / IN / 연산자 우선순위

1. 컬럼 BETWEEN a AND b 컬럼 >= a AND 컬럼 b 와 같다. ※ 미만과 초과가 되므로 해당 값을 제외하게 된다. 1 2 3 4 5 6 7 8 SELECT EMP_NAME, SALARY FROM EMPLOYEE WHERE SALARY NOT BETWEEN 2500000 AND 6000000; -- NOT SALARY BETWEEN 2500000 AND 6000000; cs 2. LIKE '%A%' '글자%' --> %를 뒤에 붙이면 글자로 시작하는 값 '%글자' --> %를 앞에 붙이면 글자로 끝나는 값 '%글자%' --> %를 앞 뒤로 붙이면 글자가 포함된 값 ※ NOT은 BETWEEN AND와 마찬가지로 컬럼명 앞 뒤에 올 수 있다. 1 2 3 4 5 6 SELECT EMP_NAME..

2020.12.28 게시됨

[SQL / 기본문법] NVL / IS NULL / DISTINCT / AS / || / !=, ^=, <> 포스팅 썸네일 이미지

SQL/Oracle

[SQL / 기본문법] NVL / IS NULL / DISTINCT / AS / || / !=, ^=, <>

1. NVL - null 값을 원하는 값으로 만들어 주기 1 2 3 4 5 6 SELECT EMP_NAME AS 이름 ,SALARY * 12 "1년 급여(원)" ,(SALARY + (SALARY * BONUS)) * 12 AS "총소득(원)" FROM EMPLOYEE; -- NULL이 있기 때문에 계산이 불가능한 경우가 있다. cs → 해결 방법 NVL(컬럼명, 처리할 숫자) 1 2 3 4 5 6 SELECT EMP_NAME AS 이름 ,SALARY * 12 "1년 급여(원)" ,(SALARY + (SALARY * NVL(BONUS,0))) * 12 AS "총소득(원)" FROM EMPLOYEE; Colored by Color Scripter cs 2. IS NULL / IS NOT NULL - null..

2020.12.28 게시됨

SQL/Oracle

[SQL]ROWNUM >= 2가 안된다면

1 2 SELECT ROWNUM AS ROWNUMBER, P.* FROM PRODUCT P WHERE ROWNUM >=2; cs 쿼리문의 결과는 아무것도 없다. 이유는 WHERE의 조건에 의해 불러온 후에 ROWNUM이 매겨지는데 ROWNUM = 1이 없으므로 조건 자체가 불가능한 것이다. 그렇다면 ROWNUM을 조건절에 포함하고 시픙면 어떡하느냐, 답은 간단하다. FROM절의 서브쿼리로 놓고 가져오면 된다. 1 2 3 4 5 SELECT * FROM (SELECT ROWNUM AS ROWNUMBER, P.* FROM PRODUCT P) A WHERE A.ROWNUMBER >= 2; cs

2020.11.15 게시됨

[SQL] 사용자별 댓글 별점 평균 구하기 포스팅 썸네일 이미지

SQL/Oracle

[SQL] 사용자별 댓글 별점 평균 구하기

1. 댓글(REPLY) 테이블의 게시글 번호와, 별점 조회. SELECT PRODUCT_NO, REPLY_STAR FROM REPLY; 2. 게시글 번호의 평균 조회 (AVG, SUM등의 집계함수는 집계함수를 제외한 컬럼을 GROUP BY절로 묶어 주어야 한다.) SELECT PRODUCT_NO, AVG(REPLY_STAR) FROM REPLY GROUP BY PRODUCT_NO; 3. 소숫점 첫째자리로 반올림 SELECT PRODUCT_NO, ROUND(AVG(REPLY_STAR),1) FROM REPLY GROUP BY PRODUCT_NO; 4-1. 게시글 테이블의 게시글 작성자 이름 조회 SELECT MASTER_NICKNAME, PRODUCT_NO FROM PRODUCT; (JOIN은 컬럼명이 같..

2020.11.10 게시됨

728x90