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 "%키워드%": 키워드가 포함되는 데이터 조회
'etc' 카테고리의 다른 글
[KOSTA 프로젝트] 03. 사이드바에서 현재 페이지 표시하기 (0) | 2023.12.13 |
---|---|
[KOSTA 프로젝트] 02. JPA와 ArrayIndexOutOfBoundsException (4) | 2023.12.01 |
[KOSTA 프로젝트] 01. DB에 JSON형태로 저장해도 될까? (1) | 2023.11.14 |
React로 개발한 프로젝트 Github로 배포하기 (0) | 2023.04.18 |
간단한 git 사용법 (2) | 2023.02.03 |
댓글