학습 로그/c# c++

D+65[C+MySQL] SQL 예제 문제 실습

goodjob^^ 2026. 7. 9. 18:32

ㅇ 일 자 : 2026년 7월 9일(목) 

ㅇ 내 용 : MySQL 예제 문제 실습

 

□ 회원 테이블 생성하기  CREATE TABLE member;

CREATE TABLE member;

 

□ 구매 테이블 생성하기  CREATE TABLE buy;

CREATE TABLE buy;

 

□  테이블 데이터 조회하기    naver_db.buy;        naver_db. member;

   ☞ 데이터 베이스가 선택되지 않아 오류 발생시 다시 USE 로 데이터베이스 사용전환을 한 후 다시 실행

각각의 다른위치에서 자료 조회하기

 

□ 멤버 데이터 조회하기 

 

□ 멤버 데이터 중에서 id, name, addr 만 선택 조회하기

 

□  생성된 뷰 모든 데이터 조회하기

  • member 테이블에서 회원 아이디(mem_id), 이름(mem_name), 주소(addr)만 뽑아내어 v_member 라는 이름의 뷰를 생성하고,  뷰는 실제 데이터를 저장하지 않고, 원본 테이블의 데이터를 보여주는 '창문' 역할을 한다.
CREATE VIEW v_member AS SELECT mem_id, mem_name, addr FROM member;

 

  • 생성된 뷰(v_member)의 모든 데이터를 조회합니다. 즉, 앞서 지정한 회원 아이디, 이름, 주소 전체를 출력
SELECT * FROM v_member;

 

  • 뷰(v_member)에서 주소(addr)가 '서울' 또는 '경기'인 회원의 이름과 주소만 조회 
SELECT mem_name, addr FROM v_member WHERE addr IN ('서울', '경기');

 

- JOIN 구문을 활용하여 데이터 통합 하기

SELECT B.mem_id, M.mem_name, B.prod_name, M.addr, 
        CONCAT(M.phone1, M.phone2) '연락처' 
   FROM buy B
     INNER JOIN member M
     ON B.mem_id = M.mem_id;

== <구분 설명 > ==
     SELECT B.mem_id,  // buy 테이블(B)에서 회원 ID를 가져오기
       M.mem_name,     // member 테이블(M)에서 회원 이름을 가져오기
       B.prod_name,    // buy 테이블(B)에서 구매한 상품명을 가져오기
       M.addr,         // member 테이블(M)에서 주소를 가져오기
       CONCAT(M.phone1, M.phone2) '연락처' 
                      // member 테이블(M)의 연락처 국번과 번호를 합쳐 '연락처'라는 별칭으로 가져오기      
  FROM buy B          // [기준 테이블] 중심이 되는 구매(buy) 테이블을 가져오고, 별칭을 'B'로 지정

       INNER JOIN member M // [조인 대상] 연결할 회원(member) 테이블을 가져오고, 별칭을 'M'으로 지정
                           // (INNER JOIN이므로 두 테이블 모두에 데이터가 존재하는 경우만 매칭된다)
                              
       ON B.mem_id = M.mem_id; //[조인 조건] buy 테이블의 회원 ID(B.mem_id)와 
                               // member 테이블의 회원 ID(M.mem_id)일치 데이터만 연결하는 조건 지정
※ SQL문은 구매 테이블(buy)과 회원 테이블(member)을 회원 ID 기준으로 결합,  상품을 구매한 회원의 구매 기록, 주소,  합쳐진 전화번호를 조회하는 내부 조인(INNER JOIN) 구문이다.
  • INNER JOIN member M: buy 테이블에 있는 데이터와 member 테이블에 있는 데이터를 서로 결합하겠다는 의미
  • ON B.mem_id = M.mem_id: 결합할 때의 기준 키(Key). 구매한 사람의 ID(B.mem_id)가 회원 가입된 ID(M.mem_id)와 정확히 일치하는 데이터만 합쳐서 결과를 출력한다
  • 회원 정보가 없는 유령 회원의 구매 기록이나, 구매 기록이 없는 회원의 정보는 출력되지 않는다.

 

□  name 조회하기    SELECT * FROM v_memberbuy WHERE mem_name = '블랙핑크';

SELECT B.mem_id 'Member ID', M.mem_name AS 'Member Name', B.prod_name "Product Name", 
       CONCAT(M.phone1, M.phone2) AS "Office Phone" 
FROM buy B 
INNER JOIN member M ON B.mem_id = M.mem_id;
  • 테이블 합치기 : 구매 테이블(buy)과 회원 테이블(member)을 회원 아이디(mem_id) 기준으로 합쳐서 정보 가져오기
  • 연락처 합치기 : CONCAT 함수를 사용해 나눠져 있던 전화번호(phone1, phone2)를 하나의 연락처 문자열로 연결
  • 별칭 지정 : 결과 화면에 보일 열 이름을 영어(Member ID, Member Name 등)로 알아보기 쉽게 바꾸기

 

□ 기존 가상 테이블 뷰 조회 하기    

SELECT DISTINCT `Member ID`, `Member Name` FROM v_viewtest1;  // 백틱 사용

   * DISTINCT를 사용했기 때문에, 한 사람이 물건을 여러 개 샀더라도 중복 없이 이름을 딱 한 번씩만 출력

 

□ 가상 테이블 수정, 뷰의 구조 변경하기

ALTER VIEW v_viewtest1 AS 
SELECT B.mem_id '회원 아이디', M.mem_name AS '회원 이름', B.prod_name "제품 이름", 
       CONCAT(M.phone1, M.phone2) AS "연락처" 
FROM buy B 
INNER JOIN member M ON B.mem_id = M.mem_id;

 

 `백틱`이  뭔데요? 
백틱(``)은 프로그래밍에서 문자열을 감싸거나 코드 블록을 표시할 때 사용하는 특수 기호.
키보드의 1번 왼쪽(물결표 아래 ``)에 위치하며, 변수와 문자열을 쉽게 결합하고
여러 줄을 표현할 수 있어 JavaScript, SQL, Markdown 등에서 자주 쓰인다.
- 변수삽입(보간법) : 문자열 내에 $\{변수명\}을 넣어 + 기호 없이도 변수나 표현식을 문자열에 쉽게 포함
- 여러 줄 문자열 : 따옴표와 달리 줄 바꿈을 하더라도 에러가 나지 않아, 긴 문장이나 HTML 코드를 작성
- 코드블록 : 마크다운(Markdown), GitHub 등에서 백틱 세 개(```)를 사용해 코드를 강조하는 블록 생성 

 

□ 파일 위치 지정하여 조회하기 

 

□  테이블 수정하기 

    ALTER 문은 이미 생성된 데이터베이스 객체(테이블 등)의 구조를 수정할 때 사용하는 DDL 명령어

    기존 테이블을 삭제하고 다시 만들 필요 없이 컬럼 추가, 삭제, 자료형 변경, 제약조건 설정 등을 수행

끝.