[SQL] Stored Procedure 총 정리 + 변수 사용법 정리
·
DataBase/SQL
고객 대응 팀에 일하고 있어서 하루 죙일 고객정보를 SELECT 해야하는 상황이라고 가정하자.고객 센터 문의를 답변하기 위해 고객 정보를 조회 하기 위하여 SELECT * FROM 고객 이름 WHERE ~ 어쩌구와 같은 SQL문을 하루종일 타이핑하고 앉아 있는 거지 효율을 줄이기 위해 등장한 기능이 바로 저장 프로시저 기능이다.Stored Procedure 란재사용성이 높은 코드를 하나로 묶어 덩어리로 관리하는 기능을 Stored Procedure 라고 한다.먼저 프로시저를 만드는 법을 보자. 코드를 보면 이해가 쉽다DELIMITER $$$$CREATE PROCEDURE DB명.프로시저명BEGIN SQL문 1; SQL문 2;END $$DELIMITER ;// 저는 이렇게 해봄DELIMITER $$..
[SQL] TABLE 대신 VIEW를 쓰는 이유는 뭘까?
·
DataBase/SQL
VIEW는 언제 쓸까? 그리고 왜 그냥 테이블 안쓰고 뷰를 쓰는걸까?View대학교 교재 보면 그냥 가상의 뷰를 생성하여 테이블 역할을 어쩌구 저쩌구 하는데, 그냥 쉽게 생각해서 내가 JOIN한 두 테이블을 자주 사용할 것 같을 때 사용하는 이유가 큰 것 같다.계속 FROM A INNER JOIN B ON ~~ 이런 문법을 쓰기 싫을 때 그냥 뷰에 조인해둔 테이블을 두고 사용하면 편하다.예를 들어 sales와 product 테이블을 조인하여 자주 쓸 일이 있다고 가정하자.뷰를 생성하는 문법은 다음과 같다.CREATE VIEW 뷰이름 AS SELECT 컬럼1, 컬럼2, ... 컬럼nFROM 테이블;// 그래서 저는 이렇게 해봄CREATE VIEW temp_view asSELECT sales.id, 고객번호,..
[SQL] 테이블을 안전하게 관리하는 기초 - Constraints 제약 걸기
·
DataBase/SQL
컬럼을 생성할 때, 테이블을 안전한게 관리하고 유지하기 우해 제약 조건을 걸어둘 수 있다.대표적인 예시는 다음과 같다.1. 이 컬럼은 NOT NULL 이어야 한다2. 이 컬럼의 데이터는 중복되면 안된다 -> 데이터가 UNIQUE 해야한다.3. 음수는 들어오면 안되고 무조건 양수만 들어오는지 CHECK4. 현재 컬럼을 PK 로 지정해야한다.빈 데이터 금지 - NOT NULLCREATE TABLE new_table ( id INT NOT NULL, 이름 VARCHAR(100) NOT NULL, 나이 INT)이렇게 NOT NULL 옵션을 붙이게 되면, id와 이름은 비어 있을 수 없다. 까먹고 데이터를 입력하지 않으면 커밋이 불가하다. 중복 값 없어야 함 - UNIQUECREATE TABLE ..
[SQL] GUI에 의존하지 말고 DDL 직접 씁시다
·
DataBase/SQL
Dbeaver이나 MySql 워크 밴치처럼 요새는 GUI가 잘 되어 있어서 사실 딱히 DDL 외울 필욘 없지만, 우리는 폼생 폼사이고, 데이터 베이스 개고수가 되어야 하니까 DDL에 대해 알아보자.데이터베이스 생성, 삭제 - create / dropCREATE DATABASE 데이터베이스이름DROP DATABASE 데이터베이스이름생성은 Create, 삭제는 Drop 명령어르 쓰면 된다.참고로 아직도 자바 버릇 때문에 new database, new column 이런 식으로 적는데, 이건 어쩔 수 없이 머슬 메모리를 키우는 수 밖에..테이블 생성, 삭제마지막 컬럼 제외 쉼표로 구분하여 컬럼명 + 자료 타입을 입력해주면 된다.CREATE TABLE champ ( id INT, champion_na..
[SQL] IF / CASE 조건문
·
DataBase/SQL
프로그래밍 언어의 꽃 조건문도 SQL에서 사용할 수 있다.대표적으로 IF 와 CASE 문이 있는데, 빠르게 복습 슝슝해보자.만약에 말이에요 - IF()IF(조건, 참이면 값, 거짓이면 값)요것도 간단한 예제를 만들어보자.IF(1 = 1, 'siuu' , '호무룩') 1 = 1 은 참이니까 시우가 출력된다. 1 = 2와 같은 거짓 조건을 넣으면 다음과 같이 출력된다. 챔피언 테이블에 적용해보자만약 챔피언이 탱커라면 탱커를 출력하고, 아니면 겁쟁이를 출력하자SELECT name, if(`role` = 'tank', '탱커', '겁쟁이') FROM LOL_CHAMPIONS_SAMPLE ;이런식으로 if() 문을 사용할 수 있다. 조건이 3개 이상이라면 - CASE()자바에서 switch 문과 비슷하다.단순하게..
[SQL] 실습용 리그오브레전드 챔피언 테이블 공유 [수정]
·
DataBase/SQL
블로그 작성 + 실습용으로 사용할 임의의 챔피언 데이터를 만들었다.컬럼의 구성은 챔피언명 , 역할군, 출신지역, 성별로 구성되어 있다. 1정규형을 만족하지 않는 데이터들이 존재하는데, 이건 알잘딱 정규화 해보자 ~ 업데이트날짜 타입 실습을 위해 챔피언 출시 날짜를 추가해서 조금 업데이트 햇슴 !
[SQL] 의미 있는 통계를 얻고 싶다면 GROUP BY
·
DataBase/SQL
group by절은 데이터에서 의미를 찾고 싶을 때 쓰는 문법이다.select * 를 통해 전체 데이터를 기준으로 계속 검색하면 성능이 똥구려지게 된다.즉, 우리는 컬럼 내의 중복되는 데이터들을 그룹지어 필터링하게 되면, 성능도 좋아지고 의미 있는 통계를 낼 수 있게 된다.group by 써보기먼저 출신지로 그룹화를 해보자.SELECT region, count(region) FROM LOL_CHAMPIONS_SAMPLE GROUP BY region;출신지별로 몇명의 챔피언이 존재하는지 그룹으로 출력할 수 있게 되었다. (일종의 DISTINCT 같다)이렇게 group by 는 특정 컬럼에 중복되는 값들이 존재한다면 그 값들을 그룹지어 집계함수를 통해 의미 있는 통계를 획득할 수 있다 !그리고 당연히 gro..
[SQL] 서브쿼리 쓰는 법
·
DataBase/SQL
서브쿼리란 쉽게 생각해서 SELECT 문법 안에 SELECT 문법을 한번 더 쓰는 것이다.SQLD 딸때는 진짜 이거때문에 너무 고생했는데, 쉽게 공부하니 사실 생각보다 크게 별거 없었다. 이번에도 롤로 예제를 만들어보자만약 다음과 같은 요구 사항이 있다.items 테이블에서, 아이템의 평균 가격보다 비싼 아이템만 출력하고 싶다.우리는 원래대로라면 두가지 쿼리를 작성해야한다.// 아이템 평균 가격 구하기SELECT AVG(item_price) FROM items;// 위 쿼리의 결과 값이 1000 이라고 가정하자// 위 데이터를 이용하여 아이템 평균 가격 1000;이 쿼리의 단점은 첫번째 쿼리의 실행결과를 그대로 복붙 하여서 두번째 쿼리를 작성해야한다는 점이다.서브쿼리는 쉽게 생각해 두 쿼리를 합친다고 ..
[SQL] 결과 컬럼 사칙 연산 + 문자 함수
·
DataBase/SQL
이번에는 빠르게 쿼리로 다 확인해보자. 컬럼 출력시 사칙연산 후 출력하기라이엇이 장난으로 만우절에 모든 아이템을 두배 비싸게 판매한다고 가정하자.다음과 같이 쿼리를 작성할 수 있다.SELECT item_price * 2 AS 두배비싸니까두배로쌘가요 FROM items;SELECT item_price + 2 AS 2초만기다리면모아지는군요 FROM items;SELECT item_price - 2 AS 왜2원덜받으세요 FROM items;SELECT item_price / 2 AS 50프로세일 FROM items;기존 아이템 가격에 2배 비싼 가격으로 출력된다. (출력만 2배가 될 뿐이지, 원본 데이터엔 지장 없음)또한 모든 사칙연산을 적용할 수 있다.문자 함수이번 포스팅에서 중요한건 문자함수이다. 문자 합..