SQL
SQL(Structured Query Language): 데이터를 보다 쉽게 검색하고 추가, 삭제, 수정 등 조작을 할 수 있도록 고안된 컴퓨터 언어.
관계형 데이터베이스에서 데이터를 조작하고 쿼리하는 표준 수단.
- DML(Data Manipulation Language)
- 데이터를 조작하기 위해 사용
- ex) INSERT, UPDATE, DELETE, SELECT 등
- DDL(Data Definition Language)
- 데이터베이스의 스키마를 정의하거나 조작하기해 사용
- ex) CREATE, DROP, ALTER 등
- DCL(Data Control Language)
- 데이터를 제어하는 언어
- 권한을 관리, 데이터의 보안,무결성 등을 정의
- ex) GRANT, REVOKE 등
Database 생성
MariaDB로 수행할 예정.
- 관리자 로그인
mariadb -uroot -p
: 관리자 계정인 root로 DBMS에 접속한다.
- DB 생성하기
create database DB명;
: DB명으로 database를 생성한다.
- DB 사용자 생성 및 권한 부여
create user '계정이름' @'%' identified by'암호';
- 계정 및 비밀번호 생성
grant all privileges on db이름.* to 계정이름 @'%' identified by '암호';
암호
를 가진 계정 이름에 db이름을 가진 db 모든 권한을 주겠음을 의미한다.\- @'%': 모든 클라이언트에서 계정이름으로 접근이 가능함을 의미한다.
grant all privileges on db이름.* to 계정이름 @'localhost' identified by '암호’;
- flush privileges;
- 수정 작업을 적용함
SQL 규칙?
- 키워드는 대소문자를 구별하지 않는다.
- select version(), current_date;
- SELECT VERSION(), CURRENT_DATE;
- 모두 같은 실행 결과를 도출한다.
- 현재 버전과, 날짜를 출력함
- 쿼리를 이용하여 계산도 가능함
- select sin(pi()/4), (4+1)*5;
- sql은
;
로 한 줄의 명령이 끝난다. - 여러 문장을 한 줄에 연속으로 붙여서 실행 가능함
- select version(); select now();
- 하나의 줄을 여러 줄로 입력이 가능하다.
selecet
version()
;
- 입력 도중에 취소하는 키워드
\c
- show databases: DBMS에 존재하는 데이터 베이스 확인
- use db명: db명으로 전환함
Table
- table
- RDBMS의 기본적 저장구조
- 한 개 이상의 column과 0개 이상의 row로 구성된다.
- 열(Column)
- 테이블 상에서의 단일 종류의 데이터를 나타냄
- 특정 데이터 타입의 크기를 가지고 있음
- 행(Row)
- Column들의 값의 조합, 레코드라 불림
- 기본키(PK)에 의해 구본됨.
- 기본키는 중복을 허용하지 않으며 없어서는 안된다.
- Field
- Row와 Column의 교차점
- Field는 데이터를 포함할 수 있고 없을 때는 NULL 값을 가지고 있다.
관련 명령어
show tables;
- 현재 DB에 저장된 테이블들을 보여줌
desc table명;
- 선택한 테이블의 정보를 보여준다.
DML
DML(Data Manipulation Language)
모두 동사로 시작한다.
시작하는 동사에 따라 4가지 조작어가 존재.
- SELECT: 검색
- 사용법:
SELECT(DISTINCT) 칼럼명( (as) ALIAS) FROM 테이블명
- SELECT: 검색하고자 하는 데이터(칼럼)을 나열
- DISTINCT: 중복행 제거
- ALIAS: 나타날 컬럼에 대한 다른 이름 부여
- FROM: 선택한 컬럼이 있는 테이블 명시
- 전체 데이터 검색(*)
SELECT * FROM DATABASE
- 칼럼의 합성(Concatenation)
- CONCAT
select concat(empno, '-', deptno) as '사번-부서번호' from employee;
- 중복행 제거
- DISTINCT
select distinct deptno from employee
- 정렬
- ORDER BY 칼럼명/INDEX (ASC/DESC)
- ASC: 오름차순, 기본값
- DESC: 내림차순
SELECT EMPNO, NAME FROM EMPLOYEE order by empno;
- ORDER BY 칼럼명/INDEX (ASC/DESC)
- 특정 햄 검색
- WHERE 조건식
SELECT * FROM EMPLOYEE WHERE DEPTNO = 10
SELECT * FROM EMPLOYEE WHERE DEPTNO IN (10, 30)
- deptno이 10 또는 30 인 경우만 출력
DEPTNO = 10 OR DEPTNO = 30
과 동일한 값이다.
- LIKE 키워드
- 와일드 카드를 사용하여 특정 문자를 포함한 값에 대한 조건을 처리
- %는 0에서부터 여러 개의 문자열을 나타냄
- _는 단 하나의 문자를 나타냄
SELECT NAME, JOB FROM EMPLOYEE WHERE NAME LIKE '%A%';
SELECT NAME, JOB FROM EMPLOYEE WHERE NAME LIKE '_A%';
- 함수의 사용
- UCASE, UPPER
- 대문자, 소문자 변환
SELECT LOWER(NAME) FROM EMPLOYEE
- SUBSTRING
- 원하는 문자열 출력
SELECT SUBSTRING('Happy Day', 3, 2);
- Happy Day 3번째 글자부터 2글자 만 출력
- LPAD, RPAD
- 글자수 제한
- `SELECT LPAD('hi', 5, '?'), LPAD('joe', 7, '*');
- 빈공간은 ?/* 로 채움
- TRIM, LTRIM, RTRIM
- 공백 제거
- 등..
- UCASE, UPPER
- 형변환
- CAST 함수: type을 변경하는데 유용
CASE(expression AS type)
CONVERT(expression, type)
CONVERT(expr USING TRANSCODING_NAME)
- MySQL 타입
- BINARY
- CHAR
- DATE
- DATETIME
- SIGNED {INTEGER}
- TIME
- UNSGINED {INTEGER}
- CAST 함수: type을 변경하는데 유용
- 그룹 함수
- 여러개의 컬럼의 값을 가지고 결과 값을 하나만 만들어내는 함수
- COUNT(expr): 결과의 개수를 출력
- AVG(expr): 평균을 출력
- MIN(expr): 최소 값을 출력
- MAX(expr): 최대 값을 출력
- SUM(expr): 모든 값의 합을 출력
- GROUP_CONCAT(expr): 그룹단위로 칼럼을 합성
- VARIANCE(expr): 분산을 출력
- STDDEV(expr): 표준편차를 출력
- GROUP BY 칼럼명
- 해당 칼럼에 따라 그룹핑을 수행한다.
SELECT DEPTNO, AVG(salary), SUM(salary), FROM EMPLOYEE GROUP BY DEPTNO;
- 여러개의 컬럼의 값을 가지고 결과 값을 하나만 만들어내는 함수
- 사용법:
- INSERT: 등록
- 사용법:
INSERT INTO 테이블 명(필드1, 필드2, ...) VALUES (필드1의 값, 필드 2의 값,...)
- 필드명을 지정해주는 방식은 디폴트 값이 세팅되는 필드는 생략할 수 있다.
- 추 후, 필드가 추가/변경/수정 되는 변경에 유연하게 대처 가능하다.
- 필드명을 생략했을 경우에는 모든 필드값을 반드시 입력해야 한다.
- 사용법:
- UPDATE: 수정
- 사용법:
UPDATE 테이블명 SET 필드1 = 필드1의 값, 필드2 = 필드2의 값,.... WHERE 조건식
- 조건식을 통해 특정 row만 변경할 수 있다.
- 조건식을 주지 않으면 전체 로우가 영향을 미친다.
- 사용법:
- DELETE: 삭제
- 사용법:
DELETE FROMR 테이블명 WHERE 조건식
- 조건식을 통해 특정 row만 삭제할 수 있다.
- 조건식을 주지 않으면 전체 로우가 영향을 미친다.
- 사용법:
DDL
DDL(Data Definition Language)
- 테이블 생성
CREATE TABLE 테이블명(필드명1 타입[NULL | NOT NULL][DEFAULT][AUTO_INCREMENT], 필드명1 타입[NULL | NOT NULL][DEFAULT][AUTO_INCREMENT], ... PRIMARY KEY(필드명));
- 데이터 형 외에도 속성값의 빈 값 허용 여부는 NULL 또는 NOT NULL로 설정
- DEFAULT 키워드와 함께 입력하지 않았을 때의 초기값을 지정할 수 있다.
- 입력하지 않고 자동으로 1씩 증가하는 번호를 위해 AUTO_INCREMENT사용
- 테이블 수정
- 컬럼 추가
ALTER TABLE 테이블명 ADD 필드명 타입[NULL | NOT NULL][DEFAULT][AUTO_INCREMENT];
- 컬럼 삭제
ALTER TABLE 테이블명 DROP 필드명;
- 컬럼 수정
ALTER TABLE 테이블명 CHANGE 필드명 새필드명 타입[NULL | NOT NULL][DEFAULT][AUTO_INCREMENT];
- CHANGE 키워드를 사용하고 칼럼을 새롭게 재정의(이름부터 속성까지 전부)
- 컬럼 추가
- 테이블 이름 변경
ALTER TABLE 테이블명 RENAME 새이름;
- 테이블 삭제
DROP TABLE 테이블명;
- 제약 조건이 있을 경우 삭제가 안될 수도 있다.
- 서로 관계가 있을 경우
- 따라서 역순서로 삭제를 수행한다.
최근댓글