SELECT와 컬럼 표현
SELECT 컬럼 지정과 별칭, 연결 연산자 및 SQL*Plus 치환 변수, SQL 작성 규칙
#핵심 요약
SQL(Structured Query Language)은 서버에 들어 있는 데이터를 조회하고 관리하기 위한 언어임
SELECT *는 모든 컬럼을, SELECT 컬럼1, 컬럼2는 지정한 컬럼만 조회함
컬럼 별칭은 컬럼 AS 별칭으로 줌
공백, 특수 문자, 대소문자 구분이 필요하면 큰따옴표로 감쌈
연결 연산자 ||는 컬럼과 문자열을 이어 한 컬럼으로 출력함
치환 변수 &변수를 쓰면 같은 SQL을 실행할 때마다 값을 입력받음
실습에서는 Oracle 도구 전용으로 설명했음
#개념과 동작 원리
| SQL 종류 | 명령 |
|---|---|
| Query | SELECT |
| DML(Data Manipulation Language) | INSERT, UPDATE, DELETE, MERGE |
| DDL(Data Definition Language) | CREATE, ALTER, DROP, TRUNCATE, RENAME |
| DCL(Data Control Language) | GRANT, REVOKE |
| TCL(Transaction Control Language) | COMMIT, ROLLBACK, SAVEPOINT |
수업 자료는 SELECT를 DML에 함께 넣기도 하며, 이 분류가 면접에 자주 나온다고 적었음
SQL 작성 규칙:
- SQL 키워드는 대문자, 컬럼과 테이블 이름은 소문자로 씀
SELECT절과FROM절은 줄을 나눠 씀- 가독성을 위해 들여쓰기를 함
- SQL 문은 세미콜론으로 끝냄
실습에서는 SQL이 대소문자를 구분하지 않으며 한 줄 또는 여러 줄로 쓸 수 있다는 것을 예제로 보였음
실습의 기본 테이블 emp 컬럼:
| 컬럼 | 뜻 |
|---|---|
| empno | 사원번호 |
| ename | 사원이름 |
| sal | 월급 |
| job | 직업 |
| comm | 커미션 |
| deptno | 부서번호 |
| hiredate | 입사일 |
| mgr | 관리자의 사원번호 |
NULL과 연산: 산술식에 NULL이 들어가면 결과는 항상 NULL임
연결 연산자를 제외한 모든 연산자는 NULL 피연산자를 받으면 NULL을 돌려줌
그래서 연습 문제처럼 sal + comm은 커미션이 NULL인 사원에게 NULL이 됨
#필수 명령어 또는 SQL
#전체 컬럼과 일부 컬럼
SELECT *
FROM dept;
SELECT empno, ename, sal
FROM emp;결과 해석:
실습에서는 다른 스키마의 테이블을 복사해 실습 테이블을 만들기도 했음
CREATE TABLE departments
AS
SELECT *
FROM hr.departments;결과 해석:
필요 권한은 기재 없음
#컬럼 별칭
SELECT empno AS 사원번호, ename AS 사원이름, sal AS "Salary"
FROM emp;
SELECT ename, sal * 12 AS 연봉
FROM emp;결과 해석:
설명: 별칭에 공백을 넣거나 대소문자를 구분하려면 큰따옴표를 씀
#연결 연산자
SELECT ename || ' 의 직업은 ' || job
FROM emp;
SELECT deptno || '번의 부서위치는 ' || loc || '입니다' AS 부서정보
FROM dept;결과 해석:
실습에서는 DBA가 연결 연산자로 실행할 SQL 문을 만들어 내는 예를 들었음
SELECT 'analyze table ' || LOWER(table_name) || ' compute statistics;'
FROM user_tables;
SELECT table_name, num_rows
FROM user_tables;결과 해석: 첫 문장은 내가 가진 테이블마다 통계 수집 문장을 문자열로 만들어 출력함
그 문장을 실행하면 통계가 바뀜
실습에서는 두 번째 문장으로 테이블별 건수(NUM_ROWS)를 확인했음NUM_ROWS는 마지막 통계 수집 시점의 값임(확인 불가)
#치환 변수
SELECT ename, sal, job
FROM emp
WHERE job = '&p_job';
SELECT ename, sal, deptno
FROM emp
WHERE deptno = &p_deptno;결과 해석:
설명: 같은 SQL로 조건값만 바꿔 검색할 때 씀
문자 값이면 따옴표 안에 치환 변수를 둠p_ 접두어는 약속임
PostgreSQL의 psql에서는 \set p_empno 7788 뒤 :p_empno로 씀
#사용 조건과 주의사항
연습 문제 답 일부에 쉼표 누락, 잘못된 테이블 이름이 있음
리스너는 리스너와 서비스에 있음