- w3school 튜토리얼 정리
- sql은 언어인데, 데이터베이스에 데이터를 저장하거나 원하는 것만 골라서 가져오거나 삭제하거나 등등의 작업을 하려고 쓴다. 엑셀이라고 생각하면 된다.
- 관계형 데이터베이스 : 개체 간의 관계에 따라서 테이블을 구성한..?
- 테이블은 쉽게 생각해서 엑셀에서 하나의 스프레드 시트와 비슷하다. 연관된 데이터들을 모아서 하나의 테이블을 구성한다.
- sql 명령어(키워드)는 대소문자 구분이 없다, 그럼에도 보통 대문자로 쓰긴한다.. 다른 데이터명 같은거랑 구분하려고 그런걸까..? 컨벤션인것 같다.
- 기본적인 명령어들
- 테이블 관련
- CREATE TABLE - creates a new table
- ALTER TABLE - modifies a table
- DROP TABLE - deletes a table
- 데이터 관련
- SELECT - extracts data from a database
- UPDATE - updates data in a database
- DELETE - deletes data from a database
- INSERT INTO - inserts new data into a database
- 테이블 관련
- 기본적인 명령어들
명령어 정리
SELECT
특정 테이블에서 원하는 데이터 가져오기
SELECT 이름, 성별 FROM 학생_테이블;
따로 속성을 지정하지 않고 모든 속성을 다 가져오고 싶다면 *을 쓴다.
SELECT * FROM 학생_테이블;
SELECT DISTINCT : 중복되지 않는 데이터만 원할 때
SELECT DISTINCT 성별 FROM 학생;
Count() : 추출된 데이터의 갯수를 알고 싶을 때 → 결과에서 속성명이 Count()이 된다. 다르게 이름 짓고 싶으면 뒤에 AS를 붙이고 원하는 이름을 쓴다.
https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_distinct3
SELECT Count(*) AS DistinctCountries FROM (SELECT DISTINCT Country FROM Customers);
WHERE : 조건을 주고 싶을 때 사용. SELECT에서 뿐만아니라, UPDATE, DELETE에서도 씀
SELECT * FROM Customers WHERE Country='Mexico';
AND, OR, NOT : where에서 세부 조건으로 사용
SELECT column1, column2, ... FROM table_name WHERE condition1 AND condition2 AND condition3 ...; SELECT column1, column2, ... FROM table_name WHERE condition1 OR condition2 OR condition3 ...; SELECT column1, column2, ... FROM table_name WHERE NOT condition;
ORDER BY : select해서 나온 결과를 정렬하고 싶을 때 사용. select 아닐 때도 쓸 수 있으려나
ASC는 오름차순, DESC는 내림차순. 이걸 적지 않으면 기본으로 ASC라고 생각한다.
여러 기준을 적으면 column1을 기준으로 정렬을 하고, 중복된 데이터가 있으면 그 안에서는 column2을 기준으로 정렬한다.
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC 또는 DESC;
INSERT INTO : 테이블에 데이터를 삽입
특정 칼럼만 지정해서 값을 넣을 수도 있고(그럼 나머지에는 디폴트로 지정한게 들어가던지 null로 들어감), 칼럼 다 값을 적어줄 수도 있다.
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');
NULL : 앞서 말했듯이 값을 지정해주지 않으면 NULL 값이 들어간다.
where 조건을 줄 때 null인 데이터는 제외할 건지 등을 지정할 수 있다.
SELECT column_names FROM table_name WHERE column_name IS NULL; SELECT column_names FROM table_name WHERE column_name IS NOT NULL;
Wildcards
- 정규식이랑 비슷하다고 해야하나.. WHERE에서 LIKE 키워드를 쓸 때 사용할 수 있다.
- 예
WHERE CustomerName LIKE 'a%'
⇒ a로 시작하는 단어 모두
- 예
- 정규식이랑 비슷하다고 해야하나.. WHERE에서 LIKE 키워드를 쓸 때 사용할 수 있다.
Aliases : 결과 테이블에서 칼럼명을 원하는 대로 줄 수 있다. 또는 결과 테이블명을 원하는 대로 줄 수 있다. 이렇게 하는 이유는 이 결과를 보기 편하게 하는 것도 있지만, 이 결과를 가지고 또 다른 조작을 할 때 그 이름을 이용하려고..
SELECT CustomerID AS ID, CustomerName AS Customer FROM Customers;
조인
Join : 여러개의 테이블을 합칠 때
Inner Join : 교집합
Orders 테이블의 CustomerID와 Customers 테이블의 CustomerID가 같은 데이터들을 가져오는데, 그 중에서도 Orders테이블의 OrderID 속성과 Customers 테이블의 CustomerName 속성에 해당하는 데이터만 보여준다.
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
Left Join 또는 LEFT OUTER JOIN: 왼쪽 테이블의 데이터는 다 가지고 오는데, 오른쪽 테이블 중에서 기준에 맞으면 그 값을 보여주고, 안맞는건 null로 보여준다.
SELECT Customers.CustomerName, Orders.OrderID FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
- Customers에 있는 데이터는 다 보여줄거다. 그러니까 select의 첫번째인 Customers.CustomerName는 그대로 보여줄텐데, 두번째인 Orders.OrderID의 경우에는 Customers.CustomerID = Orders.CustomerID 이 조건에 해당되는 데이터만 Orders.OrderID를 보여주고 조건에 맞지 않으면 NULL값
Right Join : Left Join 반대..!
Mysql
설치
sudo apt-get update sudo apt-get install mysql-server
이거 두개만 하니까 오류(access denied)
https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-18-04
서버 시작
sudo systemctl start mysql
접속
mysql -u root -p
비밀번호 설정
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '비밀번호';
'TIL (today I learned)' 카테고리의 다른 글
2019-10-18 [세션, 쿠키] (0) | 2019.10.18 |
---|---|
2019-10-16 sql (0) | 2019.10.16 |
2019-10-14 [promise] (0) | 2019.10.15 |
2019-10-11 [여러가지 추천 사이트/툴 정리] (0) | 2019.10.11 |
TIL_2019-10-04 [리액트 스프린트] (0) | 2019.10.05 |