-
[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를 생성
'SQL & Database' 카테고리의 다른 글
[Tibero] 데이터 암호화 (0) 2023.04.07 [SQL] SQL 기초 COUNT(), SUM(), MAX()/MIN(), AVG(), ROUND() (0) 2021.10.27 [SQL] SQL 기초 (CREATE TABLE, INSERT INTO, SELECT, ALTER TABLE, UPDATE, DELETE FROM) (0) 2021.09.30 [SQL] SQL의 간단한 역사 (0) 2021.09.15