> 데이터 베이스 > SQL > SQL 명령, 테이블 처리 및 고급 SQL 지식 요약에 대해 이야기해 보겠습니다.

SQL 명령, 테이블 처리 및 고급 SQL 지식 요약에 대해 이야기해 보겠습니다.

WBOY
풀어 주다: 2022-02-24 18:06:57
앞으로
3850명이 탐색했습니다.

이 글은 데이터베이스 언어인 SQL에 대한 관련 지식을 제공합니다. 주로 SQL 명령, 테이블 처리 및 고급 SQL 기술과 관련된 문제를 소개합니다.

SQL 명령, 테이블 처리 및 고급 SQL 지식 요약에 대해 이야기해 보겠습니다.

추천 학습: mysql 동영상 튜토리얼

1. SQL 명령

SQL 명령은 SQL을 사용하여 데이터베이스에서 테이블 데이터를 저장하고 읽고 처리하는 방법을 나타냅니다.

일반적인 SQL 명령어는 다음과 같습니다.

1.1 SELECT: 선택

(1) 기능: 데이터베이스 테이블에서 데이터를 선택합니다. 테이블의 하나 또는 여러 열에 있는 모든 데이터를 읽는 기능입니다.

양식이란 무엇인가요? 테이블은 데이터를 저장하는 것이 목적인 데이터베이스 내의 구조입니다.

(2) 명령문: 테이블명에서 컬럼명 1, 컬럼명 2... 선택

1.2 DISTINCT: 구별(선택)

(1) 기능: 데이터 처리 시 , 테이블에 있는 다양한 데이터 값을 찾아야 합니다. 즉, 각 값이 나타나는 횟수에 신경쓰지 않고 열에 어떤 다른 값이 있는지 알아야 합니다. 이때는 구별을 사용하십시오.

(2) 문: 테이블 이름에서 고유한 열 이름 선택

1.3 WHERE: 쿼리 조건 사용

(1) 기능: 일부 데이터를 조건적으로 선택적으로 쿼리해야 하는 경우 When, where

(2) 문이 사용됩니다: select 열 이름 from 테이블 이름 where 조건

1.4 AND OR: AND, OR(연결 조건)

(1) 기능: The 복합조건은 2개 이상의 단순 조건을 and 또는 or로 연결하여 형성됩니다. SQL 문에는 무한한 수의 단순 조건이 있을 수 있습니다.

(2) 문: 단순 조건 1 및|또는 단순 조건 2가 있는 테이블 이름에서 열 이름 선택...

1.5 IN: 불연속 범위에서 값을 가져옵니다(where와 협력). )

(1) 함수: in 절, 일반적으로 where와 함께 사용되며 조건이 불연속 범위의 값을 취함을 나타냄

(2) 명령문: 테이블 이름에서 열 이름 선택 where (값 1, 값 2, 값 3...)의 조건으로 열 이름이 존재합니다

(3) 보충: in 절의 괄호 안에 값이 하나만 있으면... where 컬럼 이름 = 값 1

1.6 BETWEEN: 연속된 범위의 값 가져오기(where와 연계)

(1) 기능: in 명령은 다음 범위 내에서 데이터베이스의 데이터를 가져옵니다. 하나 또는 여러 개의 불연속 값 값과 그 사이의 연속 범위에서 데이터베이스의 값을 얻는 것입니다. 보통 where와 함께 사용됩니다.

(2) 문: 값 1과 값 2 사이의 열 이름이 있는 테이블 이름에서 열 이름을 선택합니다.

1.7 LIKE: 검색 모드 사용(where와 연동)

(1) 기능: 패턴을 기반으로 필요한 정보를 찾습니다. 보통 where와 함께 사용됩니다.

(2) 문: 테이블 이름에서 열 이름 선택, 여기서 열 이름은 {mode}

(3) {mode}:

예를 들어 A_B는 A가 B로 시작하고 중간에 B로 끝나며, ABC%는 ABC로 시작하는 문자열을 나타내고, %ABC는 ABC로 끝나는 문자열을 나타내며, %ABC%는 ABC 패턴을 포함하는 문자열을 나타냅니다.

1.8 ORDER BY: 정렬

(1) 기능: 획득한 데이터를 정방향 또는 역순으로 체계적으로 표시합니다. 즉, 정렬합니다.

(2) 문: 열 이름 [ASC, DESC]

에 따라 조건이 정렬되는 테이블 이름에서 열 이름을 선택합니다.

(3) [ ]는 필수가 아닌 선택 사항을 의미합니다. ASC는 작은 것부터 큰 것까지라는 뜻이고, DESC는 그 반대라는 뜻이다. 기본적으로 ASC가 사용됩니다.

(4) 참고: 존재하는 경우 order by 절 앞에는 어디에 와야 합니다.

(5) 보충: 여러 열 이름을 동시에 정렬할 수 있습니다. 컬럼명 1 [ASC, DESC], 컬럼명 2 [ASC, DESC] 순으로 정렬합니다. 두 열을 모두 작은 것에서 큰 것으로 정렬하도록 선택한 경우 이 절의 결과는 다음과 같습니다. 열 이름 1을 작은 것에서 큰 것으로 정렬합니다. 동일한 열 이름 1을 가진 쿼리 결과가 여러 개 있는 경우 이러한 결과는 열 이름 2에 따라 오름차순으로 정렬됩니다.

1.9 함수

(1) 함수: 데이터베이스의 많은 내용이 숫자 형태로 존재하며, 이러한 숫자에 대한 연산을 수행할 때 정의된 함수를 통해 직접 실행할 수 있습니다.

(2) 일반적으로 사용되는 기능:

AVG: 평균

COUNT: 개수

MAX: 최대값

MIN: 최소값

SUM: Sum

(3) 명령문: select function name (column name) from table name

1.10 COUNT: Count

(1) 기능: 표에서 일치하는 항목을 몇 개 찾았는지 계산해 보세요.

(2) 명령문: select count(column name) from table name

(3) 참고: count는 테이블에 몇 개의 서로 다른 항목이 있는지 확인하기 위해 종종 independent와 함께 사용됩니다.

1.11 GROUP BY: 분류

(1) 기능: 하나 이상의 열 이름을 선택하고 그 중 적어도 하나의 열 이름에 함수 적용이 포함되어 있는 경우 그룹을 사용해야 합니다. 명령으로. 이 경우 다른 모든 열 이름으로 그룹이 있는지 확인해야 합니다. 즉, 함수를 포함하는 열 이름 외에도 group by 절에 배치해야 합니다.

(2) 명령문: 테이블 이름에서 열 이름 1 sum(열 이름 2) 선택 열 이름 1

1.12 HAVING:

(1) 기능 : 함수에서 생성되는 값에 대한 조건을 설정합니다. having 절은 SQL 문장의 끝에 있습니다.

have 절이 포함된 SQL에 반드시 group by 절이 포함되어 있는 것은 아닙니다.

(2) 명령문: select 열 이름 1, sum (열 이름 2) from table name 그룹 열 이름 1 갖는 (함수 조건)

(3) 참고: 선택한 함수만 열이면 group by 절이 필요하지 않습니다.

1.13 ALIAS: 별칭 ​​(테이블 또는 열용)

(1) 기능: 테이블과 열에 별칭을 부여합니다.

열 이름의 별칭: SQL에서 생성된 결과를 쉽게 읽을 수 있도록 하기 위한 것입니다.

테이블 별칭: from 절에서 테이블 이름 뒤에 공백을 남겨두고 사용할 테이블 별칭을 나열하세요.

즉, 이 두 별칭은 교체할 테이블 이름이나 열 이름 뒤에 배치되며, 테이블 이름이나 열 이름과 공백으로 구분됩니다.

(2) 명령문: select table alias.column name 1 열 이름 1 column alias from table nametable alias

(3) 참고: 열 별칭은 열 이름 나중에 다음과 같이 함수 뒤에 배치할 수도 있습니다. 두 테이블의 동일한 데이터 두 테이블을 연결하는 열입니다.

where 절은 테이블 연결에서 중요한 역할을 합니다.

where를 잘못 사용하면 데카르트 조인(두 테이블의 두 행마다 가능한 모든 조합)이 발생할 가능성이 높습니다.

1.15 외부 연결

(1) 기능 :

우리가 자주 부르는 왼쪽 연결도 내부 연결입니다. 내부 연결의 경우 해당 데이터 조각이 선택되기 전에 두 테이블 모두 동일한 값을 가져야 합니다.

해당 값이 다른 테이블에 나타나는지 여부에 관계없이 테이블에 있는 모든 정보 항목을 나열하려는 경우. 이때 SQL OUTER JOIN이라는 외부 연결이 필요합니다.

(2) 진술: 외부 연결 구문은 데이터베이스에 따라 다릅니다. 예를 들어, Oracle에서는 where 절에서 모든 데이터를 선택할 테이블 뒤에 (+)를 추가하여 이 테이블의 모든 데이터가 필요함을 나타냅니다.

(3) 참고: 두 번째 테이블에 상대 데이터가 없으면 SQL은 NULL을 반환합니다.

1.16 CONCATENATE: 연결 문자

(1) 기능: 서로 다른 컬럼 이름으로 얻은 결과를 연결합니다. 각 데이터베이스에서 제공하는 메서드는 다를 수 있습니다.

MySQL: CONCAT()

Oracle: CONCAT(), ||

SQL Server: +

(2) 명령문: concat (문자 1, 문자 2, 문자 3...)

은 문자 1, 문자 2, 문자 3을 연결하는 것을 의미합니다.

(3) 참고: Oracle의 concat()은 두 개의 매개변수만 허용합니다. 즉, 한 번에 두 개의 문자열만 함께 연결할 수 있습니다. 하지만 ||를 사용하면 여러 문자열을 한 번에 연결할 수 있습니다.

1.17 SUBSTRING: 가로채기 문자

(1) 기능: SQL의 하위 문자열 함수는 열 데이터의 일부를 가져오는 데 사용됩니다.

다른 데이터베이스에서는 이 함수의 이름이 다릅니다.

MySQL: substr(), substring()

Oracle: substr()

SQL Server: substring()

(2) 명령문: substr(str, pos)은 pos 위치부터 시작하는 문자를 선택한다는 의미입니다. 이 구문은 SQL Server에는 적용되지 않습니다.

sub(str, pos, len)은 str의 pos 위치에서 시작하여 길이가 len인 문자열을 선택한다는 의미입니다.

1.18 TRIM: 문자열의 시작이나 끝 부분에 지정된 내용을 제거합니다.

(1) 기능: 문자열의 시작이나 끝 부분을 제거하려면 Trim() 함수를 사용합니다. 가장 일반적인 방법은 선행 또는 후행 공백을 제거하는 것입니다.

다른 데이터베이스에서는 방법이 다릅니다:

MySQL: Trim(), rtrim(), ltrim()

Oracle: rtrim(), ltrim()

SQL Server: rtrim(), ltrim()

(2) 명령문: trim([[position] [제거할 문자열] from] string)

(3) 참고: 열이 없는 경우 제거할 문자열을 지정하면 공백(있는 경우)이 제거됩니다.

2. 테이블 처리

테이블 처리 지침은 SQL을 사용하여 데이터베이스의 각 테이블을 처리하고 추가, 삭제, 수정하는 방법을 참조합니다.

2.1 CREATE TABLE: 테이블 생성

(1) 기능: 데이터베이스에 테이블 생성

(2) 명령문:

create table 테이블 이름

(열 이름 1 속성,

열 이름 2 속성,

열 이름 3 속성);

2.2 CONSTRAINT: 제한 사항

(1) 기능: 테이블에 저장할 수 있는 데이터를 지정하는 데 사용되거나 나중에 alter table 문으로 지정됩니다.

(2) 일반적인 제한 사항은 다음과 같습니다.

null이 아님

unique

check

기본 키

키(외래 키) )

2.3 NOT NULL: 열 값을 NULL이 아닌 값으로 제한합니다

(1) 효과: 아무런 제한 없이 열 값이 Null 값을 가질 수 있습니다. 열 값에 null이 포함될 수 없는 경우 해당 열에 대해 null이 아님을 지정해야 합니다.

(2) 문:

create table table name

(열 이름 1 속성 not null,

열 이름 2 속성 not null,

칼럼 이름 3 속성);

2.4 UNIQUE: 열의 값을 고유하게 제한합니다.

(1) 기능: 열의 값이 다른지 확인합니다.

(2) 명령문:

create table table name

(열 이름 1 속성이 null이 아님 unique,

열 이름 2 속성이 null이 아님,

목록 3

(3) 참고: 기본 키로 지정된 열에는 고유한 속성이 포함되어야 합니다. 그러나 고유 열이 반드시 기본 키일 필요는 없습니다.

2.5 CHECK

(1) 기능 : 열의 모든 값이 특정 조건을 충족하는지 확인합니다.

(2) 명령문 :

테이블 테이블 이름 이름 (열 이름 1 속성 check (열 이름 1 & gt; 10)

null 독특하지 않음, column name 2 속성이 아닙니다. null,

열 이름 3 속성);

(3) 참고: MySQL 데이터베이스에는 검사 제한이 아직 구현되지 않았습니다.

2.6 기본 키: 기본 키

(1) 기능: 기본 키(기본 키)의 각 값은 테이블에서 고유한 값입니다.

즉, 테이블의 각 행 값을 고유하게 확인하는 데 사용됩니다.

기본 키는 원본 데이터의 열이거나 인공 열(원래 값과 관계가 없는 열)일 수 있습니다.

기본 키에는 하나 이상의 열이 포함될 수 있습니다. 기본 키에 여러 열이 포함된 경우 이를 복합 키라고 합니다.

(2) 명령문:

MySQL에서:

create table table name

(열 이름 1 속성 확인(열 이름 1>10) null 고유 아님,

열 이름 2 속성이 null이 아닙니다.

열 이름 3 속성,

기본 키(열 이름 1)

);

Oracle:

create 테이블 테이블 이름

(열 이름 1 속성 확인(열 이름 1>10) null이 아님 고유 기본 키

,

열 이름 2 속성이 null이 아님,

열 이름 3 속성)

서버 내 SQL:

테이블 테이블 이름 만들기

(열 이름 1 속성 확인(열 이름 1>10) null이 아닌 고유 기본 키,

열 이름 2 속성이 null이 아님,

열 이름 3 속성);🎜🎜

(3) 기존 테이블 구조를 변경하여 기본 키를 설정하는 방법:

MySQL: alter table table name add 기본 키(열 이름 2)

Oracle: alter table table name add Primary key(열 이름 2)

SQL Server: alter table table name add 기본 키(열 이름 2)

(4) 참고: alter 문으로 기본 키를 추가하기 전에 다음이 필요합니다. 기본키로 사용된 컬럼이 null이 아닌지 확인합니다. 즉, 기본 키 열은 null이 아니어야 합니다.

2.7 외래 키: 외래 키

(1) 기능: 외래 키는 다른 테이블의 기본 키를 가리키는 하나 또는 여러 열입니다.

외래 키의 목적은 값의 참조 무결성을 확인하는 것입니다. 즉, 승인된 값만 데이터베이스에 저장됩니다.

(2) 명령문:

MySQL에서:

create table 테이블 이름 1

(열 이름 1 속성 확인(열 이름 1>10) null 고유 아님,

컬럼 이름 2 속성이 null이 아님,

컬럼 이름 3 속성,

기본 키(컬럼 이름 1)

외부 키(컬럼 이름 2)가 테이블 이름 2(기본 키 컬럼)을 참조합니다. 짐 2 속성은 null이 아님,

열 이름 3 속성은 테이블 이름 2(기본 키 열) )을 참조합니다.

SQL Server:

create table 테이블 이름 1

( 열 이름 1 속성 확인(열 이름 1>10) null이 아님 고유 기본 키,

열 이름 2 속성이 null이 아님,

열 이름 3 속성 참조 테이블 이름 2(기본 키 열) );

(3) 기존 테이블 구조를 변경하여 외래 키를 설정하는 방법:

MySQL: 테이블 테이블 이름 1 변경 외래 키(열 이름 2) 추가 테이블 이름 2(열 이름 2)를 참조

Oracle: alter table 테이블 이름 1 add(constraint xxx) 외래 키(열 이름 2) 참조 테이블 이름 2(열 이름 2)

SQL Server: alter table 테이블 이름 1 add 외래 키(열 이름 2) ) 테이블 이름 2 (컬럼 이름 2) 참조

2.8 CREATE VIEW: 새로운 뷰

(1) 기능: 뷰 테이블을 가상 테이블로 사용할 수 있습니다. 일반 테이블과 달리 테이블은 실제로 데이터를 저장하지만, 뷰는 테이블을 기반으로 구축된 구조이므로 실제로 데이터를 저장하지는 않습니다.

(2) 명령문: create view view name as SQL 문

그중 SQL 문은 다음과 유사할 수 있습니다. 테이블 이름에서 열 이름 선택

(3) 참고: 뷰를 사용하여 두 테이블을 조인할 수 있습니다. 이 경우, 사용자는 서로 다른 두 개의 테이블을 연결하여 검색할 필요 없이 하나의 뷰 테이블에서 직접 필요한 정보를 찾을 수 있습니다.

2.9 CREATE INDEX: 새 인덱스 만들기

(1) 기능:

Index를 사용하면 테이블에서 필요한 정보를 빠르게 찾을 수 있습니다.

테이블에 인덱스가 없으면 데이터베이스 시스템은 보고된 데이터 전체를 읽어야 합니다. 이 프로세스를 테이블 스캔이라고 합니다.

적절한 인덱스가 존재하는 경우 데이터베이스 시스템은 먼저 이 인덱스를 사용하여 테이블에서 필요한 데이터가 어디에 있는지 알아낸 다음 해당 위치로 직접 이동하여 데이터를 얻을 수 있으므로 데이터 획득 속도가 빨라집니다. 인덱싱은 시스템 효율성에 좋은 것입니다. 인덱스는 하나 이상의 열을 포함할 수 있습니다.

(2) 명령문: 테이블 이름(열 이름 1, 열 이름 2)에 인덱스 인덱스 이름을 생성합니다.

2.10 ALTER TABLE: 테이블 수정

(1) 기능: 테이블 마지막으로 테이블의 구조를 변경해야 하는 경우도 있습니다. 예를 들어 열 추가, 열 삭제, 열 이름 변경, 열 속성 변경 등을 수행할 수 있습니다.

(2) 문: alter table name 열 이름 [변경 방법]

[변경 방법] 일반적인 것:

열 추가: 열 이름 2 속성 추가

하나의 열 삭제: 열 이름 삭제 2

열 이름 변경: 이전 열 이름 변경 새 열 이름 새 속성

열 속성 변경: 열 이름 2 새 속성 수정

2.11 DROP TABLE: 삭제 table

(1) 함수: 데이터베이스에서 테이블 지우기(테이블 삭제)

(2) 명령문: drop table table name

2.12 TRUNCATE TABLE: 테이블 내용 지우기

(1) 함수: 테이블의 모든 데이터 지우기(테이블을 삭제하지 않고)

(2) 명령문: truncate table table name

2.13 INSERT INTO: 테이블에 콘텐츠 삽입

(1) 기능: 양식에 데이터를 입력합니다.

(2) 문:

insert into 테이블 이름(열 1, 열 2...) 값 ​​(값 1, 값 2...)

insert into 테이블 이름 1(열 1, 열 2...) 테이블 이름 2

2.14에서 열 이름 3, 열 이름 4를 선택합니다. 업데이트: 테이블 내용 업데이트

(1) 기능: 수정 테이블 재료.

(2) 명령문: 테이블 이름 업데이트 열 이름 설정 1 = 새 값 조건

2.15 DELETE FROM: 하나 이상의 행 삭제

(1) 기능: 경우에 따라 일부 데이터를 데이터베이스에서 직접 제거해야 합니다. (하나 이상의 행이 삭제됨)

(2) 명령문: delete from table name where 조건

3. 고급 SQL

SQL을 사용하여 좀 더 복잡한 작업을 수행하는 방법 및 방법 SQL로 이러한 작업을 수행하려면: Rank Rank to total

3.1 UNION: merge

(1) 기능: 두 개의 SQL 문의 결과를 결합하는 것이 목적입니다. 이러한 관점에서 보면 Union은 Join과 유사합니다.

Union의 한 가지 제한 사항은 두 SQL 문에 의해 생성된 열이 동일한 속성 유형이어야 한다는 것입니다.

또한,

Union을 사용하면 다른 데이터 값만 볼 수 있습니다. 즉, Select independent

와 유사하게 결과 값이 반복되지 않습니다.

(2) 문:

SQL 문 1

union

SQL 문 2

(3) 참고: 우리가 어떤 상황에 있다면 SQL 문(또는 두 문장을 함께 사용)은 select disinct 열 이름을 사용하며 정확히 동일한 결과를 얻을 가능성이 높습니다.

3.2 UNION ALL

(1) 기능: 두 개의 SQL 문의 결과를 병합하는 것도 목적입니다.

차이점은 Union all이 중복된 데이터 값이 있는지 여부에 관계없이 모든 적합한 데이터를 나열한다는 것입니다. 결과 값은 반복 가능합니다.

(2) 명령문:

SQL 문 1

union all

SQL 문 2

3.3 INTER SECT

(1) 기능 : Union과 유사하게 Intersect도 두 개의 SQL 문에서 생성된 결과를 처리합니다.

의 차이점은 union은 기본적으로 OR인 반면 intersect는 AND에 더 가깝다는 것입니다. 즉, Union은 Union이고 Intersect는 Union입니다.

(2) 문:

SQL 문 1

intersect

SQL 문 2

(3) 참고: 지시문에 따라 다른 값은 목록에 한 번 표시됩니다.

3.4 MINUS

(1) 기능 :

mius는 두 개의 SQL 문에 적용되는 것을 의미합니다.

먼저 첫 번째 SQL 문의 결과를 찾은 다음 이 결과가 두 번째 SQL 문의 결과에 포함되는지 확인하세요. 있는 경우 첫 번째 데이터 조각이 제거되고 최종 결과에 표시되지 않습니다.

두 번째 SQL 문에서 생성된 결과가 첫 번째 SQL 문에서 생성된 결과에 없으면 이 데이터도 삭제됩니다.

(뺄셈과 유사? 결국 첫 번째 SQL 문에만 나타나고 두 번째 SQL 문에는 나타나지 않는 첫 번째 SQL 문 항목만 남습니다.)

(2) 문:

SQL 문 1

minus

SQL 문 2

(3) 참고: minus 명령, 다른 값은 한 번만 나열됩니다.

3.5 하위 쿼리

(1) 기능 : 하위 쿼리, 하나의 SQL 문에 다른 SQL 문을 넣는 것.

where 절이나 had 절에 다른 SQL 문을 삽입하면 하위 쿼리가 발생합니다.

서브 쿼리의 역할은 먼저 테이블을 연결하는 데 사용할 수 있습니다. 둘째, 하위 쿼리가 두 테이블을 조인하는 유일한 방법인 경우도 있습니다. [ 비교 피연산자]는 등호 피연산자(=, >=, >, <=, <)이거나 리터럴 피연산자(LIKE)일 수 있습니다.

3.6 EXISTS

(1) 기능: 앞부분에서는 in, >, <, = 등을 사용하여 내부 쿼리와 외부 쿼리를 연결합니다. 존재하는 것도 방법 중 하나입니다.

기본적으로

exists는 내부 쿼리가 결과 를 생성하는지 여부를 테스트하는 데 사용됩니다.

있는 경우 시스템은 외부 쿼리에서 SQL을 실행합니다. 그렇지 않으면 전체 SQL 문에서 어떤 결과도 생성되지 않습니다.

(2) 명령문: 존재하는 테이블 이름 1에서 열 이름 1 선택(조건이 있는 테이블 이름 2에서 열 이름 2 선택)

3.7 CASE

( 1) 기능: if-then-else 등의 논리를 위한 키워드로 Case를 사용합니다. (2) 문:

select case(열 이름)

조건 1이면 결과 1

조건 2이면 결과 2

...

[다른 결과 n]

end

from 테이블 이름

(3) 보충: 조건은 숫자 값 또는 공식일 수 있습니다. else 절은 필요하지 않습니다.

추천 학습: mysql 비디오 튜토리얼

위 내용은 SQL 명령, 테이블 처리 및 고급 SQL 지식 요약에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
sql
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿