db - 기본형식

imjingu·2023년 8월 11일
0

개발공부

목록 보기
364/481

1. 기본 형식

SELECT는 테이블의 데이터를 읽어 출력하는 이 동작을 조회라고 함. 테이블을 조회하는 것은 가장 기본적인 동작이며 SELECT 문은 모든 SQL 명령중 사용 빈도가 압도적으로 높음. 테이블을 읽은 동작은 단순하지만 옵션이 굉장히 많음. 관심있는 필드만 읽거나 조건을 지정하여 일부 레코드만 조회할 수 있고 정렬 기준을 지정하여 출력 순서를 조정할 수 있음, 그러다 보니 전체 문법이 상대적으로복잡함.

기본 형식

SELECT 필드목록 FROM 테이블 [ WHERE 조건 ][ORDER BY정렬기준 ]

옵션을 생략하면 SELECT 필드목록 FROM 테이블 이 되며 FROM절의 테이블에서 필드를 읽어 출력하는 명령.
SELECT와 FROM 사이에 필드목록에 출력할 필드의 이름을 지정하되 * 기호를 쓰면 테이블의 모든 필드를 출력.

SELECT * FROM tCity;


tCity 테이블의 모든 필드를 출력하라는 뜻

2. 필드목록

SELECT * 명령은 테이블 전체를 출력 할 때 편리. 필드목록의 *는 모든 필드를 의미하 며 All 또는 몽땅이라도 읽음. 표기법이 짧아 입력하기 편하고 필드 이름을 몰라도 되므로 테이블을 살펴 볼 때 간편, 그러나 필드가 많을 때는 느리고 출 력 결과도 장황. 일부 필드만 출력하거나 순서를 직접 지정할 때는 SELECT 와 FROM 사이에 원하는 필드만 콤마로 구분하여 적 음. 목록에 있는 필드만 읽으니 빠르고 출력 결과도 짧음.

SELECT name, area, popu FROM tCity;

SELECT region, name, area FROM tCity;

도시명과 인구수에만 관심이 있다면 name 필드와 poppu 필드만 목록에 적 음.
두번 째 쿼리문은 지역과 도시명, 인 구수를 출력하는데 필드 순서를 마음 대로 지정 가능.
테이블에는 region 필드가 name 필드 보다 뒤에 있지만 필드 목록에 지정 한 순서대로 출력.

SELECT name, salary FROM tStaff;


직원 목록에서 소속이나 성별에는 관 심이 있고 오로지 월급만 조사하고 싶다면 name과 salary만 출력.
필드 입력을 직접 입력하는 것은 번 거롭지만 지정한 정보만 볼 수 있음.

두 명령의 차이점
SELECT name, area, popu, metro, region FROM tCity;
SELECT * FROM tCity;

tCity의 모든 필드를 일일이 적거나 * 로 모든 필드를 지정하지만 결과는 같음, 하지만 테이블의 디자인이 바뀌게 되 면 결과 값이 달라짐,

먼저 필드를 추가 되는 경우, 시장의 이름을 mayor 필드에 추가하면 * 로 읽으면 새 필드를 인식 하지만, 필드를 적는 경우에는 따로 추가 해 줘야 함.

필드를 수정하는 경우, popu 필드를 ingu로 바꾸면 * 로 읽을 때는 에러가 없지만 결과셋에서 popu 필드를 읽는 코드는 에러가 남.

필드를 적는 경우에는 읽을 때 에러 가 나서 더 안전함.
단순 확인을 할 때는 * 를 사용해도 되지만 실무에서는 가급적 필드의 이 름과 순서를 명확히 지정하는 것이 유리.

3. 별명

SELECT 명령이 출력하는 내용을 결과셋 Result Set 또는 로우셋 Row Set 이라고 하는데 형태가 테이블과 동일.
원본 테이블의 일부만 읽어도 가로, 세로로 칸이 쳐진 도표 형태.
결과셋의 필드 캡션은 테이블에서 정 의한 이름과 동일.
name 필드는 name이라고 출력하고, popu는 popu라고 출력.
테이블의 필드명은 구분 가능하고 입 력하기 쉬운 짧은 명칭일 뿐, 사용자가 읽기에는 직관적이지 못한 경우가 많음.
이 경우 필드에 대한 별명 Alias를 지정하며 결과셋의 헤더에 필드 이름대신 별명을 출력.
별명은 어디까지나 문자열일 뿐이므로 명칭 규칙에 영향을 받지 않음. 공백이나 기호는 물론 모든 문자를 자유롭게 표기할 수 있음.
필드명 [AS] "별명"
필드명과 별명 사이에 전치사 AS를 넣음, 생략해도 상관없지만 자연어와 유사하고 직관적이므로 가급적 넣는 것이 좋음. 공백이나 특수 문자를 포함할 수 있어서 큰 따옴표로 감싸되 평이한 단어이면 따옴표 생략 가능.

SELECT name AS 도시명, area AS "면 적(제곱Km)", popu AS "인구(만명)" FROM tCity;


다른 이유로도 별명을 사용하는데, 언어에 따라 명칭을 구성하는 규칙이 달라 특수한 이름을 읽지 못하는 경우가 있고, DBMS별로 키워드가 달라 필드명으로 쓰지 못하는 단어도 있음.
결과셋에 별명을 붙이면 개발툴이나 DBMD에 상관없이 일관된 별명으로 필드를 읽을 수 있음.
DBMS에 따라 큰 따옴표만 사용가능하 거나, 작은 따옴표도 사용 가능한 경 우가 있음.
SQL Server는 다음 구문도 가능.
SELECT 도시명 = name, area '면적 (제곱Km)', popu [인구(만명)] FROM tCity;

4. 계산값의 출력

필드 목록에 필드 이름을 적으면 필드 값이 그래도 출력.
SELECT popu라고 하면 테이블의 인구 수를 출력, 하지만 popu 필드의 단위 가 만명으로 되어 있어서 헷갈릴 수 있음. 필드 목록에 계산식을 사용하면 테이 블에 저장된 값을 가공하여 출력.

SELECT name, popu * 10000 AS "인구 (명)" FROM tCity;


이 경우 별명을 붙여 필드의 의미까 지 정확히 기술하는 것이 좋음.
테이블에는 요약적으로 압축하여 저 장하기 때문에 실제 정보와 다른 경 우가 있음, 이럴때는 계산식으로 사용자가 읽기 쉬운 형태로 가공해서 보여주는게 바람직.

계산식을 사용하면 테이블에 없는 정보도 만들어서 표시할 수 있음.

SELECT name, area, popu, popu * 10000 / area AS "인구밀도" FROM tCity;


tCity 테이블에는 도시의 면적과 인구수 정보가 있는데 이 둘을 계산하면 제곱킬로미터당 인구수인 인구밀도 를 구할 수 있음.
계산에 의해 구한 필드는 이름이 없으므로 설명적인 별명을 붙이는 것이 좋음.

꼭 테이블에 있는 필드만 출력할 수 있는게 아니라, 테이블과 상관없는 단 순한 계산식도 출력 가능.

SELECT 60 * 60 * 24 AS "하루" FROM dual;


하루가 몇초인지 계산하고 싶다면 사용가능.
SELECT 수식 FROM dual; 명령은 간단 한 계산기 역할, dual 은 1행 1열짜리 더미 테이블.

SELECT 60 * 60 * 24;

테이블 생략하는 방식도 지원.

0개의 댓글