블로그

왜 CS 전공지식은 ‘개발자 기본기’로 꼽힐까?

컴퓨터 구조, 자료구조, 알고리즘, 운영체제, 네트워크, 데이터베이스 등은 컴퓨터공학 및 컴퓨터과학, 소프트웨어공학 등의 전공에서 반드시 배우는 주제로 꼽힙니다. 학교나 학과마다 커리큘럼에 차이는 있더라도 내용 자체는 모두 동일한 개념을 배우게 되는데요.이러한 CS 전공 지식은 컴퓨터 관련 학과에서의 전공 이해를 좌우할 뿐만 아니라, 개발자 채용을 위한 기술 면접 과정에서 주로 검증하는 핵심 개념이기도 합니다. 가령 서비스 개발자라면 비즈니스 로직을 구축하는 등, 프로그램의 구조를 만들고 문제를 해결하는 바탕이 되기 때문입니다. 이미 실무에 진출한 개발자들조차도 CS 전공 지식을 강조하는 이유가 여기에 있죠.다시 말해 CS 전공 지식은 개발자로서 필요한 문제 해결 역량을 결정하는 기본기 역할을 합니다. 대학생, 취업 준비생, 주니어 개발자 등을 막론하고 실력 있는 프로그래머가 되기 위한 든든한 뿌리가 필요하다면 CS 전공 지식에 주목해야 합니다.•••기술 면접 전, 실무 프로젝트 전 빠르게 기초를 정리하고 싶으신가요?지금 인프런 프리즘 [CS 전공 지식 로드맵]을 통해 학습해보세요. https://www.inflearn.com/roadmaps/643•••인프런 프리즘 브랜드 스토리 읽어보기 >>

기타 (개발 · 프로그래밍)CS전공지식컴퓨터구조알고리즘자료구조운영체제네트워크데이터베이스컴퓨터공학인프런프리즘InflearnPrism

데이터베이스 2 - 모델링, 정규화, 트랜잭션, 격리수준, ...

출처 도서 - MySQL로 배우는 데이터베이스 이론과 실습 모델링개념적 모델링, 논리적 모델링, 물리적 모델링 정규화1. 제 1 정규화 : 속성값은 모두 원자값이어야 한다.2. 제 2 정규화 : 기본키가 복합키일 때, 복합키 중 다른 속성의 결정자가 있으면 안 된다.예를 들어, A B C D 속성이 있으며 A와 B가 기본키라고 하자.기본키(A와 B)가 C의 결정자가 아닌 B만이 C의 결정자인 경우 문제가 발생한다.그렇다면 A와 B가 기본키인 A, B, D 속성이 있는 테이블과B가 기본키인 B, C 속성이 있는 테이블로 테이블 분리를 시행하는 것이 해결 방법이 된다.3. 제 3 정규화 : 속성들이 이행적으로 종속되어 있으면 안 된다.A -> B -> C 라면, A -> B, B -> C로 분리해야한다.4. BCNF : 후보키가 아닌 속성이 다른 속성의 결정자이면 문제가 됨결정자를 기본키로 테이블을 분리 변경해야한다.   트랜잭션 : 데이터 처리 단위. all or nothing.원자성(Automicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability) 동시성 제어 락 : 트랜잭션이 데이터를 읽거나 수정할 때 데이터에 표시하는 잠금 장치. 공유락 : 읽기용 락 배타락 : 읽기/쓰기용 락 -> 둘 다 안 됨 락이 걸려있으면 대기 상태가 된다. 락 유지시간으로 인해 락 해제 발생 가능 -> 이 때는 2단계 락킹을 이용. 데드락 발생할 수 있음 -> 하나 강제로 중지 작업 필요   고립 수준 READ UNCOMMITTED : 커밋되지 않은 데이터 읽어들임(오손 읽기) READ COMMITTED : 커밋된 데이터만 읽어들임다른 트랜잭션에서 update + commit된 데이터 읽힘(반복불가능 읽기; 데이터 불일치 문제) REAPEATABLE READ :반복불가능 읽기 문제 방지하지만 다른 트랜잭션에서 insert + commit된 데이터 나타나는 유령 데이터 현상 있음 SERIALIZABLE : select에 공유락 설정. 성능에 안 좋음   JPA와 트랜잭션, 락 보통은 READ COMMITTED 수준에서 낙관적 락, 비관적 락 사용 @Version : JPA에서의 낙관적 락 -> 트랜잭션이 충돌하지 않을 것으로 가정하기에 충돌이 난 후 롤백예외 처리로 다시 업데이트 시도도 가능 @Lock : READ, WRITE, NONEREAD가 JPA의 비관적 락 -> 트랜잭션이 충돌할 것으로 가정하기에 조회할 때부터 락; select for update  

데이터베이스모델링정규화트랜잭션격리수준Lock

sql - section 1

관계형 DBOLTP (Online Transaction Processing): 트랜잭션을 하기위한 데이터베이스특징보류, 중간 상태가 없어서 데이터의 무결성을 유지할 수 있다.데이터 추가, 변경이 많다.쿼리 속도가 느리다.트랜잭션: 데이터베이스의 상태를 변화시키기 위해 수행되는 작업의 단위관련 DBMSoracle데이터 베이스 시장 1위높은 안정성과 유지보수 보장비싼 가격mysql오픈소스데이터 베이스 시장 2위postgreSQL오픈소스mysql보다 sql 표준을 잘 지원하며, 쿼리가 복잡해질 수록 성능이 더 잘 나옴mssql대규모 엔터프라이즈 수준의 시스템에 적합주로 윈도우 환경에 사용default isolation level이 read committed데이터를 읽을 때 공유잠금이 유지 -> WITH(NOLOCK)을 통해 공유잠금없이 데이터 조회OLAP(Online Analytical Processing): 데이터 웨어하우스를 이용해, 분석질의를 처리 목적으로 만들어진 데이터베이스쿼리 속도가 빠른 편데이터 웨어하우스: 분석가능한 정보의 중앙 라포지토리관련 DBMS빅쿼리구글 클라우드의 OLAP + data warehouse 사용컴퓨팅 레이어와 스토리지 레이어 분리각 레이어가 다른 레이어에 영향을 안 미침비관계형 DB (NOSQL)특징key - value 형식을 지원PK,FK JOIN을 지원하지 않음스키마에 대한 정의가 없음장점대용량 데이터 처리에 유리관계형 데이터베이스보다 읽기, 쓰기 속도가 빠름데이터 모델링에 유리분산처리에 유리데이터의 일관성을 보장하지 않아도 되고, join 연산이 필요없을 때 사용하면 유리관련 DBMS몽고DBRedis  

데이터베이스

[강의 정리][1편] 스프링 DB 1편 데이터 접근 핵심 원리 by 김영한

JDBC자바의 데이터베이스 표준 인터페이스DB 벤더 회사의 jdbc 드라이버와 함께 어떤 DBMS와도 사용 가능Sql MapperjdbcTemplate, Mybatis : sql 전달, 응답을 객체로 편리하게 변환 가능, jdbc의 반복 코드 제거ORM코드만으로 가능하다객체지향적으로 작성할 수 있으며, 동적인 쿼리의 재활용에 있어서 편리하다.Sql mapper에 비해 DB에 종속적이지 않다.JPA같은 경우 기본적인 쿼리는 자동 생성해주기 때문에 반복적인 sql 제거가 가능하다.  * 내부에서는 모두 Jdbc 기반이다.  DriverManagerJdbc 연결 관리각각의 DB드라이버들에게 url 정보를 체크해서 처리할 수 있는지 확인한다. Connection Pool필요한 만큼 커넥션을 미리 확보 & 커넥션 재사용대표적인 커넥션 풀 - HikariCPDataSource 인터페이스를 통해 커넥션풀에 직접 접근 없이 커넥션 획득이 가능하다DriverManager에서 DataSource를 사용하려면 DriverManagerDataSource라는 구현 클래스를 통해야한다.DriverManager은 커넥션을 위한 정보 파라미터 계속 넘겨줘야하고, DataSource는 getConnection로 커넥션을 가져온다.설정과 사용의 분리   트랜잭션데이터 베이스 작업단위원자성(all or nothing)모든 작업이 성공했을 때 commit하고, 하나라도 실패한다면 rollback-> 데이터의 일관성 유지 가능 격리성격리수준READ UNCOMMITEDREAD COMMITTED 기본REPEATABLE READ - update x, insert oSERIALIZABLE - select for updateDB 세션이 트랜잭션을 관리자동 커밋은 각각의 쿼리가 트랜잭션 단위이기 때문에 원하는 단위로 묶을 수 없다트랜잭션의 범위를 지정한다는 것은 수동 커밋을 의미한다  

데이터베이스강의

DBMS LOCK

Lock 이란?데이터베이스는 기본적으로 어려 유저가 사용하는 시스템으로써, 동시에 접근하는 경우가 많다. 저장된 데이터는 일관성, 무결성을 유지해야 하며, 동시에 접근하는 상황에서는 특별한 조치가 필요하다.예를 들어 콘서트 자리가 하나 남았는데 2명의 유저가 동시에 티켓팅을 할 경우 티켓팅 성공은 한 사람만 이뤄져야 한다. 이 특별한 조치를 DBMS에서 사용하는 방법이 바로 lock(잠금) 이다.즉, lock은 순차적인 접근을 위한 조치라고 볼 수 있다.Lock의 종류공유 잠금(Shared lock)a.k.a. 읽기 잠금배타 잠금(Exclusive lock)a.k.a 쓰기 잠금공유 잠금(Shared lock)데이터를 읽을 때 사용하는 잠금공유 잠금끼리 접근 가능공유 잠금이 설정된 데이터에는 배타 잠금 사용 불가즉, 공유 잠금이 설정된 경우 다른 세션이 동일한 데이터를 읽을 수 있지만 수정은 불가능배타 잠금(Exclusive lock)데이터 변경할 때 사용하는 잠금트렌젝션 완료까지 유지됨 잠금 해제하기 전까진 다른 트렌젝션 접근 불가즉 배타 잠금 설정 시 다른 세션이 동일한 데이터를 읽을 수도 없으며 수정 또한 불가능블로킹(Blocking)잠금들의 경합으로 인해 특정 세션이 작업을 진행하지 못하고 멈춘 상태공유 잠금 <-> 배타 잠금 / 배타 잠금 <-> 배타 잠금 간 발생 가능해결 방법으로는 이전 트렌젝션이 완료(commit or rollback)돼야 한다.기본적으로 발생 시 먼저 잠금 설정한 트렌젝션을 기다려야 한다. 반복 시 성능 저하 야기 가능하여, 최소화하는 작업이 필요최소화 방법SQL문을 리팩토링하여 빠르게 실행되게 한다.트렌젝션을 짧게 정의동일한 데이터를 변경하는 트렌젝션이 동시에 수행되지 않도록 방지트렌젝션이 활발한 주간에는 대용량 갱신 작업 X필수불가결 상황일 시, 트렌젝션 작업 단위를 나누거나 lock_timeout을 설정하여 최대 잠금 시간 설정교착 상태(Deadlock)여러 개의 트랜젝션들이 자신의 작업을 실행하지 못하고 상대의 작업이 끝나기를 무한정 기다리는 상태를 교착 상태라 한다. 해당 상태는 대표적인 lock의 부작용 사례라고 볼 수 있다. 위의 사진은 교착상태가 일어난 상황이다. 트렌젝션 A는 game_master 테이블의 2번 row를 변경한 후 game_detail의 2번 row를 변경하고자 한다. 반면 트렌젝션 B는 game_detail의 2번 row를 변경한 후 game_master의 2번 row를 변경하고자 한다. 이 상황에서 트렌젝션 A는 game_master의 2번 row에 lock을 걸었으며, 트렌젝션 B는 game_detail의 2번 row에 lock을 걸었다. 트렌젝션 A는 game_detail의 2번 row의 잠금이 풀릴 때 까지 대기해야 하며, 트렌젝션 B는 game_master의 2번 row의 잠금이 풀릴 때 까지 기다려야 한다.이때 서로가 먼저 끝나지 않으면 무한정 대기 상태에 빠지게 되며, 이게 바로 교착 상태(Deadlock)이다. 해결 방법트렌젝션 방향을 같게 설정한다.위의 사례를 예시로 보면, 트렌젝션 A의 접근 순서는 game_master -> game_detail이며, 트렌젝션 B의 순서는 game_detail -> game_master이다. 이때, 트렌젝션 B의 순서를 game_master -> game_detail로 바꿀 시, 교착 상태를 방지할 수 있다. 비록 이러한 상황에서는 블로킹 현상이 발생할 수 있지만, 교착 상태와 비교해서는 감안할 만한 문제이다. 트렌젝션 처리 속도 최소화 set_lock_timeout을 사용하여 잠금 해체 시간 조절무한정 대기에 빠지는 것을 방지한다출처데이터베이스 교착 상태(Dead Lock) : 네이버 블로그 (naver.com)[데이터베이스] 잠금이란? (tistory.com)  

데이터베이스locktransactionDBMSDeadlock

이인표 (지뢰맨)

23.04.03 학습일기

--ID값이 갑자기 이상해졌을때 값 재 설정하는법DBCC CHECKIDENT({DBname},reseed,{indexNumber}) -- 데이터 삭제맨DELETE FROM Customer WHERE Customerid=13; -- 데이터 추가맨insert into Customer values('부산맨','대한민국 부산',1,19) -- blank 지우고 불러오기 예제select * from (select Customerid, CustomerName, replace(CustomerAddress,' ','')as addr, CustomerSex, CustomerAge from Customer) as a where addr = '대한민국인천' -- 설정된 조건에 맞춘 값만 꺼내서 테이블 새로 만들기 예제select * into BusanCustomer from (select Customerid, CustomerName, replace(CustomerAddress,' ','')as CustomerAddress, CustomerSex, CustomerAge from Customer) as a where CustomerAddress = '대한민국부산' select * from IncheonCustomer select * from BusanCustomer select * from Customer --비교연산자 예제select * from Customer where Customerid != 1 --1이 아닌것 전부 --논리연산자 && 비교연산자 예제select * from Customer where Customerid >= 1 AND Customerid <=7 --1이상 && 7이하 --논리연산자 && 비교연산자 예제 (같은 표현)select * from Customer --where Customerid >= 1 AND Customerid <=7 where Customerid BETWEEN 1 AND 7 --1이상 && 7이하 --IN( {target1} , {target2} , {target3} )select * from Customer where CustomerName IN ('김정은','바이든','마망드') --타겟이 들어간 레코드들만 불러오기 -- LIKE 연산자select * from Customer where CustomerAddress LIKE '대한민국%' --대한민국으로 시작하는건 다 찾음 select * from Customer where CustomerAddress LIKE '%포항' --서울으로 끝나는건 다 찾음 select * from Customer where CustomerAddress LIKE '%엘렐레%' --앞뒤로 뭐가 있던 (NULL은 X) 엘렐레가 들어가는건 다 찾음

데이터베이스학습일기

데이터베이스 - SQL

데이터 조작어 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_idgroup by b.id; HAVING 절 GROUP BY절의 조건절. 집계함수와 함께 사용함. GROUP BY로 묶은 데이터 개수가 10개 이상인 데이터만 출력. HAVING count(*) >= 10   조인(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를 기준으로 조인. 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)   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      

데이터베이스SQL

데이터베이스 1 - 개념, 특징, SQL, 조인, 부속질의, 인덱스, 저장프로그램 ...

출처 도서 - MySQL로 배우는 데이터베이스 이론과 실습 데이터베이스 데이터의 집합. 데이터 표준화를 통해 중복제거 등 데이터 무결성을 유지한다. 동시성 제어를 통해 데이터 일관성을 유지한다. 대용량 데이터 속에서 데이터 호출과 갱신의 효율성을 높인다. 하드디스크에 존재하며, 인덱스/데이터 사전 등으로 구성되어 있다.   DBMS(데이터베이스 관리 시스템) 데이터 정의, 구조, 값을 관리한다 <- 설계 과정 데이터는 DB에서, 데이터 구조는 DBMS에서 분리하여 관리하여 서로의 변화에 영향을 받지 않음 -> 데이터 독립성 데이터베이스를 관리하는 소프트웨어로 주기억장치에 상주 -> cpu, 메모리 소모 SQL 컴파일러, 트랜잭션/파일/버퍼 관리자 등으로 구성되어있다.   SQL(구조적 질의 언어) DDL : CREATE, ALTER, DROP DML : SELECT, INSERT, DELETE, UPDATE DCL : GRANT, REVOKE   데이터 모델 객체 관계 데이터 모델 : 객체 속성값(테이블 pk) 사용   테이블 속성 특징 원자성 : 단일값을 가진다. -> 취미라는 속성이 있다면, [독서, 운동] 값이 들어갈 수 있다.-> 두 가지 값을 넣고 싶다면, 취미1/취미2로 속성을 추가 및 분리해야한다. 도메인 값(타입)은 일정해야하며, 속성값의 이름은 중복되지 않아야한다 -> 데이터 표준화 및 일관성 확보 중복된 튜플은 존재하지 않는다. -> 보통은 auto increment int id를 pk로 구분시킴 기본키(primary key) : 튜플을 식별할 수 있는 후보키 중 선정된 대표키 외래키(foreign key) : 두 테이블을 연결하는 키;일대일관계에서는 주인(자주 사용하는 테이블)의 외래키에 주인이 아닌 테이블의 pk가 추가됨 일대다관계에서는 부모의 pk가 자식(주인)의 외래키에 추가됨 참조 무결성 제약조건 : restricted, cascade(같이 삭제), default, nullJPA에서는 생성 시에도 cascade 옵션을 통해 자식 테이블을 같이 생성 가능(save 메서드 없이도)   기본 SQLselectfrom    from - inner join - on    from - left join / right join - on    from - full joinwhere (between, in, like 와일드문자, and ...)group by - havingorder by 속성값 desc/asc 집계함수SUM, AVG, MIN, MAX, COUNT group by - having 사용 시 주의사항select 시 group by에서 사용한 속성값과 집계함수만 출력가능having 조건절에는 집계함수만 사용가능하다 - where 조건절과 구분하기   조인 일반조인from 테이블 나열 + where 조건절join + on 외부조인 outer join   부속질의대량데이터가 있을 경우, 모든 데이터를 합쳐서 연산하는 조인보다 성능이 좋음select, from, where 절에 추가적인 SQL문 추가exists 조건 사용하면 유용   내장함수ABS, CONCAT, LPAD(대체), SUBSTR, LENGTH, IFNULLADDDATE, DATE, DATEDIFF, DATE_FORMAT, STR_TO_DATE ...   뷰가상의 테이블; 기존의 테이블들을 가공하여 필요한 정보들만 출력CREATE VIEW 뷰이름 AS SELECT 문   인덱스하드디스크에서 데이터를 읽어오는 것은 액세스 시간이 소요되며이러한 연산속도를 개선하기 위해 인덱스를 활용인덱스를 중심으로 정렬하여 인덱스에 포함된 컬럼을 조건을 사용하여대용량 데이터 속에서 소량의 데이터를 호출할 때 빠르게 조회할 수 있음   저장 프로그램1. 프로시저 프로시저 생성CREATE PROCEDURE <이름>(<변수이름> <변수타입>, ...)BEGIN SET @<변수> = 0;DECLARE <변수이름> <변수타입>;...END 명령문DELIMITERIF THEN - ELSE - END IFLOOP | WHILE | REPEATRETURN 프로시저 호출CALL <프로시저 이름>(); 2. 함수프로시저는 CALL 명령어로 실행되는 프로그램이고, 함수는 Select문에 호출되어 값을 반환하는 용도로 사용CREATE FUNCTION <함수이름>(<변수이름> <변수타입>) RETURN INTBEGIN...END 3. 트리거CREATE TRIGGER ...INSERT DELETE UPDATE문과 함께 실행    

데이터베이스DBMSSQLtablefieldkey조인