본문 바로가기
반응형

MySQL19

[MySQL] DB에서 특정 행들만 가져오기(1) - WHERE 절의 "or"를 이용 2017/08/04 - [SQL] - [SQL] 결과 테이블의 일부 조건만 출력하기 HAVING에서 사용하던 user_data 테이블 중 log_num 이 1, 9, 23, 109, 125, 264, 359, 416, 484, 504, 545, 620, 636, 640, 643, 669, 689, 720, 725, 749에 해당하는 자료만 뽑으려면 어떻게 해야 할까? 일단은 해당하는 log_num 을 모두 "or"로 묶어 WHERE 절에 거는 방법을 생각할 수 있겠다. 말하자면 다음과 같은 것이다. SELECT * FROM user_data WHERE log_num='1' or log_num='9' or ... 일일이 입력하기는 귀찮으니 엑셀에서 잠시 작업하자. 일단 해당 번호들을 붙여넣고 콤마(,) 를.. 2017. 9. 8.
[MySQL] 결과 테이블의 일부 조건만 출력하기 HAVING 연습으로 계속 사용하던 두 테이블, product_data 와 user_data에서 각 유저가 구매한 총 금액을 구하려면 어떻게 해야할까? user_data 테이블의 product 항목을 product_data 테이블에서 참조하여 금액을 불러오고, 해당 금액의 합계를 sum()으로 구하면서 user_id 별로 그룹핑해 주면 되겠다. 즉, SELECT u.user_id, sum(p.price) FROM user_data as u LEFT JOIN product_data as p ON u.product=p.product_id GROUP BY u.user_id ORDER BY sum(p.price) DESC; 정도로 적으면 되겠다. 결과는 다음과 같다. 이중에서 총 구매금액 합계가 5억 5천 이상인 유저만 출.. 2017. 8. 4.
[MySQL] 일부 값만 음수로 계산하기 (조건문 CASE) 다음과 같은 자료가 있다고 하자. 위와 같이 엉망인 자료는 드물겠지만, 어쨌든 flag=1 은 코인 충전, flag=2는 코인 사용이라고 생각해 보자. 이때 각 유저별로 갖고 있는 코인의 총량을 알고 싶다면? flag=1 인 경우는 coin을 더하고 flag=2인 경우는 coin을 빼야 할 것이다. 엑셀에서는 IF를 쓰면 되겠고, 이런 경우 SQL에서는 CASE를 쓴다. SELECT CASE WHEN flag=1 THEN coinWHEN flag=2 THEN coin * -1ELSE NULLEND FROM cointable; 위 쿼리를 실행시키면 다음과 같은 결과를 볼 수 있다. CASE문 전체가 하나의 열을 만드는 것을 알 수 있다. 다시 쿼리를 보자. SELECT CASE WHEN flag=1 THE.. 2017. 7. 28.
[MySQL] apmsetup으로 연습환경 구축하기, 데이터 넣기 Import MS ACCESS에 이어 Apmsetup으로 연습환경을 구축해 보자. Apmsetup의 APM은 각각 Apache, PHP, MySQL 을 의미한다고 하며, 우리는 MySQL DB 에서 SQL을 연습해 볼 것이다. (MS ACCESS에서는 몇 가지 지원하지 않는 쿼리가 있어, 이쪽에서 연습하기로 한다.) https://kldp.net/apmsetup/ 위 주소에서 Apmsetup을 받아 설치한다. 다음과 같은 트레이 아이콘이 생길 것이다. 오른쪽 버튼을 눌러 [MySQL 관리]로 들어간다. (root 패스워드 변경을 먼저 해 두어도 좋다. 초기 로그인은 root / apmsetup 으로 가능하다.) root / apmsetup 으로 로그인한 후 데이터베이스를 만들어 준다. MS ACCESS와 마찬가지로 .. 2017. 7. 25.
[MySQL] 다른 테이블에서 데이터 참조하기 JOIN (vlookup) 다음과 같은 데이터가 있다고 하자. 어떤 유저가 언제 어떤 물건을 샀는지 기록해 놓은 자료다. 짐작하다시피, product는 이전에 등장했던 product_data 테이블의 product_id 열과 대응된다. 저 유저가 산 품목의 이름이 무엇인지 궁금하다면 product_data 테이블을 참조하여 이름을 가져와야 할 것이다. 말하자면 엑셀의 vlookup(), R의 merge() 에 해당하는 기능이 필요하다. SQL에서는 이 역할을 JOIN이 담당한다. 일단 다음 쿼리를 보자. SELECT user_data.*,product_data.name FROM user_data LEFT JOIN product_data ON user_data.product = product_data.product_id ORDER .. 2017. 6. 15.
[MySQL] 합 구하기 sum / 그룹별로 집계하기 group by / 정렬 order by 2017/05/04 - [SQL] - [SQL] 조건절 WHERE 사용하기(and, or, not, like) 에서 사용하던 product_data 에서 금액들의 총 합은 얼마일까? SELECT sum(price) FROM product_data ; 이게 얼마야, 1억 1,500만 원이라는가 보다. 하지만 그보다는 이런 게 궁금하기 마련이다. '각 제조사가 파는 항목들의 총 금액은?' 즉 금액의 합계를 각 제조사별로 그룹핑 해 주어야 하는 것인데, 직관적이게도 GROUP BY 명령어를 사용하면 된다. SELECT sum(price) FROM product_data GROUP BY manufacturer ; 오! 세 가지로 나왔으니 잘 나온 것 같긴 한데, 이러면 뭐가 뭔지 모르잖아? 제조사도 같이 출력하.. 2017. 5. 5.
[MySQL] 조건절 WHERE 사용하기(and, or, not, like) SELECT와 FROM에 이어 WHERE도 사용해 보자. 제조사 A의 제품만 출력하고 싶다면? 조건절에 manufacturer="A" 라고 선언하면 될 것이다. SELECT * FROM product_data WHERE manufacturer="A" ; 가격이 100만 원인 제품의 이름과 제조사만 출력하려면? SELECT name, manufacturer FROM product_data WHERE price=1000000 ; WHERE 절에는 and 를 사용할 수 있다. 가격이 100만 원 이상, 500만 원 이하인 제품은? SELECT * FROM product_data WHERE price>=1000000 and price=1000000 and price=1000000 and price 2017. 5. 4.
[MySQL] 개수 세기 count / 이름 지정하기 as 지난 번 2017/05/02 - [SQL] - [SQL] MS Access 에서 연습 환경 구축하기 에 이어 다음과 같이 명령어를 넣어 보자. SELECT count(name) FROM product_data ; name 열에 있는 항목의 개수를 세라는 명령이다. 20개라고 알려준다. 제조사manufacturer 도 세 보자. 역시 20이라는 결과가 나온다. 말하자면 행이 20개라는 이야기다. 하지만 제조사의 종류가 몇 종류인지 알아보고 싶다면? 중복을 제거하고 세야 할 것이다. 이럴 때 DISTINCT 명령어를 사용한다. SELECT DISTINCT manufacturer FROM product_data ; 대소문자의 구별은 편의를 위한 것일 뿐, 큰 의미는 없다. 중복을 제거하고 항목이 표시된다. 개.. 2017. 5. 3.
[MySQL] MS Access 에서 연습 환경 구축하기 ※ MS ACCESS는 접근이 쉬우나 한계가 있어, 가능하면 처음부터 APMSETUP이나 BITNAMI로 연습환경을 구축하는 편이 낫겠다. 참고: 2017/07/25 - [SQL] - [SQL] apmsetup으로 연습환경 구축하기, 데이터 넣기 Import SQL을 연습해보고 싶은 사람들이 처음으로 부딪히는 벽은 일단 무슨 프로그램을 설치해야 하느냐는 것이다. SQL은 프로그램 이름이 아니라 언어(structured query language)고, RDBMS(Relational DataBase Management System) 형식의 데이터베이스에서는 모두 사용할 수 있다고 하는데, 나는 데이터베이스도 없고... 그럼 데이터베이스부터 만들어야 하나? 이럴 때 복잡할 것 없이 MS Access를 쓰면 된.. 2017. 5. 2.
반응형