BigData

[초보] SQL 기초 모음 - SELECT(1)

IT오이시이 2022. 8. 6. 21:39
728x90

[초보] 데이터 분석을 위한 SQL 기초 모음

1.[초보] SQL 기초 모음 - SELECT(1)

2.[초보] SQL 기초 모음 - INSERT(1)

3. [초보] SQL 기초 모음 - UPDATE(1)

4. [초보] SQL 기초 모음 - DELETE(1)

출처: [AgileBus - IT 기술자를 위한 최신 기술 Trends:티스토리]

 

 

[초보] SQL 기초 모음 - SELECT (1)

SQL 쿼리를 배우기 위해 가장 먼저 배운 것이 SELECT 문입니다.
데이터베이스의 테이블에 저장된 데이터를 읽어서 처리하는 가장 기본적인 문장으로 데이터의 특정 데이터와 조회 되는 순서나 같은 값을 기준으로 갯수를 카운트 하거나 특정 데이터 끼리 그룹이나 다양한 수학적 연산이 가능합니다.
간단한 예제를 통해서 SELECT 문의 가장 기본적인 테이블의 조회 방법을 알아 보고자 합니다.

 

1. SQL SELECT Statement Syntax :

 

■ SQL 구문 중요 사항

 

1.SQL 문은 대소문자를 구분하지 않으므로 SQL에서 SELECT와 select가 모두 동일합니다.
* 한편 MySQL의 경우 테이블 이름을 case-sensitive 로 구분하게 할 수 있습니다.
2. 일반적으로 SQL 키워드는 대문자로 작성됩니다. 소문자를 사용하여도 무방하나 문장을 쉽게 구분할 수 있습니다.
3. SQL 구문은 데이터 끼리의 수학적 대수관계, 데이터쌍(튜플) 으로 이루어 집니다.
4. 각 SQL 문은 세미콜론(;)으로 끝납니다. 세미콜론은 일반적으로 두 개 이상의 문이 사용되는 경우 두 개의 SQL 문을 서로 구분하는 데 사용됩니다.

■ SELECT 기본 조회 문장

SELECT expressions
FROM tables
[WHERE conditions]
[ORDER BY expression [ ASC | DESC ]];

 

특정 컬럼을 기준으로 데이터 그룹핑

그룹은 주로GROUP BY 문과 COUNT(), SUM(), MIN(), MAX(), AVG() 등과 같은 수학,통계 함수와 사용됩니다.

SELECT <column1>, SUM(<column2>)
FROM <table>
GROUP BY <grouping_column>;

 

그룹 조건 결과에 특정 조건을 추가하는 HAVING 문장

- HAVING 조건은 그룹이 실행된 결과가 출력될때 작동 되는 것으로 FROM절의 조건과 차이가 있습니다.
그룹 문장의 결과 중에 특정 조건을 만족하는 결과중에서 조건을 만족하는 결과를 찾습니다.
주의 사항으로 테이블의 전체를 처리해야 나오는 것으로 전체데이터를 대상으로 하는 SQL에 사용됩니다.

SELECT <column1>, SUM(<column2>)
FROM <table>
GROUP BY <grouping_column>
HAVING <condition>;

 

SELECT문을 이용해서 새로운 테이블 만드는 방법

SELECT <column> INTO <new_table>
FROM <table>
WHERE <condition>;

* SQL결과를 테이블로 만드는 방법으로 처리 결과를 임시 저장 할 수 있습니다. 그러나 이러한 방법이 비효율적이만 DB에 반복 작업을 불일 수도 있고, 처리하는 동안 불 필요한 컴퓨터 자원과 공간을 낭비 할 수도 있습니다.

2. 테이블조회 기초 - 전체 필드 조회

■ 전체 필드 조회

SELECT문은 테이블에 저장된 데이터를 검색하는 명령 입니다.

(팁) 문자 "*" 를 이용해서 전체 테이블의 필드를 조회 할 수 있습니다.
SELECT * FROM 테이블명;
SELECT * FROM Customers;

<결과>

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden
6 Blauer See Delikatessen Hanna Moos Forsterstr. 57 Mannheim 68306 Germany

 

3. 테이블조회 기초 - 특정 필드 조회

■ 특정 필드 조회

SELECT문을 통해 필요한 필드들을 조회 하는 방법입니다.

(팁) 테이블의 필드명을 나열하여 테이블의 필요한 필드를 조회 할 수 있습니다.
SELECT 필드명1, 필드명2, ..., 필드명N FROM 테이블명;
SELECT CustomerID, CustomerName, Country FROM Customers;

<결과>

CustomerID CustomerName Country
1 Alfreds Futterkiste Germany
2 Ana Trujillo Emparedados y helados Mexico
3 Antonio Moreno Taquería Mexico
4 Around the Horn UK
5 Berglunds snabbköp Sweden
6 Blauer See Delikatessen Germany
7 Blondel père et fils France
8 Bólido Comidas preparadas Spain

 

4. 테이블조회 기초 - 특정 필드로 조회 소팅

■ 특정 필드로 조회 소팅 (오름차순, 내림차순)

SELECT문을 통해 필요한 필드의 값을 소팅하여 순서대로 조회 하는 방법입니다.

(팁) SQL 문장의 마지막에 ORDER BY "필드명" ASC|DESC 를 통해 순서대로 소팅이 가능합니다.
- ASC : 작은 값부터 출력되는 Ascending(오름차순)의 약자이고
- DESC : 큰 값부터 출력되는 Descending (내림차순)의 약자 입니다.

 

■ Descending (내림차순)으로 정렬

SELECT 필드명1, 필드명2, ..., 필드명N FROM 테이블명 ORDER BY 필드명1 DESC ;
SELECT CustomerID, CustomerName, Country FROM Customers ORDER BY Country DESC ;

<결과> :

CustomerID CustomerName Country
33 GROSELLA-Restaurante Venezuela
35 HILARIÓN-Abastos Venezuela
46 LILA-Supermercado Venezuela
47 LINO-Delicateses Venezuela
32 Great Lakes Food Market USA
36 Hungry Coyote Import Store USA
43 Lazy K Kountry Store USA
45 Let's Stop N Shop USA
48 Lonesome Pine Restaurant USA

 

■ Ascending (오름차순)으로 정렬

<결과>

SELECT CustomerID, CustomerName, Country FROM Customers ORDER BY Country ASC ;
CustomerID CustomerName Country
12 Cactus Comidas para llevar Argentina
54 Océano Atlántico Ltda. Argentina
64 Rancho grande Argentina
20 Ernst Handel Austria
59 Piccolo und mehr Austria
50 Maison Dewey Belgium
76 Suprêmes délices Belgium

 

5. 테이블조회 기초 - 특정 필드의 값으로 필터링 조건

■ 특정 필드의 값으로 필터링 조건

SELECT CustomerID, CustomerName, Country FROM Customers WHERE country = 'Austria'

<결과>

CustomerID CustomerName Country
20 Ernst Handel Austria
59 Piccolo und mehr Austria

 

6. 테이블 조회를 위한 SQL 예시들

 

■ CREATE (생성)

 

CREATE DATABASE CREATE DATABASE database_name
CREATE TABLE CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
...
)
CREATE INDEX CREATE INDEX index_name
ON table_name (column_name)or

CREATE UNIQUE INDEX index_name
ON table_name (column_name)
CREATE VIEW CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition
CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
.....
columnN datatype,
PRIMARY KEY( one or more columns )
);
CREATE UNIQUE INDEX index_name
ON table_name ( column1, column2,...columnN);
CREATE DATABASE database_name;

 

■ ALTER (변경)

ALTER TABLE ALTER TABLE table_name
ADD column_name datatype

or

ALTER TABLE table_name
DROP COLUMN column_name
ALTER TABLE table_name

 

ALTER TABLE table_name {ADD|DROP|MODIFY} column_name {data_ype};
ALTER TABLE table_name RENAME TO new_table_name;

 

DROP (삭제)

DROP DATABASE DROP DATABASE database_name
DROP TABLE DROP TABLE table_name
DROP INDEX DROP INDEX table_name.index_name (SQL Server)
DROP INDEX index_name ON table_name (MS Access)
DROP INDEX index_name (DB2/Oracle)
DROP INDEX index_name (MySQL)
DROP TABLE table_name;
DROP INDEX index_name;
DROP DATABASE database_name;

 

Insert (입력)

INSERT INTO INSERT INTO table_name
VALUES (value1, value2, value3,....)or
INSERT INTO table_name
(column1, column2, column3,...)
VALUES (value1, value2, value3,....)
INSERT INTO table_name( column1, column2....columnN)
VALUES ( value1, value2....valueN);

 

UPDATE (수정)

UPDATE table_name
SET column1 = value1, column2 = value2....columnN=valueN
[ WHERE CONDITION ];

 

DELETE, TRUNCATE (삭제)

DELETE DELETE FROM table_name
WHERE some_column=some_valueor

DELETE FROM table_name
(Note: Deletes the entire table!!)

DELETE * FROM table_name
(Note: Deletes the entire table!!)
TRUNCATE TABLE TRUNCATE TABLE table_name
TRUNCATE TABLE table_name;
DELETE FROM table_name WHERE {CONDITION};

 

Select (조회)

 

SELECT * SELECT *
FROM table_name
SELECT DISTINCT SELECT DISTINCT column_name(s)
FROM table_name
SELECT INTO SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_table_nameor

SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_table_name
SELECT TOP SELECT TOP number|percent column_name(s)
FROM table_name
SELECT column1, column2....columnN
FROM table_name;
SELECT DISTINCT column1, column2....columnN
FROM table_name;

 

Condition (조회 조건)

WHERE SELECT column_name(s)
FROM table_name
WHERE column_name operator value
SELECT column1, column2....columnN
FROM table_name
WHERE CONDITION;

일반적인 조회 조건은 인덱스와 함께 고민해야 합니다.
같은것>큰것, 작은것 > 있는것, 아닌것,다른것 > 없는것 등의 순서로 인덱스 활용의 논리적. 물리적 효율성을 이해 해야 하며, 인덱스 구조와 순서에 맞는 조건절의 순서와 구조도 매우 중요 합니다.
SQL튜닝에서 인덱스와 조건의 튜닝은 책한권 만큼 할 말이 많은 분야로 많은 경험과 노하우가 요구됩니다.

AND / OR SELECT column_name(s)
FROM table_name
WHERE condition
AND|OR condition
AS (alias) SELECT column_name AS column_alias
FROM table_nameor
SELECT column_name
FROM table_name AS table_alias
BETWEEN SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
IN SELECT column_name(s)
FROM table_name
WHERE column_name
IN (value1,value2,..)
LIKE SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
SELECT column1, column2....columnN
FROM table_name
WHERE CONDITION-1 {AND|OR} CONDITION-2;
SELECT column1, column2....columnN
FROM table_name
WHERE column_name IN (val-1, val-2,...val-N);
SELECT column1, column2....columnN
FROM table_name
WHERE column_name BETWEEN val-1 AND val-2;
SELECT column1, column2....columnN
FROM table_name
WHERE column_name LIKE { PATTERN };

 

UNION (조회 병합)

 

UNION SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
UNION ALL SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

 

Order (조회순서)

 

ORDER BY SELECT column_name(s)
FROM table_name
ORDER BY column_name [ASC|DESC]
SELECT column1, column2....columnN
FROM table_name
WHERE CONDITION
ORDER BY column_name {ASC|DESC};

 

Group (그룹)

 

GROUP BY SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
SELECT SUM(column_name)
FROM table_name
WHERE CONDITION
GROUP BY column_name;
SELECT COUNT(column_name)
FROM table_name
WHERE CONDITION;
SELECT SUM(column_name)
FROM table_name
WHERE CONDITION
GROUP BY column_name
HAVING (arithmetic function condition);

 

JOIN (테이블 조인)

 

INNER JOIN SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
LEFT JOIN SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
RIGHT JOIN SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
FULL JOIN SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name

 

 

[초보] SQL 기초 모음

1.[초보] SQL 기초 모음 - SELECT(1)
2.[초보] SQL 기초 모음 - INSERT(1)
3. [초보] SQL 기초 모음 - UPDATE(1)
4. [초보] SQL 기초 모음 - DELETE(1)

 

[참고자료]

728x90
반응형