mysql-dml문 select문
SELECT 문
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 empWHERE 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)
'리눅스 > MySQL' 카테고리의 다른 글
MYSQL 4.0 -> 5.1 이전시 예약어 오류 해결 (0) | 2015.01.16 |
---|---|
MySQL 5.5.14 설치 (0) | 2015.01.16 |
[INS-20802] Oracle Net Configuration Assistant failed. (0) | 2015.01.16 |
오라클 10g 설치하기 (0) | 2015.01.16 |
MySQL과 SQLite 날짜 함수 비교 (0) | 2015.01.16 |