[TIL] 20210524_SQL 쿼리문

드디어 데이터베이스를 배우기 시작했습니다.

개인적으로 조금 더 숙지해야 할 구문들을 정리해보았습니다.


데이터베이스 삭제

DROP 데이터베이스_이름;

하나의 row를 삭제하기 위해서는 DELETE 구문을 사용합니다.
하지만 데이터베이스와 테이블을 삭제하기 위해서는 DROP 구문을 사용합니다.


테이블 정보 확인

DESCRIBE 테이블_이름;

DESC라는 약어를 사용할 수도 있습니다!

다음과 같은 결과를 보입니다.

mysql> desc users;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int          | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | YES  |     | NULL    |                |
| email | varchar(255) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

WHERE 구문

<> : 특정값 제외

특정 값을 제외한 데이터를 찾습니다.

SELECT A, B
FROM 테이블_이름
WHERE A <> "특정 값";

특히 위 연산자는 처음 접했는데, 신기하네요.

LIKE "%특정_문자열%" : 특정 값과 비슷한 값 필터링

문자열에서 특정 값과 비슷한 값들을 필터링한 데이터를 찾습니다.

SELECT A, B
FROM 테이블_이름
WHERE B LIKE "%특정문자열%";

%의 자리에 다른 문자열이 들어간다고 생각하면 됩니다.
예를 들어,
LIKE "a%" 라면, a로 시작하는 문자열을 찾는 구문이,
LIKE "%a" 라면, a로 끝나는 문자열을 찾는 구문이,
LIKE "%a%" 라면, a가 포함된 문자열을 찾는 구문이 되겠습니다.

IN ("문자열1", "문자열2") : 문자열과 일치하는 값 필터링

IN의 인자 값들과 일치하는 값들을 필터링한 데이터를 찾습니다.

SELECT A, B
FROM 테이블_이름
WHERE A IN ("문자열1", "문자열2", ...);


COUNT("컬럼") : 조회된 컬럼의 개수를 리턴

NULL값을 제외한 조회된 컬럼의 개수를 리턴합니다.

SELECT COUNT(컬럼) FROM order_items;

COUNT함수의 인자로 wildcard(*)를 넣으면 NULL값을 포함한 전체 행의 갯수를 가져옵니다.
하지만 NULL의 영향을 받지 않는다면 COUNT의 인자로 특정 컬럼을 주는 것이 성능적으로 좋다고 합니다.


GROUP BY

공식문서에서의 코드를 예로 들어보겠습니다.

SELECT COUNT(CustomerID)
FROM Customers

위의 코드는 다음과 같은 결과를 가져옵니다

mysql > SELECT COUNT(CustomerID) FROM Customers
+-------------------+
| COUNT(CustomerId) |
+-------+-----------+
| 91                |
+-------+-----------+

하지만 GROUP BY를 사용하여 나라별 데이터를 가져오겠습니다.

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;

mysql > SELECT COUNT(CustomerID), Country FROM Customers
+-------------------+-----------+
| COUNT(CustomerId) | COUNTRY   |
+-------+-----------+-----------+
| 3                 | Argentina |
| 2                 |   Austria |
| 2                 |   Belgium |
...
+-------+-----------+-----------+

w3school 공식문서는, GROUP BY는 하나 이상의 컬럼의 결과값을 그룹화하기 위해 종종 COUNT(), MAX(), MIN(), SUM(), AVG() 등의 함수와 같이 사용된다고 합니다.


HAVING

HAVING은 GROUP BY의 결과에 대한 필터입니다. WHERE절과 같은 역할을 하죠.
위의 예시와 HAVING 절을 사용해 GROUP BY에 대한 필터링을 해보겠습니다.

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;

mysql > SELECT COUNT(CustomerID), Country FROM Customers GROUP BY Country HAVING COUNT(CustomerID) > 5;
+-------------------+-----------+
| COUNT(CustomerId) | COUNTRY   |
+-------+-----------+-----------+
| 9                 |    Brazil |
| 11                |    France |
| 11                |   Germany |
...
+-------+-----------+-----------+

기억할 것은, HAVING은 GRUOP BY를 필터링한다는 것!!!@@


좋은 웹페이지 즐겨찾기