테이블을 복사하는 방법에는 여러가지가 있겠지만 가장 간단하고 쉽게 사용할 수 있는 것은 아마 CREATE TABLE SELECT를 이용하는 방법일것이다. 쓰는 구문도 간단하다. CREATE TABLE 복사될 데이터가 들어가는 새로운 테이블명 (SELECT 복사할 열 FROM 복사시킬 테이블); 이런 식이다. 예를 들어보면 CREATE TABLE Tbl2 (SELECT * FROM Tbl1); 이런식으로 하게되면 Tbl2에 Tbl1의 내용이 복사되어 들어간다. CREATE TABLE Tbl2 (SELECT id, password, email FROM Tbl1); 굳이 모든열을 복사하지 않고 필요한 열만 찾아서 복사시킬수도 있다. 하지만 이 구문을 사용해서 복사를 할 경우 제약조건은 만들어지지 않는다. 때문..
조인 (JOIN)은 SQL문의 초급에서 중급으로 가는 가장 중요한 문장이라고 생각한다. 지금까지는 한개의 테이블에서만 여러가지 데이터를 가져왔지만 조인을 이용하면 두 개 이상의 테이블에서 데이터를 가져올수 있다. 그러기 위해서는 서로 관계가 되어있긴 해야한다. 데이터베이스의 테이블은 중복과 공간 낭비를 피하고 데이터의 무결성을 위해서 여러 개의 테이블로 분리하여 저장한다. 그리고 이 분리된 테이블은 서로 여러가지 제약조건을 가지고 관계가 맺어져있다. 이 관계를 이용해서 여러 테이블에서 동시에 데이터를 가져와 보자. INNER JOIN (내부 조인)은 조인중에서 가장 많이 사용되고 실제로 SQL문에서 따로 명령어를 치지않고 JOIN을 입력하면 자동으로 INNER JOIN으로 인식한다. 먼저 JOIN의 형식..
CAST와 CONVERT 둘 다 MySQL에서 가장 일반적으로 사용되는 데이터 형식변환 명령이다. 이 둘은 형식만 다르지 거의 비슷한 역할을 한다. 형식 : CAST ( expression AS 데이터형식 [ (길이) ] ) CONVERT ( expression, 데이터형식 [ (길이) ] ) 이런식으로 표현된다. 데이터형식중에 가능한 것들은 BINARY -- 이진 데이터 CHAR -- 문자열 타입 DATA -- 날짜 DATATIME -- 날짜, 시간 동시에 DECIMAL // 소수점 까지 JSON // JSON 타입 SIGEND INTEGER // 부호 (음수,양수) 있는 정수형 TIME // 시간 UNSIGNED INTEGER // 양수만 정수형 등이 있다. 그럼 간단한 예제 SELECT CAST('..
MySQL에서는 다양한 내장함수들을 지원해준다. 내장 함수들은 여러가지 상황에서 쓰일수 있기 때문에 알아두면 좋다. 1) IFNULL(수식1, 수식2) : 수식1이 NULL이 아니면 수식1이 반환되고, 수식1이 NULL이면 수식2가 반환된다. select ifnull(null, 'null 입니다', ifnull(100, 'null 입니다'); 첫 번째는 수식1이 null이기 때문에 null입니다가 출력되고 두번째는 null이 아니기 때문에 100이 출력된다. 2) NULLIF(수식1, 수식2) : 수식1과 수식2가 같으면 NULL을 반환하고, 다르면 수식1을 반환한다. select nullif(100,100), nullif(200,200); 첫 번째는 수식1과 수식2가 같기 때문에 null이 출력되고, ..
SQL문도 다른 프로그래밍 언어와 마찬가지로 변수를 선언하고 사용할 수 있다. 변수의 개념은 다른 언어에서 많이 배웠기 때문에 딱히 어렵지는 않다. 사용 방법 set @변수 이름 = 변수 값; select @변수 이름; -- 위에서 선언한 변수를 불러온다. 딱히 어려워 보이는건 없다. 특이한거 @를 붙인다는 점인거같다. set @Var1 = 5; set @Var2 = 3; set @Var3 = 4.25; set @Var4 = 한글도 됩니다; select @Var1; select @Var2 + @Var3; select @Var4; 출력값은 다음과 같다. 5 7.2500000000000 ... 한글도 됩니다 이렇게 간단히 변수를 선언하고 사용하는법을 배웠다 간단하게만 배워서 이정도인거 같다. 실제 사용하면 ..
과제나 프로젝트를 하다보면 게시판에 간단한 샘플 데이터를 올려야할 경우가 생기는데 이게 생각보다 귀찮은 일이 될수도 있다. 하지만 이때 INSERT INTO ... SELECT 구문을 사용하면 순식간에 말도 안되는 양의 샘플데이터을 생성할 수 있다. 당연하겠지만 SELECT문의 열의 갯수는 INSERT할 열의 갯수와 일치해야한다. 형식은 다음과 같다. insert into table1 (value1, value2) select; 좀더 자세히 살펴보면 create table testTbl4 (id int, Fname varchar(50), Lname varchar(50)); insert into testTbl4 select emp_no,first_name, last_name from employees.em..
AUTO_INCREMENT은 뜻 그대로 자동적으로 증가시켜준다는 뜻이다. AUTO_INCREMENT이 테이블 속성으로 지정되어 있다면 그 열은 INSERT 할때 값이 없다고 생각해도된다. AUTO_INCREMENT로 지정할 떄는 반드시 PRIMARY KEY 또는 UNIQUE로 지정해야하며 데이터형식은 숫자형만 사용가능하다. AUTO_INCREMENT로 지덩된 열은 INSERT문에서 NULL값을 지정하면 자동으로 값이 입력된다. create table testTbl2 ( id int auto_increment primary key, userName char(3), age int); insert into testTbl2 values (null, 'test1', 1); insert into testTbl2 v..
group by 절은 말 그대로 출력구문을 그룹으로 묶어주는 역할을 한다. 그리고 group by 절은 집계함수들과 같이 사용하는데 집계함수는 나중에 따로 정리해야겠당. 일단 예제 select userID, amount from buyTbl order by userID; 위 구문은 buyTbl 에서 userID와 구매 갯수를 가져오는 쿼리문이다. 물론 이런식으로 출력해도 총 갯수를 구할 수는 있지만 결과가 따로따로 나오기 때문에 보기에 불편하다. 이때 group by절과 집계함수를 사용해주면 우리가 원하는 결과를 얻을수 있다. select userID, sum(amount) from buyTbl group by userID; 이렇게 userID로 아이디를 묶어주고 총 갯수도 sum함수를 이용하면 우리가 ..
ORDER BY & DISTINCT & LIMIT 는 정보처리에도 나오고 문자이름만 봐도 이 친구가 무슨 역할을 할지 대충은 보이는 명령어들이다. order by 정렬 할때 쓰는 기능 distinct 중복행 제거 limit 출력갯수 제한 바로 예제 select Name, mDate from userTbl order by mDate desc; select Name, height from userTbl order by height desc, name asc; userTbl에서 Name과 mDate를 출력하는데 mDate를 기준으로 내림차순 (여기서는 오래된 순)으로 정렬한다 아래쪽은 키가 큰 순서로 정렬을 하지만 만약 키가 같을 경우에는 이름 순으로 정렬하도록 한다 asc는 디폴트(기본)값으로 오름차순을 의..
이번에는 ANY & ALL & SOME에 대하여 알아보자 저 명령어들을 알려면 일단은 서브쿼리를 알아야 하는데 이미 한번 봤기 때문에 난 상관없다. 먼저 서브쿼리에 대하여 알아보자 select Name, height from userTbl where height >= (select height from userTbl where addr = '경남'); 위 구문을 사용하게 되면 에러가 발생하는데 그 이유는 서브쿼리의 결과값이 두개이기 떄문이다. 이러한 단점을 해결 해주는 것들이 바로 any & all & some 참고로 any = some 이라고 한다. select Name, height from userTbl where height >= any (select height from userTbl where..
이번에는 WHERE을 좀더 구체적으로 사용할 수 있도록 도와주는 관계 연산자들에 대하여 알아보자. 먼저 관계 연산자는 기본적으로 사용할 수 있다. >, =, = 1970 and height >=182; 보이는 것 처럼 userTbl에서 userID와 Name을 검색하는데 생년이 1970년도 이상일 경우와 키가 182 이상인 사람을 검색하는다. 그럼 이번에는 between 예상하다시피 그냥 사이값을 구하는 명령어이다. select Name, height from userTbl where height between 180 and 183; 키가 180에서 183사이인 사람들을 구할때 쓴다 and는 우리가 익히 알다시피 그리고 이며 in의 경우는 문자열을 검색하고 싶을때 사용한다. select Name, add..