본문 바로가기

Database

[MySQL] MySQL 기본 문법 정리

반응형

UPDATE


UPDATE [Table명]

SET [Field명]=[바꿀 값], [Field명]=[바꿀 값] 

WHERE [Field명]=[조건 값]


조건문 필드가 1개지만 필드에 맞는 값이 여러개인 경우 아래처럼 한다.


WHERE [Field명] in ([조건값], [조건값], [조건값])


INSERT


INSERT INTO [Table명] ( [Field명], [Field명] ) 

VALUES (넣을 값, 넣을 값);


또는


INSERT INO [Table명] VALUES (넣을 값, 넣을 값)              // 단, 필드명을 명시하지 않았으므로 Table상에 존재하는 모든 필드에 대해 값을 넣어야 한다.



DELETE


DELETE FROM [Table명] WHERE [Field명] = [조건 값]



SubQuery


SELECT [Field명], (SELECT [Field명] FROM [Table명]) as [새롭게 지을 Field명]

FROM [Table명]



========= ========= ========= ========= 옵션 ========= ========= ========= =========

SQL_NO_CACHE [MYSql의 캐쉬를 끈다. 검색 속도를 보기 위할때 사용한다.]


select SQL_NO_CACHE 

[Field명] 

from [Table명]



like


select [Field명] 

from [Table명]

where [Field명] like [검색 값] and/or [Field명] like [검색 값]                                      // 검색값에는 %값%형식 값% 형식등이 올 수 있다. 


replace


select [Field명] 

from [Table명]

where replace([Field명], ' ', '') like [검색 값]                                                               // replace는 해당 필드명을 지정된 값을 교체한다, 예시에서는 빈 공백을 없앤다. 



not in


select [Field명] 

from [Table명]

where [Field명] and [Field명] not in ( [조건 값] )            // 조건값에는 ()가 꼭 있어야만 한다.


ORDER BY


select [Field명] 

from [Table명]

where [Field명] and [Field명] not in ( [조건 값] ) 

order by [Field명] [desc/asc]                                        // asc desc는 있어도 없어도 무방. 단 없는 경우 디폴트로 asc 적용



ORDER BY FIELD


ORDER BY FIELD([Field명], [Field명])                              // 검색 결과 순서가 필드별로 정렬되어 나온다.


ORDER BY CASE


ORDER BY CASE WHEN [Field1명] = 1 THEN 0 WHEN [Field2명] = 2 THEN 2 ELSE 0 END           // 해당 필드 값이 조건에 따라 우선순위를 주어 먼저 나오게 한다.

ORDER BY CASE WHEN [Field1명] like '감자%' THEN 0 WHEN [Field2명] like '고구마%' THEN 2 ELSE 0 END        // 우선순위 값은 낮을수록 먼저 나온다.



limit


select [Field명] 

from [Table명]

order by [Field명] [desc/asc]    

limit [int형 값1], [int형 값2]                                              // 값 1은 시작되는 리스트의 위치, 값 2는 시작되는 위치에서부터 가져올 개수 



Join (=Inner Join) [2개 이상의 테이블을 묶어준다.]


select [Field명] 

from [Table1명] join [Table2명] on [Table1명].[Field명] =  [Table2명].[Field명]           // on을 이용해 특정 필드를 공통으로하여 조인한다. 공통점이 없는 Row는 양쪽 모두 출력되지 않는다.



Left Join (=Left Outer Join)


select [Field명] 

from [Table명] left join [Table명] on  [Table1명].[Field명] =  [Table2명].[Field명]           // left join의 왼쪽 테이블을 중심으로 묶인다. 왼쪽 row는 반드시 한줄 이상 나타나며 오른쪽 테이블과 공통점이 없는경우 왼쪽 테이블에서 나머지 값은 null값으로 출력된다.



Right Join (=Right Outer Join)


select [Field명] 

from [Table명] right join [Table명] on  [Table1명].[Field명] =  [Table2명].[Field명]       // left join과 반대 성향을 갖는다.



JOIN 3개 이상 사용 할 때


select [Field명] 

FROM [Table명] JOIN [Table명] JOIN [Table명]                                                    // JOIN을 계속 사용하면 된다. JOIN ~ ON ~ JOIN ON ~ JOIN ~



GROUP BY


SELECT [Field명], COUNT(*) 

FROM [Table명] 

GROUP BY [Field명]                                                                                               // left join과 반대 성향을 갖는다.



FORMAT / DATE_FORMAT


SELECT FORMAT( [Field 명], 0) 

FROM [Table 명]                                     // 천 단위로 끊어서 표현한다. 즉, 가격 표시때 쉽게 사용


SELECT DATE_FORMAT( [Field 명], '%Y-%m-%d %H:%m')

FROM [Table 명]                                        // 필드명은 date 타입이어야 한다.




PASSWORD


UPDATE [Table명] 

SET [Fileld명] = PASSWORD('[패드워드값]')        // 일반 PlainText 값을 암호화 하여 저장한다. 



IF


SELECT IF([Field]명 IS NULL, 'N', 'Y')

FROM [Table명]                                                // 테이블에 해당하는 필드가 null값이라면 N값을 아니면 Y값을 출력한다.




LOAD DATA

LOAD DATA LOCAL INFILE '[파일명]'

INTO TABLE '[Table명]'

FIELDES TERMINATED BY '\t'                            fields terminated by 를 이용해 필드를 탭으로 구분해서 파일의 값을 DB에 넣는다.


========= ========= ========= ========= 참고 ========= ========= ========= ========= 



일반적으로 join이 subquery보단 빠르다.


A Visual Explanation of SQL Joins

October 11, 2007

I thought Ligaya Turmelle's post on SQL joins was a great primer for novice developers. Since SQL joins appear to be set-based, the use of Venn diagrams to explain them seems, at first blush, to be a natural fit. However, like the commenters to her post, I found that the Venn diagrams didn't quite match the SQL join syntax reality in my testing.

I love the concept, though, so let's see if we can make it work. Assume we have the following two tables. Table A is on the left, and Table B is on the right. We'll populate them with four records each.

id name       id  name
-- ----       --  ----
1  Pirate     1   Rutabaga
2  Monkey     2   Pirate
3  Ninja      3   Darth Vader
4  Spaghetti  4   Ninja

Let's join these tables by the name field in a few different ways and see if we can get a conceptual match to those nifty Venn diagrams.

SELECT * FROM TableA
INNER JOIN TableB
ON TableA.name = TableB.name

id  name       id   name
--  ----       --   ----
1   Pirate     2    Pirate
3   Ninja      4    Ninja

Inner join produces only the set of records that match in both Table A and Table B.

Venn diagram of SQL inner join
SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name

id    name       id    name
--    ----       --    ----
1     Pirate     2     Pirate
2     Monkey     null  null
3     Ninja      4     Ninja
4     Spaghetti  null  null
null  null       1     Rutabaga       
null  null       3     Darth Vader

Full outer join produces the set of all records in Table A and Table B, with matching records from both sides where available. If there is no match, the missing side will contain null.

Venn diagram of SQL cartesian join

SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name

id  name       id    name
--  ----       --    ----
1   Pirate     2     Pirate
2   Monkey     null  null
3   Ninja      4     Ninja
4   Spaghetti  null  null

Left outer join produces a complete set of records from Table A, with the matching records (where available) in Table B. If there is no match, the right side will contain null.

Venn diagram of SQL left join
SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name
WHERE TableB.id IS null

id  name       id     name
--  ----       --     ----
2   Monkey     null   null
4   Spaghetti  null   null

To produce the set of records only in Table A, but not in Table B, we perform the same left outer join, then exclude the records we don't want from the right side via a where clause.

join-left-outer.png
SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name
WHERE TableA.id IS null 
OR TableB.id IS null

id    name       id    name
--    ----       --    ----
2     Monkey     null  null
4     Spaghetti  null  null
null  null       1     Rutabaga
null  null       3     Darth Vader

To produce the set of records unique to Table A and Table B, we perform the same full outer join, then exclude the records we don't want from both sides via a where clause.

join-outer.png

There's also a cartesian product or cross join, which as far as I can tell, can't be expressed as a Venn diagram:

SELECT * FROM TableA
CROSS JOIN TableB

This joins "everything to everything", resulting in 4 x 4 = 16 rows, far more than we had in the original sets. If you do the math, you can see why this is a very dangerous join to run against large tables.

Posted by Jeff Atwood


출처 : http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

반응형