SELECT
-- 기본 형식 : SELECT [필드명] FROM [테이블명]
SELECT * FROM member; -- member 테이블의 모든 필드를 조회
SELECT name FROM member; -- member 테이블의 name 필드를 모두 조회
SELECT name, age FROM member; -- member 테이블의 name,age 필드를 모두 조회
SELECT age-2 FROM member; -- 수식을 사용하여 결과값을 조절할 수 있음
SELECT는 DB에 저장된 데이터를 조회하는 명령어로, SQL 명령어중 가장 높은 사용빈도를 보인다. DML의 일종으로 분류되지만, 직접적인 데이터 조작(Manipulation)이 없기 때문에 따로 DQL(데이터 질의어; Data Query Language)로 분류되기도 한다.
SELECT 문의 기본 형태는 필드명과 테이블명 만을 사용하여, 특정 테이블의 특정 필드값을 전부 조회하는 것이다. 여러개의 필드를 조회하고 싶다면 쉼표로 구분하고, 전체 필드를 모두 조회하고 싶다면 * 문자를 이용하면 된다.
SELECT 문으로 얻어지는 조회결과는 테이블 형태로 출력되는데, 이를 결과 셋(result set)이라고 한다. 출력되는 필드의 순서는 *을 사용하여 전체 필드를 조회한다면 테이블이 생성될 때의 순서와 같지만, SELECT 문에 필드를 직접 입력한 경우 입력한 순서대로 나타난다. 또한, 필드값에 연산식을 사용하여 기존 테이블 값들의 연산결과로 이루어진 결과 셋을 만들어낼 수 있다.
- Oracle : 기본적으론 모두 대문자로 인식하고 결과셋 역시 대문자로 출력한다. 필드명을 따옴표로 감싸 지정하면 대소문자를 인식한다.
- MySQL / SQLServer : 필드명의 대소문자를 따로 구분하지 않으며, 결과셋에는 지정한대로 나타난다.
AS
-- 기본 형식 : 필드명 [AS] 별칭명
SELECT name "이름" FROM member; -- member 테이블의 name필드를 이름이란 별칭으로 조회
SELECT name AS "이름" FROM member; -- AS는 생략할 수 있지만 직관적으로 써놓는게 좋음
SELECT age 나이 FROM member; -- 평이한 단어는 큰따옴표가 없어도 됨
SELECT age-2 AS '만 나이' FROM member; -- MySQL, SQL Server는 작은따옴표 가능
SELECT city AS [도시] FROM member; -- SQL Server는 대괄호 가능
SELECT 도시 = city FROM member; -- SQL Server는 필드 앞에 = 기호를 이용할 수도 있음
필드명의 가독성이 떨어지거나 별칭을 지정하고 싶은 경우, 혹은 연산식 등을 사용하여 결과셋에 기존 테이블에 없는 이름의 필드가 등장하는 경우 등엔 AS 키워드를 필드명 뒤에 붙여 별칭(alias)를 지정하여 결과셋의 헤더부분이 별칭으로 변경되게 할 수 있다. AS 키워드는 생략이 가능하다.
별칭은 보통 큰따옴표로 둘러쌓인 문자열로 특수문자나 띄어쓰기 등을 포함할 수 있지만, 특수문자가 없는 평이한 단어는 큰따옴표 역시 생략할 수 있다. 별칭을 지정하는 문법은 아래와같이 DBMS마다 다양하지만, 일반적으로 DBMS간 호환성과 일관성을 위해 AS와 큰따옴표를 붙이는 습관을 들이자.
- Oracle : 큰따옴표만 가능하며, 평이한 단어는 생략 가능, AS 생략 가
- MySQL : Oracle 문법 + 작은 따옴표도 가능
- SQLServer : MySQL 문법 + 대괄호도 가능하며, 필드명 앞에 = 기호도 가능
DUAL
SELECT 60*60*24 AS "하루" FROM dual; -- Oracle
SELECT 60*60*24; -- SQL Server, MySQL
일반적으로 SELECT문은 FROM 절이 필수인데, Oracle에서 단순 계산 등을 위해 만들어진 1x1 사이즈의 더미테이블이 바로 dual 테이블이다. SQL Server는 FROM 절을 생략하는 방식을 사용한다. MySQL 역시 생략하는 방식을 사용하지만, FROM dual을 붙여도 딱히 에러를 발생시키진 않는다. 참고로, 소숫점에 대해서 각 DBMS별로 출력 형식이 다르다.
- Oracle : DUAL 테이블로 연산 지원 / 소숫점을 최대한 정밀하게 계산
- MySQL : DUAL , FROM 생략 모두 지원 / 적절한 유효숫자로 소숫점을 잘라줌
- SQLServer : FROM 생략으로 연산 지원 / 정수값으로 반올림
'Java.DB > SQL' 카테고리의 다른 글
[Oracle/SQL] ORDER BY (0) | 2022.10.26 |
---|---|
[SQL] WHERE (0) | 2022.10.26 |