DB

SQL 기본

그zi운아이 2023. 9. 15. 11:17

1. SELCET

가장 많이 사용하는 구문으로, 데이터베이스 내의 테이블에서 원하는 정보를 추출하는 명령어이다.

 

SELECT문 구문 형식 

SELECT 
	[ALL | DISTINCT | DISTINCTROW ]
    	[HIGH_PROIORITY]
        [STRAIGHT_JOIN]
        [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
        [SQL_NO_CACHE] [SQL_CALC_FOUND_ROW]
    select_expr [, select_expr ...]
    [FROM table_references
    	[PARTITION partition_list]
    [WHERE where_condition]
    [GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]]
    [HAVING where_condition]
    [WINDOW window_name AS (window_spec) 
    	[, window_name AS (window_spec)] ...]
    [ORDER BY {col_name : expr : position}
    	[ASC | DESC], ... [WITH ROLLUP]]
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]
    [INTO OUTFILE 'file_name'
    	[CHARACTER SET charset_name]
        export_options
        | INTO DUMPFILE 'file_name'
        | INTO var_name [, var_name]]
    [FOR {UPDATE | SHARE} [OF tbl_name [,tbl_name] ...] [NOWAIT | SKIP LOCKED]
    	| LOCK IN SHARE MODE]]

실제 자주 사용되는 SELECT 구문 형태

SELECT select_expr
	[FROM table_references]
    [where where_condition]
    [GROUP BY {col_name | expr | position}]
    [HAVING where_condition]
    [ORDER BY {col_name | expr | posiotion}]

 

USE 구문 

SELECT 문을 사용하기 위해 사용할 데이터 베이스를 지정해야 되는데 USE 구문을 이용해서 정한다.

아래와 같이 데이터 베이스를 지정하 놓은 후에는 다시 USE를 사용하거나 다른 DB를 사용하겠다고 명시하지 않은 이상 지정한 데이터베이스에서 SQL문이 수행된다.

USE 데이터베이스_이름;

SELECT 와 FROM 

일반적으로 * 은 모든 것을 의미한다.

FROM 다음은 테이블/뷰 등의 항목이다 원래 테이블의 전체이름은 데이터베이스.테이블 이름형식이지만 데이터 베이스 이름을 생략하더라도 괜찮다.

SELECT * FROM 테이블_이름

 

SELECT 구문 사용시 열 이름을 별도의 지칭으로 지정할수 있는데 열 이름 뒹 AS 별칭형식으로 붙어이면 된다

SELECT 컬럼명 AS 별칭 FROM 테이블_이름

WHERE 절

조회하는 결과에 특정한 조건을 주서 원하는 테이터만 보고 싶을때 사용하는데, 다음과 같은 형식을 갖는다.

조건 연산자( = , <,>,<=,>=,<>,!=등)과 관계연산자(NOT,AND,OR)등을 조합하여 사용하면 다양한 조건의 쿼리를 생성할 수 있다.

SELECT 필드이름 FROM 테이블 이름 WHERE 조건식;

 

BETWEEN ... AND와 IN() 글고 LIKE

특정 범위 내의 값만을 선택하기 위해 사용되는 구문

시작 값과 끝 값이 포함되는 범위를 지정하면 그 조건에 맞게 가지고 온다.

SELECT * FROM 테이블명 WHERE 컬럼명 BETWEEN 시작 AND 끝

 

LIKE 연산자는 문자열이 특정 패턴과 일치하는지 확인하기 위해 사용된다.

이 연산자는 와일드카드 문자와 함께 사용될 수 있으면 %는 0개 이상의 문자를 '_'는 하나의 문자를 나타낸다.

SELECT * FROM 테이블명 WHERE 컬럼명 LIKE 'A%' // A로 시작되는 모든 '컬럼명' 행을 선택한다

 

ANY/ALL/SOME/ 서비쿼리(Subquery)

서브쿼리란 간단히 설명하면 쿼리문 안에 또 쿼리문이 들어 있는 것을 얘기한다.

where 의 조건에 직접 써주는 것이 아닌 쿼리를 통해 사용할때 사용된다.

ANY: 하위 쿼리의 결과 중 하나라도 주어진 조건과 일치하면 TRUE를 반환합니다. (OR과 유사)
ALL: 하위 쿼리의 결과가 모두 주어진 조건과 일치해야 TRUE를 반환합니다. (AND와 유사)

SELECT * FROM USER_TABLE
	WHERE height >= ANY (SELECT height FROM usertbl WHERE add = '경남');
SELECT * FROM USER_TABLE
	WHERE height >= ALL (SELECT height FROM usertbl WHERE add = '경남');

 

 

ORDER BY 절

ORDER BY절은 결과물에 대해 영향을 미치지는 않지만, 결과가 출력되는 순서를 조절하는 구문이다.

SELECT 컬럼명 FROM 테이블 명 ORDER BY 컬럼명 DESC/ASC;

 

 

DISTINCT

중복을 하나만 남기는 DISTINCT 절이다

SELECT DISTINCT 컬럼명 FROM USER_TBL;

 

LIMIT

출력하는 개수를 제한하는 구절로 자신이 원하는 출력의 개수만큼 출력하게 해준다.

SELECT * FROM 테이블명 LIMIT N // 전체 데이터에서 N개 만큼 출력

 

GROUP BY,HAVING/ROLLUP

선택한 컬럼에 따라 행을 구룹화합낟. 이를 통해 각 그롭에 대한 집계 함수를 적용할 수 있습니다.

주로 SUM, AVG, MAX, MIN, COUNT등의 집계 함수와 함께 사용된다.

HAVING은 GROUP BY로 생성된 구룹에 추가적인 필러를 적용한다 WHERE 절과 유사하지만 GROUP BY에 의해 생성된 그룹에 적용된다.

ROLLUP은 총합 또는 중간 합계가 필요하다면 GROUP BY절과 함께 WITH ROLLUP문을 사용하면 된다.

SELECT select_expr
	[FROM table_references]
    [WHERE where_condition]
    [GROUP BY {col_name | expr | position}]
    [HAVING where_condition]
    [ORDER BY {col_name | expr | position}]

2. INSERT

INSERT문은 테이블에 데이터를 삽입하는 명령어이다. 

테이블 이름 다음에 나오는 열은 생각이 가능하다. 하지만 생략할 경우에 VALUES 다음에 나오는 값들의 순서 및 개수가 테이블이 정의된 열 순서 및 개수와 동일해야 된다

INSERT INTO 테이블[(열1,열2,...)] VALUES (값1,값2 ...)

 

AUTO_INCREMENT

테이블이 속성이 AUTO_INCREMENT로 지정되어 있다면 INSERT 문에는 해당 열이 없다고 생각하고 입력하면 된다. AUTO_INCREMENT는 자동으로 1부터 증가하는 값을 입력해준다. 

AUTO_INCREMENT를 지정할 때는 기본키 또는 UNIQUE로 지정해 줘야된다.

 

3. UPDATE

기존 입력되어 있는 값을 변경하기 위해서는 UPDATE문을 다음과 같은 형식으로 사용한다.

UPDATE 테이블명 SET 컬럼명 = '변경할 내용'

 

4.DELETE 

DELETE는 행단위로 삭제한다. 

WHERE문이 생략되면 전체 데이터를 삭제한다.

DELETE FROM 컬럼명 WHERER 조건