본문 바로가기

DataBase/SQL

뷰(VIEW) 조인을 한 결과를 뷰를 통해서 볼 수 있다. 과도하게 조인해서 질의를 해야할 경우가 많은 경우.뷰를 통해서 로직을 실행하기 때문에 쿼리 문이 줄어 든다.보안을 위해 사용한다(특정 대상에게 특정한 데이터만 보여주기 위해서) EXAMPLE>CREATE [OR REPLACE] VIEW 뷰이름 AS 쿼리;SQL> SELECT employee_id, last_name, department_name, city, state_province, country_name, region_nameFROM departments d JOIN employees e on d.department_id = e.department_idJOIN locations l ON d.location_id = l.location_idJOIN count.. 더보기
INDEX 일정한 검색 속도를 유지할 수 있다.조건과 환경에 따라서 속도가 빨라질 수도 느려질 수도 있다. 인덱스 생성 >> 테이블의 데이터에 대한 indexing >> 비트리 구조로 형성(트리 구조로 데이터 찾아줌) - 인덱스를 만드는 경우 WHERE 절이나 JOIN 조건으로 자주 사용되는 컬럼 - 인덱스 생성 방법CREATE INDEX index_nameON table_name (column_name [,column_name]...)SQL> CREATE UNIQUE INDEX cust_id_idx ON customers_index (cust_id); 더보기
게시판 페이징 처리 CREATE TABLE BOARD( SEQ NUMBER PRIMARY KEY, TITLE VARCHAR2(50), WRITER VARCHAR2(50), CONTENTS VARCHAR2(200), REGDATE DATE, HITCOUNT NUMBER) INSERT INTO BOARD VALUES(1, 'A1', 'A', 'A', SYSDATE, 0);INSERT INTO BOARD VALUES(2, 'A2', 'A', 'A', SYSDATE, 0);INSERT INTO BOARD VALUES(3, 'A3', 'A', 'A', SYSDATE, 0);INSERT INTO BOARD VALUES(4, 'A4', 'A', 'A', SYSDATE, 0);INSERT INTO BOARD VALUES(5, 'A5', .. 더보기
FROM 절 서브 쿼리 - 입사순서 5명 출력하라. SELECT EMPLOYEE_ID, LAST_NAME, HIRE_DATEFROM EMPLOYEESORDER BY HIRE_DATE - ROWNUM(출력 되는 결과 값에 인덱스를 붙여 준다.)SELECT ROWNUM, ALIAS.*FROM (SELECT EMPLOYEE_ID, LAST_NAME, HIRE_DATE FROM EMPLOYEES ORDER BY HIRE_DATE) ALIASWHERE ROWNUM 더보기
다중 컬럼 다중 로우 - 직무(JOB_ID)별 최대 급여자의 사원 내역을 출력하라. SELECT MAX(SALARY) FROM EMPLOYEES GROUP BY JOB_ID; SELECT EMPLOYEE_ID, LAST_NAME, SALARY, JOB_ID FROM EMPLOYEESWHERE SALARY = (SELECT MAX(SALARY) FROM EMPLOYEES GROUP BY JOB_ID); >>>> 오류.. SELECT EMPLOYEE_ID, LAST_NAME, SALARY, JOB_ID FROM EMPLOYEESWHERE (SALARY,JOB_ID) IN(SELECT MAX(SALARY) , JOB_ID FROM EMPLOYEES GROUP BY JOB_ID); IN 추가.. 서브 쿼리 주의할 점ROW 가 1개인.. 더보기
HAVING 절 HAVING ? 전체 GROUP 에서 일부의 GROUP 만 출력하기 위해서 사용을 한다. GROUP BY 를 사용하여 조건을 주었을 경우 WHERE 대신 HAVING 을 사용한다. -부서별 급여 평균이 5000미만인 부서의 부서번호와 평균 급여를 검색하라. SELECT DEPARTMENT_ID, AVG(SALARY) FROM EMPLOYEES GROUP BY DEPARTMENT_ID HAVING AVG(SALARY) < 5000; 더보기
GROUP BY 절 GROUP BY 절은 SELECT 문을 통해서 그룹별로 나누어서 출력하고자 할 때 사용한다. - 부서별 평균 급여를 검색하라.SELECT department_id, avg(salary) FROM employees GROUP BY department_id ORDER BY department_id; /*부서별로 사원의 수와 커미션을 받는 사람의 수를 검색하라*/SELECT * FROM EMPLOYEES;SELECT DEPARTMENT_ID, COUNT(*), COUNT(COMMISSION_PCT) FROM EMPLOYEESGROUP BY DEPARTMENT_IDORDER BY DEPARTMENT_ID; 더보기
그룹 함수 - sum () -> SELECT sum(칼럼) FROM 테이블명; ----> 칼럼의 합계 - avg () -> SELECT avg(칼럼) FROM 테이블명; ----> 칼럼의평균 - max() -> SELECT max(칼럼) FROM 테이블명; ----> 칼럼의 가장 큰 수 - count() -> SELECT count(칼럼) FROM 테이블명; ----> 칼럼의 개수 더보기
기본 SQL 문 - 테이블 목록 보기select * from tab; - 테이블 구조 불러오기DESC 테이블명 - SELECT 쿼리문 구조SELECT 컬럼들 FORM 테이블명WHERE 조건내용GROUP BY 정렬기준 - employees 테이블의 전체 데이터를 불러오기SELECT * FROM employees; - ASAS를 하게 되면 칼럼 이름을 바꿀수 있다, 아래와 같이 두가지사용 방법이 있다.SELECT employee_id AS 사원번호, last_name "성" FROM employees; - 중복되는 데이터 제거SELECT DISTINCT 칼럼 FROM 테이블;U - 정렬 묶음 검색(ORDER BY)SELECT 칼럼 FROM 테이블 ORDER BY 칼럼 더보기