ЕСЛИ ВЫБОРЫ
Предложения и доступны для следующего:
ADD COLUMN ADD INDEX ADD FOREIGN KEY ADD PARTITION CREATE INDEX DROP COLUMN DROP INDEX DROP FOREIGN KEY DROP PARTITION CHANGE COLUMN MODIFY COLUMN DROP INDEX
Когда и используются в предложениях, запросы не будут сообщать об ошибках, когда условие запускается для этого предложения. Будет выдано предупреждение с тем же текстом сообщения, и ALTER перейдет к следующему предложению в операторе (или завершится, если закончено). <</product>>
MariaDB начиная с 10.5.2
Если эта директива используется после , ошибка не появится, если таблица не существует.
SQL Учебник
SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии
SQL Справочник
SQL Ключевые слова
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE
MySQL Функции
Функции строк
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Функции дат
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Функции расширений
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION
SQL Server функции
Функции строк
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Функции дат
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Функции расширений
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access функции
Функции строк
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Функции чисел
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Функции дат
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Другие функции
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL ОператорыSQL Типы данныхSQL Краткий справочник
Изменить несколько столбцов в таблице
Синтаксис
Синтаксис SQL ALTER TABLE для изменения нескольких столбцов в существующей таблице.
Для Oracle.
ALTER TABLE table_name
MODIFY (column_1 column_type,
column_2 column_type,
…
column_n column_type);
Для MySQL и MariaDB.
ALTER TABLE table_name
MODIFY column_1 column_definition
,
MODIFY column_2 column_definition
,
…
;
Для PostgreSQL.
ALTER TABLE table_name
ALTER COLUMN column_name TYPE column_definition,
ALTER COLUMN column_name TYPE column_definition,
…
;
Пример
Давайте рассмотрим пример, который использует ALTER TABLE для изменения более одного столбца. В этом примере мы изменим два столбца с именами supplier_name и city.
Для Oracle.
PgSQL
ALTER TABLE supplier
MODIFY (supplier_name char(100) NOT NULL,
city char(75));
1 |
ALTERTABLEsupplier MODIFY(supplier_namechar(100)NOT NULL, citychar(75)); |
Для MySQL и MariaDB.
PgSQL
ALTER TABLE supplier
MODIFY supplier_name VARCHAR(100) NOT NULL,
MODIFY city VARCHAR(75);
1 |
ALTERTABLEsupplier MODIFYsupplier_nameVARCHAR(100)NOT NULL, MODIFYcityVARCHAR(75); |
Для PostgreSQL.
PgSQL
ALTER TABLE supplier
ALTER COLUMN supplier_name TYPE CHAR(100),
ALTER COLUMN supplier_name SET NOT NULL,
ALTER COLUMN city TYPE CHAR(75);
1 |
ALTERTABLEsupplier ALTERCOLUMNsupplier_nameTYPECHAR(100), ALTERCOLUMNsupplier_nameSETNOT NULL, ALTERCOLUMNcityTYPECHAR(75); |
Практическое упражнение №1:
На основании таблицы departments ниже, переименовать таблицу departments в depts.
Oracle PL/SQL
CREATE TABLE departments
( department_id number(10) not null,
department_name varchar2(50) not null,
CONSTRAINT departments_pk PRIMARY KEY (department_id)
);
1 |
CREATETABLEdepartments department_namevarchar2(50)notnull, CONSTRAINTdepartments_pkPRIMARYKEY(department_id) |
Решение для практического упражнения №1:
Следующий оператор Oracle/PLSQL ALTER TABLE переименует таблицу departments в depts:
Oracle PL/SQL
ALTER TABLE departments
RENAME TO depts;
1 |
ALTERTABLEdepartments RENAMETOdepts; |
Изменить несколько столбцов в таблице
Синтаксис
Синтаксис изменения нескольких столбцов в таблице в MariaDB (используя ALTER TABLE):
ALTER TABLE table_name
MODIFY column_name column_definition
,
MODIFY column_name column_definition
,
..
;
- table_name
- Имя таблицы для изменения.
- column_name
- Имя столбца, который нужно изменить в таблице.
- column_definition
- Измененный тип данных и определение столбца (NULL или N OT NULL и т.д.).
- FIRST | AFTER column_name
- Необязательный. Он сообщает MariaDB, где в таблице расположить столбец, если вы хотите изменить его положение.
Пример
Рассмотрим пример, который показывает, как изменить несколько столбцов в таблице MariaDB, используя инструкцию ALTER TABLE.
Например:
PgSQL
ALTER TABLE websites
MODIFY host_name varchar(45)
AFTER website_id,
MODIFY server_name varchar(30) NOT NULL;
1 |
ALTERTABLEwebsites MODIFYhost_namevarchar(45) AFTERwebsite_id, MODIFYserver_namevarchar(30)NOT NULL; |
В этом примере будут изменены два столбца таблицы websites — host_name и server_name.
Поле host_name изменится на столбец c типом данных varchar (45), который допускает значения NULL и появится в таблице после столбца website_id . Столбец server_name будет изменен на столбец c типом данных varchar(30) NOT NULL (и не изменит позицию в определении таблицы websites, поскольку указано FIRST | AFTER ).
Практическое упражнение № 3
На основе приведенной ниже таблицы customers добавьте два столбца — один столбец с именем contact_name, который является типом данных char(50), и один столбец с именем last_contacted, у которого тип данных date.
PgSQL
CREATE TABLE customers
( customer_id int NOT NULL,
customer_name char(50) NOT NULL,
address char(50),
city char(50),
state char(25),
zip_code char(10),
CONSTRAINT customers_pk PRIMARY KEY (customer_id)
);
1 |
CREATETABLEcustomers customer_namechar(50)NOT NULL, addresschar(50), citychar(50), statechar(25), zip_codechar(10), CONSTRAINTcustomers_pkPRIMARYKEY(customer_id) |
Решение для упражнения № 3
Следующий SQL оператор ALTER TABLE добавит столбцы contact_name и last_contacted в таблицу customers.
PgSQL
ALTER TABLE customers
ADD (contact_name char(50),
last_contacted date);
1 |
ALTERTABLEcustomers ADD(contact_namechar(50), last_contacteddate); |
Description
позволяет вам изменить структуру существующей таблицы. Например, вы можете добавлять или удалять столбцы, создавать или уничтожать индексы, изменять тип существующих столбцов или переименовывать столбцы или саму таблицу. Вы также можете изменить комментарий для таблицы и механизм хранения таблицы.
Если другое соединение использует таблицу, активна блокировка метаданных , и этот оператор будет ждать, пока блокировка не будет снята. Это также верно для нетранзакционных таблиц.
При добавлении индекса к столбцу (или набору столбцов), имеющему повторяющиеся значения, будет выдана ошибка, и выполнение оператора будет остановлено. Чтобы подавить ошибку и принудительно создать индексы , отбрасывая дубликаты, можно указать параметр IGNORE . Это может быть полезно, если столбец (или набор столбцов) должен быть УНИКАЛЬНЫМ, но содержит повторяющиеся значения; однако этот метод не позволяет контролировать, какие строки сохраняются, а какие удаляются
Также обратите внимание, что допускается, но игнорируется в операторах
Этот оператор также можно использовать для переименования таблицы. Подробнее см. ТАБЛИЦА ПЕРЕИМЕНОВАНИЙ .
Когда создается индекс, механизм хранения может использовать в процессе настраиваемый буфер. Увеличение буфера ускоряет создание индекса. Aria и MyISAM выделяют буфер, размер которого определяется параметрами или , которые также используются для REPAIR TABLE . InnoDB выделяет три буфера, размер которых определяется .
SQL Справочник
SQL Ключевые слова
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE
MySQL Функции
Функции строк
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Функции дат
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Функции расширений
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION
SQL Server функции
Функции строк
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Функции дат
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Функции расширений
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access функции
Функции строк
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Функции чисел
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Функции дат
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Другие функции
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL ОператорыSQL Типы данныхSQL Краткий справочник
Практическое упражнение №5:
На основании таблицы customers ниже, модифицируйте столбец customer_name, чтобы он не мог принимать значения NULL и изменить типа данных в столбце state в varchar2 (2).
Oracle PL/SQL
CREATE TABLE customers
( customer_id number(10) not null,
customer_name varchar2(50),
address varchar2(50),
city varchar2(50),
state varchar2(25),
zip_code varchar2(10),
CONSTRAINT customers_pk PRIMARY KEY (customer_id)
);
1 |
CREATETABLEcustomers customer_namevarchar2(50), addressvarchar2(50), cityvarchar2(50), statevarchar2(25), zip_codevarchar2(10), CONSTRAINTcustomers_pkPRIMARYKEY(customer_id) |
Решение для практического упражнения №5:
Следующий оператор Oracle/PLSQL ALTER TABLE модифицирует столбцы customer_name и state в таблице customers:
Oracle PL/SQL
ALTER TABLE customers
MODIFY (customer_name varchar2(50) not null,
state varchar2(2));
1 |
ALTERTABLEcustomers MODIFY(customer_namevarchar2(50)notnull, statevarchar2(2)); |
Практическое упражнение №6:
На основании таблицы employees ниже, удалить столбец salary.
Oracle PL/SQL
CREATE TABLE employees
( employee_number number(10) not null,
employee_name varchar2(50) not null,
department_id number(10),
salary number(6),
CONSTRAINT employees_pk PRIMARY KEY (employee_number)
);
1 |
CREATETABLEemployees employee_namevarchar2(50)notnull, department_idnumber(10), salarynumber(6), CONSTRAINTemployees_pkPRIMARYKEY(employee_number) |
Решение для практического упражнения №6:
Следующий оператор Oracle/PLSQL ALTER TABLE удалит столбец salary из таблицы employees:
Oracle PL/SQL
ALTER TABLE employees
DROP COLUMN salary;
1 |
ALTERTABLEemployees DROPCOLUMNsalary; |
SQL Справочник
SQL Ключевые слова
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE
MySQL Функции
Функции строк
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Функции дат
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Функции расширений
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION
SQL Server функции
Функции строк
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Функции дат
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Функции расширений
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access функции
Функции строк
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Функции чисел
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Функции дат
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Другие функции
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL ОператорыSQL Типы данныхSQL Краткий справочник
Практическое упражнение №4:
На основании таблицы employees ниже, модифицируйте тип данных столбца employee_name в varchar2 (80).
Oracle PL/SQL
CREATE TABLE employees
( employee_number number(10) not null,
employee_name >varchar2(50) not null,
department_id number(10),
CONSTRAINT employees_pk PRIMARY KEY (employee_number)
);
1 |
CREATETABLEemployees employee_name>varchar2(50)notnull, department_idnumber(10), CONSTRAINTemployees_pkPRIMARYKEY(employee_number) |
Решение для практического упражнения №4:
Следующий оператор Oracle/PLSQL ALTER TABLE модифицирует тип данных для столбца employee_name в varchar2 (80):
Oracle PL/SQL
ALTER TABLE employees
MODIFY employee_name varchar2(80);
1 |
ALTERTABLEemployees MODIFYemployee_namevarchar2(80); |
Сводка
Существует два распространенных метода, которые можно использовать для удаления дублирующихся записей из SQL Server таблицы. Для демонстрации сначала создайте пример таблицы и данных:
Затем попробуйте следующие методы, чтобы удалить дублирующиеся строки из таблицы.
Способ 1
Запустите следующий сценарий:
Этот скрипт принимает следующие действия в данном порядке:
- Перемещает один экземпляр любой дублирующейся строки в исходной таблице в дублирующую таблицу.
- Удаляет все строки из исходной таблицы, которые также находятся в дублирующей таблице.
- Перемещает строки в таблицу дубликатов обратно в исходную таблицу.
- Сбрасывает таблицу дубликата.
Этот метод прост. Однако для создания дублирующей таблицы в базе данных необходимо иметь достаточно места. Этот метод также накладные расходы, так как данные перемещаются.
Кроме того, если в вашей таблице есть столбец IDENTITY, при восстановлении данных в исходной таблице необходимо использовать set IDENTITY_INSERT ON.
Способ 2
Функция ROW_NUMBER, которая была представлена в Microsoft SQL Server 2005 г., значительно упрощает эту операцию:
Этот скрипт принимает следующие действия в данном порядке:
- Использует функцию для раздела данных на основе которых может быть один или несколько столбцов, разделенных запятой.
- Удаляет все записи, которые получили значение больше 1. Это значение указывает на то, что записи являются дубликатами.
Из-за выражения скрипт не сортировать разделимые данные на основе каких-либо условий. Если в логике удаления дубликатов необходимо выбрать, какие записи удалять, а какие хранить в соответствии с порядком сортировки других столбцов, для этого можно использовать выражение ORDER BY.
Практическое упражнение № 6
На основе приведенной ниже таблицы employees удалите столбец salary.
PgSQL
CREATE TABLE employees
( employee_number int NOT NULL,
employee_name char(50) NOT NULL,
department_id int,
salary int,
CONSTRAINT employees_pk PRIMARY KEY (employee_number)
);
1 |
CREATETABLEemployees employee_namechar(50)NOT NULL, department_idint, salaryint, CONSTRAINTemployees_pkPRIMARYKEY(employee_number) |
Решение для упражнения № 6
Следующий SQL оператор ALTER TABLE удалит столбец salary из таблицы employees.
PgSQL
ALTER TABLE employees
DROP COLUMN salary;
1 |
ALTERTABLEemployees DROPCOLUMNsalary; |
Изменить столбец в таблице
Синтаксис
Синтаксис SQL ALTER TABLE для изменения столбца в существующей таблице.
Для Oracle, MySQL, MariaDB.
ALTER TABLE table_name
MODIFY column_name column_type;
Для SQL Server.
ALTER TABLE table_name
ALTER COLUMN column_name column_type;
Для PostgreSQL.
ALTER TABLE table_name
ALTER COLUMN column_name TYPE column_definition;
Пример
Давайте посмотрим, как изменить столбец с именем supplier_name, используя команду ALTER TABLE
Обратите внимание, что в большинстве баз данных Синтаксис немного отличается.
Для Oracle
PgSQL
ALTER TABLE supplier
MODIFY supplier_name char(100) NOT NULL;
1 |
ALTERTABLEsupplier MODIFYsupplier_namechar(100)NOT NULL; |
Для MySQL и MariaDB.
PgSQL
ALTER TABLE supplier
MODIFY supplier_name VARCHAR(100) NOT NULL;
1 |
ALTERTABLEsupplier MODIFYsupplier_nameVARCHAR(100)NOT NULL; |
Для SQL Server.
PgSQL
ALTER TABLE supplier
ALTER COLUMN supplier_name VARCHAR(100) NOT NULL;
1 |
ALTERTABLEsupplier ALTERCOLUMNsupplier_nameVARCHAR(100)NOT NULL; |
Для PostgreSQL.
PgSQL
ALTER TABLE supplier
ALTER COLUMN supplier_name TYPE CHAR(100),
ALTER COLUMN supplier_name SET NOT NULL;
1 |
ALTERTABLEsupplier ALTERCOLUMNsupplier_nameTYPECHAR(100), ALTERCOLUMNsupplier_nameSETNOT NULL; |
Использование OFFSET и FETCH для ограничения числа возвращаемых строк
Для разбиения на страницы и ограничения числа строк, передаваемых клиентскому приложению, рекомендуется пользоваться предложениями OFFSET и FETCH, а не предложением TOP.
Применение в качестве решения для разбиения на страницы предложений OFFSET и FETCH потребует однократного выполнения запроса для каждой «страницы» данных, возвращаемых клиентскому приложению. Например, чтобы вернуть результаты запроса блоками по 10 строк, необходимо выполнить запрос для получения строк с 1 по 10, затем еще раз для получения строк с 11 по 20 и так далее. Каждый запрос выполняется независимо и никаким образом не связан с другими запросами. Это означает, что в отличие от использования курсора, где запрос выполняется всего один раз, а текущее состояние хранится на сервере, за отслеживание состояния отвечает клиентское приложение. Чтобы добиться стабильных результатов между запросами с предложениями OFFSET и FETCH, должны выполняться следующие условия.
-
Базовые данные, используемые запросом, должны быть неизменными. Иными словами, либо строки, обработанные запросом, не должны обновляться, либо все запросы страниц выполняемого запроса должны выполняться в одной транзакции, использующей моментальный снимок или сериализуемую изоляцию транзакции. Дополнительные сведения об уровнях изоляции транзакции см. в разделе SET TRANSACTION ISOLATION LEVEL (Transact-SQL).
-
Предложение ORDER BY содержит столбец или сочетание столбцов, которые гарантированно уникальны.
См. пример «Выполнение нескольких запросов в одной транзакции» в подразделе «Примеры» ниже в этом разделе.
Если согласованность планов выполнения важна для решения разбиения на страницы, подумайте над использованием указания запросов OPTIMIZE FOR для параметров OFFSET и FETCH. См. пункт «Указание выражений для значений OFFSET и FETCH» в подразделе «Примеры» ниже в этом разделе. Дополнительные сведения об OPTIMZE FOR см. в статье Указания запросов (Transact-SQL).
SQL Пример ALTER TABLE
Посмотрите на таблицу «Persons»:
ID | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Теперь мы хотим добавить столбец с именем «DateOfBirth» в таблицу «Persons».
Мы используем следующую инструкцию SQL:
ALTER TABLE Persons
ADD DateOfBirth date;
Обратите внимание, что новый столбец «DateOfBirth» имеет тип date и будет содержать дату.
Тип данных указывает, какой тип данных может содержать столбец.
Для получения полного описания всех типов данных, доступных в MS Access, MySQL и SQL Server,
перейдите к нашему полному Справочнику типов данных. Таблица «Persons» теперь будет выглядеть так:
Таблица «Persons» теперь будет выглядеть так:
ID | LastName | FirstName | Address | City | DateOfBirth |
---|---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes | |
2 | Svendson | Tove | Borgvn 23 | Sandnes | |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Как изменить имя и тип данных у колонки в таблице MySQL?
Синтаксис смены имени и типа данных у колонки:
ALTER TABLE table_name CHANGE COLUMN old_column_name new_column_name new_data_type;
1 | ALTERTABLEtable_nameCHANGECOLUMNold_column_namenew_column_namenew_data_type; |
Сменим имя у колонки сreation_date на entry_date и тип данных c на .
ALTER TABLE books CHANGE COLUMN creation_date entry_date DATE;
1 | ALTERTABLEbooksCHANGECOLUMNcreation_dateentry_dateDATE; |
Если вы хотите сменить только тип данных, оставив имя колонки прежним, то воспользуйтесь следующим синтаксисом:
ALTER TABLE table_name MODIFY COLUMN column_name new_data_type;
1 | ALTERTABLEtable_nameMODIFYCOLUMNcolumn_namenew_data_type; |
Практическое упражнение № 5
На основе приведенной ниже таблицы customer измените столбец customer_name, чтобы он не допускал значений NULL, и измените столбец state на тип данных char(2).
PgSQL
CREATE TABLE customers
( customer_id int NOT NULL,
customer_name char(50),
address char(50),
city char(50),
state char(25),
zip_code char(10),
CONSTRAINT customers_pk PRIMARY KEY (customer_id)
);
1 |
CREATETABLEcustomers customer_namechar(50), addresschar(50), citychar(50), statechar(25), zip_codechar(10), CONSTRAINTcustomers_pkPRIMARYKEY(customer_id) |
Решение для упражнения № 5
Следующий SQL оператор ALTER TABLE изменит столбцы customer_name и state соответственно в таблице customers.
PgSQL
ALTER TABLE customers
MODIFY (customer_name char(50) NOT NULL,
state char(2));
1 |
ALTERTABLEcustomers MODIFY(customer_namechar(50)NOT NULL, statechar(2)); |
Взаимодействие между отслеживанием изменений и параметром NO POPULATION
Заполнение полнотекстового индекса зависит от того, включено ли отслеживание изменений и указано ли предложение WITH NO POPULATION в инструкции ALTER FULLTEXT INDEX. В следующей таблице описывается результат их взаимодействия.
Отслеживание изменений | WITH NO POPULATION | Результат |
---|---|---|
Не включено | Не указано | Выполняется полное заполнение полнотекстового индекса. |
Не включено | Указано | Заполнение полнотекстового индекса не выполняется, если не выполнена инструкция ALTER FULLTEXT INDEX…START POPULATION. |
Активировано | Указано | Формируется ошибка. Индекс не изменяется. |
Активировано | Не указано | Выполняется полное заполнение полнотекстового индекса. |
Дополнительные сведения о заполнении полнотекстовых индексов см. в разделе Заполнение полнотекстовых индексов.