of 77
7/29/2019 Session3 Tsql Dml
1/77
T-SQL for Data
Manipulation
Vu Tuyet [email protected]
Hanoi University of Technology
1
7/29/2019 Session3 Tsql Dml
2/77
Microsoft
Microsoft
Overview of Transact-SQL
Based on AINSI SQL 92 standard
Composing of three categories
Data Manipulation Language (DML)
Data Definition Language (DDL)
Data Control Language (DCL)
Having some Microsoft specific extensions
Beyond relational data
.net framework integration
7/29/2019 Session3 Tsql Dml
3/77
Microsoft
Microsoft
Outline
Selecting Data from Existing Tables
Inserting Data
Updating Data Deleting Data
Fulltext Serach
7/29/2019 Session3 Tsql Dml
4/77
Microsoft
Microsoft
Select Data
The simple syntax to select the itemsfrom the exit table is:
select
from
where
7/29/2019 Session3 Tsql Dml
5/77
Microsoft
Microsoft
Select Data
You can change the name of the items in the table:
7/29/2019 Session3 Tsql Dml
6/77
Microsoft
Microsoft
Select Data
You can insert some items as following:
7/29/2019 Session3 Tsql Dml
7/77
MicrosoftMicrosoft
Select
Example a function count to count the columns of the
table:
7/29/2019 Session3 Tsql Dml
8/77
MicrosoftMicrosoft
Select Data
You can use some functions or some operations in the
Select Statement:
7/29/2019 Session3 Tsql Dml
9/77
MicrosoftMicrosoft
Select Data
7/29/2019 Session3 Tsql Dml
10/77
MicrosoftMicrosoft
Select Data
Maths
Functions
Functions
String
Functions
The Time
functions
7/29/2019 Session3 Tsql Dml
11/77
MicrosoftMicrosoft
- ASCII()
- CHAR()
- UPPER()
- LOWER()
- LEN()- LTRIM()
- RTRIM()
- LEFT()
- RIGHT()
- AVG()
- MIN()
- MAX()
- SUM()
- COUNT()
- SQUARE()
- SQRT()
- ROUND()
- GETDATE()
-
DATEPART(YY,g
etdate())
-DATEDIFF(X,Y,Z)
-
DAY(),MONTH(),
YEAR()
Select Data
Maths String Time
7/29/2019 Session3 Tsql Dml
12/77
MicrosoftMicrosoft
Select Data
Besides, there are some functions to convert the data
type:
- CAST()
- CONVERT()
7/29/2019 Session3 Tsql Dml
13/77
MicrosoftMicrosoft
Select
Select
Order by.ect
Join..on
Cross join
Group by
Oder by
Compute
For
Into
Having
With
Except ,
Intersect
Union
Option
7/29/2019 Session3 Tsql Dml
14/77
MicrosoftMicrosoft
Select-With statement
Specifies a temporary named result set, known as a common
table expression (CTE).
7/29/2019 Session3 Tsql Dml
15/77
MicrosoftMicrosoft
Select-Order by
- You can arrange the result follow the first letter by using the
order by statement:
7/29/2019 Session3 Tsql Dml
16/77
MicrosoftMicrosoft
Select-multiple tables
You can select the items from more than a table as
following:
With outer join:
7/29/2019 Session3 Tsql Dml
17/77
MicrosoftMicrosoft
Select multiple tables
Inner join:
7/29/2019 Session3 Tsql Dml
18/77
MicrosoftMicrosoft
Select-multiple tables
- When you select from more than 1 table, you can use the
joinon statement or you can use the cross join statement.
With the cross join statement, you dont have to have torelative condition between the tables and the result is all the
Objects:
7/29/2019 Session3 Tsql Dml
19/77
MicrosoftMicrosoft
Select-multiple tables
7/29/2019 Session3 Tsql Dml
20/77
MicrosoftMicrosoft
Select-multiple tables
- You can select from many tables, and create a new table to
store that result:
Now, you can refresh the sql folder, and you can see the newtable named newtbl as the following:
7/29/2019 Session3 Tsql Dml
21/77
MicrosoftMicrosoft
Select-multiple tables
7/29/2019 Session3 Tsql Dml
22/77
MicrosoftMicrosoft
Select-merge
A new feature in SQL2008 is merge statement. You can merge 2 or
more tables:
7/29/2019 Session3 Tsql Dml
23/77
MicrosoftMicrosoft
Select-Group by
Specifies the groups into which output rows are to be placed. If aggregate
functions are included in the SELECT clause , GROUP BY
calculates a summary value for each group.
7/29/2019 Session3 Tsql Dml
24/77
MicrosoftMicrosoft
Select-Having
Specifies a search condition for a group or an aggregate
HAVING is typically used in a GROUP BY clause. When
GROUP BY is not used, HAVING behaves like a WHERE
clause.
7/29/2019 Session3 Tsql Dml
25/77
MicrosoftMicrosoft
7/29/2019 Session3 Tsql Dml
26/77
MicrosoftMicrosoft
Select-intersect
INTERSECT returns any distinct values that are returned by both the query
on the left and right sides of the INTERSECT operand.
7/29/2019 Session3 Tsql Dml
27/77
MicrosoftMicrosoft
Select-except
EXCEPT returns any distinct values from the left query that
are not also found on the right query.
7/29/2019 Session3 Tsql Dml
28/77
MicrosoftMicrosoft
Select-Compute by
Generates totals that appear as additional summary columns at
the end of the result set. When used with BY, the COMPUTE
clause generates control-breaks and subtotals in the result set.
You can specify COMPUTE BY and COMPUTE in the same
query.
7/29/2019 Session3 Tsql Dml
29/77
MicrosoftMicrosoft
Select-Compute by
7/29/2019 Session3 Tsql Dml
30/77
MicrosoftMicrosoft
Select-For clause
FOR clause is used to specify either the BROWSE or the
XML option. BROWSE and XML are unrelated options.
7/29/2019 Session3 Tsql Dml
31/77
MicrosoftMicrosoft
Select-For clause
7/29/2019 Session3 Tsql Dml
32/77
MicrosoftMicrosoft
Insert
The simple syntax for Insert statement is:INSERT INTO
VALUES(a,b,)
7/29/2019 Session3 Tsql Dml
33/77
MicrosoftMicrosoft
Insert
- You can insert some values into the table, and you have to
insert all the value not null, and the primary key:
7/29/2019 Session3 Tsql Dml
34/77
MicrosoftMicrosoft
Insert
7/29/2019 Session3 Tsql Dml
35/77
MicrosoftMicrosoft
Insert
If you dont insert all the column not null, the process will
terminate
7/29/2019 Session3 Tsql Dml
36/77
MicrosoftMicrosoft
Insert
- You can create a new table and insert the values into that table
7/29/2019 Session3 Tsql Dml
37/77
MicrosoftMicrosoft
Insert
7/29/2019 Session3 Tsql Dml
38/77
MicrosoftMicrosoft
Insert
- Inserting data into a unique identifier column by using
NEWID()
7/29/2019 Session3 Tsql Dml
39/77
MicrosoftMicrosoft
Insert
- Inserting data into a table through a view
7/29/2019 Session3 Tsql Dml
40/77
MicrosoftMicrosoft
Insert
7/29/2019 Session3 Tsql Dml
41/77
MicrosoftMicrosoft
Delete
The simple syntax:
delete from
- Delete with the condition where
7/29/2019 Session3 Tsql Dml
42/77
MicrosoftMicrosoft
Delete
- Using DELETE on the current row of a cursor
7/29/2019 Session3 Tsql Dml
43/77
MicrosoftMicrosoft
Delete
- Using DELETE based on a subquery and using the Transact-
SQL extension
7/29/2019 Session3 Tsql Dml
44/77
MicrosoftMicrosoft
Delete
- Using DELETE with the TOP clause
7/29/2019 Session3 Tsql Dml
45/77
MicrosoftMicrosoft
Delete
Using DELETE with the OUTPUT clause
7/29/2019 Session3 Tsql Dml
46/77
MicrosoftMicrosoft
Update
The simple syntax for Update statement is:
UPDATE
SET
WHERE
7/29/2019 Session3 Tsql Dml
47/77
MicrosoftMicrosoft
Update
- Using UPDATE with the FROM Clause
7/29/2019 Session3 Tsql Dml
48/77
MicrosoftMicrosoft
Update
- Using the UPDATE statement with information from
another table
7/29/2019 Session3 Tsql Dml
49/77
MicrosoftMicrosoft
Update
- Before :
7/29/2019 Session3 Tsql Dml
50/77
MicrosoftMicrosoft
Update
After
7/29/2019 Session3 Tsql Dml
51/77
MicrosoftMicrosoft
Fulltext Search
Full-Text Search Architecture
Administering Full-Text Search
Querying SQL Server Using Full-Text Search
7/29/2019 Session3 Tsql Dml
52/77
MicrosoftMicrosoft
Overview
7/29/2019 Session3 Tsql Dml
53/77
MicrosoftMicrosoft
Overview
The architecture consists of the following processes:
SQL Server process (Sqlservr.exe)
Microsoft Full-Text Engine for SQL Server process (Msftesql.exe)
Microsoft Full-Text Engine Filter Daemon process (Msftefd.exe)
7/29/2019 Session3 Tsql Dml
54/77
MicrosoftMicrosoft
Full-Text Search Terminology
Full-text index
Stores information about significant words and their location within a given column. This information is used to
quickly compute full-text queries that search for rows with particular words or combinations of words.
Full-text catalog
A full-text catalog contains zero or more full-text indexes. Full-text catalogs must reside on a local hard drive
associated with the instance of SQL Server. Each catalog can serve the indexing needs of one or more tables
within a database. Full-text catalogs cannot be stored on removable drives, floppy disks, or network drives, exceptwhen you attached a read-only database that contains a full-text catalog.
Word breaker
For a given language, a word breaker tokenizes text based on the lexical rules of the language.
Token
Is a word or a character string identified by the word breaker.
Stemmer
For a given language, a stemmer generates inflectional forms of a particular word based on the rules of that
language. Stemmers are language specific.
Filter Given a specified file type, for example .doc, filters extract text from a file stored in a varbinary(max) or
image column.
Population or Crawl Is the process of creating and maintaining a full-text index.
Noise wordsAre frequently occurring words that do not help the search. For example, for the English locale
words such as "a", "and", "is", and "the" are considered noise words. These words are ignored to prevent the full -
text index from becoming bloated.
7/29/2019 Session3 Tsql Dml
55/77
MicrosoftMicrosoft
Administering Full-Text Search
The system stored procedures that are used to implement and query
full-text indexes.
sp_fulltext_catalog
sp_help_fulltext_catalogs_cursor
sp_fulltext_column
sp_help_fulltext_columns
sp_fulltext_database
sp_help_fulltext_columns_cursor
sp_fulltext_service
sp_help_fulltext_tablessp_fulltext_table
sp_help_fulltext_tables_cursor
sp_help_fulltext_catalogs
DENYpermission [ ,...n ] ON FULLTEXT CATALOG ::full-
text_catalog_name TO database_principal[ ,...n ] [ CASCADE ] [ AS
7/29/2019 Session3 Tsql Dml
56/77
MicrosoftMicrosoft
Administering Full-Text Search
Full-text administration can be separated into three main
tasks:
Creating/altering/dropping full-text catalogs
Creating/altering/dropping full-text indexes
Scheduling and maintaining index population.
7/29/2019 Session3 Tsql Dml
57/77
MicrosoftMicrosoft
Administering Full-Text Search
Full-text indexes Regular SQL Server indexesStored in the file system, but
administered through the database.
Stored under the control of the database
in which they are defined.
Only one full-text index allowed pertable.
Several regular indexes allowed pertable.
Addition of data to full-text indexes,
called population, can be requested
through either a schedule or a specific
request, or can occur automatically withthe addition of new data.
Updated automatically when the data
upon which they are based is inserted,
updated, or deleted.
Grouped within the same database into
one or more full-text catalogs.Not grouped.
7/29/2019 Session3 Tsql Dml
58/77
MicrosoftMicrosoft
Guidelines in administering full-text indexes
Like regular SQL Server indexes, full-text indexes can be automatically updated as
data is modified in the associated tables. Alternatively, you can repopulate full-text
indexes manually at appropriate intervals, but this can be time-consuming and
resource-intensive. Therefore, index updating is usually performed as an
asynchronous process that runs in the background during periods of low database
activity.
Tables with the same update characteristics (such as small number of changes
versus large number of changes, or tables that change frequently during a particular
time of day) should be grouped together and assigned to the same full-text catalog.
By setting up full-text catalog population schedules in this way, full-text indexes stay
synchronous with the tables without adversely affecting the resource usage of thedatabase server during periods of high database activity.
It is important to plan the placement of full-text indexes for tables in full-text catalogs.
When you assign a table to a full-text catalog, consider the following guidelines:
7/29/2019 Session3 Tsql Dml
59/77
MicrosoftMicrosoft
Guidelines in administering full-text indexes (2)
Always select the smallest unique index available for your full-text unique key. (A 4-
byte, integer-based index is optimal.) This reduces the resources required by
Microsoft Search service in the file system significantly. If the primary key is large
(over 100 bytes), consider choosing another unique index in the table (or creating
another unique index) as the full-text unique key. Otherwise, if the full-text unique key
size exceeds the maximum size allowed (900 bytes), full-text population will not beable to proceed.
If you are indexing a table that has millions of rows, assign the table to its own full-
text catalog.
Consider the amount of change occurring in the tables being full-text indexed, as wellas the number of table rows. If the total number of rows being changed, together with
the numbers of rows in the table present during the last full-text population,
represents millions of rows, assign the table to its own full-text catalog.
7/29/2019 Session3 Tsql Dml
60/77
MicrosoftMicrosoft
Guidelines in administering full-text indexes (3)
After the word breaker-routine has a list of valid words for a row within a column, the
full-text engine calculates tokens to represent the words. A token is simply a
compressed form of the original word that saves space and ensures that full-textindexes can be created in as compact a form as possible.
The full text-text functionality then builds all tokens in a column into inverted, stacked,
compressed structure within a file that is used for search operations. This uniquestructure allows ranking and scoring algorithms to efficiently satisfy possible queries.
7/29/2019 Session3 Tsql Dml
61/77
MicrosoftMicrosoft
Querying SQL Server Using Full-Text Search
Full-Text query keywords
FREETEXT
FREETEXTTABLE
CONTAINS
CONTAINSTABLE
7/29/2019 Session3 Tsql Dml
62/77
MicrosoftMicrosoft
Querying SQL Server Using Full-Text Search
FREETEXT
FREETEXT ( { column_name | (column_list) | * } ,'freetext_string' [ ,
LANGUAGE language_term ] )
SELECT ProductDescriptionID, Description FROM Production.ProductDescription
WHERE [Description] LIKE N'%bike%';
SELECT ProductDescriptionID, Description FROM Production.ProductionDescription
WHERE FREETEXT(Description, Nbike); --Must be UNICODE. Otherwise prevents a
query optimizer from parameter sniffing
SELECT ProductDescriptionID, Description FROM Production.ProductionDescription
WHERE CONTAINS(Description, Nbike);
7/29/2019 Session3 Tsql Dml
63/77
MicrosoftMicrosoft
Querying SQL Server Using Full-Text Search
7/29/2019 Session3 Tsql Dml
64/77
MicrosoftMicrosoft
Querying SQL Server Using Full-Text Search
FREETEXTTABLE
FREETEXTTABLE (table , { column_name | (column_list) | * } ,'freetext_string'
[ ,LANGUAGE language_term ] [ ,top_n_by_rank] )
The FREETEXTTABLE version of the previous FREETEXT query would look
like this:
SELECT PD.ProductDescriptionID, PD.Description, KEYTBL.[KEY],
KEYTBL.RANK FROM Production.ProductDescription AS PD
INNER JOIN FREETEXTTABLE()Production.ProductDescription, Description,
Nbike)
AS KEYTBL ON PD.ProductDescriptionID = KEYTBL.[KEY]
7/29/2019 Session3 Tsql Dml
65/77
MicrosoftMicrosoft
Querying SQL Server Using Full-Text Search
CONTAINS
CONTAINS ( { column_name | (column_list) | * } ,'< contains_search_condition
>' [ , LANGUAGE language_term ] ) < contains_search_condition > ::= { | < prefix_term > | < generation_term > | < proximity_term > |
< weighted_term > } | { ( < contains_search_condition > ) [ { < AND > | < AND
NOT > | < OR > } ] < contains_search_condition > [ ...n ] } < simple_term >::= word| "phrase " < prefix term > ::= { "word*" | "phrase *" } ::= FORMSOF ( { INFLECTIONAL | THESAURUS } , [ ,...n ] ) < proximity_term > ::= { < simple_term > | < prefix_term >
} { { NEAR | ~ }
SELECT ProductDescriptionID, Description FROM Production.ProductDescriptionWHERE CONTAINS(Description, N'bike');
SELECT ProductDescriptionID, Description FROM Production.ProductDescription
WHERE CONTAINS(Description, N'''bike*'''):
7/29/2019 Session3 Tsql Dml
66/77
MicrosoftMicrosoft
Querying SQL Server Using Full-Text Search
SELECT ProductDescriptionID, Description FROM Production.ProductDescriptionWHERE CONTAINS(Description, N' FORMSOF (INFLECTIONAL, bike) ');
SELECT ProductDescriptionID, Description FROM Production.ProductDescription
WHERE CONTAINS(Description, N' FORMSOF (THESAURUS, bike) ');
Word proximity is a common way of searching documents for multiple keywords or phrases. This typeof query uses the NEAR(~) keyword. The closer words are to each other, the better the match for
these types of queries. The proximity is used as a part of RANK calculation for rows matching the
search criteria. This keyword is rarely used with the CONTAINS predicate because the rank of
matched results cannot be evaluated directly.
SELECT ProductDescriptionID, Description FROM Production.ProductDescription
WHERE CONTAINS(Description, N'mountain NEAR bike');
SELECT ProductDescriptionID, Description FROM Production.ProductDescription
WHERE CONTAINS(Description, N'mountain ~ bike');
SELECT ProductDescriptionID, Description FROM Production.ProductDescription
WHERE CONTAINS(Description, 'ISABOUT (mountain weight(.8), bike weight (.2) )');
7/29/2019 Session3 Tsql Dml
67/77
MicrosoftMicrosoft
Querying SQL Server Using Full-Text Search
The CONTAINSTABLE function has the same capabilities as the CONTAINS function.
However, like the FREETEXTABLE function, it returns a rowset that contains a RANK
and a KEY column that can be used to return the best matches to a search.
CONTAINSTABLE (table , { column_name | (column_list) | * } ,' ' [ , LANGUAGE language_term] [ ,top_n_by_rank] ) ::= { < simple_term > | < prefix_term > | | < proximity_term > | < weighted_term > } | { ( ) { { AND | & } | { AND NOT | &! } | { OR | | } } [ ...n ] } < simple_term > ::= word| "phrase " ::= { "word*" | "phrase *" } < generation_term > ::= FORMSOF (
{ INFLECTIONAL | THESAURUS } , < simple_term > [ ,...n ] ) < proximity_term >::= { < simple_term > | < prefix_term > } { { NEAR | ~ } { < simple_term > | } } [ ...n ] < weighted_term > ::= ISABOUT ( { { < simple_term
> | < prefix_term > | < generation_term > | < proximity_term > } [ WEIGHT (
weight_value ) ] } [ ,...n ] )
7/29/2019 Session3 Tsql Dml
68/77
MicrosoftMicrosoft
Querying SQL Server Using Full-Text Search
Full-text search much more powerful than LIKE
Used correctly, will produce more specific, relevant results
Better performance LIKE queries are designed for small amounts of
text data, full-text search scales to huge documents
Provides ranking of results
Common uses
Search through the content in a text-intensive, database driven website,
e.g. a knowledge base
Search the contents of documents stored in BLOB fields
Perform advanced searches
e.g. with exact phrases - "to be or not to be" (however needs care!)
e.g. Boolean operators - AND, OR, NOT, NEAR
7/29/2019 Session3 Tsql Dml
69/77
MicrosoftMicrosoft
Writing FTS terms
The power of FTS is in the expression which is passed
to the CONTAINS or CONTAINSTABLE function
Several different types of terms:
Simple terms
Prefix terms
Generation terms
Proximity terms
Weighted terms
7/29/2019 Session3 Tsql Dml
70/77
MicrosoftMicrosoft
Simple terms
Either words or phrases
Quotes are optional, but recommended
Matches columns which contain the exact words or phrases
specified Case insensitive
Punctuation is ignored
e.g.
CONTAINS(Column, 'SQL')
CONTAINS(Column, ' "SQL" ')
CONTAINS(Column, 'Microsoft SQL Server')
CONTAINS(Column, ' "Microsoft SQL Server" ')
7/29/2019 Session3 Tsql Dml
71/77
MicrosoftMicrosoft
Prefix terms
Matches words beginning with the specified text
e.g.
CONTAINS(Column, ' "local*" ')
matches local, locally, locality
CONTAINS(Column, ' "local wine*" ')
matches "local winery", "locally wined"
7/29/2019 Session3 Tsql Dml
72/77
MicrosoftMicrosoft
Generation terms
Two types:
Inflectional
FORMSOF(INFLECTIONAL, "expression")
Thesaurus FORMSOF(THESAURUS, "expression")
Both return variants of the specified word, but variants
are determined differently
7/29/2019 Session3 Tsql Dml
73/77
MicrosoftMicrosoft
Inflectional
Matches plurals and words which share the
same stem
When vague words such as "best" are used,doesn't match the exact word, only "good"
7/29/2019 Session3 Tsql Dml
74/77
MicrosoftMicrosoft
Thesaurus
Supposed to match synonyms of search terms but the
thesaurus seems to be very limited
Does not match plurals
Not particularly useful
7/29/2019 Session3 Tsql Dml
75/77
MicrosoftMicrosoft
Proximity terms
SyntaxCONTAINS(Column, 'local NEAR winery')
CONTAINS(Column, ' "local" NEAR "winery" ')
Matches words which are NEAR each other Terms on either side of NEAR must be either simple or
proximity terms
7/29/2019 Session3 Tsql Dml
76/77
MicrosoftMicrosoft
Weighted terms
Each word can be given a rank
Can be combined with simple, prefix, generation and
proximity terms
e.g. CONTAINS(Column, 'ISABOUT(
performance weight(.8),
comfortable weight(.4)
)')
CONTAINS(Column, 'ISABOUT(
FORMSOF(INFLECTIONAL, "performance") weight (.8),
FORMSOF(INFLECTIONAL, "comfortable") weight (.4)
)')
7/29/2019 Session3 Tsql Dml
77/77