일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- jQeury
- JavaScript
- db
- query
- 결혼식
- 스드메
- 웨딩준비
- 코드인스펙션
- 코딩테스트
- oracle
- 자바
- JSP
- 봄카드
- 청첩장
- 날짜함수
- IT
- 웨딩박람회
- SonarLint
- 결혼식준비
- MySQL
- 문법
- transaction
- VS Code
- 트랜젝션
- 예비신혼부부
- 이클립스
- 결혼준비
- Java
- 봄카드청첩장
- Today
- Total
구내식당
DB에 관한 내용 정리 본문
cmd에서>mysql -u root -p
root라는 계정으로 들어감. 패스워드설정해놨으므로 -p 입력.
(-u ㅡ> 이것은 계정을 지정한단 뜻.)
이러면 root라는 계정이 지정된 것이다.
여기서 이제 grant 쿼리를 이용하여 계정 추가 및 권한 설정을 한다.
mysql> grant select, insert, update, delete, create, drop on chap12.* to 'jspexam'@'localhost'
identified by 'jspex';
이것은 localhost에서 접속하는 jspexam 계정에 chap12 데이터베이스의 모든 것에 대해
select, insert, update, delete, create, drop 쿼리를 실행할 수 있는 권한을 주며,
이때 암호는 'jspex'를 사용한것이다.
이제 모든 서버에 연결할수있도록 권한을 준다.
mysql> grant select, insert, update, delete, create, drop on chap12.* to 'jspexam'@'%'
identified by 'jspex';
(달라진건 @ 뒤가 %로 바뀐것뿐.)
이제 MySQL 클라이언트인 mysql을 실행해서 chap12 데이터베이스를 사용할 수 있다.
cmd에서>mysql -u jspexam -p chap12
들어온상태에서 테이블 목록을 볼수있다.
mysql> show tables;
(지금은 테이블을 만들지 않았으므로 empty가 뜨게된다.)
---------------------------------------------------------
테이블 생성 쿼리.
create table TABLENAME(
COL_NAME1 COL_TYPE1(LEN1),
COL_NAME2 COL_TYPE2(LEN2),
COL_NAMEn COL_TYPE3(LENn)
);
TABLENAME : 테이블을 식별할 때 사용할 이름
COL_NAME : 각 칼럼의 이름
COL_TYPE : 각 칼럼에 저장될 값의 타입
LEN : 저장될 값의 최대 길이.
ex)
create table MEMBER(
MEMBERID VARCHAR(10),
PASSWORD VARCHAR(10),
NAME VARCHAR(20),
EMAIL VARCHAR(80)
);
주요키 칼럼을 표시할 때에는 칼럼 타입 뒤에 'PRIMARY KEY'라는 문장을 추가하며,
필수 값에 대해서는 'NOT NULL'을 추가한다.
예를 들어, MEMEBERID 칼럼이 주요키이고, PASSWORD,NAME칼럼이 필수 요소라면
ex)
create table MEMBER(
MEMBERID VARCHAR(10) NOT NULL PRIMARY KEY,
PASSWORD VARCHAR(10) NOT NULL,
NAME VARCHAR(20) NOT NULL,
EMAIL VARCHAR(80)
);
여기서 테이블이란
-데이터가 저장되는 가상의 장소
-테이블은 1개 이상의 칼럼으로 구성
--각 칼럼은 타입을 가지며, 제양(값의 길이, 가질 수 있는 값 등)을 갖는다.
--이런 테이블의 구성을 스키마(schema)라고 함.
여기서 칼럼이란
-표의 세로 열을 말한다.
여기서 레코드란.
- 하나의 테이블은 여러 개의 레코드로 구성.
여기서 주요키(PRIMARY KEY)란
-각각의 레코드를 구별하기 위해 사용되는 것
-각 레코드가 서로 다른 값을 갖는 칼럼
-주요키 값을 이용해서 빠른 검색 가능.
인덱스란
-지정한 칼럼에 맞춰 데이터의 정렬 순서를 미리 계산
-주요키로 인덱스의 종류
-인덱스로 사용되는 칼럼은 중복된 값을 가질 수도 있음.
이제 테이블을 생성했으면 데이터를 삽입한다.
---데이터 삽입 쿼리----
INSERT 쿼리!!!
사용법,
insert into [테이블이름]([칼럼1], [칼럼2], ..., [칼럼n])
values([값1],[값2],..,[값n])
ex)
mysql> insert into MEMBER (MEMBERID, PASSWORD, NAME) values ('changhozz', '1234',
'김창호');
이렇게 칼럼 목록을 표시한상태라면 전체 칼럼에 대해서 모두 값을 지정해줄필요가없다.
EMAIL은 지정해주지않았으니 NULL값이 들어가있는 상태다.
만약 EMAIL이 NOT NULL이라고 명시했다면 NULL을 값으로 갖지않고 아예 EMAIL에 값이 없게
되는것이다.
하여튼
칼럼 목록을 표시하지않고 값을 지정해줄때애네는 전체 칼럼에 대해서 값을 지정해주어야한다.
ex)
insert into MEMBER values('changhozz', '1234', '김창호', 'changhozz@nate.com');
이런식으로...
만약 값에 작은따옴표가 있다면 두번 입력해주면된다.
예를 들어 김창호's 라면
김창호''s 이런식으로!!
!!!!*****앞에서 MEMBERID,PASSWORD,NAME을 NOT NULL로 지정해주었기때문에,
값을 무조건 넣어된다. 반면 EMAIL은 NOT NULL을 지정하지 않았기 때문에
값을 안넣어도 상관이없다.
그래서 EMAIL을 제외하고 insert를 해주어 EMAIL값은 NULL이 되버렸다.
그다음 다시 insert를 이용하여 EMAIL에만 값을 넣어주려했는데 안된다...
왜냐면 insert는 말그대로 삽입이다. 이거 하나만 넣을수가없는것이다.
아직 update가 나오지않아 발생한일..
----------------------------------------
데이터 조회 쿼리. (조회 및 조건)
SELECT 쿼리!!!!
사용법,
select [칼럼1], [칼럼2],..,[칼럼n] from [테이블이름]
ex)
select MEMBERID, NAME from MEMBER;
만약 전체 칼럼을 모두 읽어오려면
ex)select * from MEMBER;
where절!!!!!!!!
조건에 맞는 레코드 검색
select * from MEMBER where NAME='김창호';
이것은,, MEMBER라는 테이블중에서 NAME이 김창호인 데이터만 불러오는것이다.!!
또한 and나 or을 이용하여 다양한 조건 지정이 가능하다.
select * from MEMBER where NAME = '김창호' and EMAIL = 'changhozz@nate.com';
하게되면 MEMBER라는 테이블중에서 NAME이 김창호고 EMAIL이 changhozz@nate.com인
데이터만 불러오는것이다.!!!!
같지 않음을 표현할 때에는 '<>'연산자를 사용한다.
예를 들어, EMAIL 칼럼의 값이 공백 ('')이 아닌 레코드를 검색하고 싶다면
다음과 같은 쿼리를 사용하면된다.
사용법,
select * from MEMBER where EMAIL <>'';
또한 칼럼의 값이 NULL 이거나 NULL이 아닌 레코드를 구하고 싶은 경우도 있는데,
이런 경우에는 다음과 같이 NULL과 관련된 전용 쿼리를 사용할 수도 있다.
사용법,
select * from MEMBER where EMAIL is NULL;
select * from MEMBER where EMAIL is NOT NULL;
또한 부등호 기호를 사용할 수도 있다.
예를들어, 숫자 칼럼에서 값의 범위가 1부터 100사이에 있는 레코드를 읽어오고 싶다고 해보자,
이 경우 다음과 같이 '<','>','<=','>=' 등의 연산자를 사용하면 된다.
where SALARY >= 1000 and SALARY <= 2000;
마지막으로 LIKE 조건!!!!!!
LIKE 조건을 사용하면 특정 문장이 포함된 것을 찾을수있다.
예를들어 NAME 값이 '김'으로 시작하는 레코드를 찾고 싶다면 다음과 같이
LIKE 조건을 사용 할 수 있다.
where NAME like '김%';
------------------------------------------------------------
데이터 쿼리 조회 - 정렬
ORDER BY 절!!!!!!
사용법,
select .. from [테이블이름] where [조건절] order by [칼럼1] asc, [칼럼2] desc,...
여기서 [칼럼]은 정렬하고 싶은 칼럼의 이름을 나타내며, 칼럼 이름 뒤에 'asc'나
'desc'를 붙일 수 있다. 'asc'를 붙히면 오름차순으로 정렬되며 'desc'를 붙이면
내림차순으로 정렬된다.
ex)
select * from MEMBER order by NAME asc, MEMBERID asc;
위 쿼리는 NAME 칼럼을 기준으로 먼저 오름차순 정렬이되고,
정렬된 상태에서 MEMBERID 칼럼에 대해서 오름차순으로 정렬한다.
이때 주의사항!
일단 NAME 칼럼으로 정렬된 상태가 되면, NAME 칼럼이 같은 값을 갖는 것들에
대해서만 MEMBERID 칼럼으로 정렬이 이루어진다는 점이다.
-------------------------------------------------------------------
데이터 쿼리 조회 - 집합.
집합 관련된 쿼리에는 sum(), max(), min(), count() 등의 함수가 존재한다.
말그대로 sum은 총합, max는 최댓값, min은 최솟값, count는 개수를 구할 때 사용됨.
사용법,
select max(SALARY), min(SALARY), sum(SALARY) from....
만약 특정 조건에 해당하는 레코드에 대해서만 집합 관련 함수를 실행하고 싶다면
where 조건문을 붙히면된다.
예를들어, NAME 칼럼의 값이 '김'으로 시작하는 레코드의 개수를 구하고 싶다면
다음과 같은 쿼리를 실행하면 된다.
사용법,
select count(*) from MEMBER where NAME like '김%';
--------------------------------------------------------------------
데이터 수정 쿼리
수정 쿼리 ㅡ> UPDATE!!!!!!!!!
사용법,
update [테이블이름] set [칼럼1]=[값1], [칼럼2]=[값2], ..where[조건절];
만약 where절을 사용하지않고
update MEMBER set NAME='김창호';
라고한다면, 모든 레코드의 NAME 칼럼의 값을 '김창호'로 변경하게되니
WHERE사용을 주의하자!!!!
ex)
mysql> update MEMBER set EMAIL='changhozz@nate.com' where MEMBERID = 'changhozz';
이것은,
MEMBER 테이블에서 칼럼 EMAIL에 값으로 changhozz@nate.com을 넣겠다.
근데 조건이 MEMBERID가 changhozz인 것만 넣겠다.
이런뜻!.
--------------------------------------------------------
데이터 삭제 쿼리
삭제 쿼리 ㅡ> DELETE!!!!!!!!!
사용법,
delete from [테이블이름] where [조건절]
이것또한 조건 where을 입력하지 않으면 전체 레코드를 삭제해버린다!!!
ㅡ> delete from MEMBER
이렇게하면 MEMBER테이블 내용 다사라짐!!
where을 주의하자!!
이런식으로 사용하자.
mysql> delete from MEMBER where MEMBERID = 'changhohh';
MEMBER 테이블에서 MEMBERID가 changhohh 인것만 삭제한다!!라는뜻!.
-----------------------------------------------------------
조인.
-조인(Join)은 두개 이상의 테이블로부터 관련 있는 데이터를 읽어올 때 사용된다.
조인의 기본 형식은 다음과 같다.
select A.칼럼1, A.칼럼2, B.칼럼3, B.칼럼4 from [테이블1] as A, [테이블2] as B
where A.[칼럽x] = B.[칼럼y]
예를 들기위해
create table MEMBER_ETC(
MEMBERID VARCHAR(10) NOT NULL PRIMARY KEY,
BIRTHDAY CHAR(8)
);
테이블생성후,
값으로
changhozz 19890105 와 tkdwnsdlzz 19880911와 jungwoogi 19881027을 넣었다.
그 다음
mysql> select * from MEMBER as A, MEMBER_ETC as B where A.MEMBERID = B.MEMBERID;
를 입력하게되면
MEMBER에 있는 MEMBERID와 MEMBER_ETC에 있는 MEMBERID가 같은경우에
테이블을 일렬로 나열하여 전부 보여주었다.
공통된 changhozz와 tkdwnsdlzz의 값들이 아이디 비번 이름 이메일 아이디 생일 순으로
쭉 나열되었다.
'IT > SQL' 카테고리의 다른 글
mysql 숫자,문자 사이에 - 넣기 (0) | 2016.12.05 |
---|---|
Mysql 시간 및 날짜 함수 (0) | 2016.12.05 |
GROUP BY를 이용하여 최대 값을 가진 컬럼 가져오기 (중복 값 허용 시) (0) | 2016.12.01 |
insert, update, delete문 (0) | 2016.12.01 |
select 된 값을 update하기 (0) | 2016.12.01 |