본문 바로가기
etc

[DB]MYSQL 문법 정리

by Zㅣ존수빈zz 2023. 7. 14.

SQL query

CREATE DATABASE 데이터베이스이름; 생성
USE 데이터베이스이름;  선택
DROP DATABASE 데이터베이스이름; 삭제

CREAT TABLE 테이블명 ( 테이블 생성
        데이터명칭         데이터종류    제약조건,
        컬럼명(속성명, 필드명) 자료형    제약조건,
        컬럼명                    자료형    제약조건,
    ex) memberNo                INT      UNIQUE,
        ...
);

ex) 
CREATE TABLE book2 (
bookid INT AUTO_INCREMENT,
bookname VARCHAR(40) NOT NULL,
publisher VARCHAR(40) NOT NULL,
price INT CHECK(price > 1000) DEFAULT(10000),
    PRIMARY KEY(bookid)
);



<데이터 추가>
INSERT INTO 테이블명 (컬럼명1, 컬럼명2, ...) VALUES("값1", "값2", ...);
문자는 "" 사이에, 숫자는 그냥.

ex) INSERT INTO book2(bookid, bookname, publisher, price) VALUES(1, "책2", "출판사2", 10000);
  -->  INSERT INTO book2 VALUES(1, "책2", "출판사2", 10000);
전체항목을 입력하고 순서가 동일한 경우 컬럼명 생략 가능


<자료형>
  숫자
    정수
        INT
    실수
        FLOAT

  문자
    CHAR(자리수)
ex) CHAT(5) -> 5자리 문자

    VARCHAR(자리수)
ex) VARCHAR(20) -> 최대 20자리까지의 문자

    TEXT - 여러줄 텍스트

  날짜
    DATE : 날짜
    TIME: 시간
    DATETIME: 날짜 + 시간

  기타
    ENUM
    SET: 값을 한정
        ex) SET('apple', 'mango') : 둘 중 하나만 선택 가능

 
<제약조건>
    데이터를 대표하는 값 PRIMARY KEY
           (UNIQUE + NOT NULL)
+ 자동으로 증감되는 번호 AUTO INCREMENT()
    중복이 되지 않는 값 UNIQUE
    특정 수치 이상 입력되는 조건 CHECK
    값이 없으면 기본값 DEFAULT
    필수항목 NOT NULL

 PRIMARY KEY(bookid)
이렇게 함수처럼 대입도 가능



<데이터 수정>
SET SQL_SAFE_UPDATES=0;  (스프링할땐 필요x)
UPDATE 테이블이름 SET (변경할컬럼명 = "값") WHERE 조건문 
ex)
SET SQL_SAFE_UPDATES=0;
UPDATE book2 
SET 
publisher="출판사1",
        price=15000
WHERE bookid=1;




<데이터 삭제>
DELETE FROM 테이블명 WHERE 조건문



<데이터 조회>
SELECT

[]: 필수아님. 선택
SELECT 속성이름(들) FROM 테이블명
  ex)
  SELECT bookid, bookname, publisher, price FROM book;
  SELECT * FROM book; (* : 전체선택)

SELECT [ALL | DISTINCT] 컬럼명 FROM 톄이블명 
[WHERE 조건문] 
[GROUPP BY 속성이름] 
[HAVING 검색조건] 
[ORDER BY 컬럼명 [ASC | DESC]]


  ALL - 모든 데이터 (기본값)
  DISTINCT - 중복없는 데이터

  ex)
  SELECT DISTINCT publisher FROM book;


>>WHERE 검색조건 - 비교연산자 , 논리연산자
  - >, <, >=, <=, =, !=, <>
  - AND, OR, NOT
** = : 다른 언어와 달리 한개만 써도 '같다'는 의미
** <>: !=와 같은 '다르다'는 의미
  ex) SELECT * FROM book WHERE price = 7000 OR price = 13000;
      SELECT * FROM book WHERE NOT publisher= "굿스포츠";


교집합 컬럼명 IN ("값", "값", ...)
    ex) SELECT * FROM book WHERE price IN (7000, 13000);

차집합 컬럼명 NOT IN ("값", "값",...)
    ex) SELECT * FROM book WHERE price NOT IN (7000, 13000);

합집합 컬럼명 UNION  - 중복안됨
  UNION - 중복없는 합집합
  UNION ALL - 중복을 허용하는 합집합

    ex)
    SELECT * FROM book WHERE price <= 10000
    UNION
    SELECT * FROM book WHERE price >= 8000;



>> GROUP BY - 통계의 목적으로 사용됨. 
  통계함수 (SUM, COUNT, AVG 등)

  ex) SELECT custid, SUM(saleprice) FROM orders GROUP BY custid;
    고객 아이디별 판매총합

  AS(Alias): 별칭
  ex) SELECT custid, SUM(saleprice) AS "합계", COUNT(*) AS "주문 건수", AVG(saleprice) AS "평균" FROM orders GROUP BY custid;
  ** AS와 큰따옴표를 생략할 수 있으나 "주문 건수"처럼 띄어쓰기가 있는 별칭의 경우 큰따옴표를 생략할 수 없다.


>> HAVING: GROUP BY에 있는 집계함수만 조건식으로 사용 가능.
                GROUP BY와 함께 쓰임

  ex) 주문건수가 3건 이상인 고객들의 평균 구매금액 조회
  SELECT custid, AVG(saleprice) 평균금액 FROM orders 
GROUP BY custid
     HAVING COUNT(*) >= 3;


>> ORDER BY: 오름차순, 내림차순 정렬방향을 지정
  ASC(Acending Order): 오름차순 (기본값)
  DESC(Decending Order): 내림차순

ex) 판매가 기준 오름차순 정렬
    SELECT * FROM orders ORDER BY saleprice ASC;

  ** 기준이 되는 컬럼은 순서대로 뒤에 적어주면 된다.
  ex) 출판사 기준 내림차순으로 정렬하되 출판사명이 동일하면 가격을 기준으로 내림차순 정렬
    SELECT * FROM book ORDER BY publisher, price DESC;


<JOIN>
  각 테이블의 primary key를 이용해서 테이블을 연결 (교집합)
    ex) 책정보테이블의 책아이디와 주문정보테이블의 책아이디를 연결하여 유의미한 데이터 추출
        SELECT o.*, c.name, b.bookname FROM orders o, book b, customer c
WHERE o.bookid = b.bookid AND o.custid = c.custid;

>> INNER JOIN: 내부 조인(동등조인)
ON 공통값
  ex)
  SELECT o.*, c.name, b.bookname FROM orders o
INNER JOIN book b ON o.bookid = b.bookid
             INNER JOIN customer c ON o.custid = c.custid;

>> OUTER JOIN[LEFT | RIGHT]: 외부 조인 - 동일한 값이 없어도 해당 테이블의 정보가 표시됨
  LEFT OUTER JOIN ...

  RIGHT OUTER JOIN ...


<LIKE>
컬럼명 LIKE "키워드" : 키워드와 일치하는 패턴 조회
컬럼명 LIKE "키워드%" : 키워드가 시작부분에 포함되는 패턴 조회
  ex) SELECT * FROM book WHERE bookname LIKE "야구%";
컬럼명 LIKE "%키워드": 키워드로 끝나는 패턴 조회
컬럼명 LIKE "%키워드%": 키워드가 포함되는 데이터 조회

댓글