ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SQL] SQL 기초 (SELECT, AS, DISTINCT, WHERE, LIKE, IS NULL, BETWEEN, AND, OR, ORDER BY, LIMIT, CASE)
    SQL & Database 2021. 10. 13. 10:54

    -Single Table in database

    -SQL 핵심적인 목표는 db 저장되어 있는 정보의 검색

    -IBM SQL (SEQUEL) 1970년대에 시작

     

    SELECT

    -* 모든 columns 나타내는 wildcard

    SELECT name, genre
    FROM movies;

    AS

    -AS SQL에서 column 또는 table 이름을 alias (별명) 통해 rename 있게 하는

    -이름은 single quotes안에 어떤 것이라도 있음

    -single quotes 항상 필요 것은 아니지만 이것으로 감싸는 연습을 해야함

    -AS 쓰면 table 이름이 바뀌는 것이 아니라 오직 result set에서 이름이 바뀜

    SELECT name AS '______'
    FROM movies;
    
    SELECT course_id AS "Courese ID", exercise_id AS "Exercise ID"
    FROM bugs;

    이런식으로 multiple columns 한번에 alias 만들 있다.

     

    Distinct

    -table 데이터를 검사 특정 column distinct value 아는 것이 도움됨

    SELECT tools
    FROM inventroy;
    
    tools
    -----
    Hammer
    Nails
    Nails
    Nails
    
    SELECT DISTINCT tools
    FROM inventory;
    
    tools
    -----
    Hammer
    Nails
    
    SELECT DISTINCT course_id, exercise_id FROM bugs;
    
    course_id  exercise_id
    14         2
    5          4
    14         4
    14         6
    5          3
    7          4
    7          8

    이렇게 2 이상 선태하면 set unique 것이 나옴

     

    Where

    SELECT *
    FROM movies
    WHERE imdb_rating > 8;

    -where clause filter

    SELECT x,y
    FROM coordinates
    WHERE x > y;

    이렇게 2개의 column 비교 하는 것도 가능

     

    Like I

    -where 절과 같이 사용되어서 specific pattern 찾아내는데 사용됨

    -'_' 어떠한 individual character 대체 있는 wildcard

    SELECT *
    FROM movies
    WHERE name LIKE 'Se_en';
    
    SELECT *
    FROM movies
    WHERE id LIKE '2__';

    이렇게 TEXT 아니더라도 숫자와도 같이 사용 있다.

     

    Like II

    -% like 함께 사용되는 wildcard

    SELECT *
    FROM movies
    WHERE anem LIKE 'A%';
    
    SELECT *
    FROM movies
    WHERE name LIKE '%mand%';

    -A% 는 A로 시작하는 모든 영화를 의미

    -%a 는 a로 끝나는 모든 영화를 의미

    -like 대소문자를 가리지 않기 때문에 %man% 경우 Batman Man of Steel 모두 검색됨

    SELECT *
    FROM books
    WHERE title LIKE '% 100\%';

    -wildcard (%, _) 가진 문자열을 검색하고 싶으면 \ escape charactor 쓰면

     

    Is Null

    -=, !- 같은 comparison operator NULL test하는 것은 불가능

    IS NULL
    IS NOT NULL

    -비어 있는 곳은 그냥 NULL 집어 넣는것이 나중에 검색하기 좋다.

     

    Between

    -where 함께 사용되어 certain range 검색.

    -2개의 값을 받으며 numbers, text, dates 모두 있음

    SELECT *
    FROM movies
    WHERE year BETWEEN 1990 AND 1999;
    
    SELECT *
    FROM movies
    WHERE name BETWEEN 'A' AND 'J';

    -이렇게 String으로 하면 A 시작해서 J까지만 검색 . J 시작하는 단어부터는는 검색 안됨

    -대부분의 언어에서 string 검색 또는 비교는 Lexicographical. 첫째 글자 부터 비교해 나감. 짧은 글자가 우선순위

     

    And

    -multiple 조건을 넣을 and 사용

    SELECT *
    FROM movies
    WHERE year BETWEEN 1990 AND 1999
       AND genre = 'romance';

    -between에서 사용되는 and 정확히 동일한 and 아님. 조건 2개를 넣은게 아니기 때문에

     

    Or

    -and 비슷하지만 (any) condition 취합하기 위해 사용

    SELECT *
    FROM movies
    WHERE year > 2014
       OR genre = 'action';
       
    SELECT *
    FROM movies
    WHERE (id > 10 AND id < 20)
    OR (id > 50 AND id < 60);

    -이렇게 and or 같이 사용 있다.

     

    Order by

    -where 같이 사용되어 데이터를 sort 하는

    SELECT *
    FROM movies
    ORDER BY name; --A to Z로 정렬 됨
    
    SELECT *
    FROM movies
    WHRE imdb_rating > 8
    ORDER BY year DESC;

    -Order by 항상 where 뒤에 나옴 (where 있다면, 없어도됨).

    -정렬 기준이 되는 column select column 아니어도

    -DESC는 내림 차순, ASC는 오름 차순

     

    Limit

    -result set 가지게 rows max 개수

    -쿼리를 빠르게 돌아가게 한다.

    SELECT *
    FROM movies
    ORDER BY imdb_rating DESC
    LIMIT 3;

    -limit rows 개수 초과해도 그냥 있는 것만 return 한다.

     

    Case

    -보통 select 안해서 if-then logic 제공

    SELECT name;
      CASE
        WHEN imdb_rating > 8 THEN 'Fantastic'
        WHEN imdb_rating > 6 THEN 'Poorly Received'
        ELSE 'Avoid at All Costs'
      END AS 'Rewview'
    FROM movies; --무조건 END로 끝나야함
    
    SELECT name,
      CASE
        WHEN genre = 'romance' THEN 'Chill'
        WHEN genre = 'comedy' THEN 'Chill'
        ELSE 'Intense'
      END AS 'Mood'
    FROM movies;
    
    SELECT
      CASE
        WHEN condition1 THEN "text"
        WHEN condition2 THEN 100
        WHEN condition3 THEN 3.14
      END AS 'example'
    FROM table;  ---CASE로 할 때 then 이 여러가지 data type이어도 된다.

     

    정리

    SELECT          -- DB로 부터 정보를 query 할 때 항상 사용
    AS              -- column이나 table을 rename
    DISTINCT        -- unique value를 반환
    WHERE           -- 사용자가 정한 condition을 이용해 결과를 filter
    LIKE & BETWEEN  -- 특수한 operator
    AND & OR        -- 다수의 조건을 결합
    ORDER BY        -- 결과를 정렬
    LIMIT           -- 반환되는 쿼리의 최대 rows 수를 결정
    CASE            -- 다른 outputs를 생성
Designed by Tistory.