1. 프롬프트 설명
'=>' SQL명령 대기 상태
'->' 연속된 명령의 입력 대기 상태 ';'로 마무리시 실행
2. 커맨드
\? : 도움말 / 각 커맨드의 간단한 설명이 출력됨
\q : 종료
\d : DB내에 존재하는 TABLE , INDEX,VIEW 등의 목록을 출력해준다.
-> Wd [table_name] : 테이블의 구조를 출력 ;
\dt : DB내에 존재하는 table리스트만 출력
\dT : DB의 테이블에 들어갈 수 있는 데이타형을 출력;
\e : 최근 사용한 명령(버퍼에 들어있는)을 VI편집기로 편집해준다.=>편집후 자동실행
\h [명령어] : SQL 명령어에대한 간단 설명을 제공
\df : SQL 지원함수 목록을 출력
PostgreSQL 사용법
1. 데이타 베이스 구축 명령
1) create
CREATE TABLE student {
std_id CHAR(8),
std_name VARCHAR(15),
std_addr VARCHAR(50),
std_tel VARCHAR(15),
std_birthday DATE
};
-----------------------------------------------------------
\d ==> database 내에 존재하는 table과, index의 목록을 출력
\d student ==> student table의 정의 상태를 출력
==========================================================
CREATE TABLE student2 {
std_id CHAR(8) PRIMARY KEY,
std_sex CHAR(1) DEFAULT 'M' CHECK (std_sex='M' OR std_sex='F'),
std_name VARCHAR(15) NOT NULL,
std_addr VARCHAR(50) NOT NULL,
std_tel VARCHAR(15),
std_handphone VARCHAR(15),
std_birthday DATE NOT NULL
};
----------------------------------------------------------
std_id CHAR(8) PRIMARY KEY,
=> std_id 를 primary key로 설정하였기 때문에 primary key인 컬럼에 대한
index가 자동으로 생성되어 지고, 그 index의 name은 student2_pkey가 된다.
(테이블 생성시 출력 메시지)
NOTICE: CREATE TABLE/PRIMARY KEY will create implict index 'student2_pkey' for table 'student2'
std_sex CHAR(1) DEFAULT 'M' CHECK (std_sex='M' OR std_sex='F'),
==> std_sex에는 M과 F외에는 입력될 수 없도록 컬럼값을 설정하였다.
이외의 값이 입력하려고 하면 입력이 되지 않는다.
========================================================
2) insert
INSERT INTO student (std_id, std_name) values ('990001','홍길동');
INSERT INTO student (std_id, std_name) values ('990001','홍길동');
INSERT INTO student (std_id, std_name,std_addr,std_tel,std_handphone,std_birthday)
values ('990001','홍길동','서울시XXXXXXX 1층','02-2222-2222','010-2222-2222','1980-06-16');
INSERT INTO student (std_name) values ('홍길동');
-----------------------------------------------------------------
student 의 경우에는 오류 없이 들어간다.
하지만 생성된 4개의 데이타는 서로를 나눌 수 있는 유일한 값(PK)가 없기때문에
추후에 데이타 수정시 4개의 데이타를 구분할 방법이 없다.
student2는 pk인 std_id가 같은 데이타에 대해서는 나중에 들어온 데이타를 허용
하지 않는다 따라서 위 4개의 쿼리를 실행한 결과는 1개의 행만 존재한다.
=========================================================================
3) ALTER
: 데이타베이스 구조를 바꾸는데 사용
=> ALTER TABLE : 컬럼추가하기,컬럼이름바꾸기,테이블이름바꾸기
ALTER TABLE student ADD COLUMN stu_sex CHAR(1);
--------------------------------
student 테이블에 stu_sex라는 컬럼을 추가
=>DEFAULT나 NOT NULL등이 적용되지 않으므로 참고해서 사용해야한다.
(다 NULL로 저장된다)
================================
ALTER TABLE student RENAME std_sex TO stu_gender;
ALTER TABLE student2 RENAME TO student3;
---------------------------------------------
컬럼명의 변경과 테이블명의 변경의 방법
(테이블명 변경시 테이블 생성시 PRIMARY KEY설정으로 자동 생성된 INDEX는
자동으로 변경되지 않는다.
=============================================
4) DROP
DROP TABLE [테이블명];
DROP TABLE student;
=>테이블 삭제
2. 데이타 구축 명령
1)INSERT
INSERT INTO [TABLE_NAME] {COLUMN,....} VALUES {COLUMN_VALUE,...};
INSERT INTO [TABLE_NAME] VALUES {COLUMN_VALUES,....,END_CLOUMN_VALUES};
2)UPDATE
UPDATE [TABLE_NAME] SET [COLUMN_NAME]=[NEW_VALUE] WHERE [COLUMN_NAME]=[OLD_VALUE];
: WHERE절에 쓸 수 있는 비교 방법에는 AND, OR, LIKE 가 있다.
LIKE는 ' 와 ' 사이에들어있는 문자열로 검색하는 것으로서 %가 전체 문자를 대신하고
?가 한글자를 대신한다. 예) '%하%' => 하를 포함하는 모든 값 을 의미한다.
3)DELETE
DELETE FROM [TABLE_NAME] ; 테이블 전체 삭제
DELETE FROM [TABLE_NAME] WHERE [조건]: 조건에 맞는 항목 삭제
=> WHERE 조건을 잘못 입력하면 전체 테이블에 영향이 갈 수 있으므로 조건의
기준은 PK값을 가진 COLUMN을 기준으로 하는 것이 가장 안전하다.
3. 사용자 명령
1) SELECT
SELECT [COLUMN_NAME|각종표현식] FROM [TABLE_NAME] WHERE [조건];
SELECT * FROM student WHRER std_id > 1000;
SELECT COUNT(num),SUM(num),AVG(num),MAX(num),MIN(num) FROM student2;
num의 개수,num의합,num의평균,num의최대값,num의최소값을 출력한다.
SELECT DISTINCT * FROM A;
(모든 칼럼이 중복되는 항목은 하나만 출력)
SELECT DISTINCT ON num * FROM A;
(num 칼럼이 중복되는 항목은 하나만 출력)
SELECT * FROM A GROUP BY num;
HAVING
ORDER BY [DESC|ASC=DEFAULT]
UNION, INTERSECT, EXCEPT;
합집합, 교집합, 차집합
JOIN 두개의 테이블을 하나의 값을 기준으로 재정렬,가상 테이블을 생성한다.
CREATE VIEW product_temp AS SELECT a,b,c FROM AA;
(자주 JOIN을 실시 할 내용은 VIEW만들어서 그때 그때 새로 만드는 것이
아니라 만들어진 VIEW테이블을 이용해서 사용하게끔 하면 빠른 수행속도를
보장할 수 있다.)
'배워서 남주자 > Data Base' 카테고리의 다른 글
[oracle] Listener 관련 (0) | 2018.03.28 |
---|---|
[Postgresql] 접속 제어 (0) | 2018.03.23 |
[Postgresql] 백업 / 복구 (0) | 2018.03.23 |
[PostgreSQL] 소유권 및 패스워드 변경 (0) | 2018.03.23 |
[MySQL & MariaDB] 설치 후 이것/저것 (0) | 2018.03.23 |