반응형



SELECT INTO


https://www.w3schools.com/sql/sql_select_into.asp


SELECT INTO 구문은 하나의 테이블에서 새로운 테이블로 데이터를 카피 시킨다.


모든 열을 새로운 테이블에 카피하는 쿼리문은


SELECT *
INTO newtable [IN externaldb]
FROM oldtable
WHERE condition;


몇몇 열을 새로운 테이블에 카피하는 쿼리문은


SELECT column1, column2, column3, ...
INTO newtable [IN externaldb]
FROM oldtable
WHERE condition;


과 같다.




INSERT INTO SELECT


https://www.w3schools.com/sql/sql_insert_into_select.asp


INSERT INTO 구문은 하나의 테이블의 데이터를 다른 테이블로 삽입해준다.


INSERT INTO SELECT는 데이타 타입의 형식을 맞추는걸 요구한다.


모든 열의 데이터를 다른 테이블로 복사하기 위해서는


INSERT INTO table2
SELECT * FROM table1
WHERE condition;


몇 컬럼만 다른 테이블로 복사하기 위해서는 


INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;


를 이용한다.


INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers;


Suppliers 테이블에서 SupplierName, City, Country를 뽑아 Customers 테이블에 삽입한다.


 

INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers
WHERE Country='Germany';

  

Suppliers 테이블에서 Country가 Germany인 SupplierName, City, Country를 뽑아 Customers 테이블에 삽입한다.



ISNULL


https://www.w3schools.com/sql/sql_isnull.asp


NULL일때 대체하기 위한 SQL 함수가 있다.


MYSQL에서는 IFNULL, COALESCE를 이용한다.


IFNULL(필드값, NULL일때 대체 값)


IFNULL을 이용하면 해당 필드의 값이 NULL일때 대체 값으로 바꿔준다.


COALESCE(필드값, NULL일때 대체 값)


IFNULL과 마찬가지다.


SQL Server에서는 ISNULL()을 이용한다. 위의 방법과 마찬가지다.




Stored PROCEDURES


https://www.w3schools.com/sql/sql_stored_procedures.asp


PROCEDURE는 코드 재사용을 위해 만들어 놓은 구문이다.


즉 클래스 같은 개념이고 아래와 같이 이용한다.


PROCEDURE 구문 저장


CREATE PROCEDURE procedure_name
AS
sql_statement
GO;


PROCEDURE 구문 실행


EXEC procedure_name;




CREATE PROCEDURE SelectAllCustomers
AS
SELECT * FROM Customers
GO;


로 저장하고 


EXEC SelectAllCustomers;


를 시작하면 Customers의 모든 필드값이 나타날 것이다.




Mysql Procedure 프로시저 개념


sql의 프로시저를 한마디로 표현하면 함수라고 표현 할 수 있다.


하지만 우리가 일반적으로 프로그래밍에 쓰이는 함수와는 달리 여러 row를 리턴시킬 수 있다는 차이점이 있다.



장점 : 

- 프로시저를 수정하기 전까지 쿼리문이 보호된다.

- SQL 인젝션에서 보호된다.

- 여러 쿼리문을 한번씩 보내지 않아도 되고 한번에 쿼리문을 묶어 보낼 수 있기 때문에 일괄 작업에 유용하다

- IF, ELSE, WHILE 등 절차적 기능을 이용 할 수 있다.

- SQL문을 쿼리로 저장하면 동적인 쿼리 생성이 가능하다.


단점 :

- 수정 후 쿼리 결과를 확인하기가 까다롭기에 디버깅이 어렵다.

- 디버깅이 어렵기에 유지보수가 어렵기도 하다.

- 길고 복잡한 쿼리에서는 좋지만 짧은 쿼리문에서는 불필요하다.(비효율적이다)

- 다른 DBMS보다는 성능 처리가 떨어진다.







반응형