오랜만에 쿼리짜다가 신기한 함수를 발견해서 글로 적어보기로 했다. 바로바로 GROUP_CONCAT() 함수!! GROUP_CONCAT() 살짝 알아본 바로는 SELECT 결과를 concat을 통해 한 문장으로 합쳐주는 것이다. maria db에 잘 설명되어있어서 페이지 참고하시라고 첨부합니당... https://mariadb.com/kb/en/group_concat/ group_concat 안에도 서브쿼리처럼 사용할 수 있으며, 정렬과 Limit 제한까지 가능한 모양이다. SELECT name FROM test; 만약 이렇게 test라는 table에 값이 있다고 치자. 얘를 조회하면 컬럼의 길이가 3으로 나뉜다. 얘를 한 컬럼으로 합치고 싶을 때 group_concat()을 사용하면 된다. SELECT ..
Table간에 JOIN을 해줄 때 조심해야하는 것 중에 하나가 컬럼 명을 제대로 명시해줘야한다는 점인 것 같다. 가상의 A테이블과 B테이블이 있다고 가정해보자 primary_a primary_b name name date_a date_b 뭐 이런식으로... 테이블마다 컬럼이 3개가 있다고 치자. 여기서 name이라는 값이 동일한데, 이 두 테이블을 각각의 기본키로 조인한다고 가정하자 SELECT A.*, B.* FROM A JOIN B ON B.primary_b = A.primary_a ; 이렇게 하면 아무 문제 없이 작동할 것이다. 왜냐면 *앞에 테이블 명을 명시해줬으니까. 하지만 B테이블의 name값은 필요없다는 가정 하에 또 조인을 해보자. SELECT primary_a, name, date_a, ..
기존에 만든 h2 db외에 실습용으로 하나가 더 필요하게 됐다. 의외로 생성하는 법이 쉬웠다... 1. 윈도우 아래에 이렇게 된 곳 클릭하면 h2 db가 보인다. (만약에 없다면 h2.bwt였나? 배치파일 실행해놓기... 2. 그리고 그놈을 마우스 오른쪽을 클릭해보자. 여기서 Create a new database 클릭 3. 자신이 만들 db 경로와 username, password 등 입력해주기 경로가 ./ 으로 시작하면 h2 bin 폴더에 생성되고 ~/ 으로 하면 개인 컴퓨터의 user 폴더에 생성된다고 들었음...뀨 Create 고고 4. h2 db 생성완료 아래에 이렇게 성공적으로 h2 db가 생성되었다고 뜬다. 혹시 모르니까 아래 주소를 복사해놓자. 5. 생성한 db 접속 맨위의 저장한 설정을 ..
이번엔 mySQL에서 만들 테이블들간의 관계도를 생성해주는 방법을 소개할까한다.. ERD(Entity Relationship Diagram): 개체-관계 다이어그램 (테이블 간의 관계를 도식화했다고 생각하면 될 듯) 1. ERD를 만들 DB에 접속한 후 Ctrl + R 을 누른다. 조금 기다리면 아래 화면이 뜸 2. ERD를 만들 DB를 선택한다. 저 아래화살표 버튼을 누르면 연결되어있는 DB가 뜬다. 골라주면됨. 3. 계속 Next누르기 뭐 기다리면 계속 체크가 된다. 완료되는 Next버튼이 활성화됨. 4. 사용할 Schema 선택 나는 스키마가 하나뿐이라 하나만 뜨는데 스키마 여러개도 가능함 5. 또 기다렸다가 Next 6. 여기페이지는 중요함. 어떤 테이블을, 트리거를, 함수를 ERD에 나타낼건지 ..
테스트 테이블에 만들어 놓은 값을 정식 테이블로 옮기고 싶을 때가 있다. 물론 테스트 테이블을 정식 테이블로 바꿔주면되지만, 정식 테이블에도 값이 있을 때나... 다른 DB에 있는 값을 사용하는 DB에 옮기는 등!!! 그럴때 값을 일일히 가져와서 Insert해주기에도 안될 노릇이다. 그 때 그나마 손쉽게 할 수 있는 방법이 있다. 값이 들어있는 test테이블을 SELECT해온다. 그리고 테이블 결과 쿼리 위쪽에 파일디스크 모양의 Export가 있다. 쟤를 클릭하자. 이렇게 하면 테이블의 데이터를 여러가지 파일 형식으로 저장할 수 있다. CSV부터 JSON XML 등등... 본인이 필요한 타입으로 저장하면된다. 나는 SQL INSERT statement로 저장할 것이다. 저장을 완료하면 이렇게 mySQL파..
mySQL에서 DATE 타입을 저장할 때 년도, 월, 일, 시, 분, 초 까지 저장하는 경우가 많을 것이다. (default를 NOW()로 때리면 저렇게 저장됨 → ex) 2020-05-05 01:43:00 ) 그래서 특정 날짜에 대해서 조회를 하고 싶은데 뒤에 시간까지 저장되기 때문에 값을 제대로 못불러오는 경우가 생긴다. SELECT * FROM example WHERE eDate = NOW();-- example테이블과 eDate는 지금 임의로 만든 폰테이블임 이렇게 조회했는데 년월일은 동일해도 시간은 동일하지 않아 결과가 불러와지지 않는 것이다. 그럼 mySQL에서 날짜만 비교해 해당 값을 들고올 수 있는 방법은 무엇일꺄 별 것 없다. - DATE() 함수 이용하기 SELECT * FROM exa..
목표 : 상품 주문 시 주문테이블에 들어가는 주문 코드(pk)를 yyyyddyy-count() 이런 형식으로 만들고 싶었음 아래 코드는 문제가 있으니 참고만 해주세용~~ USE `사용중인DB명`;-- 생략 가능 DROP function IF EXISTS `사용중인DB명`.`CREATE_OCODE_FC`;-- 기존에 함수 있으면 지우고 다시 만듦 DELIMITER $$ CREATE FUNCTION `CREATE_OCODE_FC`() RETURNS char(13) BEGIN DECLARE _count INT DEFAULT 0;-- 오늘 날짜에 해당하는 주문 건수를 가져오기 위함 DECLARE _ocode CHAR(13);-- 반환할 주문 코드 총 13자리 SET _count = ( SELECT COUNT(*..
내가 하려는 상황 (쇼핑몰 프로젝트) 1. 고객이 후기를 남길 때 상품에 평점을 메긴다. (게시글 테이블) 2. 이 평점들의 평균을 상품 테이블의 평점 컬럼에 저장한다. 이 과정에서 INSERT TRIGGER를 이용하기로 했다. DROP TRIGGER IF EXISTS `사용하는 DB이름`.`새로 만들 트리거 명`; DELIMITER $$ CREATE TRIGGER `새로 만들 트리거 명` AFTER INSERT ON `인서트가 진행될 테이블 명` FOR EACH ROW BEGIN DECLARE _oldSum INT DEFAULT 0; DECLARE _oldCount INT DEFAULT 0; DECLARE _sum FLOAT DEFAULT 0; DECLARE _avg FLOAT DEFAULT 0; IF..