기본적으로 SQL은 대소문자를 구분하지 않습니다
DML, DDL, DCL, DTL
명령어 종류 | 설명 | 명령어 |
DML (Data Manipulation Language) | 레코드에 대한 CRUD | select |
insert update delete |
||
DDL (Data Definition Language) | 스키마에 대한 CRUD | create alter drop rename truncate |
DCL (Data Control Language) | 데이터베이스 접근에 대한 권한 추가/삭제 | grant revoke |
DTL (Data Transactional Language) | 트랜잭션 | commit rollback savepoint |
Select
Select
명령어는 데이터베이스에서 데이터를 선택하기 위해 사용됩니다.
반환되는 데이터는 결과 집합(result-set) 이라고도 불리는 결과 테이블(result table)에 저장됩니다.
SELECT column1, column2, ...
FROM table_name;
SELECT * FROM table_name;
Distinct
select distinct
를 사용하면 서로 다른 값만을 반환합니다. 즉, 중복값을 나타내지 않습니다.
테이블 내부에서, 열(column)은 많은 중복된 값을 갖기도 합니다. 그리고 가끔 서로 다른 값만을 리스트 하고 싶을 때가 있죠.
SELECT DISTINCT column1, column2, ...
FROM table_name;
Where
where
절은 레코드(행)를 필터링하는데 사용됩니다.
where절은 지정된 조건을 충족하는 레코드만을 추출하는 데 사용됩니다.
SELECT column1, column2, ...
FROM table_name
WHERE condition;
And, Or, Not
where절은 and
, or
, not
연산자와 함께 쓰일 수 있습니다.
and, or 연산자는 하나 이상의 조건을 충족하는 레코드를 필터링하는데 사용합니다.
And
and
연산자는 and로 분리된 모든 조건을 충족하는 레코드를 보여줍니다.
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
Or
or
연산자는 or로 분리된 조건 중 하나라도 충족하는 레코드를 보여줍니다.
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
Not
not
연산자는 조건에 부합하지 않는 레코드를 보여줍니다.
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;
Order By
order by
키워드는 결과 집합을 오름차순이나 내림차순으로 정렬하는데 사용됩니다.
order by 키워드는 기본적으로 레코드를 오름차순으로 정렬합니다. 레코드를 내림차순으로 정렬하기 위해선, DESC
키워드를 사용해야 합니다. (오름차순을 명시적으로 작성하고 싶다면, ASC
키워드를 사용하면 됩니다.)
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
Null Value
Null값이 있는 필드는 값이 없는 필드입니다.
만약 테이블에 있는 옵션이 선택적이라면, 새로운 레코드를 삽입하거나 기존 레코드를 추가할 때 필드에 값을 입력하지 않는것도 가능합니다. 그러면 필드가 Null값으로 저장됩니다.
주의할 점은 Null 값음 0, 혹은 공백을 포함하는 필드와 다릅니다. Null값이 있는 필드는 레코드를 생성하는 동안 '비워둔'채로 남겨놓은 것입니다.
그렇다면 Null값인지 어떻게 알 수 있을까요?
=, <, <>와 같은 비교연산자를 사용하는 방법으로는 알 수 없습니다. Null값인지 알아보기 위해 is null
이나 is not null
연산자를 사용해야 합니다.
SELECT column_names
FROM table_name
WHERE column_name IS NULL;
SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;
In
in
연산자는 where 절에서 여러가지 값을 지정할 수 있도록 해줍니다.
in 연산자는 여러개의 조건들을 or
로 연결한 문장을 in 하나로 축약했다고 볼 수 있습니다.
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);
SELECT column_name(s)
FROM table_name
WHERE column_name IN (SELECT STATEMENT);
Between
between
연산자는 주어진 범위 내의 값을 선택합니다. 조건으로 숫자, 텍스트, 날짜를 사용할 수 있습니다.
between 연산자는 시작과 마지막 값이 포함됩니다.
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
Statistics(Stats)
Min / Max
min()
함수는 선택된 열에서 가장 작은 값을 가진 레코드를 반환합니다.
SELECT MIN(column_name)
FROM table_name
WHERE condition;
max()
함수는 선택된 열에서 가장 큰 값을 가진 레코드를 반환합니다.
SELECT MAX(column_name)
FROM table_name
WHERE condition;
Count / Avg(=mean) / Sum / Median(중앙값)
MySql은 median 함수가 없음!! (Oracle 에는 있습니다.)
count()
함수는 특정한 기준에 적합한 열의 수를 반환합니다.
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
avg()
함수는 수로 표현되는 칼럼의 평균 값을 반환합니다.
SELECT AVG(column_name)
FROM table_name
WHERE condition;
sum()
함수는 수로 표현되는 column의 총합을 반환합니다.
SELECT SUM(column_name)
FROM table_name
WHERE condition;
Var(Variance) / Stddev
Insert into
insert into
statement는 테이블에 새로운 레코드를 추가할 때 사용됩니다.
insert into는 두 가지 방법으로 쓸 수 있습니다.
1. 컬럼 이름들과 값을 지정하여 작성합니다.
2. 만약 테이블의 모든 컬럼에 값을 추가한다면, 구체적인 컬럼명을 생략할 수 있습니다. 하지만 테이블의 칼럼의 순서와 작성하는 값의 순서를 정확히 같도록 해야합니다.
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
departments
라는 테이블은 다음과 같습니다.
총 9개의 레코드가 있는데, 여기에 새로운 레코드를 추가해보도록 하겠습니다.
테이블에 레코드가 제대로 추가된 것을 볼 수 있습니다.
이번에는 칼럼 명을 지정하지 않고, 새로운 레코드를 추가해 보도록 하겠습니다.
테이블에 레코드가 제대로 추가되었습니다.
Update
update
statements는 테이블에 이미 존재하는 레코드를 수정할 때 사용됩니다.
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
위에서 추가한 NewMArketing 레코드를 New Marketing으로 수정해보도록 하겠습니다.
주의할 점은 where절에서 어떤 레코드를 업데이트 할 지 지정한다는 점입니다. 만약 where절을 생략한다면, 테이블의 모든 레코드가 입력 값으로 업데이트 됩니다.
Delete
DELETE FROM table_name WHERE condition;
delete
statement는 테이블에 존재하는 레코드를 삭제합니다.
Select Top (Limit)
Select Top
절은 반환할 레코드의 수를 지정하는데 사용됩니다.
Select Top 절은 수천개의 레코드가 있는 대 테이블에서 유용합니다.
많은 수의 레코드를 반환받아 사용하는 것은 퍼포먼스에 영향을 줄 수 있습니다.
단 모든 데이터베이스 시트템에서 Select Top 절을 지원하는 것은 아닙니다. MySql의 경우는 한정된 수의 레코드를 선택하기 위해 Limit
를 사용하고, 반면에 오라클은 FETCH FIRST n ROWS ONLY
와 ROWNUM
을 사용합니다.
✏️ 공부에 참고한 사이트