모든 프로그래머가 알아야 하는 13가지 가장 중요한 SQL 명령

모든 프로그래머가 알아야 하는 13가지 가장 중요한 SQL 명령

데이터베이스는 현대 웹을 주도합니다. 모든 크고 역동적인 웹사이트는 어떤 방식으로든 데이터베이스를 사용하며, 구조적 쿼리 언어(SQL) , 데이터를 조작할 수 있는 가능성은 정말 무궁무진합니다. SQL을 이미 알고 있다면 모든 웹 사이트 개발자가 알아야 할 이러한 프로그래밍 기술을 확인하십시오.





오늘은 그 중 일부를 보여 드리겠습니다. 핵심 SQL 명령 프로그래머로서 알아야 합니다.





데이터베이스 테이블에서 반환된 데이터에는 여러 이름이 있습니다. 데이터는 일반적으로 , 기록 , 또는 튜플 . 이 기사 전체에서 이 용어를 서로 바꿔서 사용할 것입니다.





머리말

오늘의 모든 예는 4개의 가상 테이블을 기반으로 합니다. NS 고객 테이블에는 고객의 이름과 나이가 포함됩니다.

NS 높이 테이블에는 모든 사람의 이름과 키가 포함됩니다.



NS 직원 테이블에는 직원의 이름과 나이가 포함되어 있습니다. 고객 테이블과 정확히 동일합니다.

라는 최종 테이블 사람들 고객 및 직원 테이블과 마찬가지로 사람의 이름과 나이를 포함합니다.





1. 선택

NS 선택하다 명령문은 가장 간단하며 거의 모든 다른 명령을 뒷받침하므로 이해하는 것이 중요합니다. 예약된 SQL 단어를 대문자로 작성하는 것은 명령을 더 쉽게 읽고 이해할 수 있도록 하기 때문에 모범 사례로 간주됩니다.

이름에서 알 수 있듯이 select는 다음과 같은 용도로 사용됩니다. 선택하다 데이터베이스의 데이터. 가장 간단한 사용법은 다음과 같습니다.





SELECT * FROM table;

여기에는 두 부분이 있습니다. 첫 번째 부분( 선택하다 * ) 선택하려는 열을 지정합니다. 별표는 테이블의 모든 열을 선택하려는 것을 나타냅니다. 두 번째 부분( 테이블에서 ) 이 데이터를 검색할 위치를 데이터베이스 엔진에 알려줍니다. 'table'을 데이터베이스 테이블의 이름으로 바꾸십시오.

이 선택을 '선택 별'이라고 합니다. 별표를 사용하는 것은 테이블에 있는 데이터를 파악하는 좋은 방법이지만 프로덕션 코드에는 별표를 사용하지 않는 것이 좋습니다. 선택 별을 사용할 때 원하는 데이터를 제공하는 것은 데이터베이스 엔진에 달려 있습니다. 데이터가 반환되는 순서를 제어할 수 없으므로 누군가 테이블에 새 열을 추가하면 프로그래밍 언어의 변수가 더 이상 올바른 데이터를 나타내지 않을 수 있습니다. 다행히도 해결책이 있습니다.

다음과 같이 검색하려는 열을 명시적으로 지정할 수 있습니다.

SELECT age, name FROM people;

이 쿼리는 'people' 테이블에서 'age' 및 'name' 열을 검색합니다. 데이터가 많은 경우 이렇게 명시적으로 하는 것은 약간 지루할 수 있지만 그렇게 하면 미래의 프로그래머가 SQL을 더 쉽게 이해할 수 있을 뿐만 아니라 미래의 문제를 줄일 수 있습니다.

추가 데이터를 선택하고 싶지만 테이블에 저장되지 않은 경우 다음과 같이 할 수 있습니다.

SELECT age, '1234' FROM people;

열 이름과 일치하는 대신 작은따옴표 안에 있는 모든 문자열이 반환됩니다.

2. 어디에

select 명령은 데이터 검색에 탁월하지만 결과를 조금 더 필터링하려면 어떻게 해야 할까요? 파란 눈을 가진 사람들만 검색하는 것은 어떻습니까? 기계공으로 일하는 1월에 태어난 사람들은 어떻습니까? 여기는 어디 명령이 들어옵니다. 이렇게 하면 선택에 조건을 적용할 수 있으며 명령문 끝에 추가하기만 하면 됩니다.

SELECT age, name FROM people WHERE age > 10;

이 쿼리는 이제 10세 이상의 사용자로 제한됩니다. 다음을 사용하여 여러 조건을 결합할 수 있습니다. 그리고 운영자:

SELECT age, name FROM people WHERE age > 10 AND age <20;

NS 그리고 명령은 영어에서와 똑같이 작동합니다. 명령문에 다른 조건을 적용합니다. 이 예에서 반환되는 데이터는 10세에서 20세 사이의 모든 레코드입니다. 일치하는 결과가 없으므로 데이터가 반환되지 않습니다.

마이크를 컴퓨터에 연결하는 방법

이와 함께 사용할 수 있는 또 다른 명령은 다음과 같습니다. 또는 . 다음은 예입니다.

SELECT age, name FROM people WHERE age > 10 OR name = 'Joe';

이 쿼리는 나이가 10세 이상이거나 이름이 'Joe'와 같은 레코드를 반환합니다. 등호가 하나뿐인 것을 알 수 있습니까? 대부분의 프로그래밍 언어는 동등성을 확인하기 위해 이중 등호(==)를 사용합니다. 이것은 대다수의 데이터베이스 엔진에 필요하지 않습니다(그러나 환경에 따라 매우 다를 수 있으므로 먼저 다시 확인하십시오).

3. 주문

NS 주문하다 명령은 반환된 결과를 정렬하는 데 사용됩니다. 사용하기 쉬운 또 다른 방법입니다. 명령문 끝에 추가하기만 하면 됩니다.

SELECT name, age FROM people ORDER BY age DESC;

열과 순서를 지정해야 합니다. ASC 오름차순 또는 DESC 내림차순으로. 다음과 같이 여러 열로 주문할 수 있습니다.

SELECT name, age FROM people ORDER BY name ASC, age DESC

주문 아마도 다른 명령과 결합할 때 가장 유용할 것입니다. 모든 쿼리가 논리적이거나 정렬된 방식으로 데이터를 반환하는 것은 아닙니다. 이 명령을 사용하면 변경할 수 있습니다.

4. 가입

NS 가입하다 명령이 사용됩니다 가입하다 하나 이상의 테이블에 저장된 관련 데이터. 너 가입하다 두 번째 테이블을 첫 번째 테이블에 연결하고 데이터가 연결되는 방식을 지정합니다. 다음은 기본 예입니다.

무료 지역 채널을 얻는 방법
SELECT age, name, height FROM people LEFT JOIN heights USING (name);

여기에 몇 가지 일이 있습니다. 왼쪽 유형의 조인을 사용하여 테이블을 조인하도록 지정하는 'LEFT JOIN' 구문으로 시작해야 합니다. 다음으로 조인할 테이블(높이)을 지정합니다. NS USING(이름) 구문에 따르면 'name' 열은 두 테이블에서 모두 찾을 수 있으며 이는 테이블을 함께 조인하기 위한 키로 사용해야 합니다.

각 테이블에서 열의 이름이 다른 경우에도 걱정하지 마십시오. 'USING' 대신 'ON'을 사용할 수 있습니다.

SELECT age, name, height FROM people LEFT JOIN heights ON (namea = nameb);

on 문은 키를 지정할 열을 명시적으로 나타냅니다. 조인에는 여러 유형이 있으며 각 유형에 대해 자세히 설명하는 데 시간이 오래 걸리므로 다음은 용도에 대한 간략한 요약입니다.

  • (내부) 조인 -- 두 테이블 모두에서 일치하는 행을 반환합니다.
  • 왼쪽(외부) 조인 -- 왼쪽 테이블의 모든 행을 반환하고 오른쪽 테이블의 모든 일치 항목을 반환합니다. 일치하는 항목이 없으면 왼쪽 테이블 레코드가 계속 반환됩니다.
  • 오른쪽(외부) 조인 -- 이것은 왼쪽 조인의 반대입니다. 오른쪽 테이블의 모든 행이 왼쪽 테이블의 일치 항목과 함께 반환됩니다.
  • 전체(외부) 조인 -- 두 테이블 중 하나에 일치하는 모든 레코드를 반환합니다.

'INNER' 또는 'OUTER' 구문은 선택 사항입니다. 이해하기 쉽게 만들 수 있지만 대부분의 시간 동안 지정할 필요는 없습니다.

5. 별칭

이제 기본 사항을 알았으니 다음을 살펴보겠습니다. 별명 명령. 이것은 임시로 테이블 이름을 바꾸는 데 사용됩니다. 이 새 이름은 실행 중인 개별 트랜잭션 내부에만 존재하기 때문에 다른 어떤 것보다 더 많은 별명입니다. 사용 방법은 다음과 같습니다.

SELECT A.age FROM people A;

원하는 유효한 이름을 사용할 수 있지만 저는 알파벳 문자를 사용하는 것을 좋아합니다. 각 열 이름 앞에 별칭이 접두사로 붙습니다. 이 별칭은 선언된 직후 테이블에 할당됩니다. 이것은 다음을 수행하는 것과 정확히 동일합니다.

SELECT people.age FROM people;

긴 테이블 이름을 입력할 필요 없이 간단하고 기억하기 쉬운 문자를 입력할 수 있습니다. 하지만 요점이 무엇입니까? 두 개 이상의 테이블에서 선택하는 경우 어떤 열이 어떤 테이블에 속하는지 혼동하기 쉽습니다. 두 테이블에 동일한 이름의 열이 있는 경우 테이블 이름이나 별칭을 명시적으로 참조하지 않고 데이터베이스 쿼리를 실행하지 못할 수도 있습니다. 다음은 두 개의 테이블이 있는 예입니다.

SELECT staff.age, staff.name, customers.age, customers.name FROM staff, customers;

다음은 별칭이 있는 동일한 쿼리입니다.

SELECT A.age, A.name, B.age, B.name FROM staff A, customers B;

직원 테이블에는 'A'라는 별칭이 지정되고 고객 테이블에는 'B'라는 별칭이 지정됩니다. 테이블 앨리어싱은 코드를 이해하기 쉽게 만들고 입력해야 하는 양을 줄이는 데 도움이 됩니다.

'AS' 명령을 사용하여 별칭으로 열의 이름을 바꿀 수도 있습니다.

SELECT age AS person_age FROM people;

이 쿼리가 실행되면 열은 이제 'age' 대신 'person_age'라고 합니다.

6. 연합

노동 조합 훌륭한 명령이다. 서로 행을 추가할 수 있습니다. 일치하는 열을 추가하는 조인과 달리 Union은 열의 수와 이름이 같으면 관련 없는 행을 추가할 수 있습니다. 사용 방법은 다음과 같습니다.

SELECT age, name FROM customers
UNION
SELECT age, name FROM staff;

통합은 두 쿼리의 결과를 결합하는 방법으로 생각할 수 있습니다. Union은 두 쿼리 사이에 고유한 행이 있는 경우에만 결과를 반환합니다. 중복 여부에 관계없이 'UNION ALL' 구문을 사용하여 모든 데이터를 반환할 수 있습니다.

SELECT age, name FROM customers
UNION ALL
SELECT age, name FROM staff;

행의 순서가 어떻게 변경되는지 확인하시겠습니까? Union은 가장 효율적인 방식으로 작동하므로 반환되는 데이터는 순서대로 다를 수 있습니다.

합집합의 가능한 사용 사례는 부분합계입니다. 특정 시나리오에 대한 개별 총계 쿼리에 합산 쿼리를 합칠 수 있습니다.

7. 삽입

이제 데이터베이스에서 데이터를 검색하는 방법을 모두 알았습니다. 하지만 데이터를 삽입하는 방법은 무엇입니까? 여기는 끼워 넣다 명령이 들어옵니다. 다음은 예입니다.

INSERT INTO people(name, age) VALUES('Joe', 102);

테이블 이름(사람)과 사용하려는 열(이름 및 나이)을 지정해야 합니다. 그런 다음 'VALUES' 구문을 사용하여 삽입할 값을 제공합니다. 이는 이전에 지정된 열과 동일한 순서여야 합니다.

삽입을 위해 where 절을 지정할 수 없으며 존재하는 필요한 테이블 제약 조건을 따라야 합니다.

8. 업데이트

일부 데이터를 삽입한 후 특정 행을 변경해야 하는 것은 당연합니다. 여기 업데이트 명령 구문:

UPDATE people SET name = 'Joe', age = 101;

변경할 테이블을 지정한 다음 'SET' 구문을 사용하여 열과 새 값을 지정해야 합니다. 이 예제는 훌륭하지만 모든 단일 레코드를 업데이트합니다. 항상 바람직한 것은 아닙니다!

보다 구체적으로 선택을 수행할 때와 마찬가지로 'WHERE' 절을 사용할 수 있습니다.

UPDATE people SET name = 'Joe', age = 101 WHERE name = 'James';

'AND' 및 'OR'을 사용하여 여러 조건을 지정할 수도 있습니다.

UPDATE people SET name = 'Joe', age = 101 WHERE (name = 'James' AND age = 100) OR name = 'Ryan';

조건을 제한하기 위해 괄호를 사용하는 방법에 주목하십시오.

안드로이드 홈 화면에 팝업 광고

9. 업서트

죄송합니다 이상하게 들리는 단어이지만 매우 유용한 명령입니다. 테이블에 제약 조건이 있고 고유한 이름을 가진 레코드만 원한다고 지정했다고 가정해 보겠습니다. 예를 들어 같은 이름을 가진 두 개의 행을 저장하고 싶지는 않습니다. 'Joe'의 여러 값을 삽입하려고 하면 데이터베이스 엔진에서 오류가 발생하고 이를 거부합니다(정확히). 레코드가 이미 있는 경우 UPSERT를 사용하여 레코드를 업데이트할 수 있습니다. 이것은 매우 유용합니다! 이 명령이 없으면 먼저 레코드가 있는지 확인하고, 없으면 삽입하고, 그렇지 않으면 올바른 기본 키를 검색한 다음 업데이트하기 위해 많은 논리를 작성해야 합니다.

불행히도 upserts는 다른 데이터베이스 엔진에서 다르게 구현됩니다. PostgreSQL은 이 기능을 최근에 얻었지만 MySQL은 꽤 오랫동안 이 기능을 사용했습니다. 참조용 MySQL 구문은 다음과 같습니다.

INSERT INTO people(name, age)
VALUES('Joe', 101)
ON DUPLICATE KEY UPDATE age = 101;

이것이 본질적으로 업데이트 및 삽입 문이며 '삽입 실패 시 업데이트'로 요약될 수 있습니다.

10. 삭제

삭제 기록을 완전히 제거하는 데 사용됩니다. 남용하면 상당히 손상될 수 있습니다! 기본 구문은 사용하기 매우 쉽습니다.

DELETE FROM people;

대부분의 다른 명령과 마찬가지로 이것은 삭제됩니다. 모든 것 ! 약간 더 정상적인 수의 행으로 제한하려면 where를 사용해야 합니다. 이상적으로는 다음과 같습니다.

DELETE FROM people WHERE name = 'Joe';

시스템을 개발 중이라면 종종 '일시 삭제'를 구현하는 것이 좋습니다. 실제로 삭제 명령을 실행하지 않고 삭제된 열을 만든 다음 선택 항목에서 해당 열을 확인합니다. 삭제된 레코드를 빠르고 쉽게 검색할 수 있다면 잠재적인 난처함을 피할 수 있습니다. 그러나 이것은 적절한 백업을 대신할 수 없습니다.

11. 테이블 생성

NS 테이블 생성 명령은 테이블을 만드는 데 사용됩니다. 또 다른 매우 간단한 것입니다.

CREATE TABLE people (
name TEXT,
age, INTEGER,
PRIMARY KEY(name)
);

열 이름과 제약 조건이 대괄호 안에 있는 방법과 열에 적절한 데이터 유형이 지정되는 방법에 주목하세요. 좋은 데이터베이스 디자인에서 요구되는 대로 기본 키가 지정됩니다.

12. 테이블 변경

NS 테이블 변경 명령은 테이블의 구조를 수정하는 데 사용됩니다. 예를 들어 문자열을 정수로 변경하는 것과 같이 기존 데이터가 충돌을 일으킬 경우 데이터베이스에서 테이블을 변경할 수 없기 때문에 이것은 약간 제한됩니다. 이러한 경우 먼저 데이터를 수정한 다음 테이블을 수정하십시오. 다음은 예입니다.

ALTER TABLE people ADD height integer;

이 예에서는 정수 유형의 '높이'라는 열을 people 테이블에 추가합니다. 변경할 수 있는 항목에는 제한이 없습니다.

13. 드롭 테이블

최종 명령은 드롭 테이블 . 이것을 삭제라고 생각하지만 단일 레코드를 삭제하는 대신 테이블과 함께 모든 단일 레코드를 제거합니다! 사용 방법은 다음과 같습니다.

DROP TABLE people;

이것은 매우 과감한 명령이며 시스템에 프로그래밍해야 할 이유가 없습니다. 대부분의 경우 수동으로만 수행해야 하며 매우 파괴적인.

오늘은 그게 다야. 유용한 트릭을 배웠기를 바랍니다! 당신은 방법을 배울 수 있습니다 웹사이트를 만들다 그런 다음 새로 발견한 기술을 사용하여 동적으로 만들 수 있습니다. 이러한 실수를 하지 않거나 SQL 주입에 취약한 상태로 두지 않도록 하십시오. SQL을 배워야 하는지 확실하지 않다면 정적 사이트 생성기를 고려해 보셨습니까?

좋아하는 SQL 팁과 트릭을 아래에 댓글로 남겨보세요.

이미지 크레디트: HYS_NP/Shutterstock

공유하다 공유하다 트위터 이메일 Windows 11로 업그레이드할 가치가 있습니까?

Windows가 새롭게 디자인되었습니다. 그러나 Windows 10에서 Windows 11로 전환하도록 설득하기에 충분합니까?

다음 읽기
관련 항목
  • 프로그램 작성
  • 프로그램 작성
  • SQL
저자 소개 조 코번(136건의 출판물)

Joe는 영국 링컨 대학교에서 컴퓨터 공학을 전공했습니다. 그는 전문 소프트웨어 개발자이며 드론을 날리거나 작곡을 하지 않을 때 종종 사진을 찍거나 동영상을 제작하는 모습을 볼 수 있습니다.

조 코번이 참여한 작품 더보기

뉴스레터 구독

기술 팁, 리뷰, 무료 전자책 및 독점 거래에 대한 뉴스레터에 가입하십시오!

구독하려면 여기를 클릭하세요.