mysql-dml문 select문

리눅스/MySQL|2015. 1. 16. 11:20
반응형

SELECT 문

 

1-1. 모든 컬럼 선택
SELECT 키워드에 “*”를 사용하여 모든 열을 조회 할 수 있다.
1-2. 특정 컬럼 선택
테이블의 특정 컬럼을 검색하고자 할 경우 Column이름을 “,”로 구분하여 명시함으로써 특정컬럼을 출력 할 수 있다.
출력 순서는 SELECT문 뒤에 기술한 Column 의 순서대로 출력 됨.
1-3. 열에 별칭 부여
질의의 결과를 출력할 때 사용자가 이해하기 쉽게 열에 이름을 부여 할 수 있다. 
-열 이름 AS 별칭
-열 이름  별칭
1-4. 중복행의 제거
특별히 명시 되지 않았다면 중복되는 행을 제거하지 않고 Query결과를 출력한다.
결과에서 중복되는 행을 제거하기 위해서는 SELECT 키워드 바로 뒤에 distinct를 기술한다.

 

 

1-4. 중복행(레코드)의 제거
DISTINCT라는 키워드는 항상 SELECT 바로 다음에 기술한다.
DISTINCT뒤에 나타나는 컬럼들은 모두 DISTINCT의 영향을 받는다
DISTINCT뒤에 여러 개의 컬럼을 기술하엿을 때 나타나는 행은 컬럼의 조합들이
중복되지 않게 나타난다.

 

 


1-5. 특정 레코드의 검색
일반적인 경우 테이블에 있는 모든 자료를 조회할 필요 없이 사용자가 원하는 자료를 조회하는 경우 WHERE절을 사용하여 조회한다
-조건은 아래의 것으로 구성된다.
비교연산자,SQL연산자,논리 연산자등 비교연산자에는

= ,> ,>=, < , <=, <>(!=) 등이 있고

SQL 연산자에는 BETWEEN a AND b,  IN ,LIKE,IS NULL 등이 잇고
논리 연산자에는 AND , OR,  NOT 이 있다.
mysql>SELECT empno 사번, ename 성명  

      FROM   emp      

  WHERE  deptno = 10; 


BETWEEN연산자
  두 값의 범위에 해당하는 행을 출력하기 위해 사용한다.
  BETWEEN연산자는  컬럼 >= 값 AND 컬럼 <= 값과 같은 의미이다.
mysql>  SELECT empno, ename    

       FROM  emp        

   WHERE  sal BETWEEN  3000 AND 5000 ; -->

급여가 3000에서 5000사이인 사원만 보여줍니다.  

    EMPNO ENAME  

  ---------- ------      

 7788 SCOTT       7839 KING       7902 FORD   3 개의 행이 선택되었습니다. 


IN(NOT IN)연산자
  목록에 있는 값에 대해서 출력하기 위해  IN연산자를 사용한다.
  IN 연산자는 OR로 연결된 논리연산자의 결합과 같다. 
mysql> SELECT empno, ename     

     FROM  emp      

    WHERE  empno IN (7900, 7934) ; -->

 사번이 7900, 7934번인 사원의 사번과 성명 출력   

  EMPNO    ENAME 

 --------- -------------      

7934      MILLER      7900      JAMES 2 개의 행이 선택되었습니다. 

 

 


LIKE연산자
LIKE 'A%‘:컬럼이 'A'로 시작하는 데이터들만 검색됩니다.
LIKE '%A‘:컬럼이 'A'로 끝나는 테이터들만 검색됩니다.
LIKE '%KIM%‘:컬럼에 'KIM' 문자가 있는 데이터 들만 검색됩니다.
LIKE '%K%I%‘:컬럼에 'K' 문자와 'I'문자가 있는 데이터 들만 검색됩니다.
LIKE '_A%‘:컬럼에 'A'문자가 두 번째 위치한 데이터 들만 검색됩니다
mysql>SELECT empno, ename   
     
   FROM  emp       

       WHERE  UPPER(ename) like '%K%';

EMPNO ENAME

 ------- -----------  

  7698 BLAKE    7782 CLARK    7839 KING 


IS NULL(IS NOT NULL)연산자
NULL값은 값이 없거나 ,알 수 없거나,적용할 수 없다는 의미이므로 NULL값을
조회하고자 할 경우에 사용한다.
NULL은 이용할 수없고 할당되지 않고 알려져 잇지 않고 적용 불가능한 값을 의미한다.
NULL이란 0이나 공백(SPACE)와 다르다.
NULL값을 포함한 산술 표현식 결과는 NULL이다.
컬럼에 데이터 값이 없으면 그 값 자체가 NULL이다.

 

 


1-6. ORDER BY절
질의 결과에 반환되는 행의 순서는 정의되지 않는다.
ORDER BY절은 행을 정렬하는 데 사용한다. ORDER BY절을 사용하는 경우
SELECT문의 맨 뒤에 기술 되어야 한다. 
Order BY 컬럼 내지 표현식 [ASC|DESC] 
  -디폴트 정렬은 오름차순이다.
   숫자는 가장 적은 값이 먼저 출력 됨,날짜는 가장 빠른 값이 먼저 출력 됨
   문자는 알파벳 순서로 출력 됨
  -내림 차순으로 정렬하려면 ORDER BY절에서 열 이름 뒤에 DESC 키워드를 명시
   해야한다.
다중에 의한 정렬
  -하나 이상의 열로 질의 결과를 정렬할 수 있다.
  -주어진 테이블에 있는 컬럼 개수까지만 가능하다
  -ORDER BY절에서 열을 명시하고, 열 이름은 콤마(,)로 구분한다,
  -SELECT절에 포함되지 않는 열로 정렬 할 수도 잇다.



1-7. LIMIT 절
질의 결과에서 특정행 부터 특정 개수를 가져오기 위한 구문
반드시 질의문 맨 끝에 기술한다.
행은 0부터 인덱스가 시작된다
표기 방법은 LIMIT 시작행,행의 개수
시작행 생략시 첫번째 행부터 결과를 가져온다.
mysql>SELECT empno, ename         FROM  emp         WHERE  UPPER(ename) like '%K%’ LIMIT 2,3; 
3번째 행부터 시작해서 3개의 레코드를 가져오는 질의문
1-8. GROUP BY
 GROUP BY절에 의해 행을 그룹화 할 수 있다.
 SELECT절에 GROUP 함수와 Column이 같이 기술되면 반드시 group by절이 기술
 되어야 한다.
그러나  select절에 group함수만 기술되고 column은 기술되지 않으면 반드시
Group 절을 기술할 필요는 없다



1-8. GROUP BY
#GROUP 함수
COUNT(*): 테이블의 전체  레코드 갯수를 가져온다
예) SELECT COUNT(*) FROM 테이블명
AVG(컬럼명): 해당 컬럼의  전체 평균값을  구한다.
예) SELECT AVG(컬럼명) FROM 테이블명
MAX(컬럼명): 해당 컬럼의 가장 큰 값을 구한다.
예) SELECT MAX(컬럼명) FROM 테이블명
MIN(컬럼명): 해당 컬럼의 가장 작은 값을 구한다
예) SELECT MIN(컬럼명) FROM 테이블명

 

1-8. GROUP BY
GROUP BY는 ORDER BY전에 기술해야 한다.
그룹에 대한 조건은 HAVING절에서 기술해야 한다.
Group by 구문:
GROUP BY 행을 그룹화 하기위한 기준이 될 Column을 기술
[HAVING 그룹에 대한 조건]

2. SELECT문-조인문
하나 이상의 테이블로부터 자료를 검색하기 위해서 join을 사용한다.
일반적으로 primary key와 foreign key을 사용하여 join 하는 경우가 대부분이지만  때로는 논리적인 값들의 연관으로 join하는 경우도 있다.
2-1. INNER JOIN
   가장 자주 사용되는 조인문으로 테이블 간에 연결 조건을 모두 만족하는 행을 
   검색하는데 사용한다.
   검색시 검색되는 컬럼이 조인하는 테이블 모두에 존재한다면 반드시 컬럼명에
   테이블 이름을 “테이블명.컬러명” 의 형태로 기술해야 한다.

 

SELECT문-조인문
2-1. INNER JOIN
사용구문:   
     SELECT 컬럼명…..
     From 테이블명1 [INNER] JOIN 테이블명2 
     ON 조인 조건
#테이블에 별칭 부여
-테이블에 별칭을 부여하여 긴 테이블 명을 간단하게 사용한다.
-테이블 이름대신에 별칭을 사용한다.
-SQL코드를 적게 사용하여 코딩 시간이 절약되고 메모리를 보다 적게 사용한다.
-테이블 별칭은 30자까지 사용 가능하지만 짧을수록 좋다.

#여러 개의 테이블의 INNER JOIN
3개 이상의 테이블을 가지고 JOIN하는 경우 기본 개념은 2개의 테이블에서 출발한다.
즉 2개의 조인결과를 하나의 테이블로 보고 INNER JOIN문을 사용하면 된다.

 

SELECT문-조인문
2-2. OUTER JOIN
OUTER JOIN은 INNER JOIN과는 달리 두 테이블에 조인 조건이 정확히 일치 하지 않더라도 어느 한쪽 테이블에서 결과값을 모두 가져오는 JOIN문이다.
OUTER JOIN문을 사용할때는 반드시 OUTER 전에 데이터를 어느 쪽 테이블에서 
가져올지 즉 왼쪽인지(LEFT) 오른쪽인지(RIGHT) 아니면 양쪽 테이블(FULL)인지 
반드시 기술해야 한다.
LEFT OUTER JOIN
-JOIN문 왼쪽을 중심으로 왼쪽에 있는 테이블에서 데이터를 모두 가져온다.
RIGHT OUTER JOIN
-JOIN문 오른쪽을 중심으로 오른쪽에 있는 테이블에서 데이터를 모두 가져온다
FULL OUTER JOIN
-JOIN문 양쪽에 있는 모든 테이블에서 데이터를 모두 가져온다

 

 

[출처] 보는것은 다좋아 | 코자 (http://blog.naver.com/sjyoonmslee?Redirect=Log&logNo=70088087588)


반응형

댓글()