Логические функции
Содержание:
- Применение программы osql в интерактивном режимеUsing osql Interactively
- Команды OSQLOSQL Commands
- ПримерыExamples
- ПримечанияRemarks
- MySQL Date Functions
- Многочастные именаMultipart Names
- MySQL Advanced Functions
- SQL References
- Выражение CASE – условный оператор языка SQL
- SQL References
- Introduction
- Поиск системных представленийFind system views
- Функции CASE, IF, IFNULL, COALESCE
- MySQL Программирование
- Пример
- Команда WHERE
- Подведем итоги
Применение программы osql в интерактивном режимеUsing osql Interactively
Чтобы использовать программу osql в интерактивном режиме, введите команду osql (и любые параметры) в командной строке.To use osql interactively, type the osql command (and any of the options) at a command prompt.
Файл, содержащий запрос (например, Stores.qry), можно загрузить в программу osql и выполнить, введя команду следующего вида:You can read in a file containing a query (such as Stores.qry) for execution by osql by typing a command similar to this:
Можно считать запрос из файла (например, Titles.qry) и направить результаты в другой файл, введя команду, подобную следующей:You can read in a file containing a query (such as Titles.qry) and direct the results to another file by typing a command similar to this:
Важно!
По возможности используйте параметр -E(доверительное соединение).When possible, use the -Eoption (trusted connection).
При использовании программы osql в интерактивном режиме файл операционной системы можно считать в буфер команд с помощью команды :rимя_файла.When using osql interactively, you can read an operating-system file into the command buffer with :rfile_name. Это приведет к отправке скрипта SQL в файле с именем имя_файла непосредственно на сервер в виде единого пакета.This sends the SQL script in file_name directly to the server as a single batch.
Примечание
Если при использовании программы osqlв файле скрипта SQL содержится разделитель пакетов GO, SQL ServerSQL Server воспринимает его как синтаксическую ошибку.When using osql, SQL ServerSQL Server treats the batch separator GO, if it appears in a SQL script file, as a syntax error.
Команды OSQLOSQL Commands
Помимо инструкций Transact-SQLTransact-SQL в программе osqlтакже доступны следующие команды.In addition to Transact-SQLTransact-SQL statements within osql, these commands are also available.
Get-HelpCommand | ОписаниеDescription |
---|---|
GOGO | Выполняет все инструкции, введенные после последней команды GO.Executes all statements entered after the last GO. |
RESETRESET | Очищает все введенные инструкции.Clears any statements you have entered. |
QUIT или EXIT( )QUIT or EXIT( ) | Завершение работы программы osql.Exits from osql. |
CTRL+CCTRL+C | Завершает запрос без выхода из программы osql.Ends a query without exiting from osql. |
Примечание
Команды !!The !! и ED больше не поддерживаются программой osql.and ED commands are no longer supported by osql.
Признаки конца команды GO (по умолчанию), RESET, EXIT, QUIT и CTRL+C распознаются только в начале строки, сразу после запроса программы osql .The command terminators GO (by default), RESET EXIT, QUIT, and CTRL+C, are recognized only if they appear at the beginning of a line, immediately following the osql prompt.
GO обозначает конец пакетного файла и исполнения любых кэшированных инструкций Transact-SQLTransact-SQL .GO signals both the end of a batch and the execution of any cached Transact-SQLTransact-SQL statements. При нажатии клавиши ВВОД в конце каждой строки ввода программа osql выполняет кэширование инструкций из этой строки.When you press ENTER at the end of each input line, osql caches the statements on that line. При нажатии клавиши ВВОД после ввода команды GO все текущие инструкции в кэше отправляются в виде пакета в SQL ServerSQL Server.When you press ENTER after typing GO, all of the currently cached statements are sent as a batch to SQL ServerSQL Server.
Последняя версия программы osql работает таким образом, как будто в конце любого выполняемого скрипта имеется подразумеваемая инструкция GO, поэтому выполняются все инструкции скрипта.The current osql utility works as if there is an implied GO at the end of any script executed, therefore all statements in the script execute.
Закончите команду с помощью ввода строки, которая начинается с признака конца команды.End a command by typing a line beginning with a command terminator. Следом за признаком конца команды можно ввести целое число, чтобы указать, сколько раз выполнить команду.You can follow the command terminator with an integer to specify how many times the command should be run. Например, чтобы выполнить эту команду 100 раз, введите:For example, to execute this command 100 times, type:
Результаты выводятся на печать один раз после завершения.The results are printed once at the end of execution. Программаosql не принимает более 1000 символов в одной строке.osql does not accept more than 1,000 characters per line. Большие инструкции должны вводиться в несколько строк.Large statements should be spread across multiple lines.
Для повторного вызова и изменения инструкций osql могут использоваться средства повторного вызова команд Windows.The command recall facilities of Windows can be used to recall and modify osql statements. Существующий буфер запросов можно очистить с помощью команды RESET.The existing query buffer can be cleared by typing RESET.
При запуске хранимых процедур программа osql выводит пустую строку между результирующими наборами в пакете.When running stored procedures, osql prints a blank line between each set of results in a batch. Кроме того, сообщение «обработано строк: 0» не выводится, если оно не применимо к выполненной инструкции.In addition, the «0 rows affected» message does not appear when it does not apply to the statement executed.
ПримерыExamples
A.A. Выполнение простого примераRunning a simple example
Следующие инструкции создают простую таблицу и добавляют значения , , и в столбец .The following statements create a simple table and add the values of , , , and to the column.
Следующий запрос возвращает значение , так как меньше некоторых из значений в таблице.The following query returns because is less than some of the values in the table.
Следующий запрос возвращает значение , так как не меньше каждого из значений в таблице.The following query returns because isn’t less than all of the values in the table.
Б.B. Выполнение практического примераRunning a practical example
В приведенном ниже примере показано создание хранимой процедуры, определяющей, могут ли в течение заданного количества дней быть выполнены все части заказа с указанным идентификатором из базы данных .The following example creates a stored procedure that determines whether all the components of a specified in the database can be manufactured in the specified number of days. В этом примере для создания списка количества значений для всех компонентов используется вложенный запрос, а затем проводится проверка того, превышают ли все значения, возвращаемые вложенным запросом, указанное количество дней.The example uses a subquery to create a list of the number of value for all the components of the specific , and then tests whether any of the values that are returned by the subquery are greater than the number of days specified. Если каждое возвращаемое значение меньше заданного значения, то условие равно TRUE и печатается первое сообщение.If every value of that is returned is less than the number provided, the condition is TRUE and the first message is printed.
Для проверки этой процедуры выполните ее, используя , имеющий один компонент, требующий на выполнение дня, и два компонента, требующих немедленного выполнения.To test the procedure, execute the procedure by using the , which has one component that requires days and two components that require 0 days. Первая инструкция отвечает этим критериям.The first statement meets the criteria. Второй запрос — нет.The second query doesn’t.
Результирующий набор:Here is the result set.
Результирующий набор:Here is the result set.
ПримечанияRemarks
Явное включение очень большого количества значений (много тысяч значений, разделенных запятыми) в круглые скобки в предложение IN может привести к интенсивному расходованию ресурсов и возврату ошибки 8623 или 8632.Explicitly including an extremely large number of values (many thousands of values separated by commas) within the parentheses, in an IN clause can consume resources and return errors 8623 or 8632. Чтобы избежать этой проблемы, храните элементы списка IN в таблице и используйте вложенный запрос SELECT в предложении IN.To work around this problem, store the items in the IN list in a table, and use a SELECT subquery within an IN clause.
Ошибка 8623.Error 8623:
Ошибка 8632.Error 8632:
MySQL Date Functions
Function | Description |
---|---|
ADDDATE | Adds a time/date interval to a date and then returns the date |
ADDTIME | Adds a time interval to a time/datetime and then returns the time/datetime |
CURDATE | Returns the current date |
CURRENT_DATE | Returns the current date |
CURRENT_TIME | Returns the current time |
CURRENT_TIMESTAMP | Returns the current date and time |
CURTIME | Returns the current time |
DATE | Extracts the date part from a datetime expression |
DATEDIFF | Returns the number of days between two date values |
DATE_ADD | Adds a time/date interval to a date and then returns the date |
DATE_FORMAT | Formats a date |
DATE_SUB | Subtracts a time/date interval from a date and then returns the date |
DAY | Returns the day of the month for a given date |
DAYNAME | Returns the weekday name for a given date |
DAYOFMONTH | Returns the day of the month for a given date |
DAYOFWEEK | Returns the weekday index for a given date |
DAYOFYEAR | Returns the day of the year for a given date |
EXTRACT | Extracts a part from a given date |
FROM_DAYS | Returns a date from a numeric datevalue |
HOUR | Returns the hour part for a given date |
LAST_DAY | Extracts the last day of the month for a given date |
LOCALTIME | Returns the current date and time |
LOCALTIMESTAMP | Returns the current date and time |
MAKEDATE | Creates and returns a date based on a year and a number of days value |
MAKETIME | Creates and returns a time based on an hour, minute, and second value |
MICROSECOND | Returns the microsecond part of a time/datetime |
MINUTE | Returns the minute part of a time/datetime |
MONTH | Returns the month part for a given date |
MONTHNAME | Returns the name of the month for a given date |
NOW | Returns the current date and time |
PERIOD_ADD | Adds a specified number of months to a period |
PERIOD_DIFF | Returns the difference between two periods |
QUARTER | Returns the quarter of the year for a given date value |
SECOND | Returns the seconds part of a time/datetime |
SEC_TO_TIME | Returns a time value based on the specified seconds |
STR_TO_DATE | Returns a date based on a string and a format |
SUBDATE | Subtracts a time/date interval from a date and then returns the date |
SUBTIME | Subtracts a time interval from a datetime and then returns the time/datetime |
SYSDATE | Returns the current date and time |
TIME | Extracts the time part from a given time/datetime |
TIME_FORMAT | Formats a time by a specified format |
TIME_TO_SEC | Converts a time value into seconds |
TIMEDIFF | Returns the difference between two time/datetime expressions |
TIMESTAMP | Returns a datetime value based on a date or datetime value |
TO_DAYS | Returns the number of days between a date and date «0000-00-00» |
WEEK | Returns the week number for a given date |
WEEKDAY | Returns the weekday number for a given date |
WEEKOFYEAR | Returns the week number for a given date |
YEAR | Returns the year part for a given date |
YEARWEEK | Returns the year and week number for a given date |
Многочастные именаMultipart Names
Если не указано иное, все ссылки Transact-SQLTransact-SQL на имена объектов базы данных могут быть четырехсоставными именами, записываемыми в следующей форме.Unless specified otherwise, all Transact-SQLTransact-SQL references to the name of a database object can be a four-part name in the following form:
server_name…object_nameserver_name…object_name
| database_name..object_name| database_name..object_name
| schema_name.object_name| schema_name.object_name
| object_name| object_name
server_nameserver_nameУказывает имя связанного или удаленного сервера.Specifies a linked server name or remote server name.
database_namedatabase_nameУказывает имя базы данных SQL ServerSQL Server, если объект хранится на локальном экземпляре SQL ServerSQL Server.Specifies the name of a SQL ServerSQL Server database when the object resides in a local instance of SQL ServerSQL Server. Когда объект находится на связанном сервере, аргумент database_name указывает каталог OLE DB.When the object is in a linked server, database_name specifies an OLE DB catalog.
schema_nameschema_nameЕсли объект находится в базе данных SQL ServerSQL Server, указывает имя схемы, которая содержит объект.Specifies the name of the schema that contains the object if the object is in a SQL ServerSQL Server database. Когда объект находится на связанном сервере, аргумент schema_name указывает имя схемы OLE DB.When the object is in a linked server, schema_name specifies an OLE DB schema name.
object_nameobject_nameСсылается на имя объекта.Refers to the name of the object.
При ссылке на конкретный объект нет необходимости всякий раз указывать сервер, базу данных и схему — компонент Компонент SQL Server Database EngineSQL Server Database Engine попытается определить этот объект.When referencing a specific object, you don’t always have to specify the server, database, and schema for the Компонент SQL Server Database EngineSQL Server Database Engine to identify the object. Однако, если объект не удается найти, возвращается ошибка.However, if the object can’t be found, an error is returned.
Примечание
Чтобы избежать ошибок разрешения имен, при указании объекта области схемы рекомендуется указать имя схемы.To avoid name resolution errors, we recommend specifying the schema name whenever you specify a schema-scoped object.
Чтобы пропустить промежуточные узлы, для обозначения их позиций используйте точки.To omit intermediate nodes, use periods to indicate these positions. В следующей таблице показаны допустимые форматы имен объектов.The following table shows the valid formats of object names.
Формат ссылки на объектObject reference format | ОписаниеDescription |
---|---|
server.database.schema.objectserver.database.schema.object | Четырехчастное имя.Four-part name. |
server.database..objectserver.database..object | Имя схемы пропущено.Schema name is omitted. |
server..schema.objectserver..schema.object | Имя базы данных пропущено.Database name is omitted. |
server…objectserver…object | Имя базы данных и имя схемы пропущены.Database and schema name are omitted. |
database.schema.objectdatabase.schema.object | Имя сервера пропущено.Server name is omitted. |
database..objectdatabase..object | Имя сервера и имя схемы пропущены.Server and schema name are omitted. |
schema.objectschema.object | Имя сервера и имя базы данных пропущены.Server and database name are omitted. |
objectobject | Имена сервера, базы данных и схемы пропущены.Server, database, and schema name are omitted. |
MySQL Advanced Functions
Function | Description |
---|---|
BIN | Returns a binary representation of a number |
BINARY | Converts a value to a binary string |
CASE | Goes through conditions and return a value when the first condition is met |
CAST | Converts a value (of any type) into a specified datatype |
COALESCE | Returns the first non-null value in a list |
CONNECTION_ID | Returns the unique connection ID for the current connection |
CONV | Converts a number from one numeric base system to another |
CONVERT | Converts a value into the specified datatype or character set |
CURRENT_USER | Returns the user name and host name for the MySQL account that the server used to authenticate the current client |
DATABASE | Returns the name of the current database |
IF | Returns a value if a condition is TRUE, or another value if a condition is FALSE |
IFNULL | Return a specified value if the expression is NULL, otherwise return the expression |
ISNULL | Returns 1 or 0 depending on whether an expression is NULL |
LAST_INSERT_ID | Returns the AUTO_INCREMENT id of the last row that has been inserted or updated in a table |
NULLIF | Compares two expressions and returns NULL if they are equal. Otherwise, the first expression is returned |
SESSION_USER | Returns the current MySQL user name and host name |
SYSTEM_USER | Returns the current MySQL user name and host name |
USER | Returns the current MySQL user name and host name |
VERSION | Returns the current version of the MySQL database |
❮ Previous
Next ❯
SQL References
SQL Keywords
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 Functions
String Functions
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
Numeric Functions
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
Date Functions
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
Advanced Functions
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 Functions
String Functions
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
Numeric Functions
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
Date Functions
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Advanced Functions
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access Functions
String Functions
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Numeric Functions
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Date Functions
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Other Functions
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL Quick Ref
Выражение CASE – условный оператор языка SQL
Первая форма: | Вторая форма: |
---|---|
CASE WHEN условие_1 THEN возвращаемое_значение_1 … WHEN условие_N THEN возвращаемое_значение_N END |
CASE проверяемое_значение WHEN сравниваемое_значение_1 THEN возвращаемое_значение_1 … WHEN сравниваемое_значение_N THEN возвращаемое_значение_N END |
Разберем на примере первую форму CASE:
ID | Name | Salary | SalaryTypeWithELSE | SalaryTypeWithoutELSE |
---|---|---|---|---|
1000 | Иванов И.И. | 5000 | ЗП >= 3000 | ЗП >= 3000 |
1001 | Петров П.П. | 1500 | ЗП < 2000 | NULL |
1002 | Сидоров С.С. | 2500 | 2000 <= ЗП < 3000 | 2000 <= ЗП < 3000 |
1003 | Андреев А.А. | 2000 | 2000 <= ЗП < 3000 | 2000 <= ЗП < 3000 |
1004 | Николаев Н.Н. | 1500 | ЗП < 2000 | NULL |
1005 | Александров А.А. | 2000 | 2000 <= ЗП < 3000 | 2000 <= ЗП < 3000 |
Разберем на примере вторую форму CASE:
- Сотрудникам ИТ-отдела выдать по 15% от ЗП;
- Сотрудникам Бухгалтерии по 10% от ЗП;
- Всем остальным по 5% от ЗП.
ID | Name | Salary | DepartmentID | NewYearBonusPercent | BonusAmount |
---|---|---|---|---|---|
1000 | Иванов И.И. | 5000 | 1 | 5% | 250 |
1001 | Петров П.П. | 1500 | 3 | 15% | 225 |
1002 | Сидоров С.С. | 2500 | 2 | 10% | 250 |
1003 | Андреев А.А. | 2000 | 3 | 15% | 300 |
1004 | Николаев Н.Н. | 1500 | 3 | 15% | 225 |
1005 | Александров А.А. | 2000 | NULL | 5% | 100 |
- Первым делом ЗП должны получить сотрудники у кого оклад меньше 2500
- Те сотрудники у кого оклад больше или равен 2500, получают ЗП во вторую очередь
- Внутри этих двух групп нужно упорядочить строки по ФИО (поле Name)
ID | Name | Salary |
---|---|---|
1005 | Александров А.А. | 2000 |
1003 | Андреев А.А. | 2000 |
1004 | Николаев Н.Н. | 1500 |
1001 | Петров П.П. | 1500 |
1000 | Иванов И.И. | 5000 |
1002 | Сидоров С.С. | 2500 |
ID | Name | Salary | DepartmentID | NewYearBonusPercent1 | NewYearBonusPercent2 |
---|---|---|---|---|---|
1000 | Иванов И.И. | 5000 | 1 | 5% | 5% |
1001 | Петров П.П. | 1500 | 3 | 15% | 15% |
1002 | Сидоров С.С. | 2500 | 2 | 10% | 10% |
1003 | Андреев А.А. | 2000 | 3 | 15% | 15% |
1004 | Николаев Н.Н. | 1500 | 3 | 15% | 15% |
1005 | Александров А.А. | 2000 | NULL | — | 5% |
SQL References
SQL Keywords
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 Functions
String Functions
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
Numeric Functions
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
Date Functions
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
Advanced Functions
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 Functions
String Functions
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
Numeric Functions
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
Date Functions
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Advanced Functions
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access Functions
String Functions
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Numeric Functions
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Date Functions
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Other Functions
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL Quick Ref
Introduction
In real life, we make decisions based on the conditions. For example, look at the following conditions.
- If I get a performance bonus this year, I will go for international vacation or else I’ll take a domestic vacation
- If the weather becomes good, I will plan to go on a bike trip or else I won’t
In these examples, we decide as per the conditions. For example, if I get a bonus then only I will go for an international vacation else I will go for domestic vacations. We need to incorporate these conditions-based decisions in programming logic as well. SQL Server provides the capability to execute real-time programming logic using SQL IF Statement.
Поиск системных представленийFind system views
Чтобы найти системные таблицы, представления, функции и процедуры, см. ссылки в разделе Использование реляционных баз данных в документации по SQL.To find the system tables, views, functions, and procedures, see these links which are in the Using relational databases section of the SQL documentation.
- Представления системного каталогаSystem catalog Views
- Представления совместимости системыSystem compatibility views
- Системные динамические административные представленияSystem dynamic management views
- Системные функцииSystem functions
- Системные представления информационной схемыSystem information schema views
- Системные хранимые процедурыSystem stored procedures
- Системные таблицыSystem tables
Функции CASE, IF, IFNULL, COALESCE
Последнее обновление: 26.05.2018
CASE
Функция CASE проверяет истинность набора условий и в зависимости от результата проверки может возвращать тот или иной результат.
Эта функция принимает следующую форму:
CASE WHEN условие_1 THEN результат_1 WHEN условие_2 THEN результат_2 ................................. WHEN условие_N THEN условие_N END
Возьмем для примера следующую таблицу Products:
CREATE TABLE Products ( Id INT AUTO_INCREMENT PRIMARY KEY, ProductName VARCHAR(30) NOT NULL, Manufacturer VARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price DECIMAL NOT NULL );
Выполним запрос к этой таблице и используем функцию CASE:
SELECT ProductName, ProductCount, CASE WHEN ProductCount = 1 THEN 'Товар заканчивается' WHEN ProductCount = 2 THEN 'Мало товара' WHEN ProductCount = 3 THEN 'Есть в наличии' ELSE 'Много товара' END AS Category FROM Products;
Функция IF
Функция IF в зависимости от результата условного выражения возвращает одно из двух значений. Общая форма функции выглядит
следующим образом:
IF(условие, значение_1, значение_2)
Если условие, передаваемое в качестве первого параметра, верно, то возвращается первое значение, иначе возвращается второе значение. Например:
SELECT ProductName, Manufacturer, IF(ProductCount > 3, 'Много товара', 'Мало товара') FROM Products;
IFNULL
Функция IFNULL проверяет значение некоторого выражения. Если оно равно NULL, то функция возвращает значение, которое передается в
качестве второго параметра:
IFNULL(выражение, значение)
Например, возьмем следующую таблицу
CREATE TABLE Clients ( Id INT AUTO_INCREMENT PRIMARY KEY, FirstName VARCHAR(20) NOT NULL, LastName VARCHAR(20) NOT NULL, Phone VARCHAR(20) NULL, Email VARCHAR(20) NULL ); INSERT INTO Clients (FirstName, LastName, Phone, Email) VALUES ('Tom', 'Smith', '+36436734', NULL), ('Bob', 'Simpson', NULL, NULL);
И применим при получении данных функцию IFNULL:
SELECT FirstName, LastName, IFNULL(Phone, 'не определено') AS Phone, IFNULL(Email, 'неизвестно') AS Email FROM Clients;
COALESCE
Функция COALESCE принимает список значений и возвращает первое из них, которое не равно NULL:
COALESCE(выражение_1, выражение_2, выражение_N)
Например, выберем из таблицы Clients пользователей и в контактах у них определим либо телефон, либо электронный адрес, если они не равны NULL:
SELECT FirstName, LastName, COALESCE(Phone, Email, 'не определено') AS Contacts FROM Clients;
То есть в данном случае возвращается телефон, если он определен. Если он не определен, то возвращается электронный адрес. Если и электронный адрес не определен, то возвращается строка «не определено».
Назад
MySQL Программирование
- Типы данных MySQL
- Алиасы в MySQL
- Sequences (последовательности) MySQL
- Литералы
- Объявление переменных
- Комментарии
MySQL Триггеры
Создать триггер MySQL | |
BEFORE INSERT | AFTER INSERT |
BEFORE UPDATE | AFTER UPDATE |
BEFORE DELETE | AFTER DELETE |
Удалить триггер MySQL | |
DROP TRIGGER |
MySQL условия
AND | логический оператор и |
OR | логический оператор или |
AND и OR | логический операторы и & или |
LIKE | сопоставляет данные с шаблоном |
IN | определяет, соответствует ли значение или список значений выражению в указанном наборе |
NOT | логический оператор не |
IS NULL | проверка значения NULL |
IS NOT NULL | проверка на значения NOT NULL |
BETWEEN | используется для получения значений в пределах диапазона |
EXISTS | используется в сочетании с подзапросом (subquery) |
Операторы сравнения MySQL | Такие как =, , , !=, >, >=, |
Пример
Рассмотрим пример, который показывает, как использовать оператор CASE в MySQL. Во-первых, мы рассмотрим первый синтаксис для оператора CASE. Например:
MySQL
DELIMITER //
CREATE FUNCTION CostLevel ( monthly_value INT )
RETURNS varchar(20)
BEGIN
DECLARE cost_level varchar(20);
CASE monthly_value
WHEN 3000 THEN
SET cost_level = ‘Low Cost’;
WHEN 4000 THEN
SET cost_level = ‘Avg Cost’;
ELSE
SET cost_level = ‘High Cost’;
END CASE;
RETURN cost_level;
END; //
DELIMITER ;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
DELIMITER// CREATE FUNCTIONCostLevel(monthly_valueINT) RETURNSvarchar(20) DECLAREcost_levelvarchar(20); CASEmonthly_value WHEN3000THEN
SETcost_level=’Low Cost’; WHEN4000THEN
SETcost_level=’Avg Cost’; ELSE SETcost_level=’High Cost’; END CASE; RETURNcost_level; END;// DELIMITER; |
В этом примере мы использовали первый синтаксис оператора CASE. Если значение month_value будет равно 3000, тогда для cost_level будет установлено значение ‘Low Cost’. Если значение month_value будет равно 4000, то для cost_level будет установлено значение ‘Avg Cost’. В противном случае cost_level достигнет ‘High Cost’. Теперь рассмотрим использование оператор CASE со вторым синтаксисом.
MySQL
DELIMITER //
CREATE FUNCTION CostLevel ( monthly_value INT )
RETURNS varchar(20)
BEGIN
DECLARE cost_level varchar(20);
CASE
WHEN monthly_value <= 3000 THEN
SET cost_level = ‘Low cost’;
WHEN monthly_value > 3000 AND monthly_value <= 6000 THEN
SET cost_level = ‘Avg cost’;
ELSE
SET cost_level = ‘High cost’;
END CASE;
RETURN cost_level;
END; //
DELIMITER ;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
DELIMITER// CREATE FUNCTIONCostLevel(monthly_valueINT) RETURNSvarchar(20) DECLAREcost_levelvarchar(20); CASE WHENmonthly_value<=3000THEN
SETcost_level=’Low cost’; WHENmonthly_value>3000ANDmonthly_value<=6000THEN
SETcost_level=’Avg cost’; ELSE SETcost_level=’High cost’; END CASE; RETURNcost_level; END;// DELIMITER; |
В этом примере мы используем второй синтаксис для оператора CASE. В этом примере, если значение month_value меньше или равно 3000, тогда переменной cost_level будет присвоено ‘Low cost’. Если значение month_value больше 3000 и меньше или равно 6000, тогда cost_level будет присвоено значение ‘Avg cost’. В противном случае cost_level будет присвоено значение ‘High cost’.
Команда WHERE
Команда предназначена для создания условий (фильтров).
используется тогда, когда нужно вывести только те строки, которые соответствуют одному или нескольким условиям.
похожа на условный оператор , который используется во многих языках программирования для создания условий.
применяется только совместно с командами , и .
Синтаксис команды WHERE
SELECT column1, column1, … , columnN FROM table_name WHERE condition;
1 | SELECTcolumn1,column1,…,columnNFROMtable_nameWHEREcondition; |
Рассмотрим несколько примеров создания условий.
Выведем все книги, которые написал Лев Толстой.
Выведем все книги, доступное количество которых равно трём.
Подведем итоги
Конструкция/Блок | Порядок выполнения | Выполняемая функция |
---|---|---|
SELECT возвращаемые выражения | 4 | Возврат данных полученных запросом |
FROM источник | В нашем случае это пока все строки таблицы | |
WHERE условие выборки из источника | 1 | Отбираются только строки, проходящие по условию |
GROUP BY выражения группировки | 2 | Создание групп по указанному выражению группировки. Расчет агрегированных значений по этим группам, используемых в SELECT либо HAVING блоках |
HAVING фильтр по сгруппированным данным | 3 | Фильтрация, накладываемая на сгруппированные данные |
ORDER BY выражение сортировки результата | 5 | Сортировка данных по указанному выражению |
SalaryAmount |
---|
5000 |
SalaryAmount |
---|
2000 |
2500 |
5000 |