Session3 Tsql Dml

Embed Size (px)

Citation preview

  • 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