http://www.tcpschool.com/mysql/mysql_php_select
https://ko.wikipedia.org/wiki/SQL
다중 정렬 / 여러 기준으로 정렬 (order by)
SELECT ID_, NAME_, DATETIME FROM TABLE_NAME
ORDER BY NAME_ ASC, DATETIME DESC;
상위 N개 레코드
//mySQL
SELECT NAME_
FROM TABLE_NAME
ORDER BY DATETIME
LIMIT 1;
//Oracle
SELECT NAME_
FROM (SELECT * FROM TABLE_NAME ORDER BY DATETIME)
WHERE rownum = 1;
최대값(MAX), 최소값(MIN), 총 개수(COUNT)
SELECT MAX(*) FROM TABLE_NAME;
SELECT MIN(*) FROM TABLE_NAME;
SELECT COUNT(*) FROM TABLE_NAME;
중복 제거(DISTINCT), NULL 제외
SELECT COUNT(DISTINCT NAME_)FROM TABLE_NAME
WHERE NAME_ IS NOT NULL
각 각의 개수, 정렬
SELECT _TYPE, COUNT(_TYPE)
FROM TABLE_NAME
GROUP BY _TYPE
ORDER BY _TYPE;
두번 이상 쓰인 이름, 이름 없으면 집계에서 제외
SELECT _NAME, COUNT(_NAME) FROM TABLE_NAME
WHERE _NAME IS NOT NULL
GROUP BY _NAME
HAVING COUNT(_NAME) >= 2
ORDER BY _NAME;
//GROUP으로 묶은 후, GROUP에 조건을 줄때는 WHERE절이 아니라 HAVING절 사용
시간대별 건 수 조회
//MYSQL
SELECT
HOUR(DATETIME) AS HOUR,
COUNT(DATETIME) COUNT
FROM TABLE_NAME
GROUP BY HOUR
HAVING HOUR >= 9 AND HOUR <= 19
ORDER BY HOUR
//ORACLE
SELECT TO_CHAR(DATETIME,'HH24') AS HOUR, COUNT(*) AS COUNT
FROM TABLE_NAME WHERE TO_CHAR(DATETIME,'HH24')
BETWEEN 09 AND 19
GROUP BY TO_CHAR(DATETIME,'HH24')
ORDER BY TO_CHAR(DATETIME,'HH24');
//09:00 ~ 19:00 시간 대별 건수 조회
(MYSQL) - 날짜 데이터에서 일부만 추출
- YEAR : 연도 추출
- MONTH : 월 추출
- DAY : 일 추출 (DAYOFMONTH와 같은 함수)
- HOUR : 시 추출
- MINUTE : 분 추출
- SECOND : 초 추출
(ORACLE)
- TO_CHAR('컬럼명, '포맷형식') : 날짜, 숫자 등의 값을 문자열로 변환
포맷형식
- 'YYYY' : 연도
- 'MM' : 월
- 'DD' : 날짜
- 'HH24' : 24시간
- 'HH'. : 12시간
- 'YYYY-MM-DD'
- 'MI' : 분
- 'SS' : 초
변수(SET), 프로시져 종류 후에도 유지(@) 대입연산자(:=)
//MySQL
SET @HOUR = -1;
SELECT (@HOUR := @HOUR +1) AS HOUR,
(SELECT COUNT(*) FROM TABLE WHERE HOUR(DATETIME) = @HOUR) AS COUNT
FROM TABLE
WHERE @HOUR < 23;
IS NULL
//MYSQL
SELECT _ID FROM TABLE_NAME
WHERE ISNULL(_NAME)
ORDER BY _ID ASC;
SELECT _ID FROM TABLE_NAME
WHERE NAME IS NULL
ORDER BY _ID ASC;
//ORACLE
SELECT _ID FROM TABLE_NAME
WHERE _NAME is null
ORDER BY _ID ASC;
IS NOT NULL
//MYSQL, ORACLE
SELECT _ID
FROM TABLE_NAME
WHERE _NAME IS NOT NULL;
IFNULL, NVL
//MYSQL
SELECT _ID, IFNULL(NAME,'No name')
FROM TABLE_NAME;
//ORACLE
SELECT _ID, NVL(NAME,'No name')
FROM TABLE_NAME;
문자열 찾기
//MYSQL
SELECT * FROM TABLE_NAME
WHERE _NAME='aa' || _NAME='bb';
//ORACLE
SELECT * FROM TABLE_NAME
WHERE _NAME IN ('aa','bb');
문자열 패턴이 일치하는지 검색(LIKE) , 대문자로 변환(UPPER), 소문자로 변환(LOWER)
//MYSQL
SELECT _NAME FROM TABLE_NAME
WHERE _NAME LIKE("%EL%");
//ORACLE
SELECT _NAME FROM TABLE_NAME
WHERE LOWER(_NAME) LIKE '%el%'
SELECT IF문
//MYSQL
SELECT IF(조건, '참', '거짓') FROM TABLE_NAME;
view
SELECT한 결과를 가상 테이블에 저장한 것, 물리적으로 존재하지는 않지만 사용자에게는 있는 것처럼 보인다
CREATE VIEW v1
AS
SELECT id, name, age
FROM TableA AS a
JOIN TableB AS b
USING(id)
WHERE address ='korea';
'DB > 1' 카테고리의 다른 글
[MySQL] MySQL 정리 (0) | 2022.03.18 |
---|---|
[h2] h2 database 설치 설정 (0) | 2022.02.11 |
[MySQL] 랭킹 순서 매기기 RANK, GROUP BY, ORDER BY (0) | 2020.06.01 |
개념적 데이터베이스 모델링 연습 (3) | 2020.03.10 |
[SQLD] 정규화 및 반정규화 (0) | 2020.03.10 |