728x90
Real MySQL 8.0을 읽기전에 SQL 을 정리해보겠다.
쿼리들을 쭉 나열할건데 보는 것만으로도 큰 도움이 될 것 같다.
/* SELECT 관련 */
SELECT name, addr FROM user WHERE addr IN ('Seoul' , 'Busan');
SELECT name, height FROM user WHERE name like '김%' ; --찾고싶은 문자열 수를 모를때
SELECT name, height FROM user WHERE name like '김_' ; --찾고싶은 문자열 수를 알때
-- ANY 와 ALL
SELECT name, height FROM user WHERE height >=
ANY(SELECT height FROM user WHERE addr = 'Seoul');
SELECT name, height FROM user WHERE height >=
ALL(SELECT height FROM user WHERE addr = 'Seoul');
-- ORDER BY 절은 제일 뒤로 와야한다. 성능을 떨어뜨릴 수 있으므로 가능하면 사용하지 않도록 한다
SELECT name FROM user ORDER BY DATE DESC, name ASC; //기본값은 ASC
--집계함수
SELECT SUM(price * amount) AS '총 구매 개수' FROM buy
GROUP BY userID HAVING SUM (price*amount) > 1000;
-- 그룹 당 minimum age 조회
SELECT MIN(S.age) FROM student S GROUP BY S.schoolNumber ;
--데이터 변환 함수
SELECT CAST( AVG(amount) AS singed integer) AS average_integer FROM buy;
SELECT CONVERT( AVG(amount), singed integer) AS average_integer FROM buy;
--알아두기
SELECT CONCAT(100, '200') ~~; --정수가 문자로 변환되어서 처리
--Bit크기, 문자의 개수, 할당된 Byte수
SELECT BIT_LENGTH(’abc’), CHAR_LENGTH(’abc’), LENGTH(’abc’);
--구분자와 함께 문자열을 이어준다
SELECT CONCAT_WS( ’/’, ’2022’, ’01’, ’01’ );
--LEFT 와 RIGHT
SELECT LEFT(’abcdefghi’ , 3); //‘abc’를 반환한다
SELECT RIGHT(’abcdefghi’ , 3); //‘ghi’를 반환한다
--순위 함수
--ROW_NUMBER
SELECT ROW_NUMBER()
OVER(PARTITION BY addr ORDER BY height DESC, name ASC)
“키큰 순위”, name, addr, height
FROMuserTBL; --키가 큰 순으로 순위를 정한다 (addr별로 순위를 준다, 키가 같은 가나다순 (name asc))
--DENSE_RANK
SELECT DENSE_RANK()
OVER(ORDER BY height DESC)
“키큰순위”, name, addr, height FROM userTBL; --키가 같을 때 같은 등수로 처리
--하지만 위의 경우, 2등이 두명이면 다음 등수는 3등이다. 4등으로 설정하려면?
SELECT RANK()
OVER(ORDER BY height DESC)
“키큰순위”, name, addr, height FROM userTBL;
--전체 인원을 키 순서대로 세운 후, 몇개의 그룹으로 분할 하고 싶을 때
SELECT NTILE(2)
OVER(ORDER BY height DESC)
“반번호”,name, addr, height FROM userTBL;
--분석 함수
SELECT height - (FIRST_VALUE (height)); --가장 키가 큰 사람과의 차이
SELECT height - (LEAD (height,1 ))
AS ~~ ; --LEAD(height,1) : height 열을 사용하고 다음 1번째행을 비교대상으로 삼는다.
/* CREATE 관련 & 테이블 삭제 */
--테이블 복사
CREATE TABLE buy2 (SELECT * FROM buy);
--테이블 삭제
DELETE FROM big; --트랜잭션 로그를 기록함 Affected rows가 표시된다 —> 성능이 나쁘다
DROP TABLE big; --테이블 자체를 삭제
TRUNCATE TABLE big; --결과는 DELETE랑 동일하지만 트랜잭션 로그를 기록하지 않는다
--테이블 자체가 필요없을 때는 DROP으로 삭제하고, 테이블의 구조는 남겨놓고 싶다면 TRUNCATE 로 삭제하자
조인에 관련해서는 따로 글을 만들 예정이다
728x90
'데이터베이스' 카테고리의 다른 글
[DB] 트랜잭션 격리수준 Isolation Level (2) | 2024.10.14 |
---|---|
[MySQL] 인덱스 (0) | 2024.06.03 |
MySQL 리눅스와 터미널연결 및 MySQL 설치 (0) | 2023.10.27 |
DB (MySQL) 공부시작 (1) | 2023.10.26 |