[MySQL]select 한 행을 모두 insert하기(선택행 복사)


1. 테이블이 존재하는 경우


예제코드

INSERT INTO table_name SELECT * FROM select_table_name;



2. 테이블이 존재 하지 않는 경우


예제코드

CREATE TABLE copy_table_name SELECT * FROM original_table_name;




3. 컬럼을 지정하는 경우


예제코드
INSERT INTO table_name (table_col_1, table_col_2, table_col_3) SELECT col1, col2, col3 FROM select_table_name;


4. 조건문을 포함하는 경우


예제코드
INSERT INTO table_name SELECT * FROM select_table_name WHERE grade = 'A' AND gender = 'female';


MS-SQL에서는 SELECT INTO를 사용하면 된다.

'DATABASE' 카테고리의 다른 글

[MySQL] String Replace  (0) 2017.12.20
[오라클] DATE 날짜 타입  (2) 2017.12.11
[MySQL]기본쿼리 (UPDATE)  (0) 2017.12.08
[ORACLE] 모든 테이블 이름 가져오는 쿼리  (0) 2017.12.05
[MySQL] 기본 쿼리 (SELECT)  (0) 2017.12.02

[MySQL]문자열 변환


데이터 베이스에 다음과 같은 문자열을 가지고 있는 필드가 있다고 생각하자


URL 

 http://www.blog.com/articles/update/1

  http://www.blog.com/articles/update/2

  http://www.blog.com/articles/update/345

  http://www.blog.com/articles/update/title-like-this



이 필드의 article을 다른 문자로 변환한다면 다음과 같은 스크립트를 이용할 수 있다.



예제코드

UPDATE POST_TABLE
SET URL= REPLACE(URL, '/articles/', '/pages/')
WHERE URL LIKE '%/articles/%'


그럼 문자열은 아래와 같이 변경 된다.


 URL( 변경전)

 URL(변경후)

 http://www.blog.com/articles/update/1

 http://www.blog.com/pages/update/1

 http://www.blog.com/articles/update/2

  http://www.blog.com/pages/update/2

 http://www.blog.com/articles/update/345

 http://www.blog.com/pages/update/345

 http://www.blog.com/articles/update/title-like-this

 http://www.blog.com/pages/update/title-like-this


MySQL의 REPLACE 함수는 다음과 같이 사용한다.



REPLACE(str, from_str, to_str)

str : 전체 문자열 또는 문자열이 있는 필드

from_str : 이전 문자열

to_str : 바꿀 문자열

mysql 페이지 참고





'DATABASE' 카테고리의 다른 글

[MySQL] Select Insert문  (0) 2017.12.26
[오라클] DATE 날짜 타입  (2) 2017.12.11
[MySQL]기본쿼리 (UPDATE)  (0) 2017.12.08
[ORACLE] 모든 테이블 이름 가져오는 쿼리  (0) 2017.12.05
[MySQL] 기본 쿼리 (SELECT)  (0) 2017.12.02

[오라클] 날짜 타입 String으로 변환하기


오라클에서 날짜를 가지고 오는 방법


예제

SELECT SYSDATE FROM DUAL;

2017-12-10 00:00:00

위와 같이 년월일 시분초순으로 나타난다.

다음을 String형식으로 변환하면..


오라클에서 날짜를 String 으로 변환하는 방법

예제

SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD') FROM DUAL;

2017/12/10 

위와 같은 형태로 String으로 표기된다.

형태를 'YYYY-MM-DD' 등으로 바꾸어도 상관없다. 


다음과 같이 시분초도 포함할 수 있다.

오라클에서 날짜를 시분초를 포함한 String으로

예제
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL;


실제 테이블의 DATE필드에서 적용하면 다음과 같다.


DATE타입의 필드를 String으로 변환하기


아래와 같이 WHERE 조건에 String과 비교하여 해당하는 값을 SELECT 할 수 있다.


예제


SELECT 
    TO_CHAR(REGISTDATE,'YYYY-MM-DD') AS REG_DT 
FROM WRITETABLE 
WHERE TOCHAR(REGISTDATE, 'YYYY/MM/DD') = '2017/12/10';



String 날짜를 DATE 타입으로 변환하기

String을 DATE타입으로도 변환이 가능하다.

예제


SELECT 
    TO_DATE('2017-12-10', 'YYYY-MM-DD')
FROM DUAL;


시간은 00:00:00(00시00분00초)로 기록된다.

 


DATE타입의 필드를 범위를 이용하여 SELECT하기


예제

SELECT 
    TO_CHAR(REGISTDATE,'YYYY-MM-DD') AS REG_DT 
FROM WRITETABLE 
WHERE REGISTDATE BETWEEN
        TO_DATE('2017-12-01', 'YYYY-MM-DD') AND TO_DATE('2017-12-10', 'YYYY-MM-DD')



'DATABASE' 카테고리의 다른 글

[MySQL] Select Insert문  (0) 2017.12.26
[MySQL] String Replace  (0) 2017.12.20
[MySQL]기본쿼리 (UPDATE)  (0) 2017.12.08
[ORACLE] 모든 테이블 이름 가져오는 쿼리  (0) 2017.12.05
[MySQL] 기본 쿼리 (SELECT)  (0) 2017.12.02

MySQL 기본쿼리 (UPDATE)


update 쿼리

update문은 테이블의 값을 수정할 때 사용한다.


다음과 같이 사용한다.


UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET assignment_list [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] value: {expr | DEFAULT} assignment: col_name = value assignment_list: assignment [, assignment] ...



참고 - mysql 홈페이지


update 쿼리 예제


UPDATE
    USER_TABLE
SET
    NAME='HONG',
    AGE=20,
    GENDER='male',
    BIRTHDAY=STR_TO_DATE('2017,12,25', '%Y, %m, %d')
WHERE
     IDX='idx00000101'


기본 업데이트 문 입니다.


update를 활용한 다중행 변경

UPDATE
    USER_TABLE
SET
    TYPE='ADULT'
WHERE
     AGE>18

AGE컬럼의 값이 18 이상인 행을 모두 TYPE을 Adult로 변경합니다. 

이런방법으로 여러개의 행을 같은 값으로 변경할 수 있습니다.

update를 이용한 조건 외 변경


UPDATE
    USER_TABLE
SET
    TYPE='CHILD'
WHERE
     TYPE<>'ADULT'

위 방법을 이용하여 type이 adult외의 컬럼의 값을 child로 변경 할 수 있습니다.
지정한 값 외의 다른 행의 값을 바꾸는데 쓰입니다.


주의


업데이트를 실행할 때는 한번에 커밋까지 이루어지는 일이 없도록 합시다.


꼭 WHERE절이 제대로 들어가 있는지 확인 합니다.


만약 위의 두 조건을 어기고 실행하면 실제 데이터가 훼손되어 롤백을 할 수도 없게 됩니다.


이 점을 꼭 주의 해야 합니다.

'DATABASE' 카테고리의 다른 글

[MySQL] Select Insert문  (0) 2017.12.26
[MySQL] String Replace  (0) 2017.12.20
[오라클] DATE 날짜 타입  (2) 2017.12.11
[ORACLE] 모든 테이블 이름 가져오는 쿼리  (0) 2017.12.05
[MySQL] 기본 쿼리 (SELECT)  (0) 2017.12.02

[오라클]모든 테이블 명 가져오는 쿼리


테이블 명 가져오는 예제 쿼리


dba_tables의 접근 권한이 있다고 가정하면, 다음과 같다.

SELECT 
    owner
    , table_name
FROM dba_tables;

dba_tables 권한이 없는 경우 예제


dba_tables의 권한이 없으면 다음과 같이 테이블뷰를 사용한다.

SELECT 
    owner
    , table_name
FROM all_tables;


all_tables는 사용자가 접근할 수 있는 모든 테이블을 보여줍니다.


또 다른 방법으로는 다음과 같은 방법이 있다.



user_tables를 사용하는 경우의 예제


user_tables는 현재 접속한 사용자가 액세스 권한이 있는 테이블만 조회가 가능합니다.


그렇기때문에 owner에 대한 정보가 없습니다.


SELECT 
    table_name
FROM user_tables;



'DATABASE' 카테고리의 다른 글

[MySQL] Select Insert문  (0) 2017.12.26
[MySQL] String Replace  (0) 2017.12.20
[오라클] DATE 날짜 타입  (2) 2017.12.11
[MySQL]기본쿼리 (UPDATE)  (0) 2017.12.08
[MySQL] 기본 쿼리 (SELECT)  (0) 2017.12.02

MySQL 기본 쿼리(SELECT)


select 쿼리

select문은 하나이상의 행을 테이블에서 검색하는데 사용하며 하위쿼리(subQuery)를 사용할 수 있다.
select문은 테이블을 참조하지 않고 계산용으로도 사용할 수 있다.

SELECT 

    [컬럼명] 

FROM 

    [테이블명] 

WHERE 

    [조건]

AND

    [조건] 

GROUP BY [컬럼명] 

ORDER BY [컬럼명] [ASC | DESC]

LIMIT [행 수] OFFSET [시작 행 수]


select 쿼리 예제


SELECT
    idx,
    name,
    type,
    age,
    gender,
    birthday
FROM USER_TABLE
WHERE type = 'A'
ORDER BY idx ASC
LIMIT 0, 10
-- 또는 LIMIT 10 OFFSET 0


테이블을 참조하지 않은 select 쿼리 


SELECT
    1+1 AS result
FROM dual;

SELECT
    NOW()
FROM dual;

위의 쿼리는 숫자를 계산한 값을 결과로 얻는것이고

두번째 쿼리는 현재 시스템 시간을 얻는 쿼리 이다.

주의


페이징을 사용할 때에는 꼭 인덱스가 잡혀있는 테이블로 order by를 해서 가지고 옵시다.
그렇게 하지 않으면 테이블 Full scan이 일어나 DB성능에 영향을 줍니다.


'DATABASE' 카테고리의 다른 글

[MySQL] Select Insert문  (0) 2017.12.26
[MySQL] String Replace  (0) 2017.12.20
[오라클] DATE 날짜 타입  (2) 2017.12.11
[MySQL]기본쿼리 (UPDATE)  (0) 2017.12.08
[ORACLE] 모든 테이블 이름 가져오는 쿼리  (0) 2017.12.05

+ Recent posts