- 테이블의 각 레코드를 식별
- 중복되지 않은 고유값을 포함
- NULL 값을 포함할 수 없음
- 테이블 당 하나의 기본키를 가짐
CREATE TABLE tablename
(
column1 datatype NOT NULL,
column2 datatype NOT NULL,
...
CONSTRAINT constraint_name
PRIMARY KEY (column1, column2 ...)
);
CREATE TABLE person
(
pid int NOT NULL,
name varchar(16),
age int,
sex char,
PRIMARY KEY (pid)
);
CREATE TABLE animal
(
name varchar(16) NOT NULL,
type varchar(16) NOT NULL,
age int,
PRIMARY KEY (name, type)
);
ALTER TABLE tablename
DROP PRIMARY KEY;
ALTER TABLE tablename
ADD PRIMARY KEY (column1, column2, ...);
ALTER TABLE person
ADD PRIMARY KEY (id);
ALTER TABLE animal
ADD CONSTRAINT PK_animal PRIMARY KEY (name, type);
한 테이블을 다른 테이블과 연결해주는 역할이며, 참조되는 테이블의 항목은 그 테이블의 기본키 (혹은 단일값)
CREATE TABLE tablename
(
column1 datatype NOT NULL,
column2 datatype NOT NULL,
column3 datatype,
column4 datatype
...
CONSTRAINT constraint_name
PRIMARY KEY (column1, column2, ...),
CONSTRAINT constraint_name
FOREIGN KEY (column3, column4, ...) REFERENCES REF_tablename(REF_collumn)
);
CREATE TABLE orders
(
oid int not null,
order_no varchar(16),
pid int,
PRIMARY KEY (oid),
CONSTRAINT FK_person FOREIGN KEY (pid) REFERENCES person(pid)
);
create table에서 foreign key 지정하는 경우 constraint 생략가능
CREATE TABLE job
(
jid int not null,
name varchar(16),
pid int,
PRIMARY KEY (jid),
FOREIGN KEY (pid) REFERENCES person(pid)
);
SHOW CREATE TABLE tablename;
ALTER TABLE tablename
DROP FOREIGN KEY FK_constraint;
테이블 생성 이후 지정
ALTER TABLE tablename
ADD FOREIGN KEY (column) REFERENCES REF_tablename(REF_column)
여러 칼럼 혹은 테이블 전체 칼럼으로부터 하나의 결과값을 반환하는 함수
총 갯수를 계산해 주는 함수
SELECT COUNT(column)
FROM tablename
WHERE condition;
-- police_station 테이블의 데이터 count
SELECT COUNT(*) FROM police_ststion;
-- crime_status 테이블에서 경철서 count
SELECT COUNT(DISTINCT police_station) FROM crime_status;
-- crime_type 몇 가지?
SELECT COUNT(DISTINCT crime_type) FROM crime_status;
숫자 column의 합계 계산
SELECT SUM(column)
FROM tablename
WHERE condition;
-- 범죄 총 발생건수
SELECT SUM(case_number) FROM crime_status WHERE status_type='발생';
숫자 column의 평균 계산
SELECT AVG(column)
FROM tablename
WHERE condition;
-- 평균 폭력 검거 건수
SELECT AVG(case_number)
FROM crime_status LIKE '폭력' AND status_type='검거'
숫자 column 중 가장 작은 값
SELECT MIN(column)
FROM table
WHERE condition;
-- 강도 발생 건수가 가장 적은 경우
SELECT MIN(case_number)
FROM crime_status
WHERE crime_type LIKE '강도' AND status_type='발생';
숫자 column 중 가장 큰 값
SELECT MAX(column)
FROM table
WHERE condition;
그룹화하여 데이터를 조회
SELECT column1, column2, ...
FROM table
WHERE condition
GROUP BY column1, column2, ...
ORDER BY column1, column2, ...;
-- 경찰서 별로 총 발생 범죄 건수를 검색
SELECT police_station, sum(case_number) 발생건수
FROM crime_status
WHERE status_type LIKE '발생'
GROUP BY police_station
ORDER BY 발생건수 DESC
LIMIT 5;
조건에 집계함수가 포함되는 경우 WHERE 대신 HAVING 사용
SELECT column1, column2, ...
FROM table
WHERE condition
GROUP BY column1, column1, ...
HAVING condition (Aggregate Functions)
ORDER BY column1, column2, ...
-- 경찰서 별로 발생한 폭력과 절도의 범죄 건수 평균이 2000 이상인 경우 검색
SELECT police_station, AVG(case_number)
FROM crime_station
WHERE (crime_type LIKE '폭력' OR crime_type LIKE '절도')
AND status_type LIKE '발생'
GROUP BY police_station
HAVING AVG(case_number) >= 2000;
입력값을 기준으로 단일 값을 반환
영문을 대문자로 반환하는 함수
SELECT UCASE(string);
SELECT UCASE(menu), price FROM sandwich WHERE price>15;
영문을 소문자로 반환하는 함수
SELECT LCASE(string);
문자열 부분 반환
SELECT MID(string, start_position, length);
문자열의 길이 반환
SELECT LENGTH(string);
지정한 자리에서 숫자 반올림
SELECT ROUND(number, decimals_place)
-- number: 반올림할 대상, decimals: 반올림할 소수점 위치(optional)
현재 날짜 및 시간 반환
SELECT NOW()
숫자를 천단위 콤마가 있는 형식으로 반환
SELECT FORMAT(number, decimal_place)
-- number: 포맷 적용 대상 문자/숫자, decimals: 표시할 소수점 위치