: <테이블명>이나 테이블명 이나 테이블 이나 똑같은 것입니다. (처음에 괄호를 넣어서 적다가 나중에 안적게됨... 추후 수정하겠습니다.)

: 명령문 끝에는 ; 를 넣어야합니다.


명령문 

기능 

show databases 

db 목록 

show tables 

table 목록 

desc 테이블명 

table의 colum 목록

 CREATE TABLE 테이블명(
       컬럼이름 자료형(길이) NULL여부 기타,
ex)    id int (11) not null auto_increment,
       name varchar(10),
       primary key(id)                   // pimary key를 id로 정함.
);

테이블을 생성한다. 


 SELECT 문

 명령문

기능 

 desc <테이블명>

테이블의 스키마를 표시한다 

select * from  <테이블명>

테이블의 레코드를 모두 표시한다 

select * from <테이블명> where  <레코드명>='???'

테이블에서 해당 레코드명에 해당하는 것을 찾아 표시한다

select * from <테이블명> where <레코드명> > 1000

테이블에서 해당 레코드의 1000이 넘는 것을 찾아 표시한다 


INSERT 문

명령문 

기능 

INSERT into <테이블명>(<컬럼명>) values(값)

해당 테이블에 컬럼에 값을 집어넣어 레코드를 추가한다 

INSERT into <테이블명> values (전체 컬럼에 해당하는 값)

해당 테이블에 레코드를 추가한다 


UPDATE 문

명령문 

기능 

 update <테이블명> set <컬럼명> = '???' where <컬럼명> = '???'

테이블에서 해당컬럼이 ???인 컬럼의 값을 ???로 바꾼다. 

DELETE 문

 명령문

기능 

delete from <테이블명> where <컬럼명> ='???'

테이블에서 컬럼값이 ???인 레코드를 삭제한다

DISTINCT 연산자

 명령문

기능 

SELECT DISTINCT<컬럼명> from <테이블명>  WHERE <컬럼명> = '???'

SELECT문에서 특정컬럼이 중복되서 출력될시 이를 제거하여 하나만 출력되게 함


논리연산자 (AND, OR, NOT)

명령문 

기능 

SELECT * FROM  <테이블명> WHERE (NOT) 조건1 AND/OR (NOT) 조건2...

SELECT 문의 조건절에 논리 조건을 적용하여 검색 


논리연산자 (IN, BETWEEN)

 명령문

기능 

... WHERE <컬럼> IN (값의 배열)

 값 OR 값 OR 값 .... 연산역할을 함

 ... WHERE (컬럼 BETWEEN 값 AND 값)

'컬럼 >= 값 AND 컬럼' <= 값 의 의미를 띔 


결과 정렬(ORDER BY)

 명령문

기능 

SELECT * FROM <테이블명> WHERE 조건절 ORDER BY 컬럼명 ASC/DESC, 추가조건절... 

SELECT문의 결과값을 특정 칼럼 기준으로 오른차순/내림차순으로 정렬해서 표시 

결과값 일부 조회 (MYSQL - LIMIT, ORACLE - ROWNUM, SQLSever - TOP)

 명령문

기능 

SELECT 컬럼 FROM  테이블 WHERE 조건절 LIMIT 숫자

상위 해당 숫자만큼의 결과만 보여줌 


집합함수 (Aggregation Function)

 명령문

기능 

SELECT count(컬럼) FROM 테이블 WHERE 조건

조건에 해당하는 컬럼이 몇개인지 센다. 

 SELECT sum(컬럼) FROM 테이블 WHERE 조건

 합계

 SELECT avg(컬럼) FROM 테이블 WHERE 조건

평균 

 SELECT min(컬럼) FROM 테이블 WHERE 조건

최솟값 

 SELECT max(컬럼) FROM 테이블 WHERE 조건

최댓값 


유용한 함수

 명령문

기능

SELECT length(컬럼) FROM 테이블 WHERE 조건

 해당 컬럼의 글자수를 표시

SELECT upper(mid(컬럼,시작글자(1~),마지막글자(~n))) FROM 테이블 WHERE 조건 

해당 컬럼의 지정 범위만큼의 글자를 자른 뒤, 대문자로 바꾼다.

SELECT lower(mid(컬럼,시작글자(1~),마지막글자(~n))) FROM 테이블 WHERE 조건 

 해당 컬럼의 지정 범위만큼의 글자를 자른 뒤, 소문자로 바꾼다.

 SELECT round(컬럼,0) FROM 테이블 WHERE 조건

 소수점 첫째자리에서 반올림한다.


JOIN 

: 서로다른 테이블을 공통 컬럼을 기준으로 합치는 테이블 단위 연산이다.

: 조인 시 서로 다른 테이블에 같은 컬럼명이 존재할 경우, 테이블명.컬럼명으로 사용하여 구별한다.

: default는 inner join 이다.

 명령문

기능

SELECT 컬럼 FROM 테이블 JOIN 테이블 ON 테이블1.컬럼 = 테이블2.컬럼

 테이블1.컬럼과 테이블2.컬럼을 JOIN 하여 표시한다. 

 SELECT 컬럼 FROM 테이블 INNER JOIN 테이블 ON 테이블1.컬럼 = 테이블2.컬럼

 조인시 매칭되는 결과가 없는 레코드는 빠진다.

 SELECT 컬럼 FROM 테이블 LEFT JOIN 테이블 ON 테이블1.컬럼 = 테이블2.컬럼

 조인시 JOIN의 왼쪽 테이블의 매칭되지 않는 테이블을 모두 표시

 SELECT 컬럼 FROM 테이블 RIGHT JOIN 테이블 ON 테이블1.컬럼 = 테이블2.컬럼

  조인시 JOIN의 오른쪽 테이블의 매칭되지 않는 테이블을 모두 표시

 SELECT 컬럼 FROM 테이블 FULL JOIN 테이블 ON 테이블1.컬럼 = 테이블2.컬럼

  조인시 JOIN의 모든 테이블의 매칭되지 않는 테이블을 모두 표시

: MySQL은 지원하지 않음.


ALIAS

: SQL 쿼리 결과 생성시 컬럼명에 대한 별명을 사용해 표시하는 기능

: 조인할 때 많이 사용한다.

명령문 

기능 

SELECT 컬럼 AS 별명 FROM ... 

해당 컬럼을 별명으로 표시함. 


VIEW

: SQL 쿼리의 결과 값을 임시테이블로 저장해서 사용함

: 사용용도가 끝나면 삭제해야함. (DROP VIEW 뷰이름)

명령문 

기능 

CREATE VIEW 뷰이름 AS SELECT... 

해당 SELECT의 결과로 뷰이름에 해당하는 테이블을 생성함. 

 SELECT * FROM 뷰이름

뷰를 확인 

 DROP VEIW 뷰이름

뷰를 삭제 


SELECT INTO

: 쿼리결과로 새 테이블을 만든다.

: 기존에 존재하지 않는 테이블이 새로 생성된다.

명령문 

기능 

CREATE TABLE 테이블명 SELECT * FROM 테이블명 

해당 결과를 테이블로 만든다. 


INSERT INTO SELECT

: 쿼리 결과를 기존 테이블에 추가한다(기존테이블이 존재해야한다.)

: 컬럼이 모두 매칭이 되야 한다.

명령문 

기능 

INSERT INTO 테이블 SELECT * FROM 테이블

 결과를 기존 테이블에 추가한다.


CASE...WHEN...END

: 조건에 다른 처리를 할 수 있다.

명령문 

기능 

SELECT CASE WHEN 조건1 THEN 실행 WHEN 조건2 THEN 실행 END FROM 테이블명

 조건에 따라 다른 결과를 표시한다.


LIKE 검색

: 정확한 키워드를 모를 경우 일부만으로 검색하는 방법

: 와일드카드를 사용하여 패턴 매칭한다. (% : 0~N 글자 , _ : 1글자)

: LIKE 검색 시 논리 조건자(OR, AND)를 섞지 않는게 좋다

명령문 

기능 

SELECT * FROM 테이블명 WHERE 컬럼명 LIKE 'k%' 

컬럼명 첫글자에 k가 들어가는 단어를 모두 찾아준다.

 SELECT * FROM 테이블명 WHERE 컬럼명 LIKE '%k' 

 컬럼명 마지막 글자에 k가 들어가는 단어를 모두 찾아준다.

 SELECT * FROM 테이블명 WHERE 컬럼명 LIKE '%k%' 

 컬럼명 중간에 k가 들어가는 단어를 모두 찾아준다.

 SELECT * FROM 테이블명 WHERE 컬럼명 LIKE 'k_' 

 첫글자에 k가들어가고 뒤에 한글자가 더있는 글자를 찾아준다.
응용하면 _의 개수를 더 써서 그 숫자만큼의 글자를 찾을 수 있다.


NULL 값

명령문 

기능 

SELECT * FROM 테이블 WEHRE 컬럼 IS NULL 

해당 컬럼이 NULL 인  레코드를 찾아준다.

 SELECT * FROM 테이블 WEHRE 컬럼 IS NOT NULL 

해당 컬럼이 NULL 이 아닌  레코드를 찾아준다. 


NULL 함수

: 숫자칼럼을 연산할 때 NULL을 처리해주는 함수

: 보통 NULL이나오면 자동으로 제외하고 계산한다.(SUM()같은 함수에 내장되어있음)

명령문 

기능 

SELECT avg(IFNULL(컬럼,0)) FROM 테이블

해당 컬럼에 NULL 이 있을 경우 0을 넣어 평균한다.

적용시/미적용시 차이가 난다. (미 적용시 제외하고 계산하기때문.) 


GROUP BY

: distinct 와 sort의 기능을 합쳐놓은 듯한 명령어이다.

: 특정 칼럼의 연산 결과를 확인할때 보통 사용한다.

: GROUP BY 에 선언한 컬럼만 출력할 수 있다.

: 정확한 역할은 잘 모르겠다. 

명령문 

기능 

SELECT 컬럼,집합함수(컬럼)... FROM 테이블 GROUP BY 컬럼,컬럼...

 출력 컬럼은 GROUP BY에 선언되어있어야한다.
 집합 함수에 들어가는 컬럼은 선언이 되어있지 않아도 된다.
 자동으로 DISITINCT 와 SORT가 적용되는 것 같다.


HAVING

: GROUP BY 에서 WHERE 조건절을 대체하여 사용한다.

명령문

기능 

SELECT 컬럼 FROM 테이블 GROUP BY 컬럼 HAVING 조건 

 조건에 해당하는 컬럼만 출력해라.


SUBQUERY

: 쿼리문 내에 또 다른 쿼리문이 있는 형태

: SELECT/FROM/WHERE/HAVING/ORDER BY/VALUES(INSERT)/SET(UPDATE)...등에서 사용가능하다.

- 단일행 서브쿼리

: 결과가 레코드 하나인 서브쿼리

: 일반연산자(=,>,<...) 사용

- 다중행 서브 쿼리

: 결과 레코드가 여러개

: IN, ALL, ANY, EXISTS 사용

ALL == 결과 레코드 중 가장 큰 값과 비교한다.

ANY == 결과 레코드 중 가장 작은 값과 비교한다.

IN/EXISTS == 결과 값 중 모두와 비교하라. ( IN의 경우 값들을 집어 넣고 // EXISTS 의 경우 TRUE/FALSE 의 경우만 생각한다.)

- 멀티 컬럼 서브쿼리

: 결과가 컬럼 여러개인 서브쿼리

: IN, ALL, ANY, EXISTS 사용

단일행 서브쿼리

 

 SELECT 컬럼 FROM 테이블1 WHERE 컬럼=
       (SELECT 컬럼 FROM 테이블2 WHERE 조건);

 조건에 해당하는 테이블2.컬럼과 동일한 컬럼값을 가지는 테이블1.컬럼을 찾는다.

 ALL/ANY

 

 SELECT 컬럼 FROM 테이블 WHERE 컬럼 >
        ALL/ANY(SELECT 컬럼 FROM 테이블)

ALL: 해당 컬럼에 해당하는 값 중 최댓값과 비교한다. 
ANY: 해당 컬럼에 해당하는 값 중 최솟값과 비교한다.  

 IN/EXISTS

 

 SELECT 컬럼 FROM 테이블1 WHERE 컬럼
        IN/EXISTS (SELECT 컬럼 FROM 테이블2 WHERE 조건)

INT : 조건에 해당하는 컬럼 값과 만족하는 레코드를 출력
EXISTS : 조건에 해당하는 컬럼이 있으면 해당 레코드를 출력

: EXISTS 는 잘 모르겠다.


집합연산

: 결과값의 집합연산을 지원한다.

UNION - 합집합

INTERSECT - 교집합

MINUS - 차집합

: 결과 형식이 동일해야하며, DISTINCT 적용이 된다. (UNION ALL 사용시 DISTINCT 미적용)

: 다른테이블이어도 됨.

: MySQL 은 INTERSECT, MINUS를 지원하지 않는다.

명령어 

기능 

쿼리 UNION 쿼리 

두 결과의 합집합 

쿼리 UNION ALL 쿼리

DISTINCT 미적용된 합집합 

쿼리 INTERSECT 쿼리

교집합 

 MySQL에서는 조건절에 서브쿼리 IN을 사용하여 대체한다.

 교집합

 쿼리 MINUS 쿼리

차집합 

  MySQL에서는 조건절에 서브쿼리 NOT IN을 사용하여 대체한다.

 차집합



'프로그래밍 > RDBMS - MySQL' 카테고리의 다른 글

INDEX  (0) 2017.03.28
DCL(Data Control Language) 명령어  (0) 2017.03.27
DDL(Data Definition Language) 명령어  (0) 2017.03.27
3. SQL  (0) 2017.03.24
1. DBMS 기초  (0) 2017.03.20

1. SQL의 이해와 종류

* SQL의 이해

: 사용방법이나 문법이 다른 언어에 비해 단순함

: 인터프리터

: 대소문자를 구별하지 않음

: 데이터베이스에 있는 필요한 정보를 사용할수있도록 도와주는 언어

* DML(Data Manipulation Language) 

: 테이블의 레코드를 CRUD함.

: INSERT, DELETE, UPDATE, SELECT를 사용

* DDL(Data Definition Language)

: DB, 테이블의 스키마를 정의, 수정하는 기능

: 테이블 생성, 컬럼추가, 타입변경 등등

: CREATE, DROP, ALTER

* DCL(Data Control Language) 

: DB나 테이블의 접근권한이나 CRUD권한을 정의

: GRANT, REVOKE

'프로그래밍 > RDBMS - MySQL' 카테고리의 다른 글

INDEX  (0) 2017.03.28
DCL(Data Control Language) 명령어  (0) 2017.03.27
DDL(Data Definition Language) 명령어  (0) 2017.03.27
SQL 기본 & DML(Data Manipulation Language) 명령어 모음  (0) 2017.03.27
1. DBMS 기초  (0) 2017.03.20

1. DataBase Management System

: 데이터베이스를 관리하는 시스템

: CRUD(Create, Retrieve, Update, Delete) (생성, 검색, 수정, 삭제)

: 대량의 데이터를 처리하는 시스템

: 다양한 자료구조와 검색구조를 사용해 빠른 검색이 가능하다

* 정렬

: 빠른 검색을 위해서는 데이터가 반드시 정렬이 되어 있어야함.

: 정렬이 되어 있다면, 데이터를 빠른 시간안에 찾을 수 있음

: NlogN

: 퀵정렬/힙정렬 계열이 주로 사용됨

* 인덱스

: 인덱스 종류
    - 이진검색
    -B-Tree 계열
        - 사용 DBMS에서 가장 일반적으로 사용됨.

: 데이터를 추가/수정/삭제할 떄마다 정렬/인덱스 업데이트가 일어남.

* 이진탐색

: 데이터를 정렬후 'test'라는 단어를 검색하는 경우

: 한가운데 값을 찾고 좌측 또는 우측으로 다시 한가운데를 검색

: log_2의 N번으로 검색할 수 있게됨.

: 약 1000개의 데이터가 있을 때 10번만 찾으면 데이터를 찾을 수 있게됨.

: 데이터가 추가/삭제/변경될 때마다 한가운데 들의 값을 미리 계산해 둔다.

* B-트리

: 이진검색과 유사하지만, 한번에 비교를 2번한다.

: a<x<b 같은 방법으로 비교함.

: 이 기술은 R이 CUD보다 많다는 가정하에 사용되어짐.

* DBMS의 종류

: 계층형 데이터 베이스

: 네트워크형 데이터 베이스

: 관계형 데이터 베이스(RDBMS)

: 객체 지향 데이터 베이스

: 객체 관계형 데이터 베이스(ORDBMS)

: NoSQL(Not Only SQL)

2. RDBMS

* RDBMS란?

: 관계형 데이터베이스 시스템

: 테이블 기반의 DBMS

: 테이블-컬럼 형테의 데이터 저장 방식

: 테이블과 테이블간의 연관관계(주로 외래키의 형태)를 이용해 필요한 정보를 구하는 방식

: 모델링은 E-R(Entity Relationship)모델을 사용

: 테이블을 엔티티(기본)과 Relationship(유도)테이블로 구분하는 방식.

: 데이터를 테이블 단위로 관리

: 하나의 테이블은 여러개의 컬럼으로 구성됨

: 테이블끼리의 중복정보는 최소화 시킴

: 동일한 데이터가 중복되면 수정시 문제발생 확률이 높아짐

: 정규화 -> 정규형을 통해 해결한다.

: 사용방식

: 여러 테이블을 합쳐 큰 테이블을 생성

* 기본용어

: 스키마

: DB, 테이블 정의 내역

: SQL쿼리(SQL Query) Structured Query Language

: 관계형 DBMS를 사용하는 전용 질의 언어

: 대소문자 가리지 않음 / Interpreter 언어이다.

: 기본키(Primary Key:PK)

: 테이블에서 하나의 레코드를 지정할 수 있는 하나 이상의 컬럼집합

: 주민등록번호, SSN(Social Security Number) 같은 것들

: 외래키(Foreign Key:FK)

: 어떤 테이블의 기본키가 다른 테이블의 컬럼에 들어있을 경우

: 테이블(Table)

: 정보들의 묶음 단위

: 학교,학생, 교수 등등..

: 컬럼

: 테이블을 구성하는 정보들

: 학생테이블- 이름,주소,전화번호,나이,성별...

: 레코드(Record)

: 테이블에 들어있는 여러가지 인스턴스 하나하나를 지정

: 대학교의 학과 테이블

: 경영학과,미술학과, 수학과...

: 기본키로 구별가능

: 도메인 값(Domain Value)

: 각 컬럼에서 나올 수 있는 후보값

'프로그래밍 > RDBMS - MySQL' 카테고리의 다른 글

INDEX  (0) 2017.03.28
DCL(Data Control Language) 명령어  (0) 2017.03.27
DDL(Data Definition Language) 명령어  (0) 2017.03.27
SQL 기본 & DML(Data Manipulation Language) 명령어 모음  (0) 2017.03.27
3. SQL  (0) 2017.03.24

+ Recent posts