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 방식으로 출력하게 되면 위와 같은 결과값이 나온다.

기타사항

  • NULLnon-NULL 값보다 앞선다. 따라서 ASC로 정렬할 경우 NULL값이 가장 먼저 나열되고 DESC로 정렬할 경우 NULL값을 가진 데이터들은 가장 마지막에 위치한다.