COOKBOOK
책 내용중 몰랐던 부분만 따로 정리
1장: 레코드 검색
테이블에서 n개의 무작위 레코드 반환하기
1
2
3
4
| SELECT ENAME, JOB
FROM EMP
ORDER BY RAND()
LIMIT 5;
|
null을 실젯값으로 변환하기
1
2
| SELECT COALESCE(COMM, 0)
FROM EMP;
|
패턴 검색하기
이름에 I가 있거나 끝에 ER로 끝나는 이름만 반환
1
2
3
4
| SELECT ENUM, JOB
FROM EMP
WHERE ENAME LIKE '%i%'
OR JOB LIKE '%ER';
|
2장: 쿼리 결과 정렬
지정한 순서대로 쿼리 결과 반환하기
ORDER BY [숫자] : 숫자는 컬럼순서 번호를 뜻하고 그 컬럼으로 정렬을 한다.
1
2
3
| SELECT *
FROM EMP
ORDER BY 3;
|
다중 필드로 정렬하기
ORDER BY 특징
- 우선순위는 왼쪽에서 오른쪽이다.
- GROUP BY, DISTNCT 를 사용할 때는 SELECT 목록에 없는 열 기준으로 정렬이 불가능하다.
1
2
3
| SELECT *
FROM EMP
ORDER BY DEPTNO, SAL;
|
정렬할 때 NULL 처리하기
1
2
3
4
| SELECT TITLE, GENRE, STAR
FROM (SELECT TITLE, GENRE, STAR, IF(STAR IS NULL, 0, 1) AS IS_NULL
FROM VIDEOTBL) X
ORDER BY IS_NULL DESC;
|
행 집합을 다른 행 위에 추가하기 (UNION ALL)
1
2
3
4
5
6
7
| SELECT DEPTNO, DEPTNAME
FROM EMP
UNION ALL
SELECT '---------', NULL
UNION ALL
SELECT DEPTNO, DNAME
FROM DEPT;
|
3장: 다중 테이블 작업
4장: 삽입, 갱신, 삭제
중복 레코드 삭제하기
TEST라는 테이블에 VALUE가 겹칠경우 하나 빼고 모두 삭제
1
2
3
| DELETE
FROM TEST
WHERE ID NOT IN (SELECT MIN(ID) FROM (SELECT ID, VALUE FROM TEST) AS T GROUP BY VALUE);
|
5장: 메타 데이터 쿼리
스키마의 테이블 목록 보기
1
2
3
| SELECT TABLE_NAME
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'SMEAGOL';
|
테이블의 열 나열하기
1
2
3
4
| SELECT COLUMN_NAME, DATA_TYPE, ORDINAL_POSITION
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'MYDB'
AND TABLE_NAME = 'EMP';
|
테이블의 제약조건 나열하기
테이블에 어떤 제약조건이 있는지 확인할 수 있다.
1
2
3
4
5
6
7
8
| SELECT *
FROM information_schema.TABLE_CONSTRAINTS A,
information_schema.KEY_COLUMN_USAGE B
WHERE A.TABLE_NAME = 'EMP'
AND A.TABLE_SCHEMA = 'MYDB'
AND A.TABLE_SCHEMA = B.TABLE_SCHEMA
AND A.TABLE_NAME = B.TABLE_NAME
AND A.CONSTRAINT_NAME = B.COLUMN_NAME;
|
6장: 문자열 작업
문자열에 따옴표 포함하기
따옴표를 표현할려면 ‘‘라고 작성하면 된다.
- 기본적으로 ‘‘(공백)을 입력하면 null로 처리하는 ORACLE과 달리 MySQL은 null은 null대로, ‘‘(공백)은 공백대로 따로 처리한다.
1
| SELECT 'APPLES CORE', 'APPLE''S CORE', CASE WHEN '' IS NULL THEN 0 ELSE 1 END;
|
문자열에서 특정 문자의 발생 횟수 계산하기
1
| SELECT (LENGTH('A,B,C') - LENGTH(REPLACE('A,B,C', ',', ''))) / LENGTH(',') AS CNT;
|
문자열에서 원하지 않는 문자 제거하기
1
2
| SELECT last_name, REPLACE(last_name, 'A', '')
FROM employees;
|
테이블 행으로 구분된 목록 만들기
1
2
3
| SELECT department_id, GROUP_CONCAT(last_name ORDER BY department_id SEPARATOR ',')
FROM employees
GROUP BY department_id;
|
구분된 데이터를 다중값 IN 목록으로 변환하기
###