[SQL] 테이블을 안전하게 관리하는 기초 - Constraints 제약 걸기
·
DataBase/MySQL
컬럼을 생성할 때, 테이블을 안전한게 관리하고 유지하기 우해 제약 조건을 걸어둘 수 있다.대표적인 예시는 다음과 같다.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/MySQL
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/MySQL
프로그래밍 언어의 꽃 조건문도 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/MySQL
블로그 작성 + 실습용으로 사용할 임의의 챔피언 데이터를 만들었다.컬럼의 구성은 챔피언명 , 역할군, 출신지역, 성별로 구성되어 있다. 1정규형을 만족하지 않는 데이터들이 존재하는데, 이건 알잘딱 정규화 해보자 ~ 업데이트날짜 타입 실습을 위해 챔피언 출시 날짜를 추가해서 조금 업데이트 햇슴 !
[SQL] 의미 있는 통계를 얻고 싶다면 GROUP BY
·
DataBase/MySQL
group by절은 데이터에서 의미를 찾고 싶을 때 쓰는 문법이다.select * 를 통해 전체 데이터를 기준으로 계속 검색하면 성능이 똥구려지게 된다.즉, 우리는 컬럼 내의 중복되는 데이터들을 그룹지어 필터링하게 되면, 성능도 좋아지고 의미 있는 통계를 낼 수 있게 된다.group by 써보기먼저 출신지로 그룹화를 해보자.SELECT region, count(region) FROM LOL_CHAMPIONS_SAMPLE GROUP BY region;출신지별로 몇명의 챔피언이 존재하는지 그룹으로 출력할 수 있게 되었다. (일종의 DISTINCT 같다)이렇게 group by 는 특정 컬럼에 중복되는 값들이 존재한다면 그 값들을 그룹지어 집계함수를 통해 의미 있는 통계를 획득할 수 있다 !그리고 당연히 gro..
[SQL] 서브쿼리 쓰는 법
·
DataBase/MySQL
서브쿼리란 쉽게 생각해서 SELECT 문법 안에 SELECT 문법을 한번 더 쓰는 것이다.SQLD 딸때는 진짜 이거때문에 너무 고생했는데, 쉽게 공부하니 사실 생각보다 크게 별거 없었다. 이번에도 롤로 예제를 만들어보자만약 다음과 같은 요구 사항이 있다.items 테이블에서, 아이템의 평균 가격보다 비싼 아이템만 출력하고 싶다.우리는 원래대로라면 두가지 쿼리를 작성해야한다.// 아이템 평균 가격 구하기SELECT AVG(item_price) FROM items;// 위 쿼리의 결과 값이 1000 이라고 가정하자// 위 데이터를 이용하여 아이템 평균 가격 1000;이 쿼리의 단점은 첫번째 쿼리의 실행결과를 그대로 복붙 하여서 두번째 쿼리를 작성해야한다는 점이다.서브쿼리는 쉽게 생각해 두 쿼리를 합친다고 ..
[SQL] 결과 컬럼 사칙 연산 + 문자 함수
·
DataBase/MySQL
이번에는 빠르게 쿼리로 다 확인해보자. 컬럼 출력시 사칙연산 후 출력하기라이엇이 장난으로 만우절에 모든 아이템을 두배 비싸게 판매한다고 가정하자.다음과 같이 쿼리를 작성할 수 있다.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배가 될 뿐이지, 원본 데이터엔 지장 없음)또한 모든 사칙연산을 적용할 수 있다.문자 함수이번 포스팅에서 중요한건 문자함수이다. 문자 합..
[SQL] 통계 - ALIAS와 집계함수
·
DataBase/MySQL
데이터를 분석하기 위해 통계(총합, 평균 등)를 내야한다면 어떤 방법을 쓸 수 있을까? SQL에서는 이러한 통계와 분석을 위해 집계 함수를 제공한다.먼저 ALIAS는 테이블명이나 출력 칼럼명의 이름을 지정해 줄 수 있는데, AS 문법과 함께 사용하면 된다. 예시는 다음 쿼리에서 보자최대 MAX() , 최소 MIN()만약 롤에서 가장 비싸거나 싼 아이템을 찾고 싶다면 다음과 같이 작성하면 된다.SELECT MAX(item_price) AS 제일비싼템 FROM items; // 최대SELECT MIN(item_price) AS 제일싼템 FROM items; // 최소이렇게 AS로 ALIAS를 정하면 출력 컬럼의 이름이 제일비싼템, 제일싼템으로 출력되게 된다.평균 AVG()모든 아이템의 가격의 평균을 내려면 ..
[SQL] WHERE 을 더 맛있게 쓰는 방법 - LIKE
·
DataBase/MySQL
이전 게시물에서 WHERE 절 사용 방법에 대해 알아봤다. [SQL] 필터링이 필요할 땐 WHERE데이터를 필터링할 때는 WHERE 문법을 쓰자 !WHERE 알아보기기본적인 문법은 다음과 같다.SELECT * FROM 테이블명 WHERE 조건식WHERE 뒤에 조건식을 입력하면 그 조건과 일치하는 행만 필터리할 수 있다.bdisappointed.tistory.comWHERE 절 뒤에는 조건문이 붙는다고 했는데, 좀더 단어를 정밀하게 탐색하기 위해서 LIKE 문법이 존재한다.LIKE로 챔피언 이름 필터링하기 - % 와 _기본적으로 LIKE는 조건과 완전히 같은 데이터를 찾아낸다.SELECT * FROM champions WHERE champion_name LIKE '오공';위 쿼리의 결과로는 이즈리얼 한 행..