Изменение структуры таблицы с помощью Access SQL
После создания и заполнения таблицы может потребоваться изменить ее структуру. Для этого используйте инструкцию ALTER TABLE . Имейте в виду, что изменение структуры существующей таблицы может привести к потере некоторых данных. Например, изменение типа данных поля может привести к потере данных или ошибкам округления в зависимости от используемого типа данных. Он также может нарушить другие части приложения, которые могут ссылаться на измененное поле. Перед изменением структуры существующей таблицы всегда следует соблюдать особую осторожность.
С помощью инструкции ALTER TABLE можно добавить, удалить или изменить столбец (или поле), а также добавить или удалить ограничение. Можно также объявить значение по умолчанию для поля; однако одновременно можно изменять только одно поле. Предположим, что у вас есть база данных счетов и вы хотите добавить поле в таблицу Customers. Чтобы добавить поле с инструкцией ALTER TABLE , используйте предложение ADD COLUMN с именем поля, его типом данных и размером типа данных, если это необходимо.
ALTER TABLE tblCustomers ADD COLUMN Address TEXT(30)
Чтобы изменить тип данных или размер поля, используйте предложение ALTER COLUMN с именем поля, требуемым типом данных и требуемым размером типа данных, если это необходимо.
ALTER TABLE tblCustomers ALTER COLUMN Address TEXT(40)
Если вы хотите изменить имя поля, необходимо удалить поле, а затем повторно создать его. Чтобы удалить поле, используйте предложение DROP COLUMN только с именем поля.
ALTER TABLE tblCustomers DROP COLUMN Address
Обратите внимание, что при использовании этого метода будут устранены существующие данные для поля. Чтобы сохранить существующие данные, необходимо изменить имя поля в режиме конструктора таблицы пользовательского интерфейса Access или написать код для сохранения текущих данных во временной таблице и добавить их обратно в переименованную таблицу. Значение по умолчанию — это значение, которое вводится в поле каждый раз при добавлении новой записи в таблицу и не указано значение для этого конкретного столбца. Чтобы задать значение по умолчанию для поля, используйте ключевое слово DEFAULT после объявления типа поля в предложении ADD COLUMN или ALTER COLUMN .
ALTER TABLE tblCustomers ALTER COLUMN Address TEXT(40) DEFAULT Unknown
Имейте в виду, что значение по умолчанию не заключено в одинарные кавычки. Если бы это было так, кавычки также были бы вставлены в запись. Ключевое слово DEFAULT также можно использовать в инструкции CREATE TABLE .
CREATE TABLE tblCustomers ( CustomerID INTEGER CONSTRAINT PK_tblCustomers PRIMARY KEY, [Last Name] TEXT(50) NOT NULL, [First Name] TEXT(50) NOT NULL, Phone TEXT(10), Email TEXT(50), Address TEXT(40) DEFAULT Unknown)
Инструкцию DEFAULT можно выполнить только через поставщик OLE DB Access и ADO. При использовании через пользовательский интерфейс Access SQL View возвращается сообщение об ошибке.
Ограничения
Ограничения можно использовать для установления первичных ключей и целостности ссылок, а также для ограничения значений, которые могут быть вставлены в поле. Как правило, ограничения можно использовать для сохранения целостности и согласованности данных в базе данных.
Существует два типа ограничений: ограничение на уровне одного поля или на уровне поля и ограничение на уровне нескольких полей или таблиц. Оба типа ограничений можно использовать в инструкции CREATE TABLE или ALTER TABLE .
Ограничение на одно поле, также известное как ограничение на уровне столбца, объявляется с самим полем после объявления поля и типа данных. В этом примере используйте таблицу Customers и создайте первичный ключ с одним полем в поле CustomerID. Чтобы добавить ограничение, используйте ключевое слово CONSTRAINT с именем поля.
ALTER TABLE tblCustomers ALTER COLUMN CustomerID INTEGER CONSTRAINT PK_tblCustomers PRIMARY KEY
Имейте в виду, что задано имя ограничения. Вы можете использовать ярлык для объявления первичного ключа, который полностью пропускает предложение CONSTRAINT .
ALTER TABLE tblCustomers ALTER COLUMN CustomerID INTEGER PRIMARY KEY
Однако использование метода сочетания клавиш приведет к тому, что Access случайным образом создаст имя для ограничения, что усложнит ссылку в коде. Рекомендуется всегда называть ограничения.
Чтобы удалить ограничение, используйте предложение DROP CONSTRAINT с инструкцией ALTER TABLE и укажите имя ограничения.
ALTER TABLE tblCustomers DROP CONSTRAINT PK_tblCustomers
Ограничения также можно использовать для ограничения допустимых значений для поля. Значения можно ограничить значением NOT NULL или UNIQUE или определить проверочные ограничения, которые являются типом бизнес-правила, которое может применяться к полю. Предположим, что вы хотите ограничить (или ограничить) значения полей имени и фамилии, чтобы они были уникальными. Это означает, что сочетание имени и фамилии не должно быть одинаковым для любых двух записей в таблице. Так как это ограничение нескольких полей, оно объявляется на уровне таблицы, а не на уровне поля. Используйте предложение ADD CONSTRAINT и определите многополевой список.
ALTER TABLE tblCustomers ADD CONSTRAINT CustomerID UNIQUE ([Last Name], [First Name])
Проверочное ограничение — это мощная функция SQL, которая позволяет добавлять проверку данных в таблицу, создавая выражение, которое может ссылаться на одно поле или несколько полей в одной или нескольких таблицах. Предположим, что вы хотите убедиться, что суммы, указанные в записи счета, всегда больше 0,00 долл. США. Для этого используйте проверочные ограничения, объявив ключевое слово CHECK и выражение проверки в предложении ADD CONSTRAINT инструкции ALTER TABLE .
ALTER TABLE tblInvoices ADD CONSTRAINT CheckAmount CHECK (Amount > 0)
Выражение, используемое для определения проверочного ограничения, также может ссылаться на несколько полей в одной таблице или на поля в других таблицах, а также может использовать любые операции, допустимые в Microsoft Access SQL, такие как инструкции SELECT , математические операторы и агрегатные функции. Выражение, определяющее проверочные ограничения, может содержать не более 64 символов.
Предположим, что вы хотите проверить кредитный лимит каждого клиента, прежде чем он будет добавлен в таблицу Клиенты. Используя инструкцию ALTER TABLE с предложениями ADD COLUMN и CONSTRAINT , создайте ограничение, которое будет искать значение в таблице CreditLimit для проверки кредитного лимита клиента. Используйте следующие инструкции SQL, чтобы создать таблицу tblCreditLimit, добавить поле CustomerLimit в таблицу tblCustomers, добавить проверочные ограничения в таблицу tblCustomers и протестировать проверочные ограничения.
CREATE TABLE tblCreditLimit ( Limit DOUBLE) INSERT INTO tblCreditLimit VALUES (100) ALTER TABLE tblCustomers ADD COLUMN CustomerLimit DOUBLE ALTER TABLE tblCustomers ADD CONSTRAINT LimitRule CHECK (CustomerLimit
Имейте в виду, что при выполнении инструкции UPDATE TABLE появляется сообщение о том, что обновление не выполнено, так как оно нарушило проверочные ограничения. Если обновить поле CustomerLimit до значения, равного 100 или меньшего значения, обновление будет выполнено успешно.
Каскадные обновления и удаления
Ограничения также можно использовать для установления целостности ссылок между таблицами базы данных. Наличие ссылочной целостности означает, что данные являются согласованными и некорректными. Например, если вы удалили запись клиента, но запись о доставке этого клиента осталась в базе данных, данные будут несогласованными, так как у вас в таблице доставки потеряна запись. Целостность данных устанавливается при построении связи между таблицами.
Помимо установления целостности ссылок, вы также можете обеспечить синхронизацию записей в указанных таблицах с помощью каскадных обновлений и удалений. Например, при объявлении каскадных обновлений и удалений при удалении записи клиента запись доставки клиента удаляется автоматически.
Чтобы включить каскадные обновления и удаления, используйте ключевые слова ON UPDATE CASCADE и (или ) ON DELETE CASCADE в предложении CONSTRAINT инструкции ALTER TABLE . Имейте в виду, что они должны применяться к внешнему ключу.
ALTER TABLE tblShipping ADD CONSTRAINT FK_tblShipping FOREIGN KEY (CustomerID) REFERENCES tblCustomers (CustomerID) ON UPDATE CASCADE ON DELETE CASCADE
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Руководство по SQL. Изменение таблицы.
Для добавления, удаления либо изменения колонок существующей таблицы, в языке SQL используется команда ALTER TABLE. Данная команда также используется для добавления, либо удаления различных констрейнтов в/из существующих таблиц.
Запрос с использованием команды ALTER TABLE для добавления новой колонки имеет следующий вид:
ALTER TABLE имя_таблицы ADD имя_колонки тип_данных;
Для удаления колонки:
ALTER TABLE имя_таблицы DROP имя_колонки;
Для изменения типа данных:
ALTER TABLE имя_таблицы MODIFY COLUMN имя_колонки тип_данных;
Для добавления констрейнта (например, NOT NULL):
ALTER TABLE имя_таблицы MODIFY имя_колонки тип_данных NOT NULL;
Для удаления констрейнта (например, NOT NULL):
ALTER TABLE имя_таблицы DROP CONSTRAINT someConstraint;
Предположим, что у нас есть таблица developers, которая содержит следующие записи:
+----+-------------------+------------+------------+--------+ | ID | NAME | SPECIALTY | EXPERIENCE | SALARY | +----+-------------------+------------+------------+--------+ | 1 | Eugene Suleimanov | Java | 2 | 2500 | | 2 | Peter Romanenko | Java | 3 | 3500 | | 3 | Andrei Komarov | JavaScript | 3 | 2500 | | 4 | Konstantin Geiko | C# | 2 | 2000 | | 5 | Asya Suleimanova | UI/UX | 2 | 1800 | | 6 | Kolya Nikolaev | Javascript | 5 | 3400 | | 7 | Ivan Ivanov | C# | 1 | 900 | | 8 | Ludmila Geiko | UI/UX | 2 | 1800 | +----+-------------------+------------+------------+--------+
Допустим, что мы хотим добавить новую колонку AGE (возраст).
Для этого нам необходимо использовать следующую команду:
mysql> ALTER TABLE developers ADD AGE INT;
Теперь наша таблица содержит данные такого вида:
+----+-------------------+------------+------------+--------+------+ | ID | NAME | SPECIALTY | EXPERIENCE | SALARY | AGE | +----+-------------------+------------+------------+--------+------+ | 1 | Eugene Suleimanov | Java | 2 | 2500 | NULL | | 2 | Peter Romanenko | Java | 3 | 3500 | NULL | | 3 | Andrei Komarov | JavaScript | 3 | 2500 | NULL | | 4 | Konstantin Geiko | C# | 2 | 2000 | NULL | | 5 | Asya Suleimanova | UI/UX | 2 | 1800 | NULL | | 6 | Kolya Nikolaev | Javascript | 5 | 3400 | NULL | | 7 | Ivan Ivanov | C# | 1 | 900 | NULL | | 8 | Ludmila Geiko | UI/UX | 2 | 1800 | NULL | +----+-------------------+------------+------------+--------+------+
Теперь попробуем удалить колонку AGE.
Для этого выполним следующий запрос:
mysql> ALTER TABLE developers DROP AGE;
В результате выполнения данного запроса, наша таблица будет иметь записи следующего вида:
+----+-------------------+------------+------------+--------+ | ID | NAME | SPECIALTY | EXPERIENCE | SALARY | +----+-------------------+------------+------------+--------+ | 1 | Eugene Suleimanov | Java | 2 | 2500 | | 2 | Peter Romanenko | Java | 3 | 3500 | | 3 | Andrei Komarov | JavaScript | 3 | 2500 | | 4 | Konstantin Geiko | C# | 2 | 2000 | | 5 | Asya Suleimanova | UI/UX | 2 | 1800 | | 6 | Kolya Nikolaev | Javascript | 5 | 3400 | | 7 | Ivan Ivanov | C# | 1 | 900 | | 8 | Ludmila Geiko | UI/UX | 2 | 1800 | +----+-------------------+------------+------------+--------+
На этом мы заканчиваем изучения способа изменения структуры таблицы.
В следующей статье мы рассмотрим способ удаления всех данных из таблицы.
38. Какие команды относятся к категории dml? Опишите способы добавления строк в таблицу (общий вид синтаксиса команд добавления строк в таблицу, примеры).
39. Команда изменения данных таблицы: общий вид синтаксиса, примеры.
40. Команда удаления строк из таблицы: общий вид синтаксиса, примеры.
41. Команда изменения структуры таблицы: общий вид синтаксиса, примеры.
42. Общий синтаксис и алгоритм выполнения команды Select языка SQL. Наиболее часто при проектировании запроса используется команда языка запросов SELECT. С ее помощью можно извлекать данные, хранящиеся в таблицах баз данных, соответствующих определенным критериям поиска. Такой запрос называется запросом на выборку. Синтаксис данной команды приведен ниже: SELECT [ALL |DISTINCT |TOP n] AS FROM откуда (таблица-источник1)> INTO куда (таблица-получатель)> [INNER JOIN (таблица-источник2) ON поле_таблицы-источник1= поле_таблицы-источник2] WHERE условия отбора полей> GROUP BY поля, по которым выполняется группирование записей> ORDER BY порядок сортировки данных [ASC|DESC]>; Рассмотрим значения аргументов: – ALL – при указании данного ключевого слова в результат запроса разрешается включение дублирующих записей. Параметр ALL включен по умолчанию. – DISTINCT – запрет на появление в результате дублирующих строк. – TOP n – вывод в результат запроса только n первых строк. – AS – список полей, перечисляемых через «,», которые необходимо включить в результат запроса (синтаксис: название_таблицы.название_поля). Если необходимо включить все поля таблицы, используется символ «*». Поля, включаемые в запрос, могут быть переименованы указанием ключевого слова ASи списка псевдонимов. – FROM – указывается таблица или представление, которые используются в качестве источника исходной информации. В случае, когда источником являются связанные таблицы, после параметра FROM указывается таблица со стороны «один». 43. Формирование списка вывода в команде Select: общий синтаксис, примеры. Использование псевдонимов в SQL. Упорядочение резуль-тата в ответе. Привести примеры. Тот же ответ (как в 42 вопросе) Пример. На основании таблицы Spisok получить таблицу со всеми записями следующего вида: Фамилия Стипендия Подается команда: SELECT fio, stip FROM Spisok; Результат выполнения команды приведен на рисунке. fio stip Рыбкина 3000 Уткина 2000 Пшеничко 2000 Собачкина 2000 Яичко 3500 Select- ключевое слово, которое «сообщает» СУБД о том, что команда является запросом; fio, stip- список имен полей (столбцов), по которым должна выбираться информация и нормироваться новая таблица FROM Spisok; FROM-ключевое слово , должно быть в каждом запросе; Spisik- имя таблицы –источника данных для запроса; Символ точка с запятой (;) признак окончания команды и готовности к её выполнению. После ключевого слова SELECT следует пробел. Далее через запятую перечисляются имена полей(столбцов) выборки. Для вывода всех столбцов таблицы базы данных список полей можно не перечислять, заменив его символом «звездочка» (*). Столбцы выводятся в соответствии со структурой таблицы-источника SELECT * FROM Spisok; Командой SELECT можно выводить столбцы в любой последовательности, отличной от упорядоченной по определению структуры таблицы-источника. Эта последовательность задается перечнем имен столбцов в команде SELECT. Пример переупорядоченных столбцов в выходной таблице SELECT kurs, gruppa, fio FROM Spisok; 44. Формирование условия выбора записей в команде Select. Использова-ние логических операторов и операторов сравнения. Примеры. С помощью WHERE – параметра пользователь определяет, какие блоки данных из приведенных в списке FROMтаблиц появятся в результате запроса. За ключевым словом WHERE! следует перечень условий поиска, определяющих те строки, которые должны быть выбраны при выполнении запроса. Существует пять основных типов условий поиска (или предикатов): - сравнение, сравниваются результаты вычисления одного выражения с результатами вычисления другого. - диапазон: проверяется, попадает ли результат вычисления выражения в заданный диапазон значений. - принадлежность множеству, проверяется, принадлежит ли результат вычислений выражения заданному множеству значений. - соответствие шаблону, проверяется, отвечает ли некоторое строковое значение заданному шаблону. - значениеNULL: проверяется, содержит ли данный столбец определитель NULL(неизвестное значение). Пример 6. Отобразить студентов с ФИО Петров. SELECT Fam, Imy FROM Student WHERE Fam = "Петров"; Сравнение В языке SQL можно использовать следующие операторы сравнения: = – равенство; < – меньше; >– больше; = – больше или равно; <> – не равно. Пример 8. Показать все операции отпуска товаров объемом больше 20. SELECT * FROM Sdelka WHERE Kolichestvo>20 Более сложные предикаты могут быть построены с помощью логических операторов AND, OR или NOT, а также скобок, используемых для определения порядка вычисления выражения. Вычисление выражения в условиях выполняется по следующим правилам. - Выражение вычисляется слева направо. - Первыми вычисляются подвыражения в скобках. - Операторы NOT выполняются до выполнения операторов AND и OR. - Операторы AND выполняются до выполнения операторов OR. Для устранения любой возможной неоднозначности рекомендуется использовать скобки. Пример 9. Вывести список товаров, цена которых больше или равна 100 и меньше или равна 150. SELECT Nazvanie,Cena FROM Tovar WHERE Cena>=100 And CenaДиапазон Оператор BETWEEN используется для поиска значения внутри некоторого интервала, определяемого своими минимальным и максимальным значениями. При этом указанные значенья включаются в условие поиска.BETWEENANDПример 11. Вывести список товаров, цена которых лежит в диапазоне от 100 до 150. SELECT Nazvanie, Cena FROM Tovar WHERE Cena Between 100 And 150 Значение NULL Оператор IS NULL используется для сравнения текущего значения со значением NULL – специальным значением, указывающим на отсутствие любого значения. NULL – это не то же самое, что знак пробела (пробел – допустимый символ) или ноль (0 – допустимое число). NULL отличается и от строки нулевой длины (пустой строки). Пример 26. Найти сотрудников, у которых нет телефона (поле Телефон не содержит никакого значения). SELECT Familiya, Telefon FROM Klient WHERE Telefon Is Null 45. Использование предикатов в команде Select: общий синтаксис, при-меры использования (для каждого из предикатов). В выражениях SELECT можно использовать несколько предикатов, приведенных ниже. • ALL • DISTINCT • DISTINCTROW • TOP Эти предикаты служат для ограничения количества возвращаемых записей. В SQL-выражении их можно использовать с командой WHERE. Предикат ALL назначен по умолчанию. Он выбирает все записи, которые в выражении SQL удовлетворяет условию WHERE. Указывать его необязательно, поскольку он назначен по умолчанию. Предикат DISTINCT необходимо включать, когда из запроса следует исключить одинаковые записи (рассматриваются только поля, включенные в запрос). Например, при создании запроса, выводящего идентификатор покупателя и день, в который он сделал заказ, нужно использовать следующее SELECT DISTINCT [CustomerlD], [OrderDate] Если в таблицу Orders помещено два заказа одного покупателя за один день, то в результирующей таблице будет содержаться только одна запись. Предикат DISTINCT указывает Access, что, если отобранные поля содержат одинаковые значения, нужно выводить только одну запись. Даже если на самом деле в таблице Orders есть две различные записи, то отображена будет только одна из них. Предикат DISTINCT проверяет дублирование только для полей, указанных для просмотра. Предикат DISTINCT предназначен для исключения записей, которые содержат повторяющиеся значения в отобранных полях. Для того чтобы запись была включена в результат выполнения запроса, значения в каждом поле, включенном в инструкцию SELECT, должны быть уникальными. DISTINCTROW— это предикат, существующий только в Access. Он работает подобно предикату DISTINCT, но с одним большим отличием: DISTINCTROW проверят совпадение в таблице или таблицах всех полей, а не только выбранных. Предикат DISTINCTROW используется для исключения записей, повторяющихся полностью. Он влияет на результат только в том случае, если в запрос включены не все поля из анализируемых таблиц. Предикат DISTINCTROW игнорируется, если запрос содержит только одну таблицу. Если, например, какому-либо покупателю в таблице Orders соответствуют две различные записи, то при использовании в предыдущем SQL-выражении distinctrow вместо DISTINCT будут выведены обе записи. Предикат DISTINCTROW проверяет совпадение всех полей в таблицах Customers и Orders. Если содержимое каких-либо полей различно (в данном случае — идентификатор заказа), то будут выведены обе записи. Предикат ТОР, который также характерен только для Access, ограничивает число выводимых записей, удовлетворяющих условию WHERE. Предикат TOP предназначен для возврата определенного числа записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY. Например, ТОР 10 выводит только десять первых записей, удовлетворяющих условию WHERE. Предикат ТОР имеет один необязательный параметр PERCENT (процент), который указывает не количество первых записей, а их процентное отношение к общему числу отобранных записей. 46. Группирование данных в SQL. Использование агрегирующих функ-ций для получения сводной информации. Примеры.Функциями агрегирования называются функции, которые позволяют определить количество записей в таблице, количество значений в столбце таблицы, найти минимальное, максимальное и среднее значение для столбца таблицы, вычислить сумму данных для столбца. Таким образом, агрегирующие функции обеспечивают получение некоторой обобщенной информации. В SQL определены следующие стандартные функции агрегирования: · COUNT — выполняет подсчет записей в таблице пли подсчет ненулевых значений в столбце таблицы; · SUM — возвращает сумму содержащихся в столбце значений; · MIN — возвращает минимальное значение в столбце; · МАХ — возвращает максимальное значение в столбце; · AVG — вычисляет среднее значение для содержащихся в столбце значений. В качестве примера рассмотрим таблицу Продажи. Подсчитаем количество записей в поле Продано, минимальное и максимальное количество проданных товаров, общую сумму проданных товаров и среднее значение проданных товаров. Для этого нужен следующий запрос: SELECT COUNT(продано) AS [Всего записей]. MIN(Продано) AS miп. МАХ(Продано) AS max, SUM(Продано) AS [Всего продано]. AVG(Продано) AS [Среднее количество продаж] FROM Продажи Результат выполнения этого запроса показан на рис. 22. Со всеми функциями агрегирования можно использовать параметр DISTINCT. В этом случае выполняется обобщение информации только для различающихся строк. Как правило, использовать параметр DISTINCT с агрегирующими функциями не имеет смысла, поскольку при подсчете обобщенных данных обычно приходится учитывать все записи, а не только уникальные. Группировка данных — это объединение записей в соответствии со значениями некоторого поля. Для группировки результатов выборки совместно с оператором SELECT используется предложение GROUP BY. Данное предложение должно следовать после предложения WHERE, но перед предложением ORDER BY. После ключевых слов GROUP BY указывается список полей, включенных в выборку с помощью оператора SELECT. Причем нужно обязательно указывать все отбираемые ноля (за исключением полей, относящихся к агрегирующим функциям), хотя порядок их перечисления после предложения GROUP BY может не соответствовать порядку списка после слова SELECT. Синтаксис оператора SELECT с предложением GROUP BY следующий: SELECT поле1. поле2 полеN FROM Таблица1 <. Таблица2 ТаблицаN>WHERE условие GROUP BY поле1. поле2 полеN ORDER BY поле1 Например, если выбрать из таблицы Товары два поля — Наименование и Категория, а затем сгруппировать их с помощью следующего запроса, то результат выборки будет упорядочен по значению первого поля, указанного в предложении GROUP BY. 47. Использование фразы HAVING при группировании данных в SQL. Примеры. Для отбора строк среди полученных групп применяется фраза HAVING. Она играет такую же роль для групп, что и фраза WHERE для исходных таблиц, и может использоваться лишь при наличии фразы GROUP BY. В предложении SELECT фразы WHERE, GROUP BY и HAVING обрабатываются в следующем порядке.
- Фразой WHERE отбираются строки, удовлетворяющие указанному в ней условию;
- Фраза GROUP BY группирует отобранные строки;
- Фразой HAVING отбираются группы, удовлетворяющие указанному в ней условию.
Значение условия, указываемого во фразе HAVING, должно быть уникальным для всех строк каждой группы. Поэтому правила использования имен столбцов и агрегатных функций во фразе HAVING такие же, как и для фразы SELECT при наличии фразы GROUP BY. Это значит, что во фразе HAVING в качестве операндов сравнения можно использовать только группируемые столбцы или агрегатные функции. Запрос: Список городов, количество клиентов из которых больше 10. SELECT IdCity FROM Customer GROUP BY IdCity HAVING COUNT(*)>10 Условие поиска раздела HAVING строится по тем же синтаксическим правилам, что и условие поиска раздела WHERE, и может включать те же самые предикаты. Однако имеются специальные синтаксические ограничения по части использования в условии поиска спецификаций столбцов таблиц из раздела FROM данного табличного выражения. Эти ограничения следуют из того, что условие поиска раздела HAVING задает условие на целую группу, а не на индивидуальные строки. Поэтому в арифметических выражениях предикатов, входящих в условие выборки раздела HAVING, прямо можно использовать только спецификации столбцов, указанных в качестве столбцов группирования в разделе GROUP BY. Остальные столбцы можно специфицировать только внутри спецификаций агрегатных функций COUNT, SUM, AVG, MIN и MAX, вычисляющих в данном случае некоторое агрегатное значение для всей группы строк. Аналогично обстоит дело с подзапросами, входящими в предикаты условия выборки раздела HAVING: если в подзапросе используется характеристика текущей группы, то она может задаваться только путем ссылки на столбцы группирования. Результатом выполнения раздела HAVING является сгруппированная таблица, содержащая только те группы строк, для которых результат вычисления условия поиска есть TRUE. В частности, если раздел HAVING присутствует в табличном выражении, не содержащем GROUP BY, то результатом его выполнения будет либо пустая таблица, либо результат выполнения предыдущих разделов табличного выражения, рассматриваемый как одна группа без столбцов группирования.
Изменение структуры таблицы (ALTER) — Основы реляционных баз данных
Наиболее сложный запрос при работе с таблицами — обновление ее структуры. Если посмотреть официальную документацию, то общая запись этого запроса занимает больше трех экранов монитора. Но ни один человек не помнит всех возможностей этой команды. Более того, большинство из них редко выполняются. Единственное, что нужно знать — возможности этой команды — общие принципы ее работы. А детали всегда можно будет найти в документации.
В этом уроке разберем такой тип запроса, как ALTER TABLE . Он отвечает за изменение таблицы базы данных. Также узнаем, какие четыре операции со столбцами он включает в себя.
Запрос ALTER TABLE
Запрос ALTER TABLE используют, чтобы изменять структуру столбца таблицы базы данных. Он включает четыре операции:
- Добавление колонки
- Переименование колонки
- Удаление колонки
- Обновление колонки
Разберем каждую операцию подробнее.
Добавление колонки
С помощью ALTER можно добавить колонку в уже имеющуюся таблицу:
В этом примере мы добавили колонку age.
Делается это таким образом:
-- в таблице "users" -- добавить колонку с именем "age" и типом "int" ALTER TABLE users ADD COLUMN age int;
Здесь после фразы ADD COLUMN идет строка описания новой колонки, точно такая же, как и при создании таблицы. В простом варианте она выглядит так: . Здесь можно указывать любые ограничения, добавлять ключи, автогенерацию, значение по умолчанию и многое другое. Синтаксис на 100% совпадает с синтаксисом определения колонки, когда таблица создается.
Переименование колонки
Чтобы переименовать колонку, нужно сделать следующий запрос:
-- в таблице "courses" -- изменить колонку "example1": -- поменять имя с "example1" на "example2" ALTER TABLE courses RENAME COLUMN example1 TO example2;
Здесь нет никаких сложностей — одно имя меняется на другое.
Удаление колонки
Следующий запрос удаляет колонку:
-- в таблице "courses" -- удалить колонку с именем "example2" ALTER TABLE courses DROP COLUMN example2;
Это тоже простая операция, которая убирает ненужную колонку.
Обновление колонки
Команда по изменению параметров колонки наиболее сложная. Практически у каждого элемента, который поддается обновлению, есть собственный синтаксис для этого обновления. Вот несколько базовых примеров:
ALTER TABLE addresses ADD PRIMARY KEY (id); ALTER TABLE addresses ALTER COLUMN created_at SET DATA TYPE timestamp, ALTER COLUMN street DROP NOT NULL; -- Установка ограничения NOT NULL в таблицу addresses для колонки city ALTER TABLE addresses ALTER COLUMN city SET NOT NULL; -- Добавление уникального индекса в таблицу "products" для колонки "product_id" ALTER TABLE products ADD UNIQUE (product_id);
Наиболее распространенные команды:
- ADD — добавление ограничения: например, ключа или уникальности
- SET — установка значения: например, типа данных
- DROP — удаление ограничения
В рамках одного обновления можно группировать операции, но существует ряд исключений. Например, группировке не поддается операция RENAME — ее нужно выполнять отдельным запросом, иначе СУБД завершит запрос с ошибкой.
Выводы
В этом уроке мы разобрали тип запроса ALTER , который отвечает за изменение таблицы базы данных. Мы узнали, что с его помощью можно добавлять, переименовывать, удалять и обновлять колонки.
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях: