[TIL] Day51- SQL(3)

공부중인 개발자·2021년 6월 21일
0

TIL

목록 보기
51/64
post-thumbnail
  • SELECT

SELECT 는 데이터베이스의 테이블 안의 자료를 찾을 때 사용

SELECT column1, column2, ...
FROM table_name;

테이블 안의 모든 자료를 찾을 때는

SELECT * FROM table_name;

중복된 자료를 제외한 자료를 받을 때는

SELECT DISTINCT column1, column2, ...
FROM table_name;

  • WHERE

WHERE 은 데이터베이스의 필터 역할을 하는 쿼리문

SELECT column1, column2, ...
FROM table_name
WHERE condition;

= 조건과 같은 데이터
<> 조건을 제외한 데이터
>= , <= 특정 조건 보다 크거나 작은 데이터를 필터할 때
BETWEEN 두 조건 사이의 데이터
LIKE _% 등을 이용하여 부분적으로 일치하는 데이터를 찾을 때

A로 시작하는 단어 찾을 때
SELECT column FROM table_name WHERE condition LIKE 'A%'
A로 끝나는 단어 찾을 때
SELECT column FROM table_name WHERE condition LIKE '%A'
A를 포함하는 단어 찾을 때
SELECT column FROM table_name WHERE condition LIKE '%A%'
A로 시작하는 2글자의 단어를 찾을 때
SELECT column FROM table_name WHERE condition LIKE 'A_'
A로 시작하고 B로 끝나는 3글자의 단어를 찾을 때
SELECT column FROM table_name WHERE condition LIKE 'A_B'
첫글자가 A가 아닌 단어 찾을 때
SELECT column FROM table_name WHERE condition LIKE '[^A]'

IN 여러가지 조건을 가진 데이터를 필요할 때

//찾는곳이 서울 인천 경기 일 경우
SELECT * FROM city WHERE name IN ('Seoul','Inchen','Gyunggi')

  • AND, OR, NOT

내용 그대로 조건을 필터할 때 그리고 또는 아닌 경우를 찾는 경우

AND 
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;

OR
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;

NOT
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;

  • ORDER BY

데이터를 정렬할 경우 사용

SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;

ASC 는 오름차순
DESC 는 내림차순
js 용법 중 .sort 와 거의 같다.


  • INSERT INTO

테이블에 데이터를 넣을 때 사용

//방법1
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
//방법2
INSERT INTO table_name
VALUES (value1, value2, value3, ...);

  • NULL

해당 테이블의 데이터가 없는 경우를 찾을 때

SELECT column_names
FROM table_name
WHERE column_name IS NULL;
// table_name의 컬럼 column_names 데이터가 없는 자료만 select 할 때
SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;
// table_name의 컬럼 column_names 데이터가 있는 자료만 select 할 때

  • UPDATE

기존 테이블의 레코드를 수정할 때

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

  • DELETE

테이블 레코드를 삭제할 때

DELETE FROM table_name WHERE condition;

//만약 테이블 레코드 전체를 지우고 싶으면 WHERE 을 작성하지 않으면 모든 레코드가 지워짐
DELETE FROM table_name;

  • MIN() , MAX()

선택한 컬럼의 가장 작거나 가장 큰 값을 반환할 때

SELECT MIN(column_name)
FROM table_name
WHERE condition;
//
SELECT MAX(column_name)
FROM table_name
WHERE condition;

  • COUNT(), AVG(), SUM()

COUNT 는 선택한 컬럼의 개수, AVG 는 선택한 컬럼의 평균, SUM 은 선택한 컬럼의 합

SELECT COUNT(column_name)
FROM table_name
WHERE condition;

//

SELECT AVG(column_name)
FROM table_name
WHERE condition;

//

SELECT SUM(column_name)
FROM table_name
WHERE condition;

  • JOIN

두개 이상의 테이블의 집합을 통해 데이터를 나타냄
Default 값은 inner join (교집합)
자주 사용하는 join은 left , right, inner 를 주로 사용한다.

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;

위의 내용은 SQL 에서 주로 사용하는 명령어에 대한 것을 요약했다.

오늘 배운 것은

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  var sql = "INSERT INTO customers (name, address) VALUES ('Michelle', 'Blue Village 1')";
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log("1 record inserted, ID: " + result.insertId);//insertId가 중요
  });
});

방금 삽입한 레코드의 id를 가져오는 법을 알아야하는데 솔직히 페어 활동을 통해 페어님이 알려주시긴 했는데 정확하게 이해하지는 못했다.

여러개의 레코드를 한번의 쿼리로 저장하는 방법은

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
  var sql = "INSERT INTO customers (name, address) VALUES ?";
  var values = [
    ['John', 'Highway 71'],
    ['Peter', 'Lowstreet 4'],
    ['Amy', 'Apple st 652'],
    ['Hannah', 'Mountain 21'],
    ['Michael', 'Valley 345'],
    ['Sandy', 'Ocean blvd 2'],
    ['Betty', 'Green Grass 1'],
    ['Richard', 'Sky st 331'],
    ['Susan', 'One way 98'],
    ['Vicky', 'Yellow Garden 2'],
    ['Ben', 'Park Lane 38'],
    ['William', 'Central st 954'],
    ['Chuck', 'Main Road 989'],
    ['Viola', 'Sideway 1633']
  ];
  con.query(sql, [values], function (err, result) {
    if (err) throw err;
    console.log("Number of records inserted: " + result.affectedRows);
  });
});

(value 에 ? 를넣어놓은)sql 인자 뒤에 데이터를 배열로 감싸서 넣게 되면 table에 bulk insert할 수 있다고 하는데 아직은 그냥 작동이 된다고만 알고 있고 더 자세히 알아보기 위해선 다른 공부를 더해봐야겠다.

profile
열심히 공부하자

0개의 댓글