Set operators — union (transact-sql)

Содержание:

A.A. 使用 SELECT 擷取資料列和資料行Using SELECT to retrieve rows and columns

下列範例會顯示三個程式碼範例。The following example shows three code examples. 第一個程式碼範例會從 AdventureWorks2012AdventureWorks2012 資料庫的 資料表中,傳回所有資料列 (未指定 WHERE 子句) 和所有資料行 (使用 )。This first code example returns all rows (no WHERE clause is specified) and all columns (using the ) from the table in the AdventureWorks2012AdventureWorks2012 database.

這個範例會從 AdventureWorks2012AdventureWorks2012 資料庫的 資料表中,傳回所有資料列 (未指定 WHERE 子句),但只傳回資料行子集 (、、)。This example returns all rows (no WHERE clause is specified), and only a subset of the columns (, , ) from the table in the AdventureWorks2012AdventureWorks2012 database. 另外,也會加入一個資料行標題。Additionally, a column heading is added.

這個範例只傳回產品行是 且製造天數小於 天的 資料列。This example returns only the rows for that have a product line of and that have days to manufacture that is less than .

S.S. 利用三個 SELECT 陳述式的 UNION 來顯示 ALL 和括號的作用Using UNION of three SELECT statements to show the effects of ALL and parentheses

下列範例會利用 來結合有 5 個相同資料列的三份資料表的結果。The following examples use to combine the results of three tables that all have the same 5 rows of data. 第一個範例利用 來顯示重複的記錄,以及傳回所有的 15 個資料列。The first example uses to show the duplicated records, and returns all 15 rows. 第二個範例利用不含 的 來刪除三個 陳述式之組合結果中重複的資料列,並傳回 5 個資料列。The second example uses without to eliminate the duplicate rows from the combined results of the three statements, and returns 5 rows.

第三個範例搭配第一個 來使用 ,用括號括住未使用 的第二個 。The third example uses with the first and parentheses enclose the second that is not using . 第二個 會先處理,因為它在括號中,且會傳回 5 個資料列,因為並未使用 選項,複本會移除。The second is processed first because it is in parentheses, and returns 5 rows because the option is not used and the duplicates are removed. 這 5 個資料列利用 關鍵字,與第一個 的結果結合起來。These 5 rows are combined with the results of the first by using the keywords. 這並不會在兩組 5 個資料列之間移除複本。This does not remove the duplicates between the two sets of 5 rows. 最終結果有 10 個資料列。The final result has 10 rows.

Логический порядок обработки инструкции SELECTLogical Processing Order of the SELECT statement

Следующие действия демонстрируют логический порядок обработки или порядок привязки инструкции SELECT.The following steps show the logical processing order, or binding order, for a SELECT statement. Этот порядок определяет, когда объекты, определенные в одном шаге, становятся доступными для предложений в последующих шагах.This order determines when the objects defined in one step are made available to the clauses in subsequent steps. Например, если обработчик запросов можно привязать (для доступа) к таблицам или представлениям, определенным в предложении FROM, эти объекты и их столбцы становятся доступными для всех последующих шагов.For example, if the query processor can bind to (access) the tables or views defined in the FROM clause, these objects and their columns are made available to all subsequent steps. И наоборот, поскольку предложение SELECT является шагом 8, любые псевдонимы столбцов или производных столбцов, определенные в этом предложении, не могут быть объектом для ссылки предыдущих предложений.Conversely, because the SELECT clause is step 8, any column aliases or derived columns defined in that clause cannot be referenced by preceding clauses. Вместе с тем к ним могут обращаться последующие предложения, например предложение ORDER BY.However, they can be referenced by subsequent clauses such as the ORDER BY clause. Фактическое физическое выполнение инструкции определяется обработчиком запросов и порядок из этого списка может значительно отличаться.The actual physical execution of the statement is determined by the query processor and the order may vary from this list.

  1. FROMFROM
  2. ONON
  3. JOINJOIN
  4. WHEREWHERE
  5. GROUP BYGROUP BY
  6. WITH CUBE или WITH ROLLUPWITH CUBE or WITH ROLLUP
  7. HAVINGHAVING
  8. SELECTSELECT
  9. DISTINCTDISTINCT
  10. ORDER BYORDER BY
  11. В началоTOP

Предупреждение

Как правило, применяется предыдущая последовательность.The preceding sequence is usually true. Однако в редких случаях может быть указана другая последовательность.However, there are uncommon cases where the sequence may differ.

Например, предположим, что в представлении есть кластеризованный индекс и представление исключает некоторые строки таблицы, а для списка столбцов SELECT представления используется инструкция CONVERT, которая изменяет тип данных с varchar на integer.For example, suppose you have a clustered index on a view, and the view excludes some table rows, and the view’s SELECT column list uses a CONVERT that changes a data type from varchar to integer. В этом случае CONVERT может выполняться до выполнения предложения WHERE.In this situation, the CONVERT may execute before the WHERE clause executes. Это нестандартное поведение.Uncommon indeed. Если это имеет значение в вашем случае, можно изменить представление, чтобы исключить использование другой последовательности.Often there is a way to modify your view to avoid the different sequence, if it matters in your case.

Obtaining and Using MySQL Metadata

There are three types of information, which you would like to have from MySQL.

  • Information about the result of queries − This includes the number of records affected by any SELECT, UPDATE or DELETE statement.

  • Information about the tables and databases − This includes information pertaining to the structure of the tables and the databases.

  • Information about the MySQL server − This includes the status of the database server, version number, etc.

It is very easy to get all this information at the MySQL prompt, but while using PERL or PHP APIs, we need to call various APIs explicitly to obtain all this information.

Выборка данных. Команда SELECT

Последнее обновление: 13.07.2017

Для получения данных применяется команда SELECT. В упрощенном виде она имеет следующий синтаксис:

SELECT список_столбцов FROM имя_таблицы

Например, пусть ранее была создана таблица Products, и в нее добавлены некоторые начальные данные:

CREATE TABLE Products
(
	Id INT IDENTITY PRIMARY KEY,
	ProductName NVARCHAR(30) NOT NULL,
	Manufacturer NVARCHAR(20) NOT NULL,
	ProductCount INT DEFAULT 0,
	Price MONEY NOT NULL
);

INSERT INTO Products 
VALUES 
('iPhone 6', 'Apple', 3, 36000),
('iPhone 6S', 'Apple', 2, 41000),
('iPhone 7', 'Apple', 5, 52000),
('Galaxy S8', 'Samsung', 2, 46000),
('Galaxy S8 Plus', 'Samsung', 1, 56000),
('Mi6', 'Xiaomi', 5, 28000),
('OnePlus 5', 'OnePlus', 6, 38000)

Получим все объекты из этой таблицы:

SELECT * FROM Products

Символ звездочка * указывает, что нам надо получить все столбцы.

Получение всех столбцов с помощью символа звездочки * считается не очень хорошей практикой, так как, как правило, не все столбцы бывают нужны. И более
оптимальный подход заключается в указании всех необходимых столбцов после слова SELECT. Исключение составляет тот случай, когда надо получить данные по абсолютно всем столбцам таблицы.
Также использование символа * может быть предпочтительно в таких ситуациях, когда в точности не известны названия столбцов.

Если нам надо получить данные не по всем, а по каким-то конкретным столбцам, то тогда все эти спецификации столбцов перечисляются через запятую после SELECT:

SELECT ProductName, Price FROM Products

Спецификация столбца необязательно должна представлять его название. Это может быть любое выражение, например, результат арифметической операции.
Так, выполним следующий запрос:

SELECT ProductName + ' (' + Manufacturer + ')', Price, Price * ProductCount 
FROM Products

Здесь при выборке будут создаваться три столбца. Первый столбец представляет результат объединения двух столбцов ProductName и
Manufacturer. Второй столбец — стандартный столбец Price. А третий столбец представляет значение столбца Price, умноженное на значение столбца ProductCount.

С помощью оператора AS можно изменить название выходного столбца или определить его псевдоним:

SELECT 
ProductName + ' (' + Manufacturer + ')' AS ModelName, 
Price,  
Price * ProductCount AS TotalSum
FROM Products

В данном случае результатом выборки являются данные по 3-м столбцам. Первый столбец ModelName объединяет столбцы
ProductName и Manufacturere, второй представляет стандартный столбец Price. Третий столбец TotalSum хранит произведение столбцов
ProductCount и Price. При этом, как в случае со столбцом Price, необязательно определять название результирующего столбца с помощью AS.

DISTINCT

Оператор DISTINCT позволяет выбрать уникальные строки. Например, в нашем случае в таблице может быть по несколько товаров
от одних и тех же производителей. Выберем всех производителей:

SELECT DISTINCT Manufacturer
FROM Products

В данном случае критерием разграничения строк является столбец Manufacturer. Поэтому в результирующей выборке будут только уникальные
значения Manufacturer. И если, к примеру, в базе данных есть два товара с производителем Apple, то это название будет встречаться в результирующей выборке только один раз.

SELECT INTO

Выражение SELECT INTO позволяет выбрать из одной таблицы некоторые данные в другую таблицу, при этом вторая таблица создается автоматически.
Например:

SELECT ProductName + ' (' + Manufacturer + ')' AS ModelName, Price
INTO ProductSummary
FROM Products

SELECT * FROM ProductSummary

После выполнения этой команды в базе данных будет создана еще одна таблица ProductSummary, которая будет иметь два столбца
ModelName и Price, а данные для этих столбцов будут взяты из таблицы Products:

При выполнении этой команды таблица, в которую идет выборка (в данном случае ProductSummary), не должна существовать в базе данных.

Но, допустим, мы потом решили добавить все данные из таблицы Products в уже существующую таблицу ProductSummary.
В этом случае можно опять же использовать команду INSERT:

INSERT INTO ProductSummary
SELECT ProductName + ' (' + Manufacturer + ')' AS ModelName, Price
FROM Products

Здесь добавляемые значения фактически представляют результат выборки из таблицы Products.

НазадВперед

另請參閱See Also

CREATE TRIGGER (Transact-SQL) CREATE TRIGGER (Transact-SQL) CREATE VIEW (Transact-SQL) CREATE VIEW (Transact-SQL) DELETE (Transact-SQL) DELETE (Transact-SQL) EXECUTE (Transact-SQL) EXECUTE (Transact-SQL) 運算式 (Transact-SQL) Expressions (Transact-SQL) INSERT (Transact-SQL) INSERT (Transact-SQL) LIKE (Transact-SQL) LIKE (Transact-SQL) UNION (Transact-SQL) UNION (Transact-SQL) EXCEPT 和 INTERSECT (Transact-SQL) EXCEPT and INTERSECT (Transact-SQL) UPDATE (Transact-SQL) UPDATE (Transact-SQL) WHERE (Transact-SQL) WHERE (Transact-SQL) PathName (Transact-SQL) PathName (Transact-SQL) INTO 子句 (Transact-SQL)INTO Clause (Transact-SQL)

SELECT INTO

The command copies data
from one table and inserts it into a new table.

The following SQL statement creates a backup copy of Customers:

SELECT * INTO CustomersBackup2017
FROM Customers;

The following SQL statement uses the IN clause to copy the table into a new
table in another database:

SELECT *
INTO CustomersBackup2017 IN ‘Backup.mdb’
FROM Customers;

The following SQL statement copies only a few columns into a new table:

SELECT CustomerName, ContactName INTO CustomersBackup2017
FROM Customers;

The following SQL statement copies only the German customers into a new table:

SELECT *
INTO CustomersGermany
FROM Customers
WHERE Country = ‘Germany’;

The following SQL statement copies data from more than one table into a new table:

SELECT Customers.CustomerName, Orders.OrderIDINTO CustomersOrderBackup2017
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;

С помощью SELECT … INTO OUTFILE заявления для экспорта данных

Ниже приведены примеры, мы будем экспортировать данные в таблицу данных w3big_tbl /tmp/tutorials.txt файла:

mysql> SELECT * FROM w3big_tbl 
    -> INTO OUTFILE '/tmp/tutorials.txt';

Вы можете установить формат вывода данных, указанных опций команды, следующие примеры экспортируются в формате CSV:

mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/tutorials.txt'
    -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
    -> LINES TERMINATED BY '\r\n';

В следующем примере создается файл, значения, разделенные запятыми. Этот формат используется несколькими программами.

SELECT a,b,a+b INTO OUTFILE '/tmp/result.text'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;

SELECT … INTO OUTFILE заявление обладает следующими свойствами:

  • LOAD DATA INFILE SELECT … INTO OUTFILE является обратная операция, SELECT синтаксис. Для того, чтобы записать данные в базу данных в файле, используйте SELECT … INTO OUTFILE, чтобы прочитать файл обратно в базу данных, использование команды LOAD DATA INFILE.
  • SELECT … INTO ‘file_name’ OUTFILE форма выбора строк можно выбрать записи файла. Файл создается на хосте сервера, поэтому вы должны иметь привилегию FILE, чтобы использовать этот синтаксис.
  • Выходной файл не является файлом, который уже существует. Файл защитить данные от подделки.
  • Вам нужно иметь сервер Логин учетной записи, чтобы получить файл. В противном случае SELECT … INTO OUTFILE не будет играть никакой роли.
  • В UNIX, после того, как файл создан для чтения привилегии, принадлежащие серверу MySQL. Это означает, что, хотя вы можете прочитать файл, но не могут быть удалены.

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 OperatorsSQL Data TypesSQL Quick Ref

Примеры:Examples:

В следующих примерах используется база данных AdventureWorksPDW2012AdventureWorksPDW2012.The following examples use the AdventureWorksPDW2012AdventureWorksPDW2012 database.

В этом разделе приведены три примера кода.This section shows three code examples. В ходе выполнения первого примера кода возвращаются все строки (предложение WHERE не указано), а также все столбцы (используется ) таблицы .This first code example returns all rows (no WHERE clause is specified) and all columns (using the ) from the table.

В этом примере для достижения такого же результата используется присвоение псевдонима таблице.This next example using table aliasing to achieve the same result.

В ходе выполнения данного примера кода возвращаются все строки (предложение WHERE не задано) и подмножества столбцов (, , ) таблицы базы данных .This example returns all rows (no WHERE clause is specified) and a subset of the columns (, , ) from the table in the database. Заголовок третьего столбца переименовывается в .The third column heading is renamed to .

Этот пример возвращает только строки для , имеющие , не равное NULL, и , равное «M» (состоит в браке).This example returns only the rows for that have an that is not NULL and a of ‘M’ (married).

В.C. Совместное использование DISTINCT и SELECTUsing DISTINCT with SELECT

В следующем примере используется для создания списка всех уникальных должностей в таблице .The following example uses to generate a list of all unique titles in the table.

Г.D. Использование GROUP BYUsing GROUP BY

В следующем примере вычисляется общий объем всех продаж за каждый день.The following example finds the total amount for all sales on each day.

Так как в запросе используется предложение , то выводится только одна строка, содержащая общий объем продаж по каждому дню.Because of the clause, only one row containing the sum of all sales is returned for each day.

Д.E. Использование GROUP BY с несколькими группамиUsing GROUP BY with multiple groups

В следующем примере вычисляются значения средней цены и суммы продаж через Интернет за каждый день, сгруппированные по дате заказа и ключу продвижения.The following example finds the average price and the sum of Internet sales for each day, grouped by order date and the promotion key.

Е.F. Использование GROUP BY и WHEREUsing GROUP BY and WHERE

В следующем примере после извлечения строк, содержащих даты заказов позднее 1 августа 2002 г., происходит их разделение на группы.The following example puts the results into groups after retrieving only the rows with order dates later than August 1, 2002.

Ж.G. Использование GROUP BY с выражениемUsing GROUP BY with an expression

В следующем примере производится группировка с помощью выражения.The following example groups by an expression. Группировку можно производить только с помощью выражения, не содержащего агрегатных функций.You can group by an expression if the expression does not include aggregate functions.

З.H. Использование GROUP BY с ORDER BYUsing GROUP BY with ORDER BY

В следующем примере вычисляется сумма продаж за день и выполняется поиск заказов по определенному дню.The following example finds the sum of sales per day, and orders by the day.

И.I. Использование предложения HAVINGUsing the HAVING clause

Для ограничения результатов поиска в этом запросе используется предложение .This query uses the clause to restrict results.

記錄行為Logging Behavior

的記錄數量主要取決於資料庫目前使用的復原模式。The amount of logging for depends on the recovery model in effect for the database. 在簡單復原模式或大量記錄復原模式下,大量作業會進行最低限度記錄。Under the simple recovery model or bulk-logged recovery model, bulk operations are minimally logged. 透過最低限度記錄,使用 陳述式可能會比建立資料表後使用 INSERT 陳述式來擴展資料表更有效率。With minimal logging, using the statement can be more efficient than creating a table and then populating the table with an INSERT statement. 如需詳細資訊,請參閱 交易記錄 (SQL Server)。For more information, see The Transaction Log (SQL Server).

包含使用者定義函式 (UDF) 的 陳述式為完整記錄的作業。 statements that contain user-defined functions (UDFs) are fully logged operations. 如果用於 陳述式中的使用者定義函式不會執行任何資料存取作業,您可以針對使用者定義函式指定 SCHEMABINDING 子句,其會將那些使用者定義函式的衍生 UserDataAccess 屬性設定為 0。If the user-defined functions that are used in the statement don’t perform any data access operations, you can specify the SCHEMABINDING clause for the user-defined functions, which will set the derived UserDataAccess property for those user-defined functions to 0. 在此變更之後, 陳述式將會以最低限度記錄。After this change, statements will be minimally logged. 如果 陳述式仍然會參考至少一個將此屬性設定為 1 的使用者定義函式,作業便會完整記錄。If the statement still references at least one user-defined function that has this property set to 1, the operation is fully logged.

E.E. 使用相互關聯的子查詢Using correlated subqueries

這是一項相依於外部查詢來取得其值的相互關聯子查詢。A correlated subquery is a query that depends on the outer query for its values. 這項查詢可以重複執行,針對外部查詢可選取的每個資料列各執行一次。This query can be executed repeatedly, one time for each row that may be selected by the outer query.

第一個範例顯示語意相等的查詢,以說明使用 關鍵字和 關鍵字之間的差異。The first example shows queries that are semantically equivalent to illustrate the difference between using the keyword and the keyword. 兩者都是有效子查詢,擷取產品模型是長袖標誌緊身內衣之各項產品名稱的單一執行個體的, 和 資料表的 號碼相符。Both are examples of a valid subquery that retrieves one instance of each product name for which the product model is a long sleeve logo jersey, and the numbers match between the and tables.

下一個範例會使用 來擷取 資料表中獎金是 ,且 和 資料表中員工識別碼相符的每一位員工姓名執行個體。The next example uses and retrieves one instance of the first and last name of each employee for which the bonus in the table is and for which the employee identification numbers match in the and tables.

這個陳述式中先前的子查詢無法在外部查詢之外獨立評估。The previous subquery in this statement cannot be evaluated independently of the outer query. 它需要 值,但在 SQL Server Database EngineSQL Server Database Engine 檢查 中的不同資料列時,這個值會跟著改變。It requires a value for , but this value changes as the SQL Server Database EngineSQL Server Database Engine examines different rows in .

您也可以在外部查詢的 子句中,使用相關的子查詢。A correlated subquery can also be used in the clause of an outer query. 這個範例會尋找最大標價大於模型平均值兩倍的產品模型。This example finds the product models for which the maximum list price is more than twice the average for the model.

這個範例利用相關的子查詢來尋找銷售了特定產品的員工名稱。This example uses two correlated subqueries to find the names of employees who have sold a particular product.

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 OperatorsSQL Data TypesSQL Quick Ref

SELECT INTO – Specify Filegroup

In previous sections, we explored that we can create a new table and insert data into it using the SQL SELECT INTO statement from existing tables. It creates a table in default Filegroup only. We cannot specify a particular Filegroup until SQL Server 2016. In SQL Server 2017, we can specify a particular Filegroup in which a new table should be created. SQL Server creates a new table in that particular Verify table Filegroup. If we do not specify any Filegroups in SQL Server 2017 and above, it creates a table in default Filegroup.

Note: We cannot specify Filegroups in the SQL SELECT INTO for SQL Server 2016 and before.

Let us add a new Filegroup in AdventureWorks2017 database. Right click on the database and go to Filegroups.

In this Filegroup page, click on Add FileGroup and specify a name for Filegroup.

Now, click on Files and it lists out existing database files(data and log file), in this page, add a new datafile and specify FileGroup from the drop-down list. It should be FileGroup we created just now.

We want to create a SQL table in INSERTFILE Filegroup. We have not set this filegroup as default filegroup.

In the following query, you can see we specified filegroup name using ON clause. It works similar to a regular SQL SELECT INTO statement with a difference in a filegroup.

1
2
3

select*intoperson.person_temp

ONINSERTFILE—FILEGROUP NAME

fromperson.person

Once the table is created, execute a sp_help command on this newly created table. In the following screenshot, we can verify that the table is located on INSERTFILE FileGroup. It is the FileGroup we created earlier.

We can also verify this from table properties. Right-click on a table in SSMS. In the Storage section, we can see the desired FileGroup.

MySQL курс

MySQL курсMySQL устанавливатьMySQL управлениеMySQL PHP грамматикаMySQL подключениеMySQL Создание базы данныхMySQL Удалить базу данныхMySQL Выбор базы данныхMySQL Типы данныхMySQL Создание таблицы данныхMySQL Удалить Лист данныхMySQL Вставка данныхMySQL данные запросаMySQL WHERE пунктMySQL UPDATE запросMySQL DELETE ЗаявленияMySQL LIKE пунктMySQL последовательностьMySQL пакетMySQL Использование соединенийMySQL NULL Значение обработкиMySQL Регулярные выраженияMySQL делаMySQL ALTER командаMySQL индексMySQL Временная таблицаMySQL Копировать таблицуMySQL МетаданныеMySQL Использовать последовательностьMySQL Обработка дубликатов данныхMySQL SQL-инъекцияMySQL Экспорт данных

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 OperatorsSQL Data TypesSQL Quick Ref

限制事項Limitations and Restrictions

您無法將資料表變數或資料表值參數指定為新的資料表。You cannot specify a table variable or table-valued parameter as the new table.

即使已分割來源資料表,您還是無法使用 來建立資料分割資料表。You cannot use to create a partitioned table, even when the source table is partitioned. 不會使用來源資料表的資料分割配置;但會在預設檔案群組中建立新的資料表。 does not use the partition scheme of the source table; instead, the new table is created in the default filegroup. 若要將資料列插入資料分割資料表,您必須先建立資料分割資料表,再使用 陳述式。To insert rows into a partitioned table, you must first create the partitioned table and then use the statement.

在來源資料表中定義的索引、條件約束和觸發程序都不會傳送至新的資料表,而且您也無法在 陳述式中指定它們。Indexes, constraints, and triggers defined in the source table are not transferred to the new table, nor can they be specified in the statement. 如果您需要這些物件,則可以在執行 陳述式之後建立它們。If these objects are required, you can create them after executing the statement.

指定 子句並不保證會依照指定的順序插入資料列。Specifying an clause does not guarantee the rows are inserted in the specified order.

當選取清單包括疏鬆資料行時,疏鬆資料行屬性不會傳送至新資料表中的資料行。When a sparse column is included in the select list, the sparse column property does not transfer to the column in the new table. 如果新資料表需要這個屬性,請在執行 SELECT…INTO 陳述式來加入這個屬性之後,改變資料行定義。If this property is required in the new table, alter the column definition after executing the SELECT…INTO statement to include this property.

當選取清單包括計算資料行時,新資料表變數中對應的資料行並不是計算資料行。When a computed column is included in the select list, the corresponding column in the new table is not a computed column. 新資料行中的值是執行 時所計算的值。The values in the new column are the values that were computed at the time was executed.

M.M. 使用 HAVING 與 SUM 及 AVGUsing HAVING with SUM and AVG

下列範例會依產品識別碼來分組 資料表,且只會包括訂單總計超出 ,平均訂單數量小於 的產品群組。The following example groups the table by product ID and includes only those groups of products that have orders totaling more than and whose average order quantities are less than .

若要查看總銷售額大於 的產品,請使用這項查詢:To see the products that have had total sales greater than , use this query:

如果您要確定每項產品的計算都至少包含了一千五百個項目,請利用 來刪除傳回銷售總計小於 項的產品。If you want to make sure there are at least one thousand five hundred items involved in the calculations for each product, use to eliminate the products that return totals for fewer than items sold. 此查詢看起來像這樣:The query looks like this:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector