일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- List
- BFS
- JPA
- string
- alter
- html
- 힙덤프
- Properties
- CSS
- scanner
- deque
- date
- 스택
- map
- dfs
- set
- Union-find
- Java
- 리소스모니터링
- NIO
- sql
- priority_queue
- javascript
- 큐
- GC로그수집
- union_find
- Calendar
- spring boot
- 스프링부트
- math
- Today
- Total
매일 조금씩
11/27 - SQL(1) : Maria DB , SELECT, FROM, WHERE, DISTINCT 본문
11/27 - SQL(1) : Maria DB , SELECT, FROM, WHERE, DISTINCT
mezo 2020. 11. 28. 15:41데이터베이스 기초
영구데이터 저장없이 프로그램을 만들기 매우 힘들기 때문에 데이터베이스가 아주 중요하다.
데이터베이스를 관리하는 시스템을 DBMS라고 부르며
주로 사용하는 DBMS로는 오라클, MySQL, MS SQL 서버 등이 있다.
데이터베이스와 DBMS를 통합해서 데이터베이스라고 부르기도 한다. (거의 그렇게 부름)
데이터베이스는 데이터를 지속적으로 관리하고, 보호하는 것이 주목적이다.
DBMS는 데이터를 안정적으로 보관 할 수 있는 다양한 기능을 제공하고 있다. (ex. 백업 기능)
1. 데이터베이스와 DBMS
DBMS - 관리자(DBA) - > 백업이 중요
↓
(cpu가 여러개인 컴퓨터를 쓰는 곳에 꼭 필요)
ㅇ 대형 데이터베이스 - IBM DB2(Unix) / Oracle Oracle / MS MSSQL
ㅇ 중형 데이터베이스 - Oracle MySQL(Opensource -> Oracle)
- 개발자 : MySQL -> MariaDB (오픈소스 MySQL이라고 보면됨 - 오픈소스가 두개가 같음)
ㅇ 소형 데이터베이스 - mSQL, sqlite
+> 개발자 +> DBA
DBA가 하는 일
- 데이터의 추가/조회/변경/삭제
- 데이터의 무결성(integrity)유지
- 트랜잭션 관리
- 데이터의 백업 및 복원
- 데이터 보완
데이터베이스
- SQL(Structured Query Lang.)(*) <- 명령어 - 개발자
- 관리방법 - 튜닝(최적화) 어려움 ㅜㅜ - 관리자
2. 테이블과 레코드
테이블의 구조와 관련된 정보를 테이블 '스키마(Schema)' 라고 부른다. (스키마는 테이블 행의 정의 이다.)
테이블의 구조는 각각의 정보를 저장하는 칼럼과 칼럼 타입 그리고 각 칼럼의 길이로 구성된다.
테이블에 저장되는 값의 길이에도 제약이 있다.
테이블의 행 각각을 레코드(Record)라고 한다.
하나의 테이블은 여러 개의 레코드로 구성된다. 각 레코드는 테이블의 스키마에 정의된 칼럼에 해당하는 값을 갖는다.
maria DB 설치
MariaDB - Windows 업데이트 한상태로 해라!
1. maria DB 실행 방법
(1) Command Prompt - 개발자용
mysql -u root -p
password : !123456
(2) MySQL Client - 관리자용
(3) HeidiSQL
2. 접속 명령어
데이터베이스
테이블
레코드 / 컬럼
테이블
대소문자 신경 안씀
(1) 데이터베이스 목록 명령어
show databases;
(2) 사용할 데이터베이스 선택 명령어
use 데이터베이스명;
use mysql;
(3) 테이블 목록 보기 명령어
show tables;
(4) 테이블에 대한 규정/구조 (스키마) 보기 명령어
describe 테이블명;
describe user;
약자 -> desc
SQL
내용 조회
DML - Data Manipulation(조작) Lang.
select - 데이터 검색
insert - 데이터 삽입
update - 데이터 수정
delete - 데이터 삭제
DDL - Data Definition(정의) Lang.
Create - 생성 ( 테이블 ...)
Alter - 수정
Drop - 삭제
Rename - 이름 변경
Truncate - 삭제
DCL - Data Control(제어) Lang.
...
TCL - Transaction Control(Lock) Lang.
maria DB 실습
* 데이터베이스 생성
create database sample;
use sample;
* 테이블 생성
CREATE TABLE dept (
deptno int(2) primary key,
dname varchar(14),
loc varchar(13)
);
CREATE TABLE emp (
empno int(4) primary key,
ename varchar(10),
job varchar(9),
mgr int(4),
hiredate date,
sal numeric(7,2),
comm numeric(7,2),
deptno int(2)
);
create table salgrade(
grade int(1),
losal numeric(7,2),
hisal numeric(7,2)
);
* 데이터 입력
insert into dept values(10, 'ACCOUNTING', 'NEW YORK');
insert into dept values(20, 'RESEARCH', 'DALLAS');
insert into dept values(30, 'SALES', 'CHICAGO');
insert into dept values(40, 'OPERATIONS', 'BOSTON');
insert into emp values( 7839, 'KING', 'PRESIDENT', null, STR_TO_DATE ('17-11-2011','%d-%m-%Y'), 5000, null, 10);
insert into emp values( 7698, 'BLAKE', 'MANAGER', 7839, STR_TO_DATE('1-5-2011','%d-%m-%Y'), 2850, null, 30);
insert into emp values( 7782, 'CLARK', 'MANAGER', 7839, STR_TO_DATE('9-6-2011','%d-%m-%Y'), 2450, null, 10);
insert into emp values( 7566, 'JONES', 'MANAGER', 7839, STR_TO_DATE('2-4-2011','%d-%m-%Y'), 2975, null, 20);
insert into emp values( 7788, 'SCOTT', 'ANALYST', 7566, STR_TO_DATE('13-7-2017','%d-%m-%Y') , 3000, null, 20);
insert into emp values( 7902, 'FORD', 'ANALYST', 7566, STR_TO_DATE('3-12-2011','%d-%m-%Y'), 3000, null, 20);
insert into emp values( 7369, 'SMITH', 'CLERK', 7902, STR_TO_DATE('17-12-2010','%d-%m-%Y'), 800, null, 20);
insert into emp values( 7499, 'ALLEN', 'SALESMAN', 7698, STR_TO_DATE('20-2-2011','%d-%m-%Y'), 1600, 300, 30);
insert into emp values( 7521, 'WARD', 'SALESMAN', 7698, STR_TO_DATE('22-2-2011','%d-%m-%Y'), 1250, 500, 30);
insert into emp values( 7654, 'MARTIN', 'SALESMAN', 7698, STR_TO_DATE('28-09-2011','%d-%m-%Y'), 1250, 1400, 30);
insert into emp values( 7844, 'TURNER', 'SALESMAN', 7698, STR_TO_DATE('8-9-2011','%d-%m-%Y'), 1500, 0, 30);
insert into emp values( 7876, 'ADAMS', 'CLERK', 7788, STR_TO_DATE('13-7-2017', '%d-%m-%Y'), 1100, null, 20);
insert into emp values( 7900, 'JAMES', 'CLERK', 7698, STR_TO_DATE('3-12-2011','%d-%m-%Y'), 950, null, 30);
insert into emp values( 7934, 'MILLER', 'CLERK', 7782, STR_TO_DATE('23-1-2012','%d-%m-%Y'), 1300, null, 10);
insert into salgrade values (1, 700, 1200);
insert into salgrade values (2, 1201, 1400);
insert into salgrade values (3, 1401, 2000);
insert into salgrade values (4, 2001, 3000);
insert into salgrade values (5, 3001, 9999);
---
create index idx_emp on emp ( deptno );
alter table emp add constraint fk_emp_dept foreign key ( deptno ) references dept( deptno ) on delete no action on update no action;
DML - select
select * from dept;
select * (엔터)
from dept;
select 컬럼명 from dept;
1. alias
select deptno as 부서번호, dname as 부서이름 from dept;
select deptno as '부서 번호', dname as '부서 이름' from dept;
select deptno '부서 번호', dname '부서 이름' from dept;
불러올땐
select '부서번호' from dept;
select "부서번호" from dept;
2. 산술연산
3. NULL
4. 중복 제거 - distinct
5. 검색 행 제한 - where
select 컬럼명...
from 테이블명
where 컬럼 비교연산자 값 and/or 컬럼 비교연산자 값
- 비교연산자 : =, !=, > >=, <=, <
- 논리연산자 : and, or, !
항상 컬럼이 앞에 와야한다
ex ) sal <= 1000 (O) , 1000 >= sal (X)
숫자는 상관없는데 문자는 ''를 붙여줘야한다.
maria DB는 대소문자 안가리지만 그래도 문자일때 대소문자면 그걸 구분해서 써주는게 좋다.
다른 DB는 대소문자를 구분하는 게 있기때문에...
날짜비교도 가능하다.
알파벳의 ascii 코드값 가지고도 비교가 가능하다.
비교연산자 사용시 앞에 칼럼값이 와야해서 1000 <= sal <= 2000이 안되기 때문에 둘로 나눠야한다.