개발자 끄적끄적
SQL 테이블, 무결성 제약, case 본문
TABLE
- 테이블 목록 확인 : use 명령을 사용하여 database를 먼저 선택한 후 SHOW TABLES로 확인
- 테이블 구조 확인 : DESC테이블명
- 테이블 변경 : RENAME TABLE 원본 테이블명 TO 변경 테이블명
데이터 유형
1. 숫자형
2. 문자형
- TEXT열에는 INDEX를 사용할 수 없다
- TEXT열에는 DEFAULT속성을 사용할 수 없다
3. 날짜형
- DATETIME : 5BYTE
- TIMESTEP : 4BYTE
테이블 생성
- CREATE TABLE 테이블명(컬럼명1 타입(크기)제약조건, ...)
ex)학번(mid), 성명(irum), 연락처(phone)을 갖는 student테이블 생성
create table student(
mid varchar(10),
irum varchar(50),
phone varchar(20)
);
테이블 제거
- DROP TABLE 테이블명;
테이블 복사
- CREATE TABLE 테이블명 AS SELECT ...;
- SELECT절에 의해 선택된 컬럼이나 데이터를 사용하여 새로운 테이블을 생성할 수 있다
테이블명 변경
- RENAME TABLE 원본 TO 변경
테이블 구조 변경
[컬럼추가]
- ALTER TABLE 테이블명 ADD [COLUMN] 컬럼명 컬럼유형[제약조건];
[컬럼 삭제]
- ALTER TABLE 테이블명 DROP [COLUMN] 필드명;
[컬럼 유형 변경]
- ALTER TABLE 테이블명 MODIFY[COLUMN] 필드명;
[필드명 수정]
- ALTER TABLE 테이블명 CHANGE[COLUMN] 이전 필드명 수정필드명 데이터 유형[제약조건];
무결성 제약조건의 종류
제약 조건명
1. PRIMARY KEY(PK)
- NOT NULL, UNIQUE의 특성을 갖고 있고 테이블당 하나만 존재
- 둘 이상의 컬럼을 묶어 하나의 PK를 선언할 수 있다
- 자동 INDEX가 만들어진다
2. FOREIGN KEY(FK)
- 왜래키
- 자식테이블의 데이터가 존재했을 때 부모 테이블의 데이터가 삭제되거나
수정되는 것을 예방한다
- ON CASCASE UPDATE나 ON CASCASE DELETE 옵션을 사용하여 부모 테이블의 데이터가 삭제되거나
수정되었을 때 자식 테이블의 데이터를 삭제하거나 수정할 수 있게 한다
- 부모 테이블의 컬럼은 PK나 UNIQUE제약 조건이 설정되어 있어야한다
3. NOT NULL
- NULL값을 허용하지 않는다
- 컬럼 생성 시 기본이 NULL이기 때문에 컬럼에 제약 조건을 수정할 때
ADD를 사용하지 않고 MODIFY를 사용한다
4. UNIQUE
- 하나의 NULL은 허용하고, 중복되지 않는 데이터를 유지하기 위해 사용된다
- 자동으로 INDEX가 만들어진다
5. CHECK
- 허용되는 값을 일정하게 지정하거나 범위를 줄 수 있다
- MariaDB 10, Mysql8 버전 이상부터 지원
6. DEFAULT
- 입력되는 값이 NULL값일 때 특정값이 입력값이 되도록 설정할 수 있다
- 제약조건 수정할 때 ADD를 사용하지 않고 MODIFY를 사용한다
제약조건 확인
- 데이터 베이스명을 information_schema로 변경한 뒤 작업한다
-> USE information_schema
show tables
SELECT *FROM table_constraints
with rollup : group by된 그룹별 소계를 다시 계산해준다
ex)oderNumber별 합계와 전체 합계
select orderNumber, sum(priceEach) from orderdetails group by orderNumber with rollup;
- 전체를 기준으로 합계를 계산해준다
ex)
select ordernumber, orderLineNumber, sum(priceEach)
from orderdetails
group by orderNumber(1차 그룹 중), orderLineNmuber(2차 그룹)
with rollup;
<ordernumber> <orderLineNumber> <sum(priceEach)>
100 1
100 2
100 3
200 2
200 3
300 1
CASE문
- SELECT절에서 CASE문을 사용할 수 있는데,
이는 다른 언어에서 SWITCH문과 매우 유사하게 사용할 수 있는 제어문
<CASE문 [기본구조] type1>
CASE
WHEN 조건1 THEN 처리1
WHEN 조건2 THEN 처리2
...
[ELSE 기타 처리]
END AS 닉네임
*case문에 컬럼명이 없으면 when절의 조건1, 조건2에서 범위를 줄 수 있다
<CASE문 [기본구조]type2>
CASE 컬럼명
WHEN 상수1 THEN 처리1
WHEN 상수2 THEN 처리2
...
[ELSE 기타 처리]
END AS 닉네임
*case문에 컬럼명이 있으면 when절에서는 상수만 사용할 수 있다
조건절에서의 like연산자
- where name like '_' => name이 한 글자인 데이터
- '_(언더바 한 개)' : 한 자리 데이터
- where name like '__' => name이 두 글자인 데이터
- '__(언더바 두 개)' : 두 자리 데이터
- where phone like '0_0' => phone 010(O), 070(O), 011(X)
- where name like '김%' => name이 '김'으로 시작하는(%는 '없다'도 포함)
- where name like '%광%' => name에 앞뒤중간순서 상관없이 문자 '광'을 포함
'MySQL' 카테고리의 다른 글
join, like, 정규화 (0) | 2023.03.08 |
---|---|
SQL 기본 구조, rollup (0) | 2023.03.08 |
MySQL 설치 및 cmd (0) | 2023.03.04 |