데이터베이스 - SQL
2022.05.08
데이터 조작어 DML(Data Manipulate Language)
- SELECT 쿼리
- SELECT * FROM 테이블;
- SELECT id, name, FROM student;
- WHERE 조건절
- >, >=, =, <=, <, <>
- SELECT * FROM 테이블 t WHERE t.id = 1;
- <> 은 같지 않은 것. != 와 같음
- IN, NOT IN
- WHERE t.id in (1, 2, 3, 4) | WHERE t.id not in (1, 2, 3, 4)
- LIKE
- WHERE t.name LIKE '%김';
- LIKE와 함께 사용하는 와일드 문자
- + 문자열 연결
- % 포함 관계
- %을 문자열 앞에 붙이면 필드값이 제공된 문자열로 시작하는 데이터 탐색.
- % 끝에 붙이면 끝나는 문자열 탐색.
- % 앞 뒤에 붙이면 포함하는 문자열 탐색.
- [] 일치, [^] 불일치 -> '[0-5]%'
- _ 특정 위치
- '_e%' : 두 번째가 문자가 'e'인 문자 ex) test, seller, ...
- >, >=, =, <=, <, <>
-
- WHERE t.address IS NULL | WHERE t.address IS NOT NULL
-
- WHERE t.date BETWEEN '2022-01-01' AND '2022-12-31'
-
- 복합조건 사용 가능 - AND, OR, NOT
- 중복제거
- SELECT DISTINCT
- ORDER BY 필드명 방향[DESC, ASC]
- ORDER BY price DESC, publisher ASC;
- GROUP BY
- 집계함수 - SUM, AVG, MIN, MAX, COUNT
- GROUP BY 기준필드명
- Orders 테이블 GROUP BY customer -> 주문내역을 고객별로 묶음
- Likes 테이블 GROUP BY board_id -> 좋아요를 게시글별로 묶음
- group by 사용할 경우, select 절에서 기준필드와 집계함수만 출력 가능!
-
-
- 일대다 테이블 조인 관계에서 group by 사용한 예시
- 기준이 board임으로 board 테이블 필드들 출력 가능
-
select b.id, b.title, b.content, count(*) as '등록 인원'
from board b join registration r on b.id = r.board_id
group by b.id;
-
-
- HAVING 절
- GROUP BY절의 조건절. 집계함수와 함께 사용함.
- GROUP BY로 묶은 데이터 개수가 10개 이상인 데이터만 출력.
- HAVING count(*) >= 10
- HAVING 절
- 조인(Join)
- FROM 절에 조인하고자 하는 테이블들을 명시한 후 WHERE 조건절에서 필드를 매치.
- JOIN(== INNER JOIN)
- 테이블 1 JOIN 테이블 2 ON 조인조건
- 데이터가 있는 경우만 데이터를 가져온다. (교집합)
-
- 외부조인 - NULL 데이터가 출력될 수 있다.
- 테이블 1 LEFT OUTER JOIN 테이블 2 ON 조인조건
- 테이블 1을 기준으로 조인. 테이블 1의 모든 데이터를 기준으로 출력하기에 조인조건에 맞는 테이블 2의 데이터가 없는 경우 테이블 2의 데이터는 Null로 출력.
- 테이블 1 RIGHT OUTER JOIN 테이블 2 ON 조인조건
- 테이블 2를 기준으로 조인.
- 테이블 1 LEFT OUTER JOIN 테이블 2 ON 조인조건
- 외부조인 - NULL 데이터가 출력될 수 있다.
- UNION (합집합)
- select 문 UNION select 문
- UNION ALL 을 사용할 경우, 중복 데이터까지 모두 출력
- WHERE OR 조건과 같은 결과를 출력하지만 OR 조건은 모든 필드를 합쳐서 출력하고
- UNION은 별도의 두 테이블을 상하로 합쳐 결과를 반환한다.
- 부속질의(SubQuery) - 조인과 달리 모든 데이터를 합치지 않고 필요한 데이터만 찾음
- select 절
- 중심 테이블의 데이터가 출력될 때마다 select 절이 매번 호출된다는 단점이 있다.
- update orders set bookname = (select name from book where book.id = orders.book_id)
- from 절
- 조건에 맞는 데이터만을 모아서 하나의 테이블처럼 활용할 수 있음
- where 절
- 출력이 필요없고 조건절에만 필요할 때 유용. 같은 테이블 집계함수와 비교할 때 유용.
- select price from orders where price > select avg(price) from orders
- 테이블 2의 가장 최신 날짜보다 빠른 날짜를 가진 테이블 1의 데이터들
- select * from 테이블 t1 where t1.date >
(select max(t2.date) from 테이블 t2)
- select * from 테이블 t1 where t1.date >
- select 절
- EXISTS
- WHERE EXISTS + (SELECT 문)
- 데이터의 존재를 확인하기에 존재 확인 용도라면 EXISTS의 성능이 IN 쿼리보다 좋다.
- LIMIT
- 출력할 데이터의 개수를 지정. select절 + limit 시작위치, 개수
- INSERT문
- INSERT INTO 테이블(필드, ...) VALUES(값, ...);
- INSERT INTO 테이블 SELECT문 가능
- UPDATE문
- UPDATE 테이블 SET 필드 = 수정할 값 [WHERE 조건절];
- SET절에서 SELECT문 사용 가능. 같은 테이블에서는 SELECT문 불가
- 조건에 해당하는 데이터 수정. 조건 없을 경우 모든 데이터 업데이트.
- DELETE문
- DELETE FROM 테이블 [WHERE 조건절];
- 조건에 해당하는 데이터 삭제. 조건 없을 경우 모든 데이터 삭제 == 빈 테이블.
데이터 정의어 DDL(Data Definition Language)
- CREATE DATABASE [데이터베이스명];
- USE [데이터베이스명];
- SHOW DATABASES;
- SHOW TABLES;
- CREATE TABLE 테이블명( 필드명 필드타입, 필드명 필드타입 제약조건... );
- 필드타입 BIGINT, INTEGER, VARCHAR(255), BOOLEAN, DATE ...
- 제약조건 NOT NULL, UNIQUE, DEFAULT, CHECK (조건절), PRIMARY KEY ...
- 기본키
- 필드명 필드타입 PRIMARY KEY
- 또는 필드 정의한 후 PRIMARY KEY (필드명) 라인을 추가하여 설정
- 외래키
- 필드 정의 후에 FOREIGN KEY (필드명) REFERENCES 테이블명(테이블 pk 필드명);
- 뒤에 ON DELETE [ CASCADE | SET NULL ] 를 통해
참조 테이블 데이터 삭제 시 함께 삭제할 것인지 외래키 값을 NULL로 변경할 것인지 설정
- ALTER TABLE
- 필드 추가 ALTER TABLE 테이블 ADD 필드명 필드타입 ...
- 필드 수정 ALTER TABLE 테이블 MODIFY 필드명 필드타입...
- 필드 삭제 ALTER TABLE 테이블 DROP COLUMN 필드명;
- 필드 기본키 설정 ALTER TABLE 테이블 ADD PRIMARY KEY(필드명);
- 필드 외래키 설정 ALTER TABLE 테이블 ADD [제약조건명] FOREIGN KEY(필드명) REFERENCES 참조테이블(참조필드);
- DROP TABEL 테이블명 -> 테이블 삭제(테이블의 모든 데이터와 테이블 구조 삭제)
데이터 제어어 DCL(Data Control Language)
- GRANT ALL PRIVILEGES ON DB명.Table명 TO 사용자@호스트 IDENTIFIED BY '비밀번호';
- FLUSH PRIVILEGES;
- REVOKE ALL ON DB명.Table명 TO 사용자@호스트;
- ALL | INSERT, UPDATE, CREATE ...
- GRANT ... ON *.* TO id@'%';
- COMMIT, ROLLBACK
내장함수
- 숫자
- ABS 절대값, ROUND 반올림
- 문자열
- CONCAT 문자열 합치기, LOWER, UPPER,
- LPAD, RPAD 대체, LTRIM, RTRIM 삭제
- REPLACE, REVERSE, SUBSTR
- LENGTH
- 날짜, 시간
- ADDDATE, DATE, DATEDIFF, DATE_FORMAT, STR_TO_DATE, SYSDATE
- NULL
- IFNULL, NULLIF, ISNULL
댓글을 작성해보세요.