본문 바로가기

데이터베이스

SQL 문법 정리 #1

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