<check constraint> : column 값의 가능 domain 지정 (다음 장에서 설명>
CREATE TABLE LIKE
CREATE TABLE <table name> <like_table_clause>
<like_table_clause> := LIKE <table_name> [WITH DATA]
Ex) CREATE TABLE customer_backup LIKE customer WITH DATA;
ALTER TABLE
DROP TABLE
테이블 데이터 및 catalog 삭제
DROP TABLE <table_name>
3. SELECT: 데이터 조회
SELECT
테이블에서 원하는 데이터를 검색하는 SQL
Syntax
SELECT [DISTINCT] {* | <column_name>, ...} FROM ;
Example
SELECT DISTINCT dept_name from instructor;
DISTINCT : 결과 테이블에서 중복된 레코드를 제거하는 키워드
SELECT clause 는 산술식 (arithmetic expression) 을 포함 가능
+, -, * and /
SELECT ID, name, salary/12 from employee;
SELECT with WHERE
테이블에서 조건을 맞는 데이터만 검색하기 위해 WHERE clause 이용
Syntax
SELECT [DISTINCT] {* | <column_name>, ...} FROM <table list> [ WHERE condition ];
Condition은 비교 연산자 (=, <>, <, >, <= , =>) 와 논리연산자 (AND, OR, NOT)
Example
SELECT name from employee WHERE dept_name = ‘SALES’ and salary > 100000;
LIKE keyword
문자열 컬럼인 경우 부분적인 매칭으로 조건 검색 가능
% : 0개 이상의 문자
_ : 1개의 문자
SELECT * from employee where name like ‘이%’;
SELECT * from employee where name like ‘이정_’;
NULL Value
null 은 empty 가 아닌 unknown
null 값과 산술 연산 및 비교 연산 결과는 null
5 + null returns null
null > 5 returns null
null = null returns null
null 과 논리 연산 결과
OR : (null OR true) = true, (null or false) = null, (null or null) = null
AND : (true AND null) = null, (false AND null) = false, (null and null) = null
NOT : (NOT null) = null
null 값을 가진 row을 찾기 위한 조건식 – IS NULL
SELECT id, name FROM customer WHERE aga IS NULL;
ORDER BY
SELECT 의 검색 결과를 정렬하기 위해 ORDER BY 키워드 사용
Syntax
SELECT [DISTINCT] {* | <column_name>, ...} FROM <table list> [ WHERE condition ] [ ORDER BY <column_name>, ... [ASC | DESC] ];
ASC: 오름 차순 정렬 (default), DESC: 내림 차순 정렬
Example
SELECT id, name, age, address FROM customer ORDER BY age DESC;
SELECT id, name, dept_name, salary FROM employee ORDER BY salary;
SELECT id, product, quantity, order_date FROM sales_orders ORDER BY order_date ASC, quantity DESC;
Aggregation Function
특정 컬럼의 값을 통계적으로 계산한 결과를 보여주는 SQL 함수
COUNT : 컬럼 값의 개수
MAX : 컬럼 값의 최대값
MIN : 컬럼 값의 최소값
SUM : 컬럼 값의 합계
AVG : 컬럼 값의 평균
COUNT, MAX, MIN 은 LOB 타입을 제외한 모든 타입에서 사용 가능 SUM, AVG 는 숫자 데이터만 가능
EX)
SELECT sum(salary) FROM employee WHERE dept_name = ‘SALES’;
SELECT count(distinct id) FROM sales_orders WHERE product = ‘computer’;
Null value in aggregation function
SELECT sum (salary) FROM employee;
만약 컬럼 값이 null이면 합을 계산할 때 무시
만약 컬럼 값이 모두 null이면 null이 출력된다
MAX, MIN, SUM, AVG 경우 null이 아닌 값으로만 계산
모두 null인 경우 null을 리턴
COUNT : null이 아닌 값의 개수를 출력
컬럼이 모두 null 인 경우 0 리턴
테이블에 레코드가 없는 경우
sum, avg, min, max : return null
count : return 0
GROUP BY
테이블에서 특정 컬럼의 값이 같은 rows를 모아 그룹을 만들고, 그룹별로 검색하기 위해 사용되는 keyword
그룹에 대한 조건을 추가하려면 HAVING 키워드를 이용
Where 조건 : 레코드를 grouping 하기 전에 조건을 검색
Having 조건 : 레코드들을 grouping 후에 그룹에 대한 조건을 검색
Syntax
SELECT [DISTINCT] {* | <column_name>, ...} FROM <table list> [ WHERE condition ] [ GROUP BY <column_name_list> [ HAVING condition ] ] [ ORDER BY <column_name_list> [ASC | DESC] ]
Aggregation function을 제외한 SELECT문의 컬럼은 GROUP BY 리스트에 포함된 컬럼들만 가능
SELECT dept_name, ID, avg (salary) from employee group by dept_name;
Return error : SELECT list is not in GROUP BY clause and contains nonaggregated column
Example
SELECT dept_name, avg (salary) FROM employee GROUP BY dept_name;
SELECT dept_name, avg (salary) FROM employee GROUP BY dept_name HAVING avg(salary) > 50000000;
SELECT company_name, count(product_name) as number_of_product, max(price) as highest_price FROM product GROUP BY company_name;
SELECT company_name, count(product_name) as number_of_product, max(price) as highest_price FROM product GROUP BY company_name HAVING COUNT(product_name) >= 3;