[oracle] 오라클 SQL - SELECT
오라클 SQL SELECT
1장. SELECT
1장 : SQL SELECT 문을 사용하여 데이터 검색
SELECT 이해
- 검색, 조회, 질의 …
- 데이터 분석 도구
- 원하는 집합(결과)을 정의(묘사)하는 언어
SELECT 구문 이해
- SELECT 문장 작성 및 해석 권장 순서(절대 실행 순서가 아니다.)
select : 컬럼, 연산식, 함수, 컬럼 alias, ... -- 4번째 (필수) from : 재료집합(테이블, 뷰, 서브쿼리) -- 1번째 (필수) where : 조건, ... -- 2번째 group by : 조건, ... -- 3번째 having : 조건, ... -- 5번째 order by : 조건, ... -- 6번째
1-5. 기본 SELECT문
SELECT
* : 모든 열을 선택
FROM table : 테이블 지정
SELECT
A, B : 특정 열을 선택
FROM table : 테이블 지정
[] : Bracket
{} : Brace
() : Parentheses
1-6. SQL Statement 작성 지침
- 참고 : https://orapybubu.blog.me/40023835579
1-12. 산술 연산 종류
가공 - 연산 - 산술 연산
- 연결 연산
- 논리 연산
- 기타
- 함수 - Built-in 함수 - 단일행 함수
- 복수행 함수
- User-defined 함수 - 단일행 함수
- 복수행 함수(가능은 함)
현재 보유하고 있는 table 모두 리턴
select *
from tab;
emp 테이블에서 모든 컬럼(*) 리턴
select *
from emp;
emp 테이블에서 특정 컬럼(EMPNO, ENAME) 리턴
select EMPNO, ENAME
from emp;
컬럼 복제
- emp 테이블에 sal 컬럼은 한개인데 굳이 컬럼을 원하는 만큼 4개 표시할 수 있다.
select sal, sal, sal, sal from emp;
연산 가능(1)
- sal합계, sal평균, sal최대값, sal최소값
select sum(sal), avg(sal), max(sal), min(sal) from emp;
연산 가능(2)
- 사원번호 sal, sal 20%인상
select empno, sal, sal*1.2 from emp;
SQL문 작성
- SQL문은 대소문자를 구분하지 않는다.
- SELECT * FROM TABLE; <- 사용가능
- select * from table; <- 사용가능
- SQL문 마지막에는 세미콜론(;)으로 끝내야 한다.
- select * from table;
1-14. Null
- unavailable, unassigned, unknown, inapplicable, 비워져있는, 미결정 …
- ≠ 0 : 0은 null이 아니다.
- ≠ space : 공백은 null이 아니다.
- = null 결과값은 null
- 산술연산 결과값은 null
- 비교연산 결과값은 null
- 논리연산 결과값은 진리표를 참고(2-16, 2-17)
AND T F N OR T F N NOT T T F N T T T T T F F F F F F T F N F F N N F N N T N N N N F>N>T T>N>F
1-14. Null 예제
--null 엉터리 상태 아래와 같이 is null로 써야한다.
select empno, sal, comm
from emp
where comm = null;
--comm이 null값만 출력이 나온다
select empno, sal, comm
from emp
where comm is null;
--null에 연산을 해도 null값이 나온다
select empno, ename, sal, comm, sal*12+comm
from emp;
--nvl(comm, 0) : comm에 값이 있으면 리턴 없으면 0 이라는 의미
select empno, ename, sal, comm, sal*12 + nvl(comm, 0)
from emp;
1-17. Column alias
--emp table에서
--empno, ename, sal 컬럼을 가져오고 싶었다
--ename 뒤에 콤마(,)가 없기 때문에
--ename alias를 sal로 잘못 잡고 리턴
select empno, ename sal
from emp;
--alias 처리 방법
select empno,
ename,
sal salary, --스페이스 하고 난 뒤에 쓸 수 있다. 하지만 헷갈리기 때문에 안 좋은 표현
sal as salary, --as를 쓰고 난 뒤에 쓸 수 있다.
sal "salary", --특수한 형태를 표현하고 싶을 때 쌍따옴표를 써 그대로 표현 가능
sal "$salary" --특수한 형태를 표현하고 싶을 때 쌍따옴표를 써 그대로 표현 가능
from emp;
1-20, 21. 연결 연산자 & Literal
--emp table에
--empno 컬럼과
--ename 컬럼과
--'aaa' 컬럼을 만들어서 모든 행에 'aaa' 넣은 후
--job 컬럼을 리턴
select empno, ename, 'aaa', job
from emp;
--emp table에
--empno 컬럼과
--ename컬럼+리터럴|| 'aaa' ||+job컬럼을 합쳐서 컬럼명을 sawon으로
select empno, ename || 'aaa' || job as sawon
from emp;
--emp table에
--empno 컬럼과
--ename컬럼+리터럴|| ' IS A ' ||+job컬럼을 합쳐서 컬럼명을 sawon으로
select empno, ename || ' IS A ' || job as sawon
from emp;
--모든 테이블 삭제
select 'drop table' ||tname||' cascade constraints;' as commands
from tab;
--tname이 J로 시작하는 table 삭제
select 'drop table' ||tname||' cascade constraints;' as commands
from tab
where tname like 'J%';
1-23. q 연산자
--에러남 문장기호' '데이터 데이터' '문장기호
select ename||' 's house is bigger then Tom's '
from emp
where sal >= 3000;
--에러남 문장기호' '데이터 데이터' '문장기호
select ename||' ' 's house is bigger then Tom' 's '
from emp
where sal >= 3000;
--가능
select ename||'''s house is bigger then Tom''s ' as notice
from emp
where sal >= 3000;
--가능 '아무기호나 가능' 대칭만 맞으면 된다.
select ename||q'[ ]' as notice from emp;
select ename||q'! !' as notice from emp;
--가능
select ename||q'['s house is bigger then Tom's]' as notice from emp;
1-24. 중복 제거
--emp table에서
--job 컬럼만 리턴
select job from emp;
--emp table에서
--중복값 제거 후
--job 컬럼만 리턴
select unique job from emp;
--emp table에서
--중복값 제거 후
--job 컬럼만 리턴
select distinct job from emp;
--emp table에서
--deptno, job의 중복값 모두 제거 후 리턴
select distinct deptno, job from emp;
1-26. 테이블 구조 표시
--desc : describe을 줄인
--emp table에 대해 Name, Null, Type 등을 알 수 있다.
desc emp
References
개발자님들 덕분에 많이 배울 수 있었습니다. 감사의 말씀 드립니다.