• Home
  • About
    • ming photo

      ming

      studying

    • Learn More
    • Twitter
    • Facebook
    • Instagram
    • Github
    • Steam
  • Archive
    • All Posts
    • All Tags
    • All categories
  • categories
    • HTML+CSS+JavaScript
    • JAVA
    • Algorithm
    • DB
    • JSP
    • 정보처리기사
    • Spring
    • Thymeleaf
    • 기술면접
  • Projects

DB -SQL - sql전문가 정미나 - 오라클 초급강의 : CREATE,GRANT,INSERT,SELECT,ORDER BY,JOIN 쿼리(INNER JOIN)

27 Feb 2021

🔷CREATE,GRANT,INSERT,SELECT,ORDER BY,JOIN 쿼리(INNER JOIN) 실습

✔ 계정 생성, 권한 부여, 테이블 생성

  • 코드
      -- CREATE : 계정생성 
      -- IDENTIFIED BY => 비밀번호 부여
      CREATE USER MINGKI IDENTIFIED BY 1234;
    
      -- GRANT : 권한부여
      -- CREATE SESSION TO : 계정에 세선(관리) 권한 부여
      GRANT CREATE SESSION TO MINGKI;
      -- CREATE TABLE, RESOURCE TO  : 계정에 테이블생성, 저장공간 부여
      GRANT CREATE TABLE, RESOURCE TO MINGKI;
    
      -- CREATE TABLE : 테이블 만들기
      -- 테이블 이름 후 () 안에 어떤 컬럼으로 구성할지 정한다
      CREATE TABLE SUPERBAND_MEMBER(
      -- NUMBER : 숫자(3바이트)
      SEQ NUMBER(3),
      -- VARCHAR2 : 문자(30바이트)
      NAME VARCHAR2(30),
      POSITION VARCHAR2(100),
      FINAL_YN VARCHAR2(1));
    
      -- SELECT VSIZE('가나다') FROM DUAL : 글자 가 몇바이트 인지 확인하는 명령문
      -- DUAL : 오라클 자체에 제공되는 테이블 => 함수를 이요해 계산 결과값을 확인 할 떄 사용 하는 테이블이다
      -- 한글 : 한글자에 3바이트
      SELECT VSIZE('가나다') FROM DUAL;
    
      -- 테이블 조회
      SELECT * FROM SUPERBAND_MEMBER;
    
      -- INSERT INTO 테이블이름 VALUES (): 전체 컬럼에 데이터 삽입
      -- ()안에순서대로 넣어주면된다
      INSERT INTO SUPERBAND_MEMBER VALUES(
      1,'아일','vocal,piano','y');
    
      -- INSERT INTO 테이블이름 (칼럼이름)VALUE() : (칼럼이름) 선택된 칼럼에만 데이터를 넣는 명령문
      INSERT INTO IDOL_GROUP (COMPANY,GROUP_NAME)VALUES(
      '테스트 소속사','예비 아이돌 그룹');
    

    💡 TIP : ctrl + 테이블명 클릭 => 해당 테이블의 열 을 확인할 수 있다

✔ SELECT 활용

  • 코드
      -- 특정한 컬럼 조회시 SELECT 뒤에 조회할 컬럼명 입력
      SELECT TITLE,SINGER FROM billboard_charts;
    
      -- WHERE : 조회할 컬럼 ,조건 입력
      -- COUNTRY가 England 인 가수만 조회
      SELECT * FROM billboard_charts 
      WHERE country='England';
    
      -- 순위가 10위 안에 있는 데이터만 출력하는 명령문
      SELECT * FROM billboard_charts 
      WHERE ranking < 11;
    
      -- LIKE '%M%': 노래제목가운데에 M이 포함된 노래 조회 명령문
      SELECT * FROM billboard_charts 
      WHERE TITLE LIKE'%M%';
    
      -- GROUP BY :  그룹별로 집계된 정보 조회
      -- 국가별로 조회
      SELECT country FROM billboard_charts 
      GROUP BY country;
    
      --  COUNT(*) : 해당조건의 갯수를 카운트 해준다
      SELECT country, COUNT(*) FROM billboard_charts 
      GROUP BY country;
    
      -- HAVING : GROUP BY 후 그룹별 조건검사가 필요한 경우 사용
      -- COUNT가 한곡이상인 나라 조회
      SELECT country,COUNT(*) FROM billboard_charts 
      GROUP BY country HAVING COUNT(*) >1 ;
    
      -- DESC : 랭킹 내림차순 조회
      SELECT * FROM billboard_charts 
      ORDER BY ranking DESC;
    

✔ ORDER BY 실습

  • ORDER BY : 데이터가 많은 데이터에서 ORDER BY 를 남발하게 되면 오류가 발생될 수 있다 => ORDER BY 에 자주 등장하는 컬럼을 인덱스로 설정을 해두면 성능에 유리하다

  • 코드
      -- ULLS LAST : NULL값을 마지막으로 보내고 싶을 때
      -- 내림차순에서는 NULL값이 원래 가장 먼저 출력된다
      SELECT *FROM idol_member
      ORDER BY real_name DESC NULLS LAST;
    
      -- NULL값을 맨 위로 올리고 싶을때
      -- 오름차순에서는 NULL값이 가장 나중에 출력된다
      SELECT *FROM idol_member
      ORDER BY real_name NULLS FIRST;
    
      -- 두개의 컬럼으로 정렬하고 싶을 때에는 ORDER BY 뒤에 컬럼명을 작성하면 된다
      SELECT *FROM idol_member
      ORDER BY real_name ,birthday;
    
  • 참고 GROUPBY

✔ JOIN 쿼리 (INNER JOIN)연습

  • INNER JOIN : 양쪽 테이블에 같은조건(공통적으로 갖고 있는 기준 컬럼)이 존재할 경우의 값만을 가져오는 경우 => 한쪽 테이블만에라도 기준컬럼의 데이터가 NULL이면 결과값에 나타나지 않는다

  • 코드

      -- AILAS : A => IDOL_GROUP을 A로 지칭
      -- INNER JOIN :  A와 B테이블에 함께 있는것들만 나열
      -- A의 COMPANY,A의 GROUP_NAME 과 B의 MEMBER_NAME, B의 REAL_NAME에서
      SELECT a.company,a.group_name,b.member_name,b.real_name FROM idol_group A,idol_member B 
      -- A와 B의 공통 내역 (연결고리) 을 출력하는 명령
      WHERE a.group_name = b.group_name;
    
      -- 각각의 그룹에 몇명의 멤버가 있는지 보고싶을 때 명령문
      -- COUNT사용시에는 GROUP BY 사용해야한다
      -- A의 COMPANY,A의 GROUP_NAME 에서 B의 MEMBER_NAME 을 카운트 한다
      SELECT a.company,a.group_name, COUNT(b.member_name) COUNT
      FROM idol_group A, idol_member B 
      WHERE a.group_name = b.group_name
      GROUP BY a.company,a.group_name;
    


Share Tweet +1