SELECT [ 조회하고자 하는 컬럼명 또는 전체 컬럼 조회시 * 입력 ] FROM [ 조회하고자 하는 테이블명 ];
ex. SELECT * FROM employees; → employees 테이블에 있는 전체 컬럼 조회하기
SELECT salary FROM employees; → employees 테이블에 있는 salary 컬럼 조회하기
컬럼을 조회하는 위치에서 * / + - 연산이 가능하다.
NULL 은 값이 없다는 것을 의미한다. NULL 은 * ( 곱하기 ) 연산이 안되며 숫자 0 이나 공백과는 다르다.
만약 NULL 이 0 이라면 곱하기 연산시 결과가 0 이 나와야 하는데 0 이 아닌 NULL 산출된다.
조회결과의 컬럼이름은 별칭을 붙여 바꾸어줄 수 있다.
AS 라는 키워드를 통해 조회되는 컬럼에 별칭을 붙여줄 수 있다.
SQL문의 실행 순서
테이블을 먼저 정해야 하기 때문에 FROM 절부터 실행된다.
오라클은 홑따옴표로 문자열을 표현하고,
문자열 안에 홑따옴표 특수기호를 표현하고 싶다면 '' ( 홑따옴표 ) 기호를 연속으로 쓰면된다.
컬럼 값의 타입이 문자열이고, 문자열을 붙인 결과를 도출하고 싶다면
컬럼간에 || ( or 기호 ) 를 사용하여 컬럼의 문자열 타입의 값을 연결해 산출한다.
문자열 연결기호는 || 이다. 문자열은 덧셈 ( + ) 연산을 허용하지 않는다.
SELECT 뒤에 DISTINCT 키워드를 붙이면 중복 값을 가진 행을 제거한후 결과를 도출한다.
employees 테이블에서 department_id 컬럼에 대응하는 값을 모두 조회한 후 중복 값이 있다면 제거하라는 의미다.
테이블 생성시 자동으로 부여되는 ROWNUM, ROWID
ROWNUM은 쿼리에 의해 반환되는 행 번호를 반환 → 페이징 할 때 유용하게 사용됨
( ※ ROWNUM: 게시글은 삭제되면 글 번호가 들쭉날쭉 된다.
그런데 ROWNUM은 조회된 결과를 바탕으로 번호가 매겨지기 때문에
중간 숫자의 삭제 없이 항상 순차적으로 도출된다.
이는 페이징할 때 범위 지정시 유용하게 사용된다 )
ROWID는 데이터베이스 내의 행의 주소를 반환한다 → 사용할 일이 거의 적음
컬럼의 종류는 설정했지만 조건을 걸지 않는다면 인출되는 행의 갯수는 항상 같다.
조건을 걸기 위해 사용하는 키워드는 WHERE 다.
SELECT first_name, last_name, job_id FROM employees WHERE job_id = 'IT_PROG';
FROM employees → 테이블 employees 에서
WHERE job_id = 'IT PROG' → 컬럼의 값을 이용해서 조건을 걸어준다 → job_id 가 IT PROG인 사람들의
SELECT first_name, last_name, job_id → 컬럼 first_name, last_name, job_id 를 조회해라
※ 데이터 값은 대/소문자를 구분한다.
IN 연산자의 사용
WHERE절에서 특정 값 여러 개를 선택하는 경우 IN 연산자를 사용한다.
예를 들어 employees 테이블에서 manager_id가 100 또는 101 또는 102에 해당하는 레코드를 모두 조회할 때
SELECT *
FROM employees
WHERE manager_id = 100
OR manager_id = 101
OR manager_id = 102;
이렇게 작성할 수 있으나 IN 연산자를 사용하면 더 간단히 작성할 수 있다.
SELECT *
FROM employees
WHERE manager_id IN ( 100, 101, 102);
→ IN 연산자를 사용할 경우 검색할 값을 콤마로 구분해 작성한다.
LIKE 연산자는 지정한 문자열이 포함되는지 아닌지를 확인할 때 사용한다.
SELECT first_name, last_name, hire_date
FROM employees
WHERE hire_date LIKE '03%';
→ hire_date가 03으로 시작한다면 뒤에가 뭐든 상관없다 ( % )
→ % 의 의미는 어떠한 문자든 상관없다. anything의 의미
WHERE hire_date LIKE '%05%';
hire_date의 값이 앞이든 뒤든 어떤 값이 있는지는 상관하지 않고,
05가 포함만 되어 있다면 모두 가져와라
자리를 표현하는 _(언더바) 예를 들어 07/05/21 월이 05에 해당하는 모든 hire_date가 조건이라면
07/ 에 해당하는 자리수 3자리를 _(언더바)로 채우고 05 그리고 그 뒤에 어떤 값이 와도 상관 없다는 % 를 붙여준다.
→ ___05%
SELECT first_name, last_name, hire_date
FROM employees
WHERE hire_date LIKE '___05%';
→ employess 테이블에서 hire_date의 값이 월이 5월달인 모든 값을 기준으로
first_name, last_name, hire_date 컬럼을 조회하라. 는 시퀄 ( SQL ) 문이다.
예제 ---------------------------
'05%' → 05로 시작한다면
'%05' → 05로 끝난다면
'%05%' → 05라는 문자열이 포함만 되어 있다면
'___05%' → _(언더바)는 데이터의 자리 ( 위치 ) 를 표현할 때 사용하고,
_(언더바)를 3번 작성했으니 앞에서 3글자 뒤에 05가 작성된
그리고 05 뒤에는 어떤 글자가 작성되어 있더라도 상관없다 는 의미다.
추가 ------------------------------------------------------------------------------------------------------------------------------------
WHERE 는 출력하는 데이터에 대해 조건을 걸 때 사용하는 키워드로
데이터 행 출력 제한에 함께 사용되는 키워드가 몇 개 있다 ( BETWEEN, IN, LIKE )
BETWEEN 연산자는 날짜, 숫자 또는 문자의 범위 검색에 주로 사용되며
AND 키워드와 함께 사용된다.
예를 들어 위 그림과 같이 employees 테이블에서 ( FROM employees )
salary 컬럼에 대응하는 값이 15000 과 20000 사이인 ( WHERE salary BETWEEN 15000 AND 20000 )
모든 행을 조회하라 ( SELECT * ) 는 질의를 할 때
'범위에 해당하는 값을 가진 행 ' 을 제한할 때 BETWEEN 연산자가 요긴하게 사용된다.
만약 BETWEEN 연산자를 사용하지 않는다면 이렇게 작성할 수 있다.
SELECT *
FROM employees
WHERE salary >= 15000 AND salary <= 20000; → salary 컬럼에 대응하는 값이 15000원 이상이면서 20000원 이하 사이인
employees 테이블에서 ( FROM employees )
hire_date 가 03/01/01 부터 ( 포함 ) 03/12/31 까지 ( 포함 ) 에 해당하는
( WHERE hire_date BETWEEN ' 03/01/01' AND ' 03/12/31' )
모든 레코드를 출력하라 ( SELECT * )
NULL
NULL의 여부를 확인할 때, 동등 연산자로 확인할 수 없다.
예를 들어 commission_pct 컬럼의 값이 NULL인 레코드를 출력할 때
SELECT * FROM employees WHERE commission_pct = NULL; ( x )
이렇게 작성하면 어떠한 결과도 출력되지 않는다.
NULL의 포함여부를 확인하려면 IS NULL ( NULL 의 값을 찾을 때 )
또는 IS NOT NULL ( NULL 이 아닌 값을 찾을 때 ) 키워드로 확인해야 한다.
AND와 OR의 연산 순서 → AND 가 OR 보다 연산 순서가 빠르다.
예를 들어 employees 테이블에서 job_id가 'IT_PROG' 또는 job_id가 'FI_MGR' 인데
salary가 6000 이상인 사람들만 출력하라를 다음과 같이 작성했다면
SELECT * FROM employees
WHERE job_id = 'IT_PROG'
OR job_id = 'FI_MGR'
AND salary >= 6000;
job_id 가 'FI_MGR' 이면서 salary 가 6000 또는
job_id 가 'IT_PROG' 이면서 salary 가 6000 이상인
사람들이 출력되지 않는 걸 볼 수 있다.
AND 연산자가 OR 연산자보다 연산 순서가 빠르므로
1) job_id = 'FI_MGR' AND salary >= 6000 이 먼저 수행되면서
job_id가 FI_MGR 이면서 salary가 6000 이상인 사람들과
2) job_id가 'IT_PROG' 인 사람들이 출력되는 것이다.
()소괄호를 사용하여 연산 순서를 지정할 수 있는데
job_id가 IT_PROG 이면서 salary 가 6000 인 사람들도 같이 출력하려면
다음과 같이 소괄호 기호를 적용하면 된다.
SELECT * FROM employees
WHERE ( job_id = 'IT_PROG'
OR job_id = 'FI_MGR' )
AND salary >= 6000;
데이터의 정렬은 SELECT 구문의 가장 마지막에 배치된다.
ASC는 ascending 으로 오름차순이며 기본 값이기 때문에 생략이 가능하다.
DESC는 descending 으로 내림차순이다.
SELECT * FROM employees ORDER BY hire_date;
employees 테이블에서 hire_date ( 입사일 ) 을 기준으로 오름차순 ( 기본값 ) 으로 조회하라
별칭도 정렬의 대상이 될 수 있다 → ORDER BY 뒤에 별칭 작성이 가능하다.
employees 테이블에서 ( FROM employees )
first_name 과 salary 에 12 를 곱한 값을 pay 라는 별칭 ( 컬럼명 ) 으로 조회하는데
( SELECT first_name, salary * 12 AS pay )
정렬의 기준은 별칭 pay 가 되며 DESC ( 내림차순 ) 으로 수행하라
( ORDER BY pay DESC )
'공부기록용' 카테고리의 다른 글
[ Spring Boot ] 스프링 JPA (0) | 2024.08.02 |
---|---|
[ SQLD ] 실습 240802 (0) | 2024.08.02 |
[ SQLD ] 데이터 모델과 성능 240801 (0) | 2024.08.01 |
[ SQLD ] 데이터 모델링의 이해 240729 (0) | 2024.07.29 |
[ SQLD ] 데이터 모델링의 이해 240728 (0) | 2024.07.28 |