Select — for, предложение (transact-sql)
Содержание:
Предложение WHERE
После служебного слова указываются условия выбора строк, помещаемых в результирующую таблицу. Существуют различные типы условий выбора:
Типы условий выбора:
- Сравнение значений атрибутов со скалярными выражениями, другими атрибутами или результатами вычисления выражений.
- Проверка значения на принадлежность множеству.
- Проверка значения на принадлежность диапазону.
- Проверка строкового значения на соответствие шаблону.
- Проверка на наличие null-значения.
Сравнение
В языке SQL используются традиционные операции сравнения ,,,,,.
В качестве условия в предложении можно использовать сложные логические выражения, использующие атрибуты таблиц, константы, скобки, операции , , отрицание .
Пример 5.Определить номера деталей, поставляемых поставщиком с номером 2.
Пример 6.Получить информацию о поставщиках Иванов и Петров.
Строковые значения атрибутов заключаются в апострофы.
Проверка на принадлежность множеству
Операция проверяет, принадлежит ли значение атрибута заданному множеству.
Пример 7.Получить информацию о поставщиках ‘Иванов’ и ‘Петров’.
Пример 8.Получить информацию о деталях с номерами 1 и 2.
Проверка на принадлежность диапазону
Операция определяет минимальную и максимальную границу диапазона, в которое должно попадать значение атрибута. Обе границы считаются принадлежащими диапазону.
Пример 9.Определить номера деталей, с ценой от 10 до 20 рублей.
Пример 10.Вывести наименования поставщиков, начинающихся с букв от ‘К’ по ‘П’.
Сравнение символов
Буква ‘Р’ в условии запроса объясняется тем, что строки сравниваются посимвольно. Для каждого символа при этом определяется код. Для нашего случая справедливо условие: ‘П’<‘Петров’<‘Р’
Проверка строкового значения на соответствие шаблону
Операция используется для поиска подстрок. Значения столбца, указываемого перед служебным словом сравниваются с задаваемым после него шаблоном. Форматы шаблонов различаются в конкретных СУБД.
Для СУБД MS SQL Server:
- Символ заменяет любое количество любых символов.
- Символ заменяет один любой символ.
- ‑ вместо символа строки может быть подставлен один любой символ из множества возможных, указанных в ограничителях.
- ‑ вместо символа строки может быть подставлен любой из символов кроме символов из множества, указанного в ограничителях.
Множество символов в квадратных скобках можно указывать через запятую, либо в виде диапазона.
Пример 11.Вывести фамилии поставщиков, начинающихся с буквы ‘И’.
Пример 12.Вывести фамилии поставщиков, начинающихся с букв от ‘К’ по ‘П’.
Проверка на наличие null-значения
Операции и используются для сравнения значения атрибута со значением .
Пример 13.Определить наименования деталей, для которых не указана цена.
Пример 14.Определить номера поставщиков, для которых указано наименование.
SYNOPSIS top
#include <sys/select.h> int select(int nfds, fd_set *restrict readfds, fd_set *restrict writefds, fd_set *restrict exceptfds, struct timeval *restrict timeout); void FD_CLR(int fd, fd_set *set); int FD_ISSET(int fd, fd_set *set); void FD_SET(int fd, fd_set *set); void FD_ZERO(fd_set *set); int pselect(int nfds, fd_set *restrict readfds, fd_set *restrict writefds, fd_set *restrict exceptfds, const struct timespec *restrict timeout, const sigset_t *restrict sigmask); Feature Test Macro Requirements for glibc (see feature_test_macros(7)): pselect(): _POSIX_C_SOURCE >= 200112L
Подзапросы
На выходе подзапрос должен возвращать одно единственное значение (для страховки можно принудительно указывать LIMIT 1). Допускается использование подзапросов, которые на выходе выдают ряд значений, для оператора IN.
Операторы EXISTS, ANY(ANY и SOME абсолютно идентичны и являются взаимозаменяемыми),ALL умеют работать с множеством значений.
-
Пример. Использования подзапроса с оператором INSERT. В таблицу df_lcr_list передаются два значения(datestart и dateend), login_id ищется подзапросом по заранее известному имени пользователя, в таблицу вставляется текущее время.
INSERT INTO df_lcr_list (datestart,dateend,login_id, date_event) SELECT '20120405','20120405',id, now() FROM users WHERE login='username';
-
Пример. Использования подзапроса(subquery) с оператором UPDATE. Subquery выводит множество значений.
UPDATE accounts SET balance=0 WHERE uid IN (SELECT id FROM users WHERE email LIKE 'ltaixp1%');
Синтаксис
Простой синтаксис для оператора SELECT в MySQL:
SELECT expressions
FROM tables
;
Полный синтаксис для оператора SELECT в MySQL:
SELECT
expressions
FROM tables
]
number_rows | LIMIT number_rows OFFSET offset_value]
;
Параметры или аргументы
ALL — необязательный. Возвращает все совпадающие строкиDISTINCT — необязательный. Удаляет дубликаты из набора результатов. Подробнее о DISTINCT.DISTINCTROW — необязательный. Синоним DISTINCT. Удаляет дубликаты из набора результатов.HIGH_PRIORITY — необязательный. Он сообщает MySQL, что он запускает SELECT перед любыми операторами UPDATE, ожидающими того же ресурса. Он может использоваться с таблицами MyISAM, MEMORY и MERGE, которые используют блокировку на уровне таблицы.STRAIGHT_JOIN — необязательный. Он сообщает MySQL о соединении таблиц в том порядке, в котором они перечислены в предложении FROM.SQL_SMALL_RESULT — необязательный. Использует быстрые временные таблицы для хранения результатов (используется с DISTINCT и GROUP BY).SQL_BIG_RESULT — необязательный. Предпочитает сортировку, а не временную таблицу для хранения результатов (используется с DISTINCT и GROUP BY).SQL_BUFFER_RESULT — необязательный. Использует временные таблицы для хранения результатов (не может использоваться с подзапросами).SQL_CACHE — необязательный. Сохраняет результаты в кеше запросов.SQL_NO_CACHE — необязательный. Не сохраняет результаты в кеше запросов.SQL_CALC_FOUND_ROWS — необязательный
Вычисляет, сколько записей находится в результирующем наборе (не принимая во внимание атрибут LIMIT), который затем можно получить с помощью функции FOUND_ROWS.expressions — столбцы или вычисления, которые вы хотите получить. Используйте *, если вы хотите выбрать все столбцы.tables — таблицы, из которых вы хотите получить записи
Должна быть хотя бы одна таблица, перечисленная в предложении FROM.WHERE conditions — необязательный. Условия, которые должны быть выполнены для выбранных записей.GROUP BY expressions — необязательный. Он собирает данные по нескольким записям и группирует результаты по одному или нескольким столбцам. Подробнее о GROUP BY.HAVING condition — необязательный. Он используется в сочетании с GROUP BY, чтобы ограничить группы возвращаемых строк только теми, чье условие TRUE. Подробнее о HAVING.ORDER BY expression — необязательный. Он используется для сортировки записей в вашем результирующем наборе. Подробнее о ORDER BY.LIMIT — необязательный. Если LIMIT указан, то он контролирует максимальное количество извлекаемых записей. Максимальное количество записей, заданных number_rows, будет возвращено в результирующем наборе. Первая строка, возвращаемая LIMIT, будет определяться значением offset_value.PROCEDURE — необязательный. Если указано, то — это имя процедуры, которая должна обрабатывать данные в результирующем наборе.INTO — необязательный. Если указан, это позволяет вам записать результирующий набор в файл или переменную.
Значение | Пояснение |
---|---|
INTO OUTFILE ‘filename’ options |
«Записывает результирующий набор в файл с именем filename на хосте сервера. Для параметров вы можете указать: FIELDS ESCAPED BY ‘character’ FIELDS TERMINATED BY ‘character’ LINES TERMINATED BY ‘character’ где character — символ, отображаемый как символ ESCAPE, ENCLOSED или TERMINATED. Например: SELECT supplier_id, supplier_name FROM suppliers INTO OUTFILE ‘results.txt’ FIELDS TERMINATED BY ‘,’ OPTIONALLY ENCLOSED BY ‘»»‘ LINES TERMINATED BY ‘\n’;» |
INTO DUMPFILE ‘filename’ |
Записывает одну строку набора результатов в файл с именем filename на хосте сервера. С помощью этого метода не происходит прерывания столбца, не прерывается линия или обработка перехода. |
INTO @variable1, @variable2, … @variable_n |
Записывает набор результатов в одну или несколько переменных, как указано в параметрах @ variable1, @ variable2, … @variable_n |
FOR UPDATE — необязательный. Записи, затронутые запросом, блокируются, пока транзакция не завершится.LOCK IN SHARE MODE — необязательный. Записи, затронутые запросом, могут использоваться другими транзакциями, но не могут быть обновлены или удалены этими и другими транзакциями.
Select and Filter Data With MySQLi
The following example selects the id, firstname and lastname columns from the MyGuests
table where the lastname is «Doe», and displays it on the page:
Example (MySQLi Object-oriented)
<?php$servername = «localhost»;$username = «username»;$password = «password»;$dbname = «myDB»;// Create connection$conn = new mysqli($servername, $username, $password, $dbname);// Check connectionif ($conn->connect_error) { die(«Connection failed: » . $conn->connect_error);
} $sql = «SELECT id, firstname, lastname FROM MyGuests WHERE
lastname=’Doe'»;$result = $conn->query($sql);if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo «id: » . $row. » — Name: » . $row. » » . $row. «<br>»;
}} else { echo «0 results»;}
$conn->close();
?>
Code lines to explain from the example above:
First, we set up the SQL query that selects the id, firstname and lastname columns from the MyGuests
table where the lastname is «Doe». The next line of code runs the query and puts the resulting data into a
variable called $result.
Then, the checks if there are more than zero
rows returned.
If there are more than zero rows returned, the
function puts all the results into an associative array that we can loop
through. The loop loops through the result set and outputs the data from
the id, firstname and lastname columns.
The following example shows the same as the example above, in the MySQLi procedural way:
Example (MySQLi Procedural)
<?php$servername = «localhost»;$username = «username»;$password = «password»;$dbname = «myDB»;// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die(«Connection failed: » . mysqli_connect_error());}$sql = «SELECT id, firstname, lastname FROM MyGuests
WHERE lastname=’Doe'»;$result = mysqli_query($conn, $sql);if (mysqli_num_rows($result) > 0) { // output data of each row
while($row = mysqli_fetch_assoc($result)) { echo «id: » . $row. » — Name: » . $row. » » . $row. «<br>»;
}} else { echo «0 results»;}mysqli_close($conn);
?>
You can also put the result in an HTML table:
Example (MySQLi Object-oriented)
<?php$servername = «localhost»;$username = «username»;$password = «password»;$dbname = «myDB»;// Create connection$conn = new mysqli($servername, $username, $password, $dbname);// Check connectionif ($conn->connect_error) { die(«Connection failed: » . $conn->connect_error);
} $sql = «SELECT id, firstname, lastname FROM MyGuests WHERE
lastname=’Doe'»;$result = $conn->query($sql);if ($result->num_rows > 0) { echo «<table><tr><th>ID</th><th>Name</th></tr>»;
// output data of each row while($row = $result->fetch_assoc()) { echo «<tr><td>».$row.»</td><td>».$row.» «.$row.»</td></tr>»;
} echo «</table>»;} else { echo «0 results»;}
$conn->close();
?>
Практическое упражнение №2
На основании таблицы suppliers ниже, выберите уникальные значения city, которые находятся в штате Florida и упорядочить результаты в порядке убывания по city (городам):
Oracle PL/SQL
—создаем таблицу suppliers
CREATE TABLE suppliers
( supplier_id int NOT NULL,
supplier_name char(50) NOT NULL,
city char(50),
state char(25),
CONSTRAINT suppliers_pk PRIMARY KEY (supplier_id)
);
—вставляем записи в таблицу suppliers
insert into suppliers values (1,’Mari’,’Houston’,’Texas’);
insert into suppliers values (2,’Frida’,’ Melbourne’, ‘Florida’);
insert into suppliers values (3,’Madlen’,’Phoenix’,’Arizona’);
insert into suppliers values (4,’Valentina’,’San Diego’,’California’);
insert into suppliers values (5,’Amba’,’Jacksonville’,’Florida’);
1 |
—создаем таблицу suppliers CREATETABLEsuppliers supplier_namechar(50)NOTNULL, citychar(50), statechar(25), CONSTRAINTsuppliers_pkPRIMARYKEY(supplier_id) insertintosuppliersvalues(1,’Mari’,’Houston’,’Texas’); insertintosuppliersvalues(2,’Frida’,’ Melbourne’,’Florida’); insertintosuppliersvalues(3,’Madlen’,’Phoenix’,’Arizona’); insertintosuppliersvalues(4,’Valentina’,’San Diego’,’California’); insertintosuppliersvalues(5,’Amba’,’Jacksonville’,’Florida’); |
Содержимое таблицы suppliers:
supplier_id | supplier_name | city | state |
---|---|---|---|
1 | Mari | Houston | Texas |
2 | Frida | Philadelphia | Pennsylvania |
3 | Madlen | Phoenix | Arizona |
4 | Valentina | SanDiego | California |
5 | Amba | Jacksonville | Florida |
SQL SELECT statement
SQL SELECT statement is used to select data from a database table or tables. In this tutorial, we’ll learn how SELECT SQL works and different options used with SELECT statement.
SQL SELECT statement is used to select records from an RDBMS( Relational Database Management System) data table. The SELECT statement can select all records, select a set of records based on a condition, filter records, sort records, group by records and more.
Here are some of the use cases of the SQL SELECT statement.
- SQL Select *
- SQL Select Distinct
- SQL Select Where
- SQL Select Having
- SQL Select Order By
- SQL Select And, Or, Not
- SQL Select Insert Into
- Nested SQL Select
- SQL Select with Case
- SQL Select with If…Then
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
Примеры SQL INSERT INTO SELECT
Следующая инструкция SQL копирует «Suppliers» в «Customers» (столбцы, которые не заполнены данными, будут содержать NULL):
Пример
INSERT INTO Customers (CustomerName,
City, Country)
SELECT SupplierName, City, Country FROM Suppliers;
Следующая инструкция SQL копирует «Suppliers» в «Customers» (заполните все столбцы):
Пример
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode,
Country)SELECT SupplierName, ContactName, Address, City, PostalCode,
Country FROM Suppliers;
Следующая инструкция SQL копирует только немецких поставщиков в раздел «Customers»:
Пример
INSERT INTO Customers (CustomerName,
City, Country)
SELECT SupplierName, City, Country FROM SuppliersWHERE Country=’Germany’;
Подзапросы SQL с инструкцией DELETE
Ниже приводится синтаксис и пример использования SQL подзапросов с инструкцией DELETE.
Синтаксис:
DELETE FROM TABLE_NAME (SELECT COLUMN_NAME FROM TABLE_NAME)
Если нужно удалить заказы из таблицы «neworder», для которых advance_amount меньше максимального значения advance_amount из таблицы «orders», можно использовать следующий код SQL:
Пример таблицы: neworder
ORD_NUM ORD_AMOUNT ADVANCE_AMOUNT ORD_DATE CUST_CODE AGENT_CODE ORD_DESCRIPTION ---------- ---------- -------------- --------- --------------- --------------- ----------------- 200114 3500 2000 15-AUG-08 C00002 A008 200122 2500 400 16-SEP-08 C00003 A004 200118 500 100 20-JUL-08 C00023 A006 200119 4000 700 16-SEP-08 C00007 A010 200121 1500 600 23-SEP-08 C00008 A004 200130 2500 400 30-JUL-08 C00025 A011 200134 4200 1800 25-SEP-08 C00004 A005 200108 4000 600 15-FEB-08 C00008 A004 200103 1500 700 15-MAY-08 C00021 A005 200105 2500 500 18-JUL-08 C00025 A011 200109 3500 800 30-JUL-08 C00011 A010 200101 3000 1000 15-JUL-08 C00001 A008 200111 1000 300 10-JUL-08 C00020 A008 200104 1500 500 13-MAR-08 C00006 A004 200106 2500 700 20-APR-08 C00005 A002 200125 2000 600 10-OCT-08 C00018 A005 200117 800 200 20-OCT-08 C00014 A001 200123 500 100 16-SEP-08 C00022 A002 200120 500 100 20-JUL-08 C00009 A002 200116 500 100 13-JUL-08 C00010 A009 200124 500 100 20-JUN-08 C00017 A007 200126 500 100 24-JUN-08 C00022 A002 200129 2500 500 20-JUL-08 C00024 A006 200127 2500 400 20-JUL-08 C00015 A003 200128 3500 1500 20-JUL-08 C00009 A002 200135 2000 800 16-SEP-08 C00007 A010 200131 900 150 26-AUG-08 C00012 A012 200133 1200 400 29-JUN-08 C00009 A002 200100 1000 600 08-JAN-08 C00015 A003 200110 3000 500 15-APR-08 C00019 A010 200107 4500 900 30-AUG-08 C00007 A010 200112 2000 400 30-MAY-08 C00016 A007 200113 4000 600 10-JUN-08 C00022 A002 200102 2000 300 25-MAY-08 C00012 A012
Код SQL:
DELETE FROM neworder WHERE advance_amount< (SELECT MAX(advance_amount) FROM orders);
Результат:
Пожалуйста, оставляйте ваши мнения по текущей теме статьи. Мы очень благодарим вас за ваши комментарии, лайки, подписки, дизлайки, отклики!
Вадим Дворниковавтор-переводчик статьи «SQL Subqueries»
Решение для практического упражнения № 3:
Следующий Oracle оператор SELECT выберет записи из таблиц suppliers и orders (с помощью SQL INNER JOIN):
Oracle PL/SQL
SELECT suppliers.supplier_id,
suppliers.supplier_name,
orders.order_date
FROM suppliers
INNER JOIN orders
ON suppliers.supplier_id = orders.supplier_id
ORDER BY supplier_id DESC;
1 |
SELECTsuppliers.supplier_id, suppliers.supplier_name, orders.order_date FROMsuppliers INNERJOINorders ONsuppliers.supplier_id=orders.supplier_id ORDERBYsupplier_idDESC; |
В результате выборки получим:
supplier_id | supplier_name | order_date |
---|---|---|
5 | Amba | 12.01.2016 |
3 | Madlen | 12.02.2015 |
1 | Mari | 05.05.2014 |
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
Как устроен компонент Select
Компонент Select построен с использованием HTML, CSS и JavaScript.
HTML код компонента Select:
<div class="select"> <button type="button" class="select__toggle" name="car" value="" data-select="toggle" data-index="-1">Выберите из списка</button> <div class="select__dropdown"> <ul class="elect__options"> <li class="elect__option" data-select="option" data-value="volkswagen" data-index="0">Volkswagen</li> <li class="elect__option elect__option_selected" data-select="option" data-value="ford" data-index="1">Ford</li> <li class="elect__option" data-select="option" data-value="toyota" data-index="2">Toyota</li> </ul> </div> </div>
Элемент с классом определяет этот компонент. В нём находится вся HTML-структура селекта. Тег с классом и атрибутами , предназначен для отображения выбранного значения и открытия при нажатии на него выдающего списка с опциями. Само выпадающее меню реализовано посредством элемента . Оно с помощью CSS настраивается так, чтобы оно было расположено под . Список вариантов () организован посредством маркированного списка. Выбранный элемент в нём отмечается посредством добавления к нему класса .
Кроме непосредственной вставки HTML кода на страницу, предоставим также возможность создавать его автоматически с помощью JavaScript. Таким образом, на страницу будет достаточно поместить пустой элемент и инициализировать его как CustomSelect. Как устроен JavaScript код приведём ниже.
Классы элементов будем использовать в CSS для добавления к ним стилей, а data атрибуты — в JavaScript.
CSS стили компонента Select можно посмотреть на GitHub.
Для обёртки установлено относительное позиционирование. Это необходимо для того, чтобы выпадающее меню можно было позиционировать относительно неё.
.select { position: relative; ... }
Элемент с классом стилизуем в виде кнопки (текущий вариант в ней будем выводить как её содержимое).
.select__toggle { display: flex; background-color: #fff; border: 1px solid #ccc; border-radius: 0.3125rem; cursor: pointer; align-items: center; width: 100%; font-size: 1rem; padding: 0.375rem 0.75rem; line-height: 1.4; user-select: none; font-size: 1rem; justify-content: space-between; font-style: italic; }
Иконку к кнопке добавим через псевдоэлемент :
.select__toggle::after { content: ''; width: 0.75rem; height: 0.75rem; background-size: cover; background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" height="100" width="100"%3E%3Cpath d="M97.625 25.3l-4.813-4.89c-1.668-1.606-3.616-2.41-5.84-2.41-2.27 0-4.194.804-5.777 2.41L50 52.087 18.806 20.412C17.223 18.805 15.298 18 13.03 18c-2.225 0-4.172.804-5.84 2.41l-4.75 4.89C.813 26.95 0 28.927 0 31.23c0 2.346.814 4.301 2.439 5.865l41.784 42.428C45.764 81.174 47.689 82 50 82c2.268 0 4.215-.826 5.84-2.476l41.784-42.428c1.584-1.608 2.376-3.563 2.376-5.865 0-2.26-.792-4.236-2.375-5.932z"/%3E%3C/svg%3E'); }
По умолчанию dropdown меню не будет показываться. Включение его отображения будем осуществлять посредством добавления к нему класса :
При этом при показе dropdown меню иконку будем поворачивать на 180 градусов посредством CSS трансформации:
CSS код для стилизации dropdown меню:
Стилизация при наведении на пункт меню:
JavaScript код компонента доступен на GitHub. Его можно открыть, используя эту ссылку.
Код написан с использованием класса:
Свойства и методы, которые не нужно использовать вне класса, начинаются с нижнего подчеркивания:
Подчеркивание перед именем — это общепринятое соглашение для именования свойств и методов, которые используются только внутри класса, обращаться к ним вне его не нужно.
Структура JavaScript кода: