>  기사  >  데이터 베이스  >  PHP를 개발하는 프로그래머가 꼭 마스터해야 할 SQL 가이드

PHP를 개발하는 프로그래머가 꼭 마스터해야 할 SQL 가이드

怪我咯
怪我咯원래의
2017-04-05 11:31:451212검색

소개

SQL은 믿거나 말거나 우리 주변 곳곳에 적용되어 왔습니다. 모든 종류의 데이터를 조작하는 모든 애플리케이션은 데이터를 어딘가에 저장해야 합니다. 빅데이터든, 행 수가 적은 패킷이든, 정부이든, 스타트업이든, 여러 서버에 걸쳐 있는 대규모 데이터베이스이든, 자체 소규모 데이터베이스를 실행하는 휴대폰이든, SQL은 어디에나 있습니다.

그런데 SQL이 뭐죠? SQL은 Structured Query Language를 의미하며 일반적으로 "ess-que-el"로 발음됩니다. SQL은 데이터베이스와 통신하기 위해 특별히 만들어진 데이터베이스 언어입니다. SQL은 명령의 구조가 영어 문장과 유사하다는 점에서 영어와 유사한 간단한 언어입니다. 이러한 문장은 선언문으로 구성되므로 SQL을 선언적 언어라고도 합니다.

SQL 新手指南

SQL 쿼리를 시각적으로 작성하는 데 사용할 수 있는 도구가 이미 많이 있는데 왜 완전히 새로운 언어를 배워야 할까요? 특정 SQL 도구를 사용할 때는 SQL 언어를 이해하고 시각화 도구가 수행하는 작업과 수행 이유를 이해하는 것이 중요합니다. 때로는 일부 SQL 문을 수동으로 작성해야 하는 경우도 있는데, 이는 가장 빠른 방법일 뿐만 아니라 더 강력하고 종종 의도한 목표를 달성하는 유일한 방법이기 때문입니다.

데이터베이스 소개

방금 언급했듯이 SQL은 데이터베이스 언어입니다. 그렇다면 데이터베이스란 무엇인가? 데이터베이스는 저장된 정보와 해당 작업에 액세스하도록 설계된 저장 메커니즘입니다. 데이터베이스의 정보는 테이블이라는 객체에 저장됩니다. 테이블 이름은 고유한 ID이며 열과 행으로 구성됩니다. 열에는 열 이름, 열의 데이터 유형 및 열의 기타 속성이 포함됩니다. 행에는 해당 열에 대한 레코드나 데이터가 포함됩니다. 데이터베이스에 있는 대부분의 테이블에는 관계나 링크, 일대일 또는 일대다 관계가 있습니다. 이런 종류의 데이터베이스를 관계형 모델 데이터베이스라고 부르는 이유가 여기에 있습니다.

데이터베이스 구조를 설명하는 가장 쉬운 방법은 Excel 스프레드시트시트와 비교하는 것입니다. 데이터베이스는 독립적인 문서입니다. 스프레드시트의 시트는 테이블이며 각 시트에는 이름이 있습니다. 열과 행은 데이터베이스와 동일합니다. SQL 언어는 새 테이블 생성, 기존 테이블 변경, 데이터 가져오기, 데이터 업데이트 또는 데이터 삭제에 사용됩니다.

예를 들어 유명 영화의 대사 모음이 별도의 텍스트 파일에 저장되어 있습니다. 주의 깊게 정리하여 Excel 스프레드시트에 보관하더라도 우리가 직면하는 문제는 여전히 존재합니다. 이러한 방식으로 대사를 저장하면 영화의 모든 대사를 빨리 가져오거나 캐릭터의 모든 대사를 가져올 수 없습니다. 텍스트 파일이나 스프레드시트를 데이터베이스에 넣고 관계가 있는 테이블을 생성하면 모든 문제가 해결됩니다. 관계형은 실제로 무엇을 의미합니까? 관계형 모델은 데이터와 이러한 데이터 엔터티 간의 관계를 설명하는 방법입니다. 우리의 경우에는 영화 제목이 저장되어 있는 테이블과 각 라인 사이의 관계이거나 테이블에 모든 문자가 저장되어 있습니다.

다음은 예시로 테이블이 하나만 있고, 테이블 이름은 "Movie_quotes"로 단순화한 예입니다. 여기에는 대사 텍스트용 열, 대사를 말한 배우 캐릭터용 열, 영화 및 연도용 열이 있습니다. 영화의 대사 8개를 포함시켰으며 샘플 시트는 다음과 같습니다.

Movie_quotes
Q_TEXT Q_CHARACTER Q_MOVIE Q_YEAR
I’ll be back The Terminator The Terminator 1984
I find your lack of faith disturbing. Darth Vader Star Wars 1977
It’s a trap! Admiral Ackbar Star Wars 1983
Never tell me the odds. Han Solo Star Wars 1980
Do. Or do not. There is no try. Yoda Star Wars 1980
Stupid is as stupid does. Forrest Gump Forrest Gump 1994
My mama always said: Life was like a box of chocolates.You never know what you’re gonna get. Forrest Gump Forrest Gump 1994
Run, Forrest! Run! Jenny Curran Forrest Gump 1994

데이터베이스에 관해 이야기할 때, 데이터를 저장해야 하는 사람들 사이에 운동을 일으킨 새로운 데이터베이스가 있는데, 바로 NoSQL이라는 점을 언급할 가치가 있습니다. 문서 기반 시스템으로 인기가 높아지고 있음에도 불구하고 오늘날에도 여전히 수많은 관계형 데이터베이스가 사용되고 있습니다. NoSQL 데이터베이스에 일종의 쿼리 언어가 있더라도 대부분(거의 모두 SQL 이후에 발명되었기 때문에) 여전히 SQL과 어느 정도 유사합니다.

네 가지 기본 SQL 작업(CRUD)

많은 SQL 명령이 있지만 테이블과 해당 데이터로 작업을 수행할 수 있는 네 가지 일반적인 SQL 작업이 있습니다.

  • 만들기 – 테이블을 데이터로 채웁니다.

  • 읽기 – 테이블에서 데이터를 쿼리합니다.

  • 업데이트 – 테이블의 기존 데이터를 수정합니다.

  • 삭제 – 테이블에서 데이터를 제거합니다.

이러한 기본 SQL 연산의 이니셜은 "CRUD"라는 약어를 이루며, 모든 데이터베이스가 반드시 갖춰야 할 4가지 기본 기능이나 특징의 기본 집합이라고 볼 수 있습니다.

기본 기능 소개를 통해 `CREATE`, `INSERT`, `SELECT `, `업데이트`, `삭제` 및 `삭제`.

데이터 생성

먼저 데이터베이스에 테이블을 생성해야 합니다. 새로운 테이블을 생성하려면 `CREATE TABLE`을 사용합니다. `CREATE TABLE` 문의 간단한 구문 형식은 다음과 같습니다.

CREATE TABLE table_name
(column_1 data_type,
column_2 data_type,
column_3 data_type);
먼저 `CREATE TABLE` 키워드 뒤에 테이블 이름이 옵니다. 이는 SQL의 단순성과 영어와의 유사성을 보여주는 훌륭한 예입니다. 키워드 뒤에는 여는 괄호가 옵니다. 여기에는 추가 매개변수(열 이름 및 열 데이터 유형)가 정의되고 그 뒤에 닫는 괄호가 옵니다. 모든 SQL 문은 `;`으로 끝나야 한다는 점을 언급해야 합니다.

따라야 할 규칙은 많지 않습니다. 테이블 이름과 열 이름은 문자로 시작해야 하며 그 뒤에 문자, 숫자 또는 밑줄이 올 수 있습니다. 길이는 30자를 초과할 수 없습니다. SQL 예약어를 테이블 또는 열 이름(예: `select`, `create`, `insert` 등)으로 사용하는 것은 금지됩니다.

이 예에서 가장 간단한 열 이름은 `TEXT`, `CHARACTER`, `MOVIE` 및 `YEAR`일 수 있습니다. 그러나 문제는 이러한 열 이름이 예약어라는 것입니다. 충돌 가능성을 피하기 위해 'Q_' 접두사가 붙은 열 이름을 만듭니다.

데이터 유형은 데이터베이스마다 다르지만 여기서는 가장 일반적인 유형이 사용됩니다.

  • `char(size)` – 괄호로 묶인 고정 길이 문자열 매개변수는 다음과 같습니다. 에 표시되어 있습니다.

  • `varchar(size)` – 괄호 안의 매개변수로 표시되는 가변 길이 문자열.

  • `숫자(크기)` – 숫자 값, 괄호 안의 매개변수는 전체 길이를 나타냅니다.

  • `date` – 날짜 값입니다.

  • `number(size, d)` – 전체 길이가 `size`이고 소수 자릿수가 `d`로 표시되는 숫자 값입니다.

데이터 유형은 지정된 열에 저장할 수 있는 데이터 유형을 지정합니다. 'Q_CHARACTER' 열이 영화 이름을 저장하는 데 사용되는 경우 지정된 열은 'varchar'(가변 길이 문자) 데이터 유형을 가져야 합니다. 영화 연도를 저장하는 열 유형은 'number'이고, 이 예에서 해당 열은 'Q_YEAR'입니다.

원하는 테이블 구조에 대해 테이블을 생성하는 최종 SQL 명령은 다음과 같습니다.

CREATE TABLE Movie_quotes
(‘Q_TEXT’ varchar(200),
‘Q_CHARACTER’ varchar(20),
‘Q_MOVIE’ varchar(20),
‘Q_YEAR’ number(4));
이 SQL 명령의 결과는 다음과 같은 열이 포함된 빈 테이블을 생성합니다.

  • `Q_TEXT`는 200자 길이의 문자열을 허용합니다.

  • `Q_CHARACTER`는 20자 길이의 문자열을 허용합니다.

  • `Q_MOVIE`는 20자 길이의 문자열을 허용합니다.

  • `Q_YEAR`는 1년에 4개의 숫자를 사용할 수 있습니다.

SQL 新手指南

接下来,用我们的电影台词数据填充这张表。有很多可用的 GUI 工具,来管理数据库中的表和数据。不过,写一个 SQL 脚本常常更快,该脚本基本上是 SQL 命令的集合,将被顺序执行。当你需要用大量数据填充表时,这种方式尤为方便。

向表插入或添加一行数据的 SQL 命令是 `INSERT`。格式如下:

INSERT INTO table_name
(column_1, column_2, ... column_n)
VALUES (value_1, value_2, ... value_n);

为了向表插入一行数据, `INSERT` 关键字跟着 `INTO` 关键字和表名。然后是列名,放在圆括号里,用逗号隔开,这是可选的,但是,指明要插入的列,以确保正确的数据插入相应的列,这是一种良好实践。最后一部分,用 `VALUES` 关键字定义了要插入的那些数据,数据列表以圆括号结束。请注意,字符串应该放在单引号里,数字不应如此。

用来填充例子中 `Movie_quotes` 表的 SQL 脚本,如下:

INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('I’ll be back', 'The Terminator', 'The Terminator', 1984);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('I find your lack of faith disturbing.', 'Darth Vader', 'Star Wars', 1977);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('It’s a trap!', 'Admiral Ackbar', 'Star Wars', 1983);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('Never tell me the odds.', 'Han Solo', 'Star Wars', 1980);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('Do. Or do not. There is no try.', 'Yoda', 'Star Wars', 1980);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('Stupid is as stupid does.', 'Forrest Gump', 'Forrest Gump', 1994);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('My mama always said: Life was like a box of chocolates. You never know what you’re gonna get.', 'Forrest Gump', 'Forrest Gump', 1994);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('Run, Forrest! Run!', 'Jenny Curran', 'Forrest Gump', 1994);

读取数据

数据库中有了存好的数据,现在我们可以查询数据,看看我们的表里存储了什么,我们还能用不同的方式过滤和分类数据。

`SELECT` 语句用于查询、或选择我们想从数据库中返回的数据。我们从非常简单的查询开始,但是 `SELECT` 有很多不同的选项和扩展,这为我们最终的需要提供了很大的灵活性。基本的 `SELECT` 语句的语法如下:

SELECT column_1, column_1, ... column_n
FROM table_name;

指出列名,决定了哪一列将被返回到结果里,以及按什么顺序。如果我们想选择所有的列,或我们不知道表中的确切列名,我们可以使用通配符 `*`,它将从数据库中选择所有列:

SELECT * FROM table_name;

对于本例,显示所有数据的查询,如下:

SELECT * FROM Movie_quotes;

SQL 新手指南

仅仅显示电影台词、年份的查询,如下:

SELECT Q_TEXT, Q_YEAR FROM Movie_quotes;

有时候我们不想从表中返回所有数据。当表中有大量数据、或我们在搜索匹配某些标准的特定数据时,就属于这种情况。对此,我们可以使用 `WHERE` 语句。`WHERE` 语句将过滤记录,限制从数据库中获取哪些记录、以满足具体定义的标准:

SELECT column_1, column_1, ... column_n
FROM table_name
WHERE column_name operator value;

注意,`WHERE` 语句是可选的,但是如果我们决定用到它,下面的操作符是可用的:

  • `=` – 等于。

  • `>` – 大于。

  • `<` – 小于。

  • `>=` – 大于或等于。

  • `<=` – 小于或等于。

  • `<>` – 不等于。

  • `BETWEEN` – 在两个值之间。

  • `LIKE` – 搜索一种模式。

  • `IN` – 针对一个列的多种可能值。

数学操作符无需解释了。`BETWEEN` 操作符搜索两个声明值的、中间的值,包括等于两端的情况。`LIKE` 模式匹配操作符是非常强大的操作符,支持选择和我们的规定类似的行。百分号 `%` 被用做通配符,以匹配任何可能字符,它可出现在具体字符串的前面或后面。

例如,为了得到来自电影《Stars Wars》中的台词,我们可以这样写:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE = ‘Star Wars’;

SQL 新手指南

请注意,`WHERE` 语句是大小写敏感的,下面的 SQL 语句将不会返回结果:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE = ‘STAR WARS’;

除了 `WHERE` 子句,还可组合逻辑运算符 `AND` 和 `OR`。如果我们对相同列使用多个 `AND` 逻辑操作符,那么我们应该考虑使用 `IN` 子句替代。

做为示例,我们返回来自电影《Star Wars》和《The Terminator》中的所有电影台词:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE = ‘Star Wars’ AND Q_MOVIE = ‘The Terminator’;

SQL 新手指南

就上面的例子,更好的写法就是使用 `IN` 语句替代:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE IN (‘Star Wars’, ‘The Terminator’);

至此,我们一直在讨论如何从数据库中过滤数据。返回的行将按照它们进入(提交到)数据库的顺序进行排序。为了控制数据显示的顺序,我们可以通过包含 `ORDER BY` 子句来过滤输出数据。`ORDER BY` 子句包含了指定分类顺序的一个、或多个列名:

SELECT column_1, column_1, ... column_n
FROM table_name
WHERE column_name operator value
ORDER BY column_name;

为了扩展我们刚才《Star Wars》电影台词的例子,现在按照年份排序:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE = ‘Star Wars’
ORDER BY Q_YEAR;

SQL 新手指南

一个列的排序,默认是按照从最低值到最高值升序排列。为了把列的排序改为降序,我们可以在列名后面加上 `DESC` 关键字:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE = ‘Star Wars’
ORDER BY Q_YEAR DESC;

SQL 新手指南

`ORDER BY` 语句不限于单个列。你可以包含逗号分隔的、列的清单来排序。返回的行将根据第一个指定列,然后按顺序根据接下来指定的列排序。切记,用来排序的列不必包含在被选择列的清单里。我们可以像这样来写查询:

SELECT Q_TEXT, Q_CHARACTER, Q_MOVIE FROM Movie_quotes
WHERE Q_MOVIE = ‘Star Wars’
ORDER BY Q_YEAR DESC;

更新数据

在我们开始插入数据之后,并没有被限制为只能读取数据。我们能够对任何行里的、任何列下的、任何数据进行修改。`UPDATE` 语句用于更新或修改记录。

`UPDATE` 的语法如下:

UPDATE table_name
SET column_name = new_value
WHERE column_name operator value;

当我们使用 `UPDATE` 时,慎重地构造一个 `WHERE` 子句是十分重要的。`WHERE` 子句指定了哪一条记录或哪些记录应该被更新。如果我们在执行 `UPDATE` 语句时、而没有使用 `WHERE` 子句,我们将更新指定列的所有数据。

让我们看看 `Movie_quotes` 表里的电影台词。我们让所有的台词以标点符号结束,《The Terminator》除外。对于如何使用 `UPDATE` 语句,这是一个极好的例子:

UPDATE Movie_quotes
SET Q_TEXT = ‘I’ll be back!’
WHERE Q_MOVIE = ‘The Terminator’;

之前解释了,如果我们不小心遗漏了 `WHERE` 子句,或我们故意把所有的台词行更新为「I’ll be back!」。通过单单选中电影《The terminator》所在行,我们就可以更新指定行的一列数据。

删除数据

当数据库被大量使用时,从数据库中移除陈旧的数据,迟早会变得有必要。我们能够只删除表中的一些行、或删除整个表。

`DELETE` 语句用于删除表中的行。该命令的语法如下:

DELETE FROM table_name
WHERE column_name operator value;

重申,和 `UPDATE` 语句一样,`WHERE` 子句指定了哪一条记录或哪些记录应该被删除。如果没有指定 `WHERE` 子句,所有的行和列将被删除:

DELETE FROM Movie_quotes;

假设我们不再喜欢电影《Forrest Gump》了,想从电影中删除其台词。为了从电影中删除所有台词,我们可以编写如下 SQL 命令:

DELETE FROM Movie_quotes
WHERE Q_MOVIE = ‘Forrest Gump’;

最终,我们有了足够多的电影。我们对电影台词不再感兴趣了,我们想把兴趣移到音乐上。我们开始收集歌词。根据我们目前所学到的 SQL 知识,修改数据库是非常简单的。

首先,我们需要清空数据库里、不再感兴趣的数据。为了删除包含所有行的表,我们可以使用 `DROP TABLE` 语句。切记 `DROP TABLE` 语句不同于使用 `DELETE` 语句,和删除表里的所有记录也不同。删除表里的所有记录,会留给我们表本身及其定义的所有表结构;包括列的数据类型定义和该表的其它相关的数据库信息。`DROP TABLE` 移除了表、移除表的定义,还有所有的行。

`DROP TABLE` 语句的语法如下:

DROP TABLE table_name;

为了从数据库中删除 `Movie_quotes`,我们可以这样写:

DROP TABLE Movie_quotes;

现在我们的数据库是空的,准备接受新数据。我们从所有的 CRUD 过程开始,创建名为 `Song_Lyrics` 的新表,根据我们新收藏的歌曲,建立一个歌词数据库。

结论

本文我们浏览了涵盖 CRUD 四个基本的数据库功能:如何创建新数据、读取数据、更新我们想要修改的数据、以及最后的如何删除不想要的数据。这包含了基本的、但是最重要的 SQL 命令,比如:`CREATE TABLE`, `INSERT INTO`, `SELECT`, `UPDATE`, `DELETE` 和 `DROP`。

这些基本的 SQL 命令支持大量的数据管理,但是每个介绍到的命令都有很多选项和额外的功能,有些是本文没有介绍的,要注意这一点。总之,当 SQL 开发人员新手在开始数据库工作、以及使用一门新语言 SQL 时,本文中的基本知识应该能为他们开个好头。

위 내용은 PHP를 개발하는 프로그래머가 꼭 마스터해야 할 SQL 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.