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;
- 참고
✔ 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;