59doit
[ SQL ] Oracle sql문 #2 _ 데이터 질의어 select 문 (1) 본문
SQL 문의 형태
[데이터 질의어 ]
DQL(Data Query Language)은 데이터 질의어를 의미한다.
데이터 질의어는 테이블에 저장된 데이터를 조회하여 출력할 때 사용한다.
* 데이터 질의어의 기능
- 프로젝션
SQL 문에 의해 반환되는 테이블의 열을 선택한다.
필요한 수만큼 열을 선택할 수 있다. - 선택
SQL 문에 의해 반환되는 테이블의 행을 선택한다.
다양한 조건을 사용하여 조회되는 행을 제한할 수 있다. - 조인
두 테이블 사이에 링크를 지정하여 서로 다른 테이블에 저장된 데이터를 함께 가져온다.
1. select 문
- select 문은 테이블에 저장된 데이터를 조회할 때 사용한다.
- select 문은 전체 레코드를 조회한다.
select [distinct] *|columns [as 별칭] from tables;
- select 명령어
select 명령어는 표시할 컬럼이나 명령어를 지정한다.
컬럼은 하나 이상의 컬럼으로 이루어진 리스트이다. - distinct 명령어
distinct 명령어는 중복을 방지한다. - *(애스터리스크) 기호
*(애스터리스크) 기호는 모든 컬럼을 선택한다. - column 변수
column 변수는 지정된 컬럼명을 설정한다. - [as 별칭]
as 명령어는 컬럼명의 별칭이나 가상 컬럼을 생성할 수 있다.
as 명령어는 생략할 수 있다. - from tables;
from tables 문은 컬럼을 포함하는 테이블들을 지정한다.
tables 는 컬럼을 포함한 테이블들이며 ;(세미콜론)으로 종료한다.
(1) 데이터의 조회
①특정 컬럼의 조회
select column1, column2,…columnN from table;
- select 문에는 조회하고자 하는 컬럼명들을 ,(콤마)로 구분하여 지정한다.
- 컬럼의 호출은 select 문 뒤에 기술한 컬럼의 순서대로 호출된다.
- 마지막 컬럼에는 ,(콤마)를 반드시 생략해야 한다.
ex ) emp 테이블에서 사원번호와 사원명을 조회한다.
SELECT EMPNO, ENAME FROM EMP; |
② 모든 컬럼의 조회
select * from table;
- 컬럼명 대신에 *(애스터리스크)를 사용하여 지정한 테이블의 모든 컬럼을 조회한다.
ex ) emp 테이블에서 모든 사원의 컬럼 내용을 조회한다.
SELECT*FROM EMP; |
③ 컬럼값의 중복 제거 조회
select distinct column table;
- distinct 명령어로 중복되어 출력되는 컬럼값을 제거하여 조회한다.
ex ) emp 테이블에서 사원의 직급이 중복되는 값이 없도록 조회한다.
SELECT DISTINCT JOB FROM EMP; |
JOB : 직급
④ 컬럼명의 별칭 적용
select column1 [as] alias, column2 [as] alias… columnN [as] alias from table;
- as 명령어를 사용하여 원하는 별칭을 지정하며 as 명령어는 생략할 수 있다.
- 별칭에 공백 문자나 특수문자 등을 적용하려면 "(더블 쿼터)를 사용해야 한다.
- 별칭의 적용은 조인문에서 컬럼명이 같을 때 유용하게 사용된다.
ex ) dept 테이블에서 컬럼명 대신에 별칭을 이용해서 조회한다.
SELECT DNAME AS 부서명, LOC AS "부서위치" FROM DEPT; |
(2) 데이터의 연산
① 산술 연산자
- select 문에 산술 연산자를 적용하며 산술 연산자:
| : +(플러스) : 더하기
| : -(마이너스) : 빼기
| : *(애스터리스크) : 곱하기
| : /(슬래시) : 나누기 - 데이터 표시 방식을 수정하거나 계산을 수행할 때 산술식을 사용한다.
- 산술식은 컬럼명, 상수, 산술 연산자 등을 포함할 수 있다.
- from 명령어를 제외한 SQL 문의 모든 명령어에서 산술 연산자를 사용할 수 있다.
- ( )(퍼렌씨시스)를 사용하여 연산자 실행 순서를 원하는 대로 지정함으로써 우선 순위규칙을 재정의할 수 있다.
ex 1 ) emp 테이블에서 사원의 연봉을 산술 연산자를 적용하여 조회한다.
SELECT ENAME, SAL,SAL*12 FROM EMP; |
ENAME : 사원
SAL : 급여
SAL*12 : 연봉
ex 1 ) emp 테이블에서 커미션을 추가한 연봉을 조회하고 null 이면 null 값을 조회한다.
SELECT ENAME, SAL, SAL*12, COMM, SAL*12+COMM FROM EMP; |
특정 컬럼에 대한 컬럼값이 없는 경우 해당 값이 null 이거나 null 을 포함한다.
null 은 할당되지 않았거나 알 수 없는 값이다.
null 은 0 이나 공백과는 다르다.
0 은 숫자이며 공백은 문자이다.
모든 컬럼은 null 을 포함할 수 있지만, 제약조건인 not null 이나 primary key 가 지정된 컬럼에서는 null 을 사용할 수 없다.
COMM : 커미션
SAL*12+COMM : 커미션을 추가한 연봉 결과
② 연결 연산자
- ||(더블 버티컬바) 연산자로 컬럼이나 컬럼값을 다른 컬럼이나 컬럼값에 연결한다.
- 더블 버티컬바 연산자로 연결된 컬럼은 단일 출력 컬럼이 된다.
ex ) emp 테이블에서 특정 컬럼을 더블 버티컬바 연산자로 연결하여 조회한다
SELECT EMPNO || '-' || ENAME AS 명단 FROM EMP; |
특정컬럼 : 명단
연결 : 더블 버티컬바 연산자 사용 ; ||'-'||
③ select…where 문
- select…where 문은 특정 조건에 맞는 레코드를 조회할 수 있다.
- select…where 문을 사용하여 SQL 문에서 반환되는 컬럼값을 제한할 수 있다.
- select…where 문의 조건식이 참일 때 해당 조건을 충족하는 컬럼값을 반환된다.
- select…where 문의 조건식에는 컬럼값, 리터럴, 산술식, 함수, 비교 조건, 상수 등이 올 수 있다.
select [distinct] *|columns [as 별칭] from tables
- select 명령어
select 명령어는 표시할 컬럼이나 명령어를 지정한다.
컬럼은 하나 이상의 컬럼으로 이루어진 리스트이다. - distinct 명령어
distinct 명령어는 중복을 방지한다. - *(애스터리스크) 기호
*(애스터리스크) 기호는 모든 컬럼을 선택한다. - column 변수
column 변수는 지정된 컬럼명을 설정한다. - [as 별칭]
as 명령어는 컬럼명의 별칭이나 가상 컬럼을 생성할 수 있다.
as 명령어는 생략할 수 있다. - from tables;
from tables 문은 컬럼을 포함하는 테이블들을 지정한다. - where 조건식;
where 조건식 문은 조회할 조건을 지정하며 조건을 충족하는 컬럼값으로 SQL 문을 제한한다.
조건식은 조회할 조건에 대한 조건이나 표현식으로 ;(세미콜론)으로 종료한다.
④ 비교 연산자
select column1, column2,…columnN from table
where column 비교 연산자 조건값;
- 비교 연산자는 특정 표현식을 다른 값이나 표현식과 비교하는 조건에서 사용된다.
- 비교 연산자:
* =(이퀄) : 같다.
* !=(엑스클러메이션 포인트 이퀄) : 같지 않다.
* >(라이트 앵글브래킷) : 크다.
* >=(라이트 앵글브래킷 이퀄) : 크거나 같다.
* <(레프트 앵글브래킷) : 작다.
* <=(레프트 앵글브래킷 이퀄) : 작거나 같다.
ex ) emp 테이블에서 급여가 2000 이상인 사원만 조회한다.
SELECT EMPNO, ENAME, SAL FROM EMP WHERE SAL>= 2000; |
⑤ 논리 연산자
select column1, column2, … columnN from table
where column 논리 연산자 조건값;
- 논리 연산자는 논리식을 구성하는 요소이다.
- 논리 연산자의 결과는 논리값인 참 또는 거짓을 선택하여 논리적인 계산을 수행한다.
- 논리 연산자 자체가 값을 반환하지는 않으며 논리 연산을 따라 최종적으로 평가된 값이 반환된다.
- 논리 조건은 두 구성 요소 조건의 결과를 결합하여 해당 조건을 기반으로 단일 결과를 산출하거나 단일 조건의 결과를 뒤바꾼다.
- 논리 연산자:
* and : 두 가지 조건이 모두 참이면 참으로 평가한다.
* or : 두 가지 조건이 모두 거짓이면 거짓으로 평가한다.
* not : 조건이 거짓이면 참으로 평가하고 조건이 참이면 거짓으로 평가한다.
ex 1 ) emp 테이블에서 직급이 CLERK 이고 부서번호가 10 인 사원의 정보를 조회한다.
SELECT EMPNO, ENAME, JOB, DEPTNO FROM EMP WHERE DEPTNO = 10 AND JOB = 'CLERK'; |
ex 2 ) emp 테이블에서 직급이 MANAGER 이거나 입사일이 1982 년 1 월 1 일 이후에 입사한 사원의 정보를 조회한다.
SELECT EMPNO, ENAME, JOB, HIREDATE FROM EMP WHERE HIREDATE >= '1982/01/01' OR JOB = 'MANAGER'; |
HIREDATE : 입사일
OR : 둘중 하나라도 해당되면 결과 값이 나온다
⑥ between A and B 연산자
select column1, column2, … columnN from table
where column [not] between A and B;
- between A and B 연산자는 특정 범위의 값을 조회할 때 사용되며 지정된 a 와 b 는 값의 범위에 포함된다.
- not 명령어를 사용하면 특정 범위의 값을 조회할 때 지정된 a 와 b 는 값의 범위에서 제외한다.
ex 1 ) emp 테이블에서 입사일이 1981 년 5 월 5 일과 1981 년 12 월 31 일 사이의 사원정보를 조회한다.
SELECT EMPNO, ENAME, HIREDATE FROM EMP WHERE HIREDATE BETWEEN '1981/05/05'AND '1981/12/31'; |
ex 2 ) emp 테이블에서 급여가 1500 과 4000 사이가 아닌 사원정보를 조회한다.
SELECT EMPNO, ENAME, SAL FROM EMP WHERE SAL NOT BETWEEN 1500 AND 4000; |
⑦ in 연산자
select column1, column2, … columnN from table
where column [not] in (조건 리스트);
- in 연산자는 여러 개의 값을 동시에 비교하여 일치하는 데이터를 얻을 때 사용한다.
- in 연산자는 지정된 컬럼값의 집합에서 컬럼값을 테스트할 때 사용한다.
- in 연산자를 사용하여 정의한 조건을 멤버 조건이라고도 한다.
- not 명령어를 사용하면 여러 개의 값을 동시에 비교하여 일치하지 않는 데이터를 얻는다.
ex 1 ) emp 테이블에서 job 이 MANAGER, SALESMAN, SALESOMAN 인 사원의 정보를 조회한다.
SELECT EMPNO, ENAME, JOB FROM EMP WHERE JOB IN ('MANAGER','SALESMAN', 'SALESOMAN'); |
ex 2 ) emp 테이블에서 사원번호가 7369, 7521, 7698 이 아닌 사원의 정보를 조회한다.
SELECT EMPNO, ENAME, JOB FROM EMP WHERE EMPNO NOT IN(7369,7521,7698); |
⑧ like 연산자
select column1, column2, … columnN from table
where column [not] like '[문자]와일드카드[문자]';
- like 연산자를 사용하여 유효한 조회 문자열 값의 대체 문자 조회를 수행하며 문자 패턴을 일치시키는 작업을 대체 문자 조회라고 한다.
- like 연산자는 어느 문자가 들어가도 좋다는 것을 나타내는 문자인 임의의 문자인 와일드카드와 문자열을 포함한 데이터를 검사하여 호출할 때 사용한다.
- like 연산자를 사용하여 문자 패턴이 일치하는 컬럼값을 선택할 수 있다.
- not 연산자를 사용하여 비교 범위를 제외한다.
- not 명령어를 사용하면 유효하지 않은 조회 문자열 값의 대체 문자 조회를 수행한다.
- like 연산자에 사용하는 와일드카드는 임의 리터럴 문자 결합에서 사용할 수 있다.
- %(퍼센트) 와일드카드:
%(퍼센트) 와일드카드는 없거나 여러 개의 문자를 대체한다.
%(퍼센트) 와일드카드는 0 개 이상의 임의의 문자 시퀀스를 나타낸다. - _(언더스코어) 와일드카드:
_(언더스코어) 와일드카드는 하나의 문자를 대체한다.
_(언더스코어) 와일드카드는 임의의 단일 문자를 나타낸다. - 연산자 우선순위
우선순위 규칙은 표현식이 평가되고 계산되는 순서를 결정한다.
▼
[ 산술 연산자 〉 연결 연산자 〉 비교 조건 〉 is [not] null, like, [not] in 〉 [not] between 〉 같지 않음 〉 not 논리 조건 〉 and 논리 조건 〉 or 논리 조건 ]
ex 1 ) emp 테이블에서 이름이 J 문자로 시작하는 사원의 정보를 조회한다.
SELECT EMPNO, ENAME, HIREDATE, SAL FROM EMP WHERE ENAME LIKE 'J%'; |
ex 2 ) emp 테이블에서 이름이 N 문자로 끝나는 사원의 정보를 조회한다.
SELECT EMPNO, ENAME, HIREDATE, SAL FROM EMP WHERE ENAME LIKE '%N'; |
ex 3 ) emp 테이블에서 이름에서 두 번째 문자가 A 문자인 사원의 정보를 조회한다.
SELECT EMPNO, ENAME, HIREDATE, SAL FROM EMP WHERE ENAME LIKE '_A%'; |
ex 4 ) emp 테이블에서 이름에 N 문자를 포함하는 사원의 정보를 조회한다.
SELECT EMPNO, ENAME, HIREDATE, SAL FROM EMP WHERE ENAME LIKE '%N%'; |
ex 5 ) emp 테이블에서 이름에 N 문자를 포함하지 않는 사원의 정보를 조회한다.
SELECT EMPNO, ENAME, HIREDATE, SAL FROM EMP WHERE ENAME NOT LIKE '%N%'; |
'Programming > SQL 기초' 카테고리의 다른 글
[ SQL ] Oracle sql문 #4 _ 데이터 질의어 select…where…order by 문 (0) | 2022.12.09 |
---|---|
[ SQL ] Oracle sql문 #3 _ 데이터 질의어 select 문 (2) (0) | 2022.12.09 |
[ SQL ] Oracle sql문 #1 _ 데이터 정의어 (0) | 2022.12.08 |
[ SQL ] 데이터베이스 #6 다중행함수 (0) | 2022.12.08 |
[ SQL ] 데이터베이스 #5 단일행 함수 (1) | 2022.12.08 |