SELECT 문장
1. SELECT
SELECT [DISTINCT] {* | coulumn[[AS] alias], ...}
FROM tablename;
SELECT | 하나 이상의 열을 나열합니다. |
DISTINCT | 중복 제거 |
* | 모든 열 선택 |
column | 명명된 열 선택 |
AS | 열 별칭(alias) 지정 |
alias | 선택된 열을 다른 이름으로 변경 |
FROM tablename; | 열을 포함하는 테이블 명시 |
2. SQL 문장 작성
- 대/소문자 구별X
- 문장이 한 줄 이상일 수 있음
- 키워드는 단축하거나 줄을 나눠 쓸 수 있음
- 절은 대개 줄을 나누어 작성
- 탭과 들여쓰기는 가독성을 위해 사용
SQL> SELECT first_name, last_name, salary
2 FROM employees;
3. 모든 열 선택
SQL> SELECT *
2 FROM departments;
4. 특정 열 선택
SQL> SELECT department_name, location_id
2> FROM departments;
5. 기본 표시 형식
- 디폴트 데이터 자리맞춤을 지정합니다.
- 날짜와 문자 데이터는 왼쪽 정렬됩니다.
- 숫자 데이터는 오른쪽 정렬됩니다.
- 디폴트 열 헤딩은 대문자로 출력됩니다
6. 열 별칭(alias) 정의
- 열 헤딩 이름을 변경합니다.
- 계산할 때 유용
- 열 이름 바로 뒤에 두며 AS 별칭 으로 하기도 합니다.
- 공백/특수문자는 인용부호(" ")가 필요합니다.
SQL> SELECT first_name AS 이름, salary 급여
2 FROM employees;
7. 리터럴(literal) 문자 스트링과 연결 연산자
- SELECT 절에 포함된 리터럴은 문자 표현식 또는 숫자 입니다.
- 날짜와 문자 리터럴 값은 단일 인용부호(' ')안에 있어야 합니다.
- 숫자 리터럴은 단일 인용부호(' ')를 사용하지 않습니다.
- 각각의 문자스트링은 리턴된 각 행에 대한 결과입니다.
- ||를 이용하면 값을 연결해 줍니다
SQL> SELECT first_name || ' ' || last_name || '''s salary is $' || salary
2 AS "Employee Details"
3 FROM employees;
8. 중복 행과 DISTINCT
- 디폴트 출력은 중복되는 행을 포함하는 모든 행입니다.
- SELECT 절에서 DISTINCT 키워드를 사용하여 중복되는 행을 제거합니다.
데이저 제한
1. Selection
- 원하는 행을 선택적으로 조회하는 것
2. 선택된 행 제한
- WHERE 절을 사용하여 반환하는 행을 제한
- WHERE 절은 FROM절 다음에 위치
- WHERE 절은 열 이름, 비교 연산자, 비교할 열 이름 또는 값의 목록으로 구성
SELECT [DISTINCT] {*|coulumn[[AS] alis], ...}
FROM table
[WHERE condition(s)];
SELECT first_name, job_id, department_id
FROM employees
WHERE job_id = 'IT_PROG';
3. 문자와 날짜
- 문자, 문자열, 날짜는 ''로 둘러쌈.
- 문자 값은 대/소문자 구분, 날짜 값은 형식을 따른다.
- 기본 날짜 형식은 'DD-MON-YY'
SELECT first_name, hire_date
FROM employees
WHERE last_name='King';
4. 비교 연산자
연산자 | 설명 |
= | 같다 |
> | 크다 |
>= | 크거나 같다 |
< | 작다 |
<= | 작거나 같다 |
<> , != | 같지 않다 |
5. BETWEEN 연산자
- 값의 범위에 해당하는 값을 출려하기 위해 BEETWEEN 사용
- 하한값 먼저 명시
- 하한값, 상한값 모두 포함
-- 2004년에 입사한 사원
SELECT first_name, salary, hire_date
FROM employees
WHERE hire_date BETWEEN '04/01/01' AND '04/12/31';
6. IN 연산자
- 목록에 값이 있는지 비교
SELECT employee_id, first_name, salary, manager_id
FROM employees
WHERE manager_id IN(101, 102, 103);
7. LIKE 연산자
- 검색 문자열에 대한 와일드카드 검색
- 검색 조건은 문자, 날짜 포함 가능
- %는 문자가 없거나 하나 이상 문자들 대신
- _는 하나의 문자 대신
--LIKE연산
SELECT first_name, last_name, job_id, department_id
FROM employees
WHERE job_id LIKE 'IT_%';
8. IS NULL 연산자
- IS NULL 연산자로 널인지 테스트
- 널이 아닌 값은 IS NOT NULL
SELECT first_name, manager_id
FROM employees
WHERE manager_id IS NULL;
9. 논리 연산자
- AND는 양쪽 조건이 참이어야 TRUE 반환
- OR은 한쪽의 조건이 참이면 TRUE 반환
- NOT 연산자는 뒤의 조건에 반대되는 결과 반환
10. 논리 연산자 우선순위
우선순위 | 연산자 |
1 | 모든 비교 연산자 |
2 | NOT |
3 | AND |
4 | OR |
데이터 정렬
- 질의에 의해 검색되는 행을 정렬할 수 있다.
- ORDER BY 절은 SELECT 문장의 가장 뒤에 옴.
- ASC :오름차순
- DSEK : 내림차순
SELECT expr
FROM table
[WEHRE condition(s)]
[ORDER BY {coluumn|expr [[ASC]|DESC];
select first_name, hire_date
from employees
order by hire_date;
select first_name, hire_date from employees
order by hire_date desc;
select first_name, salary*12 as annsal
from employees
order by annsal;
select first_name, salary*12 as annsal
from employees
order by 2;
실습
1. 모든 사원의 사원번호, 이름, 입사일, 급여를 출력하세요.
2. 모든 사원의 이름과 성을 붙여 출력하세요. 열 별칭은 name으로 하세요.
3. 50번 부서 사원의 모든 정보를 출력하세요.
4. 50번 부서 사원의 이름, 부서번호, 직무아이디를 출력하세요.
5. 모든 사원의 이름, 급여 그리고 300달러 인상된 급여를 출력하세요.
6. 급여가 10000보다 큰 사원의 이름과 급여를 출력하세요.
7. 보너스를 받는 사원의 이름과 직무, 보너스율을 출력하세요.
8. 2003년도 입사한 사원의 이름과 입사일 그리고 급여를 출력하세요.(BETWEEN 연산자 사용)
9. 2003년도 입사한 사원의 이름과 입사일 그리고 급여를 출력하세요.(LIKE 연산자 사용)
10. 모든 사원의 이름과 급여를 급여가 많은 사원부터 적은 사원순서로 출력하세요.
11. 위 질의를 60번 부서의 사원에 대해서만 질의하세요.
12. 직무아이디가 IT_PROG 이거나, SA_MAN인 사원의 이름과 직무아이디를 출력하세요.
13. Steven King 사원의 정보를 “Steven King 사원의 급여는 24000달러 입니다” 형식으로 출력하세요.
14. 매니저(MAN) 직무에 해당하는 사원의 이름과 직무아이디를 출력하세요.
15. 매니저(MAN) 직무에 해당하는 사원의 이름과 직무아이디를 직무아이디 순서대로 출력하세요
--연습문제
---1
select employee_id, first_name, hire_date, salary
from employees;
--2
select first_name ||' '|| last_name as name
from employees;
--3
select * from employees where department_id=50;
--4
select first_name, department_id, job_id from employees where department_id=50;
--5
select first_name, department_id, salary, salary+300 from employees;
--6
select first_name, salary from employees where salary>10000;
--7
select first_name, job_id, commission_pct from employees
where commission_pct is not null;
--8
select first_name, hire_date,salary from employees
where hire_date between '03/01/01' and '03/12/31';
--9
select first_name,hire_date, salary
from employees
where hire_date like '03%';
--10
select first_name, salary from employees
order by salary desc;
--11
select first_name, salary from employees
where department_id=60
order by salary desc;
--12
select first_name, job_id
from employees
where job_id in('IT_PROG', 'SA_MAN');
--13
select first_name||' '||last_name||' 사원의 급여는 '||salary||'달러입니다.'
from employees
where last_name='King' and first_name='Steven';
--14
select first_name, job_id from employees
where job_id like '%MAN';
--15
select first_name, job_id from employees
where job_id like '%MAN'
order by job_id;
'IT > SQL' 카테고리의 다른 글
[SQL] 5. 분석 함수 (0) | 2023.05.11 |
---|---|
[SQL] 4. 그룹 함수를 이용한 데이터 집계 (0) | 2023.05.10 |
[SQL] 3. 함수 - 2 (0) | 2023.05.09 |
[SQL] 3. 함수 - 1 (0) | 2023.05.09 |
[SQL] 1. 데이터베이스 소개 (0) | 2023.05.08 |