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에 넣는다.
========= ========= ========= ========= 참고 ========= ========= ========= =========
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.
|
|
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. |
|
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. |
|
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. |
|
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. |
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.
출처 : http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html
'Database' 카테고리의 다른 글
[MySQL] DB에 중복된 값의 개수를 확인하고 싶다. (0) | 2013.04.23 |
---|---|
[MySQL] mysql 결과값 txt로 보내기 (2) | 2013.01.10 |
[MySQL] auto_increment의 순서값 초기화 (0) | 2011.06.21 |
[MySQL] Primary Key 중복되게 설정하기 (0) | 2011.06.11 |
[MySQL] 데이터베이스, 테이블 활용 예제 (0) | 2011.06.05 |