2021-11-30 20:42 작성
My SQL basic 메모
Table of contents
SELECT
| 명령어 | 설명 |
|---|---|
SELECT 1 + 1 | 2 |
SELECT NOW() | 2021-11-30 15:54:24 |
SELECT CONCAT('John', ' ', 'Doe') | John Doe |
SELECT select_list FROM dual | dual은 dummy clause로 실제적 의미를 갖지 않는다. 실제 table을 지정하지 않고 FROM을 사용해야 할 경우 사용한다. |
SELECT expression AS column_alias; = SELECT expression column_alias; (e.g. SELECT CONCAT('Jane',' ','Doe') AS 'Full name';, SELECT CONCAT('John',' ','Doe') AS name;) | AS 이하의 column_alias로 이름을 변경할 수 있다. |
ORDER BY - 정렬
| 명령어 | 설명 |
|---|---|
ORDER BY column1 ASC, column2 DESC; | column1을 ascending 방식으로 정렬한 뒤 정렬값을 column2의 기준에 따라 다시 descending 방식으로 정렬(column1에서 정렬된 순서를 바꾸지 않으며 만약 동일값이 존재하면 그 안에서 column2의 기준을 적용해 정렬한다.) |
ORDER BY quantityOrdered * priceEach DESC; | 연산 표현도 가능 |
SELECT
contactLastname,
contactFirstname
FROM
customers
ORDER BY
contactLastname DESC ,
contactFirstname ASC;
Output:
| contactLastname | contactFirstname |
|---|---|
| Young | Dorothy |
| Young | Jeff |
| Young | Julie |
| Young | Mary |
| Yoshido | Juri |
| Walker | Brydey |
| Victorino | Wendy |
| Urs | Braun |
| Tseng | Jerry |
| Tonini | Daniel |
…
| 명령어 | 설명 |
|---|---|
SELECT orderNumber, orderLineNumber, quantityOrdered * priceEach AS subtotal FROM orderdetails ORDER BY subtotal DESC; | AS로 명칭이 변경된 경우 ORDER BY에서 사용 가능 |
FIELD()를 이용한 ORDER BY 👇
| 명령어 | 설명 |
|---|---|
FIELD('str', 'str1','str2','...'); e.g. SELECT FIELD('B', 'A','B','C'); => 2 | str1, str2, ... 중 str의 위치값을 반환 |
SELECT
orderNumber, status
FROM
orders
ORDER BY FIELD(status,
'In Process',
'On Hold',
'Cancelled',
'Resolved',
'Disputed',
'Shipped');
output:
| orderNumber | status |
|---|---|
| 10425 | In Process |
| 10421 | In Process |
| 10422 | In Process |
| 10420 | In Process |
| 10424 | In Process |
| 10423 | In Process |
| 10414 | On Hold |
| 10401 | On Hold |
| 10334 | On Hold |
| 10407 | On Hold |
…
각각의 위치값을 ASC 방식으로 출력하게 되면 위와 같은 결과값이 나온다.
기타사항
NULL은non-NULL값보다 앞선다. 따라서ASC로 정렬할 경우NULL값이 가장 먼저 나열되고DESC로 정렬할 경우NULL값을 가진 데이터들은 가장 마지막에 위치한다.