DML(Data Manipulation Language)- SELECT

박정훈·2021년 1월 5일
0

database

목록 보기
3/5

데이터 조작어의 종류

  • 데이터 조작어는 모두 동사로 시작한다. 시작하는 동사에 따라서 다음과 같은 4가지 조작어가 있다.
    • SELECT - 검색
    • INSERT - 등록
    • UPDATE - 수정
    • DELETE - 삭제

SELECT 구문의 기본문형

  • SELECT - 검색하고자 하는 데이터(칼럼)를 나열한다. 나열시에는 콤마(,)를 통해 칼럼을 구분한다.
    SELECT는 필수적인 요소이고 나머지는 부가적인 요소이다.(MySQL) 오라클에서는 SELECT와 FROM이 필수적인 요소이다.
SELECT (DISTINCT) 칼럼명 (ALIAS)
FROM 테이블명
WHERE 조건식
ORDER BY 칼럼이나 표현식 (DESC);
  • 사원 번호와 이름 직무를 출력하세요.
SELECT EMPNO, NAME, JOB
FROM EMPLOYEE;
  1. DISTINCT - 중복행을 제거, ALL과 DISTINCT 둘 중에 하나를 쓸 수 있다. ALL이 기본 값이다.
  • 부서 번호를 중복 없이 출력하세요.
SELECT DISTINCT DEPTNO
FROM EMPLOYEE;
  1. ALIAS - 나타날 칼럼에 대한 다른 이름 부여, AS는 써도 되고 안써도 되지만 쓰는 것이 좋다. 코딩시에 별칭을 찾을 때 AS를 검색해서 찾을 수 있기 때문이다.
    다른 이름을 부여할 때 빈칸이 있는 경우에는 ''나 ""로 감싸주어야 한다.
  • 사원 번호를 사번, 이름을 이름, 직무를 직업이라는 별칭으로 출력하세요.
SELECT EMPNO AS 사번, NAME AS 이름, JOB AS 직업
FROM EMPLOYEE;

SELECT EMPNO 사번, NAME 이름, JOB 직업
FROM EMPLOYEE;

SELECT EMPNO AS '사 번', NAME "이 름", JOB '직 업'
FROM EMPLOYEE;
  1. 전체 데이터 검색은 SELECT 뒤에 *를 쓰면 된다.
  • DEPARTMENT 테이블의 모든 데이터를 출력하세요.
SELECT *
FROM DEPARTMENT;
  • FROM - 선택한 칼럼이 있는 테이블을 명시한다. 테이블에도 ALIAS가 가능하다.
  • ORDER BY - SELECT를 통해 조회한 칼럼들을 ORDER BY절의 기준에 따라 정렬하여 보여준다.
    • ASC - 오름차순 정렬, 기본 값
    • DESC - 내림차순 정렬
  • 이름을 기준으로 오름차순으로 정렬하여 사원번호는 사번, 아름은 이름, 직무는 직업이라는 별칭으로 출력하세요.
SELECT EMPNO AS 사번, NAME AS 이름, JOB AS 직업
FROM EMPLOYEE
ORDER BY 이름;
  • WHERE - 특정 행 검색을 위해 쓴다. 칼럼이름이나 표현식의 상수, 연산자로 구성되어 있다.
  1. 산술 비교 연산자도 사용 가능하다.
  • 입사일이 1981년 이전인 사원 이름과 부서 번호를 출력
   SELECT NAME, HIREDATE
   FROM EMPLOYEE
   WHERE HIREDATE < '1981-01-01';
  1. 논리 연산자도 가능하다.
  • 부서번호가 30인 사원 이름과 부서 번호를 출력
 SELECT NAME, DEPTNO
 FROM EMPLOYEE
 WHERE DEPTNO = 30;
  1. IN 키워드, OR, AND
  • 부서번호가 10번 또는 30번인 사원 이름과 부서 번호를 출력
SELECT NAME, DEPTNO
FROM EMPLOYEE
WHERE DEPTNO IN (10, 30);

SELECT NAME, DEPTNO
FROM EMPLOYEE
WHERE DEPTNO = 10 OR DEPTNO = 30;
  • 부서번호가 30 이면서 연봉이 1500 보다 적은 사원 정보를 출력
SELECT *
FROM EMPLOYEE
WHERE DEPTNO = 30 AND SALARY < 1500;
  1. LIKE 키워드
    • 와일드 카드를 사용하여 특정 문자를 포함한 값에 대한 조건처리를 할 수 있다.
    • % 는 0에서부터 여러 개의 문자열을 나타낸다.
    • _ 는 단 하나의 문자를 나타낸다.
    • 이름에 'A'가 포함된 사원의 정보를 출력하세요.
SELECT *
FROM EMPLOYEE
WHERE NAME LIKE '%A%';
  • GROUP BY
    • 해당 칼럼의 같은 값끼리 그룹을 만든다.
    • 'XX별 ~를 출력하라.'처럼 XX별이라는 말이 나오면 GROUP BY를 생각
    • SELECT절에서 그룹핑을 하고 써야한다. 그렇지 않으면 잘못된 값이 나온다. 오라클에서는 에러가 나지만 MySQL은 잘못된 값을 출력한다.
SELECT DEPTNO, AVG(SALARY), SUM(SALARY)
FROM EMPLOYEE
GROUP BY DEPTNO;

그룹함수

  • COUNT(expr)
    NULL값은 제외한 row의 숫자를 반환
  • COUNT(DISTINCT expr, [expr ...])
    non-NULL인 중복되지 않은 row의 숫자를 반환
  • COUNT(*)
    row의 숫자를 반환
  • AVG(expr)
    expr의 평균값을 반환
  • MIN(expr)
    expr의 최소값을 반환
  • MAX(expr)
    expr의 최대값을 반환
  • SUM(expr)
    expr의 합계를 반환
SELECT AVG(SALARY), SUM(SALARY)
FROM EMPLOYEE
WHERE DEPTNO = 30;
  • GROUP_CONCAT(expr)
    그룹에서 concatenated한 문자를 반환
  • VARIANCE(expr)
    expr의 분산을 반환
  • STDDEV(expr)
    expr의 표준 편차를 반환

CAST 형 변환

  • CAST 함수는 TYPE을 변경하는데 유용하다.
  • MySQL 타입: BINARY, CHAR, DATE, DATETIME, SIGNED {INTEGER}, TIME, UNSIGNED {INTEGER}
CAST(expression AS type)
CONVERT(expression, type)
CONVERT(expr USING transcoding_name)
SELECT CAST(NOW() AS DATE);
FROM DUAL;

SELECT CAST(1-2 AS UNSIGNED)
FROM DUAL;

여러가지 함수 이용

  • UCASE(), UPPER()
SELECT UCASE('seoul'), UPPER('SEoul')
FROM DUAL;
  • LCASE(), LOWER()
SELECT LOWER('Seoul'), LCASE('seOUL')
FROM DUAL;
  • CONCAT
    '사원 번호-부서 번호'의 형식으로 출력하세요.
   SELECT CONCAT(EMPNO, '-', DEPTNO) AS '사번-부서번호'
   FROM EMPLOYEE;
  • SUBSTRING
    • SUBSTRING(문자열, 시작 인덱스, len)
    • 시작 인덱스부터 len만큼의 문자열을 보여준다.
    • MySQL에서는 문자열의 인덱스가 1부터 시작한다.
SELECT SUBSTRING('HAPPY DAY', 3, 2)
FROM DUAL;
  • LPAD, RPAD
    • LPAD(문자열, len, 문자)
    • 문자열의 왼쪽이나 오른쪽에 문자를 len만큼 반복해서 붙여준다.
    • 비밀번호나 일부 정보를 가려서 보여줄 때 자주 사용한다.
SELECT LPAD('HI', 5, '?'), LPAD('JOE', 7, '*')
FROM DUAL;
  • TRIM, LTRIM, RTRIM
    주로 좌우 공백을 제거하기 위해 사용한다.
SELECT LTRIM('   HELLO   '), RTRIM('   HELLO   ')
FROM DUAL;
'HELLO    ', '   HELLO'
SELECT TRIM('HI'), TRIM(BOTH 'X' FROM 'XXXHIXXX')
FROM DUAL;
'HI', 'HI'
  • ABS(X)
    X의 절대값을 구한다.
SELECT ABS(2), ABS(-2)
FROM DUAL;
2, 2
  • MOD(N, M)
    N을 M으로 나눈 나머지 값을 출력한다.
SELECT MOD(234, 10), 253 % 7, MOD(29, 9)
FROM DUAL;
4, 1, 2
  • FLOOR(X)
    X보다 크지 않은 가장 큰 정수를 반환. BIGINT로 자동 변환됨
  • CEILING(X)
    X보다 작지 않은 가장 작은 정수를 반환한다.
  • ROUND(X)
    X에 가장 근접한 정수를 반환한다.
  • POW(X, Y), POWER(X, Y)
    X의 Y제곱을 반환한다.
  • GREATEST(X, Y, ...)
    가장 큰 값을 반환한다.
  • LEAST(X, Y, ...)
    가장 작은 값을 반환한다.
  • CURDATE(), CUR_DATE
    오늘 날짜를 YYYY-MM-DD나 YYYYMMDD형식으로 반환한다.
  • CURTIME(), CURRENT_TIME
    현재 시각을 HH:MM:SS나 HHMMSS 형식으로 반환한다.
  • NOW(), SYSDATE(), CURRENT_TIMESTAMP: 오늘 현시각을 YYYY-MM-DD HH:MM:SS나 YYYYMMDDHHMMSS 형식으로 반환한다.
  • DATE_FORMAT(DATE, FORMAT)
    입력된 DATE를 FORMAT 형식으로 반환한다.
  • PERIOD_DIFF(P1, P2)
    YYMM이나 YYYYMM으로 표기되는 P1과 P2의 차이 개월을 반환한다.

출처: https://www.boostcourse.org/web326/lecture/258484/

profile
정팔입니다.

0개의 댓글