SQL의 분류 및 기본문법
SQL의 분류
- DML(Data Manipulation Language)
- 데이터 조작 언어
- 데이터를 조작하는데 사용되는 언어
- 테이블의 행에 사용되며, 사용하기 위해서는 그 이전에 테이블이 정의되어 있어야 함
- SQL문 중 SELECT, INSERT, UPDATE, DELETE가 이 구문에 해당됨
- 트랜잭션이 발생하는 SQL도 이 DML에 속한다.
- 테이블의 데이터를 변경할 때 실제 테이블에 완전히 적용하지 않고, 임시로 적용시키는 것(취소가능)
- DDL(Data Definition Language)
- 데이터 정의 언어
- 데이터베이스, 테이블, 뷰, 인덱스 등의 데이터 베이스 개체를 생성/삭제/변경 하는 역할을 함
- CREATE, DROP, ALTER 구문
- DDL은 트랜잭션을 발생시키지 않음
- ROLLBACK이나 COMMIT 사용 불가
- DDL문은 실행 즉시 MySQL에 적용
- DCL(Data Control Language)
- 데이터 제어 언어
- 사용자에게 어떤 권한을 부여하거나 빼앗을 때 사용되는 구문
SQL의 기본
-
USE
- 사용할 데이터 베이스를 지정
- 지정해 놓은 후 특별히 다시 USE문을 사용하거나 다른 DB를 사용하겠다고 명시하지 않는 이상 모든 SQL문은 지정 DB에서 수행됨
USE DATABASE_NAME;
- SHOW TABLES; 를 사용하면 데이터베이스에 있는 테이블을 보여준다. 여기서 SHOW TABLES STATUS;를 하면 테이블의 상태 즉 정보들을 전부 보여준다.
-
DESCRIBE (DESC)
- 테이블에 무슨 열이 있는지 확인할 수 있음
-
SELECT
- 요구하는 데이터를 가져오는 구문
- 일반적으로 가장 많이 사용되는 구문
- 데이터 베이스 내 테이블에서 원하는 정보를 추출
SELECT select_expr [FROM table_references] [WHERE where_condition] [GROUP BY {col_name | expr | position}] [HAVING where_condition] [ORDER BY {col_name | expr | position}]
- SELECT *(에스터 리스크) : 테이블 내에 있는 전체 데이터를 선택해서 보여줌
- SELECT 열이름 테이블에서 필요로 하는 열만 가져오기가 가능하고 여러 개의 열을 가져오고 싶을 때는 콤마로 구분할 수 있음 열 이름의 순서는 출력하고 싶은 순서대로 배열 가능
-
SELECT FROM WHERE
- 기본적인 WHERE절
- 조회하는 결과에 특정한 조건으로 원하는 데이터만 보고 싶을 때 사용
- SELECT 필드이름 FROM 테이블이름 WHERE 조건식
- 조건이 없을 경우 테이블의 크기가 클수록 찾는 시간과 노력이 증가
- 관계 연산자의 사용
- OR, AND 연산자
- 조건 연산자(=, <, >, <=, >=, <>, != 등)
- 관계연산자(NOT, AND, OR 등)
- 연산자의 조합으로 데이터를 효율적으로 추출
- 기본적인 WHERE절
-
BETWEEN
- 데이터가 숫자로 구성되어 있어 연속적인 값은 BETWEEN … AND사용 가능
-
IN
- 이산적인 값의 조건에서는 IN()사용 가능
-
LIKE
- 문자열의 내용을 검색하기 위해 LIKE 연산자 사용
- 문자 뒤에 % - 무엇이든 (%) 허용
- 한 글자와 매치하기 위해서는 ‘_‘사용
-
Sub Query
- 서브쿼리
- 쿼리문 안에 또 쿼리문이 들어 있는 것
- 서브 쿼리의 결과가 둘 이상이 되면 에러가 발생한다.
- ANY
- 서브쿼리의 여러 개의 결과 중 한 가지만 만족해도 가능
- SOME은 ANY와 동일한 의미로 사용
- = ANY 구문은 IN과 동일한 의미
- ALL
- 서브쿼리의 여러 개의 결과를 모두 만족시켜야 함
-
ORDER BY
- 결과가 출력되는 순서를 조절하는 구문
- 기본적으로 오름차순으로 정렬
- 내림차순으로 정렬 하기 위해서는 열 이름 뒤에 DESC를 적어준다.
- ASC(오름차순)은 기본값이므로 생략 가능
- ORDER BY는 혼합해서 사용이 가능
-
DISTINCT
- 중복된 것은 1개씩만 보여주면서 출력
- 테이블의 크기가 클수록 효율적
-
LIMIT
- 출력 개수를 제한
- 상위의 N개만 출력하는 ‘LIMIT N’구문
- 서버의 처리량을 많이 사용해 서버의 전반적인 성능을 나쁘게 하는 악성 쿼리문을 개선할 때 사용
-
GROUP BY
- 그룹으로 묶어주는 역할
- 집계함수를 함께 사용함
- AVG() : 평균
- MIN() : 최소값
- MAX() : 최대값
- COUNT() : 행의 개수
- COUNT(DISTINCT) : 중복 제외된 행의 개수
- STDEV() : 표준 편차
- VARIANCE() : 분산
- 효율적인 데이터 그룹화
- 읽기 좋게 하기 위해 별칭을 사용함
- HAVING
- WHERE과 비슷한 개념으로 조건 제한
- 집계함수에 대해서 조건 제한하는 편리한 개념
- HAVING절은 반드시 GROUP BY절 다음에 나와야 함
- ROLLUP
- 총합 또는 중간합계가 필요할 경우 사용
- GROUP BY절과 함께 WITH ROLLUP문 사용
-
JOIN
- JOIN은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현
MySQL 내장함수
- 사용자의 편의를 위해 다양한 기능의 내장 함수를 미리 정의하여 제공
- 대표적인 내장 함수의 종류
- 문자열 함수
- 수학 함수
- 날짜와 시간 함수
- LENGTH() : 전달받은 문자열의 길이를 반환
- CONCAT() : 전달받은 문자열을 모두 결합하여 하나의 문자열로 반환, 전달받은 문자열 중 하나라도 NULL이 존재하면 NULL을 반환
- LOCATE()
- 문자열 내에서 찾는 문자열이 처음으로 나타나는 위치를 찾아서 해당 위치를 반환
- 찾는 문자열이 문자열 내에 존재하지 않으면 0을 반환
- MySQL에서는 문자열의 시작 인덱스를 1부터 계산
- LEFT(), RIGHT() : 문자열의 왼쪽 또는 오른쪽부터 지정한 개수만큼의 문자열을 반환
- LOWER(), UPPER() : 문자열의 문자을 모두 소문자 혹은 대문자로 변경
- REPLACE() : 문자열에서 특정 문자열을 대체 문자열로 교체
- TRIM()
- 문자열의 앞이나 뒤, 또는 양쪽 모두에 있는 특정 문자를 제거
- TRIM()함수에서 사용할 수 있는 지정자
- BOTH : 전달받은 문자열의 양 끝에 존재하는 특정 문자를 제거(기본설정)
- LEADING : 전달받은 문자열 앞에 존재하는 특정 문자를 제거
- TRAILING : 전달받은 문자열 뒤에 존재하는 특정 문자를 제거
- 만약 지정자를 명시하지 않으면, 자동으로 BOTH로 설정
- 제거할 문자를 명시하지 않으면, 자동으로 공백을 제거
- FROMAT()
- 숫자 타입의 데이터를 세 자리마다 쉼표(,)를 사용하는 형식으로 변환
- 반환되는 데이터의 형식은 문자열 타입
- 두 번째 인수는 반올림할 소수 부분의 자릿수
- FLOOR() : 내림, CEIL() : 올림, ROUND() : 반올림
- SQRT() : 양의 제곱근, POW() : 첫 번째 인수로는 밑수를 전달하고, 두 번째 인수로는 지수를 전달하여 거듭제곱 계산
- EXP() : 인수로 지수를 전달받아, e의 거듭제곱을 계산
- LOG() : 자연로그 값을 계산
- ABS(X) : 절댓값을 반환, RAND() : 0.0보다 크거나 1.0보다 작은 하나의 실수를 무작위로 생성
날짜와 시간(중요!)
- NOW() : 현재 날짜와 시간을 반환, 반환되는 값은 YYYY-MM-DD HH:MM:SS 또는 YYYYMMDDHHMMSS형태로 반환된다.
- CRUDATE() : 현재 날짜를 반환, 이떄 반환되는 값은 ‘YYYY-MM-DD’또는 YYYYMMDD형태로 반환
- CRUTIME() : 현재 시각을 반환, 이때 반환되는 값은 ‘HH:MM:SS’ 또는 HHMMSS형태로 반환
- DATE() : 전달받은 값에 해당하는 날짜 정보를 반환
- MONTH() : 월에 해당하는 값을 반환하며, 0부터 12사이의 값을 가짐
- DAY() : 일에 해당하는 값을 반환하며, 0부터 31 사이의 값을 가짐
- HOUR() : 시간에 해당하는 값을 반환하며, 0부터 59사이의 값을 가짐
- SECOND() : 초에 해당하는 값을 반환하며, 0부터 59사이의 값을 가짐
- MONTHNAME(): 월에 해당하는 이름을 반환
- DAYNAME() : 요일에 해당하는 이름을 반환
- DAYOFWEEK() : 일자가 해당 주에서 몇 번째 날인지를 반환 1부터 7사이의 값을 반환(일요일 = 1, 토요일 = 7)
- DAYOFMONTH() : 일자가 해당 월에서 몇 번쨰 날인지를 반환, 0부터 31사이의 값을 반환
- DAYOFYEAR() : 일자가 해당 연도에서 몇 번째 날인지를 반환, 1부터 366사이의 값을 반환
- DATE_FORMAT() : 전달받은 형식에 맞춰 날짜와 시간 정보를 문자열로 변환
SELECT
DATE_FORMAT(NOW(), '%D %y %a %d %m %n %j') #
Leave a comment