[TIL] SQL, Database

Captainjack·2021년 5월 23일
0

TIL

목록 보기
34/258

What is SQL?

sql is structured query language

= 구조화된 query언어

  • 데이터베이스 용 프로그래밍 언어

What is Query?

  1. query is '질의문'
  2. 검색엔진에 적는 검색어도 일종의 Query
  3. 저장되어있는 정보를 필터 하기 위한 질문

=> 데이터 베이스에 query를 보내 원하는 데이터를 얻을 수 있다.


데이터 베이스가 필요한 이유

  1. In-memory
    =>서버든 클라이언트는 종료하는 순간 데이터가 다 사라짐

서버의 파일 시스템에(File I/O) 적으면 안사라지는 것 아닌가?
=> 원하는 데이터만 가져올 수 없고 항상 모든 데이터를 가져온 뒤 서버에서 필터링 필요하다.(서버에 부하가 많이 걸림)

이 것을 해결하려고 나온것이 데이터베이스(데이터에 특화된 서버)


기본쿼리 명령어

Select
Where
And, Or, Not
Order By
Insert Into
Null Values
Update
Delete
Count
Like
Wildcards
Aliases
Joins
Inner Join
Left Join
Right Join
Group By

데이터베이스 관련

SQL Create DB
SQL Drop DB
SQL Create Table
SQL Drop Table
SQL Alter Table
SQL Not Null
SQL Unique
SQL Primary Key
SQL Foreign Key
SQL Default
SQL Auto Increment
SQL Dates


데이터베이스 관련 명령어

데이터베이스 생성

CREATE DATABASE 데이터베이스_이름;

데이터베이스 사용

USE 데이터베이스_이름;

테이블 생성

CREATE TABLE user (
  id int PRIMARY KEY AUTO_INCREMENT,
  name varchar(255),
  email varchar(255)
);
필드 이름필드 타입그 외의 속성
id숫자Primary key이면서 자동 증가
name문자열 (최대 255개의 문자)
email문자열 (최대 255개의 문자)

테이블 정보 확인

DESCRIBE user;
mysql> describe user;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int          | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | YES  |     | NULL    |                |
| email | varchar(255) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

SQL 명령어

SELECT
-원하는 것을 찾을 때 사용 근데 독단 적으로 쓰는 것보다 다양한 명령어랑 조합해서 원하는 것만 필터링해서 찾을 때 씀

예를들어,

SELECT *(특성_1)
FROM DB01(테이블_이름)

' * ' 는 와일드카드 (wildcard) 로 전부 선택할 때에 사용됩니다.

DB01테이블로 부터 모든 특성을 출력한다.

WHERE
-필터 역할

SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 = "특정 값"
select * from user where name = 'duhyunkim'

테이블 user로 부터 name이 'duhyunkim'인 모든 특성을 출력한다.

`select * from user where name <> 'duhyunkim'`

테이블 user로 부터 name이 'duhyunkim'이 아닌 모든 특성을 출력한다.
<> 대신 !=를 써도 같은 효과를 보인다.(차이가 있는지는 모르겠음)

  • 특정 값보다 크거나 작은 데이터를 필터할 때에는 '<', '>', 비교하는 값을 포함하는 '이상', '이하' 값은 '<=', '>=' 을 사용합니다.
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 > "특정 값"

SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 <= "특정 값"
  • 문자열에서 특정 값과 비슷한 값들을 필터할 때에는 LIKE 와 '\%' 혹은 '*' 를 사용합니다.
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 LIKE "%특정 문자열%"
  • 리스트의 값들과 일치하는 데이터를 필터할 때에는 IN 을 사용합니다.
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 IN ("특정값_1", "특정값_2")
  • 값이 없는 경우 NULL 을 찾을 때에는 IS 와 같이 사용합니다.
SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NULL
  • 값이 없는 경우를 제외할 때에는 NOT 을 추가해 이용합니다.
SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NOT NULL

ORDER BY

돌려받는 데이터 결과를 어떻게 정렬하지에 대한 선택적 항목입니다.
(기본 정렬은 오름차순입니다.)

SELECT *
FROM 테이블_이름
ORDER BY 특성_1

내림차순으로 정렬은?

SELECT *
FROM 테이블_이름
ORDER BY 특성_1 DESC

LIMIT

돌려받는 데이터 결과 갯수를 정할 수 있습니다. 쿼리문에서 사용을 할 때에는 마지막에 추가해야 합니다.

데이터 결과 갯수를 200개 한정으로 정할 수 있습니다.

SELECT *
FROM 테이블_이름
LIMIT 200

DISTINCT

유니크한 값들을 받고 싶을 때에는 SELECT 뒤에 붙여 사용할 수 있습니다.

특성_1 기준으로 유니크한 값들만 선택합니다.

SELECT DISTINCT 특성_1
FROM 테이블_이름

특성_1, 특성_2, 특성_3 의 유니크한 '조합' 값들을 선택합니다.

SELECT
  DISTINCT
    특성_1
    ,특성_2
    ,특성_3
FROM 테이블_이름

INNER JOIN or JOIN

서로 공통된 부분으로만 연결합니다.

https://sql-joins.leopard.in.ua/
(참고하면 좋음)

SELECT *
FROM 테이블_1
JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B

OUTER JOIN

'left inclusive', 'right inclusive', 'full outer join' 기본 적인 3가지 선택지가 있음.(위의 링크를 참조 밴다이어 그램 어느 부분이 적용되는지 확인)

AS

원하는 문자열로 이름을 바꿔 줌

SELECT COUNT(name) AS ContentCount 
FROM user 
JOIN content ON user.id = content.userId 
WHERE user.name = 'duRiCha'`

Count
결과 값을 숫자로 리턴

SELECT user.name, COUNT(content.title) AS ContentCount 
FROM content RIGHT JOIN user ON content.userId = user.id 
group by user.name

Groub by

원하는 결과 값만 골라서 출력

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_groupby


profile
til' CTF WIN

0개의 댓글