MULTI JOIN의 경우는 2개이상의 TABLE을 JOIN할때 사용한다. INNER JOIN문을 추가해서 넣어주면 된다. 이후에 원하는 컬럼들을 SELECT해서 출력해주면 된다. -- orders 테이블을 o, customers 테이블을 c, order_statuses 테이블을 os로 치환 -- 먼저 orders 테이블과 customers 테이블을 JOIN하고 -- 추가적으로 orders 테이블과 order_statuses 테이블을 JOIN 한다. SELECT o.order_id, o.order_date, c.first_name, c.last_name, os.name as status FROM orders o INNER JOIN customers c ON o.customer_id = c.customer..
하나이상의 테이블의 데이터를 출력 할 때 사용하는것이 바로 조인(JOIN) 이다. JOIN의 기본값은 INNER JOIN인데 따로 명시를 안하고 JOIN이라고 쓸 경우 INNER JOIN이 된다. JOIN은 ON 명령어로 JOIN 되는 조건을 묶어주면 된다. 또한 JOIN은 TABLE의 별칭을 정해서 사용하는 경우가 많은데 TABLE명을 다 쓰게 될 경우 쿼리자체가 늘어나기 때문이다. 기본적인 사용방법 SELECT * FROM table_name a INNER JOIN table_name b ON a.column = b.column ORDER BY도 사용가능하다. -- orders 테이블을 o로 치환, customers 테이블을 c로 치환 -- 후에 각 테이블의 customer_id이 같은 필드들만 출력..
1. IS NULL & IS NOT NULL IS NULL, IS NOT NULL은 해당 컬럼이 NULL 상태인지 아닌지 검색 해주는 구문이다. NULL 상태는 빈값('')과 다르며 이 개념은 여타 다른 언어에서도 많이 사용된다. -- phone 컬럼이 NULL상태인 데이터를 검색 SELECT * FROM customers WHERE phone IS NULL; -- phone 컬럼이 NULL상태가 아닌 데이터를 검색 SELECT * FROM customers WHERE phone IS NOT NULL; 2. ORDER BY ORDER BY의 경우 특정 컬럼을 기준으로 정렬할때 많이 쓰이며, 대부분의 경우 PK(고유키)와 함께 사용된다. 기본값은 ASC (Ascending 오름차순)이며 내림차순을 원할때는..
mysql 정규표현식은 크게 다음과 같은 형태로 구성되어있다. ^ 시작 $ 끝 | or와 비슷 [abcd] 해당문자열들이 들어가있는지 [-] 검색하려는 문자열의 범위를 지정해줌 -- '%field%'와 똑같은 구문 field라는 값이 들어간 값을 찾는다. SELECT * FROM customers WHERE last_name REGEXP 'field'; -- last_name의 값이 field로 끝나는 값을 찾는다. SELECT * FROM customers WHERE last_name REGEXP 'field$'; -- last_name의 값이 field로 시작하는 값을 찾는다. SELECT * FROM customers WHERE last_name REGEXP '^field'; -- '%field%'..
ROLLUP 함수는 간단하게 GROUP BY 절에서 중간합계를 구하고 싶을때 사용한다. 기본적인 패턴은 아래처럼 사용한다. SELECT group by절로 묶을 열, 집계함수를 사용할 열 등 FROM 테이블 GROUP BY group by절로 묶을 열 WITH ROLLUP; 이렇게 사용하게 group by절로 묶인 열의 중간합계를 보여준뒤에 최종합계 나오게된다. SELECT num, groupName, SUM(price*amount); FROM buyTbl GROUP BY groupName, num WITH ROLLUP; 실행시켜보면 중간중간에 각 그룹의 소합계를 알려준다. ROLLUP절은 ORDER BY 절과는 사용할수 없으며, LIMIT를 사용할 경우 결과가 해석하기 어렵게 나올수 있기 때문에 사용할..
테이블을 복사하는 방법에는 여러가지가 있겠지만 가장 간단하고 쉽게 사용할 수 있는 것은 아마 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..