SQL Tutorial

김빛나리·2020년 7월 8일
0

1. Syntax

  • SELECT * FROM table_name;
  • table_name에서 *(모든 데이터) 가져오기

2. Select

  • SELECT column1, column2, ... FROM table_name;
  • column을 택해서 그것만 가져올 수도 있음

3. Select Distinct

  • SELECT column1 FROM table_name;
    • table_name에서 column1의 모든data 출력
  • SELECT DISTINCT column1 FROM table_name;
    • table_name에서 column1의 중복되지 않는 data 출력
  • SELECT COUNT(DISTINCT column1) FROM table_name;
    • table_name에서 column1의 중복되지 않는 data 개수 출력

4. Where

  • SELECT column1, column2, ... FROM table_name WHERE condition;
  • SELECT * FROM table_name WHERE column1='name';
    • table_name에서 모든 data중 column1이 name인 것들 출력
    • WHERE Price BETWEEN 50 AND 60;
      • Price column에서 50~60사이의 것들 출력
    • WHERE City LIKE 's%';
      • City column에서 s로 시작하는 것들 출력
    • WHERE City IN ('Paris','London');
      • City column에서 Paris, London인 것들 출력
  • SELECT * FROM table_name WHERE column1_id=num;
    • table_name에서 모든 data중 column1_id가 num인 것 출력
  • = / > / < / >= / <= / <>(not equal)

5. And, Or, Not

  • And
    • SELECT * FROM table_name WHERE condition1 AND condition2 AND condition3;
      • table_name에서 모든 data들 중 condition1이고, condition2이고, condition3인 data를 출력
    • SELECT * FROM Customers WHERE Country='Germany' AND City='Berlin';
      • Customers table에서 모든 data들 중 Country가 Germany고, City는 Berlin인 data를 출력
  • Or
    • SELECT * FROM table_name WHERE condition1 OR condition2 OR condition3;
      • table_name에서 모든 data들 중 condition1이거나, condition2이거나, condition3인 data들을 출력
    • SELECT * FROM Customers WHERE City='Berlin' OR City='München';
      • Customers table에서 모든 data들 중 City가 Berlin이거나 München인 data들을 출력
  • Not
    • SELECT * FROM table_name WHERE NOT condition;
      • table_name에서 모든 data들 중 condition이 아닌 data들을 출력
    • SELECT * FROM Customers WHERE NOT Country='Mexico';
      • Customers table에서 모든 data들 중 Country가 Mexico인 data들을 제외하고 출력
  • Combining AND, OR and NOT 가능
    • SELECT * FROM Customers WHERE Country='Germany' AND (City='Berlin' OR City='München');
      • Customers table에서 모든 data들 중 Country가 Germany고, City는 Berlin이거나 München인 data들 출력
    • SELECT * FROM Customers WHERE NOT Country='Germany' AND NOT Country='USA';
      • Customers table에서 모든 data들 중 Country가 Germany이고, USA인 data들 제외하고 출력

6. Order by

  • SELECT * FROM table_name ORDER BY column1 ASC(DESC);
    • table에서 column1의 data를 asc(작은순서부터 큰순서) 혹은 desc(큰순서부터 작은순서)로 정렬하여 출력
  • SELECT * FROM Customers ORDER BY Country;
    • Customers table에서 Country의 data를 a-z순서로 정렬하여 출력
  • SELECT * FROM Customers ORDER BY Country DESC;
    • Customers table에서 Country의 data를 z-a순서로 정렬하여 출력
  • SELECT * FROM Customers ORDER BY Country, CustomerName;
    • Country의 data를 a-z순서로 정렬하고, 만약 같은 Country일 경우 그 data들만 CustomerName를 a-z순서로 정렬하여 출력
  • SELECT * FROM Customers ORDER BY Country ASC, CustomerName DESC;

7. Insert Into

  • INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
    • column1에 value1을, column2에 value2를, ....data추가하기 위한 것
  • INSERT INTO table_name (column1, column3) VALUES (value1, value3);
    • column1에 value1을, column3에 value3을 추가하고 나머지 column에는 null이 들어감

8. Null values

  • SELECT column1, column2, column3 FROM table_name WHERE column3 IS NULL;
    • table에서 column3이 null인 data들 출력
  • SELECT column1, column2, column3 FROM table_name WHERE column2 IS NOT NULL;
    • table에서 column2가 null이 아닌 data들 출력

9. Update

  • UPDATE table_name SET column1 = 'value1', column3= 'value3' WHERE column2 = value2;
  • table에서 column2가 value2인 data들의 column1과 column3을 각각 value1과 value3로 업데이트
  • WHERE을 써주지 않으면 table에 모든 기록이 다 동일하게 업데이트 됨

10. Delete

  • DELETE FROM table_name WHERE condition;
    • condition에 해당하는 data삭제
  • DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste';
    • CustomerName이 Alfreds Futterkiste인 data 삭제
  • DELETE FROM table_name
    • table 삭제

11. Select Top

  • SELECT TOP 3 * FROM table_name (WHERE condition);
    • table의 제일 top에서 아래로 3개까지 출력
    • (where)붙이면 table의 condition인 data들 중 제일 top에서 아래로 3개까지 출력
  • SELECT TOP 50 PERCENT * FROM Customers;
    • 총 개수의 50%까지 출력
  • SELECT TOP 5 * FROM Customers (WHERE Country='Germany');
    • Customers의 제일 top에서 아래로 5개까지 출력
    • (where)붙이면 Customers의 Country가 Germany인 data들 중 제일 top에서 아래로 5개까지 출력
  • SELECT * FROM table_name (WHERE condition) LIMIT 5;
    • table의 제일 top에서 아래로 5개까지 출력
    • (where)붙이면 table의 condition인 data들 중 제일 top에서 아래로 5개까지 출력
  • SELECT * FROM Customers (WHERE Country='Germany') LIMIT 3;
    • Customers의 제일 top에서 아래로 3개까지 출력
    • (where)붙이면 Customers의 Country가 Germany인 data들 중 제일 top에서 아래로 3개까지 출력

12. Min and Max

  • Min
    • SELECT MIN(column_name) FROM table_name;
      • table의 column_name중에서 minimum인 값 출력
      • MIN(column_name) | minimum값
    • SELECT MIN(column_name) AS change_name FROM table_name;
      • table의 column_name중에서 minimum인 값을 change_name으로 출력
      • change_name | minimum값
    • SELECT MIN(column_name) AS change_name FROM table_name WHERE condition;
      • table의 column_name중에서 condition인 minimum 값을 change_name으로 출력
      • change_name | minimum값
    • SELECT MIN(Price) AS SmallestPrice FROM Products WHERE CategoryID=1;
  • Max
    • SELECT MAX(column_name) FROM table_name;
    • SELECT MAX(column_name) AS change_name FROM table_name;
    • SELECT MAX(column_name) AS change_name FROM table_name WHERE condition;
    • SELECT MAX(Price) AS LargestPrice FROM Products WHERE CategoryID=2;
    • Min에서 MIN -> MAX, minimum -> maximum으로 바꿔주면 Min과 설명 똑같음

13. Count, Avg, Sum

  • Count
    • SELECT COUNT(column_name) FROM table_name WHERE condition;
    • table의 rows 개수 return
    • SELECT COUNT(ProductID) FROM Products;
  • Avg
    • SELECT AVG(column_name) FROM table_name WHERE condition;
    • column_name 값의 평균값
    • SELECT AVG(Price) FROM Products;
  • Sum
    • SELECT SUM(column_name) FROM table_name WHERE condition;
    • column_name 값의 총합
    • SELECT SUM(Quantity) FROM OrderDetails;

14. Like

  • SELECT * FROM table_name WHERE column_name Like pattern;
  • pattern
    • 'a%'
      • table의 column_name이 a로 시작하는 data 출력
    • '%a'
      • table의 column_name이 a로 끝나는 data 출력
    • '%or%'
      • table의 column_name 속에 or이 있는 data 출력
      • (예: Store)
    • '_r%'
      • table의 column_name 두번째 위치해 있는 문자가 r인 data 출력
    • 'a__%'
      • table의 column_name이 a로 시작하고, 적어도 3문자인 data 출력
    • 'a%o'
      • table의 column_name이 a로 시작해서 o로 끝나는 data출력
  • SELECT * FROM table_name WHERE column_name NOT LIKE pattern;
    • table의 column_name이 pattern인 data 제외하고 출력

15. Wildcard

  • %
    • bl%
    • bl이 포함된 data찾기
    • bl, black, blue, blob 등등
    • SELECT * FROM Customers WHERE City LIKE 'ber%';
  • _
    • h_t
    • h와 t 사이 한 문자가 포함된 data 찾기
    • hot, hat, hit 등등
    • SELECT * FROM Customers WHERE City LIKE 'L_n_on';
  • []
    • h[oa]t
    • h와 t 사이 문자가 o나 a인 data 찾기
    • hot, hat
    • SELECT * FROM Customers WHERE City LIKE '[bsp]%';
      • City 속에 b나 s나 p로 시작하는 data 찾기
    • SELECT * FROM Customers WHERE City LIKE '[a-c]%';
      • City 속에 a부터 c까지 그것으로 시작하는 data찾기
    • [!]
      • SELECT * FROM Customers WHERE City LIKE '[!bsp]%';
      • City 속에 b나 s나 p로 시작하는 data 제외한 data 찾기
      • NOT LIKE '[bsp]%';

16. In

  • SELECT * FROM table_name WHERE column_name IN ('value1', 'value2', ...);
    • table의 column_name이 value1, value2, ...인 data 출력
  • SELECT * FROM table_name WHERE column_name NOT IN ('value1', 'value2', ...);
    • table의 column_name이 value1, value2, ...인 data 제외한 data 출력

17. Between

  • SELECT * FROM table_name WHERE column_name BETWEEN value1 AND value2;
    • table의 column_name에서 value1부터 value2 사이의 값인 data 출력
    • SELECT * FROM Products WHERE Price BETWEEN 10 AND 20;
  • SELECT * FROM Products WHERE Price NOT BETWEEN 10 AND 20;
    • 10부터 20 사이의 값인 data를 제외한 나머지 data 출력
  • in에서
    • SELECT * FROM Products WHERE Price BETWEEN 10 AND 20 AND NOT CategoryID IN (1,2,3);
    • CategoryID가 1,2,3인 data를 제외하고 Price가 10부터 20까지인 data 출력
  • text value
    • SELECT * FROM Products WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni' ORDER BY ProductName;
      • ProductName의 a->z순서대로 정렬 후, ProductName이 Carnarvon Tigers인 data부터 Mozzarella di Giovanni인 data까지 출력
    • NOT BETWEEN
      • 제외하고 출력
  • date
    • SELECT * FROM Orders WHERE OrderDate BETWEEN #01/07/1996# AND #31/07/1996#;
      • 7/4/1996 ~
    • 또는, BETWEEN '1996-07-01' AND '1996-07-31';
      • 1996-07-04 ~

18. Aliases

  • SELECT column_name1 AS change_name1, column_name2 AS change_name2 FROM table_name;
    • table에서 column_name1이름을 change_name1 이름으로 바뀌고, olumn_name2이름을 change_name2 이름으로 바뀌어서 출력
    • data는 변화없이 그래도 출력
  • SELECT CustomerID AS ID, CustomerName AS Customer FROM Customers;
  • SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS Address FROM Customers;
    • 출력값
    • CustomerName | Address, PostalCode City, Country
    • Alfreds Futterkiste | Obere Str. 57, 12209 Berlin, Germany

19. Join

  • INNER JOIN
    • SELECT column_name FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
  • LEFT JOIN
  • RIGHT JOIN
  • FULL JOIN

참고: https://www.w3schools.com/sql/default.asp

0개의 댓글