프로그래밍/DBMS

DBMS 4일차 - DBMS 문법

윤도ri 2021. 12. 10. 17:48

>Auto Increment
-TABLE에 데이터가 추가될 때마다 변하는 값을 미리 설계할 수 있다
: PK이고 자료형이 INT라면 설정 가능

                CREATE TABLE 테이블명(
                    PK명 INT PRIMARY KEY AUTO_INCREMENT,
                               ... 
                                 )



>DATE, DATETIME 타입
-DATE : 'YYYY-MM-DD' 형태로 삽입
-DATETIME: 'YYYY-MM-DD HH:MI:SS' 형태로 삽입
-지금이순간: now()


>별칭
-SELECT절에서의 별칭(컬럼 별칭) : AS 뒤에 한칸 띄고 / 그냥 한칸 띄우고 작성

ex) SELECT 1+1 AS "RESULT" FROM dual;  


-FROM절에서의 별칭(테이블 별칭) : 테이블명 뒤에 한칸 띄우고 작성


>LIKE절
-조건식
:뒤에 오는 와일드카드 문자열과 비교하여 같다면 참, 다르다면 거짓

       컬럼 LIKE('와일드카드문자열')

>>와일드카드
 _ : 한 글자
   EX) '_늘또' : '정늘또','최늘또','이늘또','김늘또', ...

 % : 모든 것(0글자도 포함)
   EX) '이%' : '이아파', '이가탄', '이가스나', '이몽룡', ...

 


 '_이_' 세글자 중 가운데가 '이'면 참
 '_이%' 두번째 글자가 '이'면 참
 '%이_' 뒤에서 두번째 글자가 '이' 면 참
 '__이%' 세번째 글자가 '이'면 참
 '_이_%' 두번째 글자가 '이' 이며 3글자 이상이면 참

 



>함수
1.단일행 함수
-행 하나당 결과를 하나씩 만들어주는 함수
종류: 형변환 함수, 문자함수, 숫자함수, 형변환함수, NULL처리 함수

 

1) 형변환 함수


       CAST(값 AS 타입)
       CONVERT(값, 타입)

 

EX) CAST(20140102 AS DATE)

 --> 2014-01-02 로 변경됨.   문자열타입이 시간타입으로 변경 

  *CONVERT도 같은 의미이다.


2) NULL 처리 함수

  (널 자리를 대체값으로 대체하고 싶을때)


        IFNULL(컬럼,대체값)


3 ) ORDER BY 절
  -검색 결과를 정렬하는 문법


        ORDER BY 컬럼1 {정렬기준}, 컬럼2 {정렬기준}, ...
        -->컬럼1 기준으로 정렬, 그 후에 컬럼2 기준으로 정렬, ...

 <정렬기준>
(1) 생략시 오름차순
(2) ASC 오름차순
(3) DESC 내림차순

 

1.건국연도,이름으로 정렬하기(오름차순으로) 2.건국연도는 내림차순,이름은 오름차순으로 정리하기 3.건국연도는 내림차순, 이름은 오름차순으로 정리해라


2.그룹(집계) 함수
-여러 행의 데이터들을 받아서 하나의 결과로 도출해주는 함수
종류: COUNT, SUM, AVG, MAX, MIN

null인 값들이 들어있는 경우는 ifnull을 이용하여 문자열로 바꿔주고 계산하자!


1)GROUP BY 절 
  -그룹함수를 적용시킬 범위(파트)를 나누는 문법
  *~~ 별 들어가면 쓴다고 생각하면 됨(ex: 대륙 별로  gnp 평균구해라)


      GROUP BY 컬럼1,컬럼2, ...
       -->컬럼1로 그룹을 짓고, 그 내부에서 컬럼2를 기준으로 그룹을 나누기, ...

 

2.HAVING
-GROUP BY를 통해 그룹을 짓고 구해진 결과가 있을 때 그 그룹에 조건을 부여할 때 사용하는 문법

       HAVING 조건식

<SELECT문 구조>

  SELECT 컬럼1, 컬럼2, ... FROM 테이블명
     WHERE 조건식 GROUP BY 컬럼1, 컬럼2, ...
       HAVING 조건식 ORDER BY 컬럼1, 컬럼2, ...


ex) country 테이블에서(FROM) 정치제도(컬럼1)랑 쓰는 언어 정보(컬럼2) 불러와!

 근데 대륙별로 데리고 오되(GROUP BY) asia 대륙에 있는것(HAVING )만 데리고오렴!

 그리고 마지막으로 건국연도 오름차순(ORDER BY ASC)으로 정리해와 

인구수가 40명이상인 대륙별로 나눠서 데이터를 가져온것을 볼 수 있다.

 

 

그룹별로 나눠주지 않으면 정상적인 출력이 안되는것을 볼 수 있다.

 

그룹별로 나눴더니 정상적으로 나눠졌다

<SELECT문 수행 순서>
FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY


(어느테이블로부터/어디칼럼에서/어떤칼럼별로/특정 조건식을 통과한/ 데이터들을 검색/적합한 차순으로 정리하여)

 

1.flower테이블에서 (from flower f) 2. shpe madein 갖고오기위해 'pot' join! (너코드 내코드 같아야해 join on ) 3. 자 이제 pot의 shape,madein 가져와 4. 대신 첫번째꺼가 필요하니 flowernum은 fk001로 가져와라 (where)
두번째 방법은 두번 나눠서 하는것이다. 효율성을 위해 join을 쓰지만 셀렉트를 여러번 하는 경우도 있다.


>JOIN(조인)
-여러 테이블에 흩어져 있는 정보 중 사용자가 필요한 정보만 가져와서 가상의 테이블처럼 만들고 결과를 보여주는 것

 



>>내부 조인(INNER JOIN)

- 조건식이 일치하는 행을 테이블2에서 찾아서 테이블1의 행 옆에 붙여서 결과를 완성시킨다.


        FROM 테이블명1 {INNER} JOIN 테이블명2 ON 조인조건식

EX)MODEL FISH 영화를 빌려간 회원들의 이름과 이메일주소검색해라 

 

1.일단 MODEL FISH가 있는 TABLE은 'film'table 이므로 from 에 입력 

 

2.영화를 장바구니에 넣어야 하므로 현재 장바구니테이블과 FK 공유했을것이다

 -->그러므로 서로의 데이터 같을 경우가 성립되어 데이터 가져옴

    Join inventory i1 on i1.film_id = f1.film_id 

 

3.두번째 렌탈을 해야하므로 렌탈테이블과 장바구니 테이블이 같이 FK공유했을것이다

 -->그러므로 서로의 데이터 같을 경우가 성립되어 데이터 가져옴

   Join rental r1 on r1.inventory_id = i1.inventory_id    // inner join

 

4.마지막으로 렌탈을 한 고객정보에 접근해야하므로 FK공유했을것이다

 -->그러므로 서로의 데이터 같을 경우가 성립되어 데이터 가져옴

   join customer c1 on c1.customer_id = r1.customer_id    // inner join

 

5.이제 찾은 데이터들중 영화제목이 'MODEL FISH' 이면 되므로 where사용

 

필름 테이블(영화코드,영화이름, 묘사)
고객 테이블(고객코드,고객이름, 고객성, 이메일)
장바구니테이블(장바구니코드,영화코드,매장코드)
렌탈테이블(렌탈코드,장바구니코드,고객코드)

 

내부 조인이 여러번 반복된것을 볼 수 있다.

 

값이 잘 검색되는것을 볼 수 있다.

'프로그래밍 > DBMS' 카테고리의 다른 글

DBMS 5일차 -JDBC  (0) 2021.12.15
DBMS 3일차 - 정규화,DML  (0) 2021.12.09
DBMS 2일차 -데이터 베이스, 테이블, 모델링  (0) 2021.12.08
DBMS 1일차 -DBMS  (0) 2021.12.08