Category: documentdb Sql

  • Khóa học miễn phí DocumentDB SQL – Parameterized nhận dự án làm có lương

    DocumentDB SQL – Parameterized



    In relational databases, a parameterized query is a query in which placeholders are used for parameters and the parameter values are supplied at execution time. DocumentDB also supports parameterized queries, and parameters in parameterized query can be expressed with the familiar @ notation. The most important reason to use parameterized queries is to avoid SQL injection attacks. It can also provide robust handling and escaping of user input.

    Let’s take a look at an example where we will be using the .Net SDK. Following is the code which will delete the collection.

    private async static Task DeleteCollection(DocumentClient client, string collectionId) {
       Console.WriteLine();
       Console.WriteLine(">>> Delete Collection {0} in {1} <<<",
       collectionId, _database.Id);
       var query = new SqlQuerySpec {
          QueryText = "SELECT * FROM c WHERE c.id = @id",
          Parameters = new SqlParameterCollection { new SqlParameter { Name =
             "@id", Value = collectionId } }
       };
    
       DocumentCollection collection = client.CreateDocumentCollectionQuery(database.SelfLink,
          query).AsEnumerable().First();
    
       await client.DeleteDocumentCollectionAsync(collection.SelfLink);
    
       Console.WriteLine("Deleted collection {0} from database {1}",
          collectionId, _database.Id);
    }
    

    The construction of a parameterized query is as follows.

    var query = new SqlQuerySpec {
       QueryText = "SELECT * FROM c WHERE c.id = @id",
       Parameters = new SqlParameterCollection { new SqlParameter { Name =
          "@id", Value = collectionId } }
    };
    

    We are not hardcoding the collectionId so this method can be used to delete any collection. We can use ‘@’ symbol to prefix parameter names, similar to SQL Server.

    In the above example, we are querying for a specific collection by Id where the Id parameter is defined in this SqlParameterCollection assigned to the parameter”s property of this SqlQuerySpec. The SDK then does the work of constructing the final query string for DocumentDB with the collectionId embedded inside of it. We run the query and then use its SelfLink to delete the collection.

    Following is the CreateDocumentClient task implementation.

    private static async Task CreateDocumentClient() {
       // Create a new instance of the DocumentClient
       using (var client = new DocumentClient(new Uri(EndpointUrl), AuthorizationKey)) {
          database = client.CreateDatabaseQuery("SELECT * FROM
             c WHERE c.id = ''earthquake''").AsEnumerable().First();
    
          collection = client.CreateDocumentCollectionQuery(database.CollectionsLink,
             "SELECT * FROM c WHERE c.id = ''myfirstdb''").AsEnumerable().First();
    
          await DeleteCollection(client, "MyCollection1");
          await DeleteCollection(client, "MyCollection2");
       }
    }
    

    When the code is executed, it produces the following output.

    **** Delete Collection MyCollection1 in mydb ****
    Deleted collection MyCollection1 from database myfirstdb
    
    **** Delete Collection MyCollection2 in mydb ****
    Deleted collection MyCollection2 from database myfirstdb
    

    Let’s take a look at another example. We can write a query that takes last name and address state as parameters, and then executes it for various values of lastname and location.state based on the user input.

    SELECT *
    FROM Families f
    WHERE f.lastName = @lastName AND f.location.state = @addressState
    

    This request can then be sent to DocumentDB as a parameterized JSON query as shown in the following code.

    {
       "query": "SELECT * FROM Families f WHERE f.lastName = @lastName AND
          f.location.state = @addressState",
    
       "parameters": [
          {"name": "@lastName", "value": "Wakefield"},
          {"name": "@addressState", "value": "NY"},
       ]
    }
    

    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí Linq to SQL Translation nhận dự án làm có lương

    DocumentDB SQL – Linq to SQL Translation



    In DocumentDB, we actually use SQL to query documents. If we are doing .NET development, there is also a LINQ provider that can be used and which can generate appropriate SQL from a LINQ query.

    Supported Data Types

    In DocumentDB, all JSON primitive types are supported in the LINQ provider included with the DocumentDB .NET SDK which are as follows −

    • Numeric
    • Boolean
    • String
    • Null

    Supported Expression

    The following scalar expressions are supported in the LINQ provider included with the DocumentDB .NET SDK.

    • Constant Values − Includes constant values of the primitive data types.

    • Property/Array Index Expressions − Expressions refer to the property of an object or an array element.

    • Arithmetic Expressions − Includes common arithmetic expressions on numerical and Boolean values.

    • String Comparison Expression − Includes comparing a string value to some constant string value.

    • Object/Array Creation Expression − Returns an object of compound value type or anonymous type or an array of such objects. These values can be nested.

    Supported LINQ Operators

    Here is a list of supported LINQ operators in the LINQ provider included with the DocumentDB .NET SDK.

    • Select − Projections translate to the SQL SELECT including object construction.

    • Where − Filters translate to the SQL WHERE, and support translation between && , || and ! to the SQL operators.

    • SelectMany − Allows unwinding of arrays to the SQL JOIN clause. Can be used to chain/nest expressions to filter array elements.

    • OrderBy and OrderByDescending − Translates to ORDER BY ascending/descending.

    • CompareTo − Translates to range comparisons. Commonly used for strings since they’re not comparable in .NET.

    • Take − Translates to the SQL TOP for limiting results from a query.

    • Math Functions − Supports translation from .NET’s Abs, Acos, Asin, Atan, Ceiling, Cos, Exp, Floor, Log, Log10, Pow, Round, Sign, Sin, Sqrt, Tan, Truncate to the equivalent SQL built-in functions.

    • String Functions − Supports translation from .NET’s Concat, Contains, EndsWith, IndexOf, Count, ToLower, TrimStart, Replace, Reverse, TrimEnd, StartsWith, SubString, ToUpper to the equivalent SQL built-in functions.

    • Array Functions − Supports translation from .NET’s Concat, Contains, and Count to the equivalent SQL built-in functions.

    • Geospatial Extension Functions − Supports translation from stub methods Distance, Within, IsValid, and IsValidDetailed to the equivalent SQL built-in functions.

    • User-Defined Extension Function − Supports translation from the stub method UserDefinedFunctionProvider.Invoke to the corresponding user-defined function.

    • Miscellaneous − Supports translation of coalesce and conditional operators. Can translate Contains to String CONTAINS, ARRAY_CONTAINS or the SQL IN depending on context.

    Let’s take a look at an example where we will be using the .Net SDK. Following are the three documents which we will be consider for this example.

    New Customer 1

    {
       "name": "New Customer 1",
       "address": {
          "addressType": "Main Office",
          "addressLine1": "123 Main Street",
    
          "location": {
             "city": "Brooklyn",
             "stateProvinceName": "New York"
          },
    
          "postalCode": "11229",
          "countryRegionName": "United States"
       },
    }
    

    New Customer 2

    {
       "name": "New Customer 2",
    
       "address": {
          "addressType": "Main Office",
          "addressLine1": "678 Main Street",
    
          "location": {
             "city": "London",
             "stateProvinceName": " London "
          },
    
          "postalCode": "11229",
          "countryRegionName": "United Kingdom"
       },
    }
    

    New Customer 3

    {
       "name": "New Customer 3",
    
       "address": {
          "addressType": "Main Office",
          "addressLine1": "12 Main Street",
    
          "location": {
             "city": "Brooklyn",
             "stateProvinceName": "New York"
          },
    
          "postalCode": "11229",
          "countryRegionName": "United States"
       },
    }
    

    Following is the code in which we query using LINQ. We”ve defined a LINQ query in q, but it won”t execute until we run .ToList on it.

    private static void QueryDocumentsWithLinq(DocumentClient client) {
       Console.WriteLine();
       Console.WriteLine("**** Query Documents (LINQ) ****");
       Console.WriteLine();
       Console.WriteLine("Quering for US customers (LINQ)");
       var q =
          from d in client.CreateDocumentQuery<Customer>(collection.DocumentsLink)
          where d.Address.CountryRegionName == "United States"
    
       select new {
          Id = d.Id,
          Name = d.Name,
          City = d.Address.Location.City
       };
    
       var documents = q.ToList();
       Console.WriteLine("Found {0} US customers", documents.Count);
    
       foreach (var document in documents) {
          var d = document as dynamic;
          Console.WriteLine(" Id: {0}; Name: {1}; City: {2}", d.Id, d.Name, d.City);
       }
    
       Console.WriteLine();
    }
    

    The SDK will convert our LINQ query into SQL syntax for DocumentDB, generating a SELECT and WHERE clause based on our LINQ syntax.

    Let’s call the above queries from the CreateDocumentClient task.

    private static async Task CreateDocumentClient() {
       // Create a new instance of the DocumentClient
       using (var client = new DocumentClient(new Uri(EndpointUrl), AuthorizationKey)) {
          database = client.CreateDatabaseQuery("SELECT * FROM c WHERE c.id =
             ''myfirstdb''").AsEnumerable().First();
          collection = client.CreateDocumentCollectionQuery(database.CollectionsLink,
             "SELECT * FROM c WHERE c.id = ''MyCollection''").AsEnumerable().First();
          QueryDocumentsWithLinq(client);
       }
    }
    

    When the above code is executed, it produces the following output.

    **** Query Documents (LINQ) ****
    
    Quering for US customers (LINQ)
    Found 2 US customers
       Id: 7e9ad4fa-c432-4d1a-b120-58fd7113609f; Name: New Customer 1; City: Brooklyn
       Id: 34e9873a-94c8-4720-9146-d63fb7840fad; Name: New Customer 1; City: Brooklyn
    

    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí DocumentDB SQL – Built-in Function nhận dự án làm có lương

    DocumentDB SQL – Built-in Function



    DocumentDB supports a host of built-in functions for common operations that can be used inside queries. There are a bunch of functions for performing mathematical calculations, and also type checking functions that are extremely useful while working with varying schemas. These functions can test if a certain property exists and if it does whether it”s a number or a string, Boolean or object.

    We also get these handy functions for parsing and manipulating strings, as well as several functions for working with arrays allowing you to do things like concatenate arrays and test to see if an array contains a particular element.

    Following are the different types of built-in functions −

    S.No. Built-in Functions & Description
    1

    The mathematical functions perform a calculation, usually based on input values that are provided as arguments, and return a numeric value.

    2

    The type checking functions allow you to check the type of an expression within SQL queries.

    3

    The string functions perform an operation on a string input value and return a string, numeric or Boolean value.

    4

    The array functions perform an operation on an array input value and return in the form of numeric, Boolean or array value.

    5

    DocumentDB also supports the Open Geospatial Consortium (OGC) built-in functions for geospatial querying.


    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí DocumentDB – Scalar Expressions nhận dự án làm có lương

    DocumentDB SQL – Scalar Expressions



    In DocumentDB SQL, the SELECT clause also supports scalar expressions like constants, arithmetic expressions, logical expressions, etc. Normally, scalar queries are rarely used, because they don”t actually query documents in the collection, they just evaluate expressions. But it”s still helpful to use scalar expression queries to learn the basics, how to use expressions and shape JSON in a query, and these concepts apply directly to the actual queries you”ll be running against documents in a collection.

    Let’s take a look at an example which contains multiple scalar queries.

    Scalar Queries

    In the Query Explorer, select just the text to be executed and click ‘Run’. Let”s run this first one.

    SELECT "Hello"
    

    When the above query is executed, it produces the following output.

    [
       {
          "$1": "Hello"
       }
    ]
    

    This output may look a bit confusing, so let”s break it down.

    • First, as we saw in the last demo, query results are always contained in square brackets because they are returned as a JSON array, even results from scalar expression queries like this one that only returns a single document.

    • We have an array with one document in it, and that document has a single property in it for the single expression in the SELECT statement.

    • The SELECT statement doesn”t provide a name for this property, thus DocumentDB auto generates one using $1.

    • This is usually not what we want, which is why we can use AS to alias the expression in the query, which sets the property name in the generated document the way you”d like it to be, word, in this example.

    SELECT "Hello" AS word
    

    When the above query is executed, it produces the following output.

    [
       {
          "word": "Hello"
       }
    ]
    

    Similarly, following is another simple query.

    SELECT ((2 + 11 % 7)-2)/3
    

    The query retrieves the following output.

    [
       {
          "$1": 1.3333333333333333
       }
    ]
    

    Let’s take a look at another example of shaping nested arrays and embedded objects.

    SELECT
       {
          "words1":
             ["Hello", "World"],
          "words2":
             ["How", "Are", "You?"]
       } AS allWords
    

    When the above query is executed, it produces the following output.

    [
       {
          "allWords": {
             "words1": [
                "Hello",
                "World"
             ],
    
             "words2": [
                "How",
                "Are",
                "You?"
             ]
          }
       }
    ]
    

    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí DocumentDB SQL – Select Clause nhận dự án làm có lương

    DocumentDB SQL – Select Clause



    The Azure portal has a Query Explorer that lets us run any SQL query against our DocumentDB database. We will use the Query Explorer to demonstrate the many different capabilities and features of the query language starting with the simplest possible query.

    Step 1 − Open the Azure Portal, and in the database blade, click the Query Explorer blade.

    Query Explorer Blade

    Remember that queries run within the scope of a collection, and so the Query Explorer lets us choose the collection in this dropdown. We will leave it set to our Families collection that contains the three documents. Let’s consider these three documents in this example.

    Following is the AndersenFamily document.

    {
       "id": "AndersenFamily",
       "lastName": "Andersen",
    
       "parents": [
          { "firstName": "Thomas", "relationship":  "father" },
          { "firstName": "Mary Kay", "relationship":  "mother" }
       ],
    
       "children": [
          {
             "firstName": "Henriette Thaulow",
             "gender": "female",
             "grade": 5,
             "pets": [ { "givenName": "Fluffy", "type":  "Rabbit" } ]
          }
       ],
    
       "location": { "state": "WA", "county": "King", "city": "Seattle" },
       "isRegistered": true
    }
    

    Following is the SmithFamily document.

    {
       "id": "SmithFamily",
    
       "parents": [
          { "familyName": "Smith", "givenName": "James" },
          { "familyName": "Curtis", "givenName": "Helen" }
       ],
    
       "children": [
          {
             "givenName": "Michelle",
             "gender": "female",
             "grade": 1
          },
    
          {
             "givenName": "John",
             "gender": "male",
             "grade": 7,
    
             "pets": [
                { "givenName": "Tweetie", "type": "Bird" }
             ]
    
          }
       ],
    
       "location": {
          "state": "NY",
          "county": "Queens",
          "city": "Forest Hills"
       },
    
       "isRegistered": true
    }
    

    Following is the WakefieldFamily document.

    {
       "id": "WakefieldFamily",
    
       "parents": [
          { "familyName": "Wakefield", "givenName": "Robin" },
          { "familyName": "Miller", "givenName": "Ben" }
       ],
    
       "children": [
          {
             "familyName": "Merriam",
             "givenName": "Jesse",
             "gender": "female",
             "grade": 6,
    
             "pets": [
                { "givenName": "Charlie Brown", "type": "Dog" },
                { "givenName": "Tiger", "type": "Cat" },
                { "givenName": "Princess", "type": "Cat" }
             ]
          },
    
          {
             "familyName": "Miller",
             "givenName": "Lisa",
             "gender": "female",
             "grade": 3,
    
             "pets": [
                { "givenName": "Jake", "type": "Snake" }
             ]
    
          }
       ],
    
       "location": { "state": "NY", "county": "Manhattan", "city": "NY" },
       "isRegistered": false
    }
    

    The Query Explorer opens up with this simple query SELECT * FROM c, which simply retrieves all documents from the collection. Although it is simple, it”s still quite different than the equivalent query in a relational database.

    Step 2 − In relational databases, SELECT * means return all columns while in DocumentDB. It means that you want each document in your result to be returned exactly as it”s stored in the database.

    But when you select specific properties and expressions instead of simply issuing a SELECT *, then you are projecting a new shape that you want for each document in the result.

    Step 3 − Click ‘Run’ to execute query and open the Results blade.

    Open Results Blade

    As can be seen the WakefieldFamily, the SmithFamily, and the AndersonFamily are retrieved.

    Following are the three documents which are retrieved as a result of the SELECT * FROM c query.

    [
       {
          "id": "WakefieldFamily",
          "parents": [
             {
                "familyName": "Wakefield",
                "givenName": "Robin"
             },
    
             {
                "familyName": "Miller",
                "givenName": "Ben"
             }
          ],
    
          "children": [
             {
                "familyName": "Merriam",
                "givenName": "Jesse",
                "gender": "female",
                "grade": 6,
    
                "pets": [
                   {
                      "givenName": "Charlie Brown",
                      "type": "Dog"
                   },
    
                   {
                      "givenName": "Tiger",
                      "type": "Cat"
                   },
    
                   {
                      "givenName": "Princess",
                      "type": "Cat"
                   }
                ]
             },
    
             {
                "familyName": "Miller",
                "givenName": "Lisa",
                "gender": "female",
                "grade": 3,
    
                "pets": [
                   {
                      "givenName": "Jake",
                      "type": "Snake"
                   }
                ]
             }
          ],
    
          "location": {
             "state": "NY",
             "county": "Manhattan",
             "city": "NY"
          },
    
          "isRegistered": false,
          "_rid": "Ic8LAJFujgECAAAAAAAAAA==",
          "_ts": 1450541623,
          "_self": "dbs/Ic8LAA==/colls/Ic8LAJFujgE=/docs/Ic8LAJFujgECAAAAAAAAAA==/",
          "_etag": ""00000500-0000-0000-0000-567582370000"",
          "_attachments": "attachments/"
       },
    
       {
          "id": "SmithFamily",
          "parents": [
             {
                "familyName": "Smith",
                "givenName": "James"
             },
    
             {
                "familyName": "Curtis",
                "givenName": "Helen"
             }
          ],
    
          "children": [
             {
                "givenName": "Michelle",
                "gender": "female",
                "grade": 1
             },
    
             {
                "givenName": "John",
                "gender": "male",
                "grade": 7,
    
                "pets": [
                   {
                      "givenName": "Tweetie",
                      "type": "Bird"
                   }
                ]
             }
          ],
    
          "location": {
             "state": "NY",
             "county": "Queens",
             "city": "Forest Hills"
          },
    
          "isRegistered": true,
          "_rid": "Ic8LAJFujgEDAAAAAAAAAA==",
          "_ts": 1450541623,
          "_self": "dbs/Ic8LAA==/colls/Ic8LAJFujgE=/docs/Ic8LAJFujgEDAAAAAAAAAA==/",
          "_etag": ""00000600-0000-0000-0000-567582370000"",
          "_attachments": "attachments/"
       },
    
       {
          "id": "AndersenFamily",
          "lastName": "Andersen",
    
          "parents": [
             {
                "firstName": "Thomas",
                "relationship": "father"
             },
    
             {
                "firstName": "Mary Kay",
                "relationship": "mother"
             }
          ],
    
          "children": [
             {
                "firstName": "Henriette Thaulow",
                "gender": "female",
                "grade": 5,
    
                "pets": [
                   "givenName": "Fluffy",
                   "type": "Rabbit"
                ]
             }
          ],
    
          "location": {
             "state": "WA",
             "county": "King",
             "city": "Seattle"
          },
    
          "isRegistered": true,
          "_rid": "Ic8LAJFujgEEAAAAAAAAAA==",
          "_ts": 1450541624,
          "_self": "dbs/Ic8LAA==/colls/Ic8LAJFujgE=/docs/Ic8LAJFujgEEAAAAAAAAAA==/",
          "_etag": ""00000700-0000-0000-0000-567582380000"",
          "_attachments": "attachments/"
       }
    ]
    

    However, these results also include the system-generated properties that are all prefixed with the underscore character.


    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí DocumentDB – Between Keyword nhận dự án làm có lương

    DocumentDB SQL – Between Keyword



    The BETWEEN keyword is used to express queries against ranges of values like in SQL. BETWEEN can be used against strings or numbers. The main difference between using BETWEEN in DocumentDB and ANSI SQL is that you can express range queries against properties of mixed types.

    For example, in some document it is possible that you might have “grade” as a number and in other documents it might be strings. In these cases, a comparison between two different types of results is “undefined”, and the document will be skipped.

    Let us consider the three documents from the previous example. Following is the AndersenFamily document.

    {
       "id": "AndersenFamily",
       "lastName": "Andersen",
    
       "parents": [
          { "firstName": "Thomas", "relationship":  "father" },
          { "firstName": "Mary Kay", "relationship":  "mother" }
       ],
    
       "children": [
          {
             "firstName": "Henriette Thaulow",
             "gender": "female",
             "grade": 5,
             "pets": [ { "givenName": "Fluffy", "type":  "Rabbit" } ]
          }
       ],
    
       "location": { "state": "WA", "county": "King", "city": "Seattle" },
       "isRegistered": true
    }
    

    Following is the SmithFamily document.

    {
       "id": "SmithFamily",
    
       "parents": [
          { "familyName": "Smith", "givenName": "James" },
          { "familyName": "Curtis", "givenName": "Helen" }
       ],
    
       "children": [
          {
             "givenName": "Michelle",
             "gender": "female",
             "grade": 1
          },
    
          {
             "givenName": "John",
             "gender": "male",
             "grade": 7,
    
             "pets": [
                { "givenName": "Tweetie", "type": "Bird" }
             ]
          }
       ],
    
       "location": {
          "state": "NY",
          "county": "Queens",
          "city": "Forest Hills"
       },
    
       "isRegistered": true
    }
    

    Following is the WakefieldFamily document.

    {
       "id": "WakefieldFamily",
    
       "parents": [
          { "familyName": "Wakefield", "givenName": "Robin" },
          { "familyName": "Miller", "givenName": "Ben" }
       ],
    
       "children": [
          {
             "familyName": "Merriam",
             "givenName": "Jesse",
             "gender": "female",
             "grade": 6,
    
             "pets": [
                { "givenName": "Charlie Brown", "type": "Dog" },
                { "givenName": "Tiger", "type": "Cat" },
                { "givenName": "Princess", "type": "Cat" }
             ]
          },
    
          {
             "familyName": "Miller",
             "givenName": "Lisa",
             "gender": "female",
             "grade": 3,
    
             "pets": [
                { "givenName": "Jake", "type": "Snake" }
             ]
          }
       ],
    
       "location": { "state": "NY", "county": "Manhattan", "city": "NY" },
       "isRegistered": false
    }
    

    Let’s take a look at an example, where the query returns all family documents in which the first child”s grade is between 1-5 (both inclusive).

    Returns Family Documents

    Following is the query in which BETWEEN keyword is used and then AND logical operator.

    SELECT *
    FROM Families.children[0] c
    WHERE c.grade BETWEEN 1 AND 5
    

    When the above query is executed, it produces the following output.

    [
       {
          "givenName": "Michelle",
          "gender": "female",
          "grade": 1
       },
    
       {
          "firstName": "Henriette Thaulow",
          "gender": "female",
          "grade": 5,
    
          "pets": [
             {
                "givenName": "Fluffy",
                "type": "Rabbit"
             }
          ]
       }
    ]
    

    To display the grades outside the range of the previous example, use NOT BETWEEN as shown in the following query.

    SELECT *
    FROM Families.children[0] c
    WHERE c.grade NOT BETWEEN 1 AND 5
    

    When this query is executed. It produces the following output.

    [
       {
          "familyName": "Merriam",
          "givenName": "Jesse",
          "gender": "female",
          "grade": 6,
    
          "pets": [
             {
                "givenName": "Charlie Brown",
                "type": "Dog"
             },
    
             {
                "givenName": "Tiger",
                "type": "Cat"
             },
    
             {
                "givenName": "Princess",
                "type": "Cat"
             }
          ]
       }
    ]
    

    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí DocumentDB SQL – In Keyword nhận dự án làm có lương

    DocumentDB SQL – In Keyword



    The IN keyword can be used to check whether a specified value matches any value in a list. The IN operator allows you to specify multiple values in a WHERE clause. IN is equivalent to chaining multiple OR clauses.

    The similar three documents are considered as done in earlier examples. Following is the AndersenFamily document.

    {
       "id": "AndersenFamily",
       "lastName": "Andersen",
    
       "parents": [
          { "firstName": "Thomas", "relationship":  "father" },
          { "firstName": "Mary Kay", "relationship":  "mother" }
       ],
    
       "children": [
          {
             "firstName": "Henriette Thaulow",
             "gender": "female",
             "grade": 5,
             "pets": [ { "givenName": "Fluffy", "type":  "Rabbit" } ]
          }
       ],
    
       "location": { "state": "WA", "county": "King", "city": "Seattle" },
       "isRegistered": true
    }
    

    Following is the SmithFamily document.

    {
       "id": "SmithFamily",
    
       "parents": [
          { "familyName": "Smith", "givenName": "James" },
          { "familyName": "Curtis", "givenName": "Helen" }
       ],
    
       "children": [
          {
             "givenName": "Michelle",
             "gender": "female",
             "grade": 1
          },
    
          {
             "givenName": "John",
             "gender": "male",
             "grade": 7,
    
             "pets": [
                { "givenName": "Tweetie", "type": "Bird" }
             ]
          }
       ],
    
       "location": {
          "state": "NY",
          "county": "Queens",
          "city": "Forest Hills"
       },
    
       "isRegistered": true
    }
    

    Following is the WakefieldFamily document.

    {
       "id": "WakefieldFamily",
    
       "parents": [
          { "familyName": "Wakefield", "givenName": "Robin" },
          { "familyName": "Miller", "givenName": "Ben" }
       ],
    
       "children": [
          {
             "familyName": "Merriam",
             "givenName": "Jesse",
             "gender": "female",
             "grade": 6,
    
             "pets": [
                { "givenName": "Charlie Brown", "type": "Dog" },
                { "givenName": "Tiger", "type": "Cat" },
                { "givenName": "Princess", "type": "Cat" }
             ]
          },
    
          {
             "familyName": "Miller",
             "givenName": "Lisa",
             "gender": "female",
             "grade": 3,
    
             "pets": [
                { "givenName": "Jake", "type": "Snake" }
             ]
          }
       ],
    
       "location": { "state": "NY", "county": "Manhattan", "city": "NY" },
       "isRegistered": false
    }
    

    Let’s take a look at a simple example.

    In KeyWord

    Following is the query which will retrieve the data whose familyName is either “Smith” or Wakefield.

    SELECT *
    FROM Families.parents[0] f
    WHERE f.familyName IN (''Smith'', ''Wakefield'')
    

    When the above query is executed, it produces the following output.

    [
       {
          "familyName": "Wakefield",
          "givenName": "Robin"
       },
    
       {
          "familyName": "Smith",
          "givenName": "James"
       }
    ]
    

    Let’s consider another simple example in which all family documents will be retrieved where the id is one of “SmithFamily” or “AndersenFamily”. Following is the query.

    SELECT *
    FROM Families
    WHERE Families.id IN (''SmithFamily'', ''AndersenFamily'')
    

    When the above query is executed, it produces the following output.

    [
       {
          "id": "SmithFamily",
          "parents": [
             {
                "familyName": "Smith",
                "givenName": "James"
             },
    
             {
                "familyName": "Curtis",
                "givenName": "Helen"
             }
          ],
    
          "children": [
             {
                "givenName": "Michelle",
                "gender": "female",
                "grade": 1
             },
    
             {
                "givenName": "John",
                "gender": "male",
                "grade": 7,
    
                "pets": [
                   {
                      "givenName": "Tweetie",
                      "type": "Bird"
                   }
                ]
             }
          ],
    
          "location": {
             "state": "NY",
             "county": "Queens",
             "city": "Forest Hills"
          },
    
          "isRegistered": true,
          "_rid": "Ic8LAJFujgEDAAAAAAAAAA==",
          "_ts": 1450541623,
          "_self": "dbs/Ic8LAA==/colls/Ic8LAJFujgE=/docs/Ic8LAJFujgEDAAAAAAAAAA==/",
          "_etag": ""00000600-0000-0000-0000-567582370000"",
          "_attachments": "attachments/"
       },
    
       {
          "id": "AndersenFamily",
          "lastName": "Andersen",
    
          "parents": [
             {
                "firstName": "Thomas",
                "relationship": "father"
             },
    
             {
                "firstName": "Mary Kay",
                "relationship": "mother"
             }
          ],
    
          "children": [
             {
                "firstName": "Henriette Thaulow",
                "gender": "female",
                "grade": 5,
    
                "pets": [
                   {
                      "givenName": "Fluffy",
                      "type": "Rabbit"
                   }
                ]
             }
          ],
    
          "location": {
             "state": "WA",
             "county": "King",
             "city": "Seattle"
          },
    
          "isRegistered": true,
          "_rid": "Ic8LAJFujgEEAAAAAAAAAA==",
          "_ts": 1450541624,
          "_self": "dbs/Ic8LAA==/colls/Ic8LAJFujgE=/docs/Ic8LAJFujgEEAAAAAAAAAA==/",
          "_etag": ""00000700-0000-0000-0000-567582380000"",
          "_attachments": "attachments/"
       }
    ]
    

    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí DocumentDB SQL – From Clause nhận dự án làm có lương

    DocumentDB SQL – From Clause



    In this chapter, we will cover the FROM clause, which works nothing like a standard FROM clause in regular SQL.

    Queries always run within the context of a specific collection and cannot join across documents within the collection, which makes us wonder why we need a FROM clause. In fact, we don”t, but if we don”t include it, then we won”t be querying documents in the collection.

    The purpose of this clause is to specify the data source upon which the query must operate. Commonly the whole collection is the source, but one can specify a subset of the collection instead. The FROM <from_specification> clause is optional unless the source is filtered or projected later in the query.

    Let’s take a look at the same example again. Following is the AndersenFamily document.

    {
       "id": "AndersenFamily",
       "lastName": "Andersen",
    
       "parents": [
          { "firstName": "Thomas", "relationship":  "father" },
          { "firstName": "Mary Kay", "relationship":  "mother" }
       ],
    
       "children": [
          {
             "firstName": "Henriette Thaulow",
             "gender": "female",
             "grade": 5,
             "pets": [ { "givenName": "Fluffy", "type":  "Rabbit" } ]
          }
       ],
    
       "location": { "state": "WA", "county": "King", "city": "Seattle" },
       "isRegistered": true
    }
    

    Following is the SmithFamily document.

    {
       "id": "SmithFamily",
    
       "parents": [
          { "familyName": "Smith", "givenName": "James" },
          { "familyName": "Curtis", "givenName": "Helen" }
       ],
    
       "children": [
          {
             "givenName": "Michelle",
             "gender": "female",
             "grade": 1
          },
    
          {
             "givenName": "John",
             "gender": "male",
             "grade": 7,
    
             "pets": [
                { "givenName": "Tweetie", "type": "Bird" }
             ]
          }
       ],
    
       "location": {
          "state": "NY",
          "county": "Queens",
          "city": "Forest Hills"
       },
    
       "isRegistered": true
    }
    

    Following is the WakefieldFamily document.

    {
       "id": "WakefieldFamily",
    
       "parents": [
          { "familyName": "Wakefield", "givenName": "Robin" },
          { "familyName": "Miller", "givenName": "Ben" }
       ],
    
       "children": [
          {
             "familyName": "Merriam",
             "givenName": "Jesse",
             "gender": "female",
             "grade": 6,
    
             "pets": [
                { "givenName": "Charlie Brown", "type": "Dog" },
                { "givenName": "Tiger", "type": "Cat" },
                { "givenName": "Princess", "type": "Cat" }
             ]
          },
    
          {
             "familyName": "Miller",
             "givenName": "Lisa",
             "gender": "female",
             "grade": 3,
    
             "pets": [
                { "givenName": "Jake", "type": "Snake" }
             ]
          }
       ],
    
       "location": { "state": "NY", "county": "Manhattan", "city": "NY" },
       "isRegistered": false
    }
    
    WakefieldFamily

    In the above query, “SELECT * FROM c” indicates that the entire Families collection is the source over which to enumerate.

    Sub-documents

    The source can also be reduced to a smaller subset. When we want to retrieve only a subtree in each document, the sub-root could then become the source, as shown in the following example.

    Sub-documents

    When we run the following query −

    SELECT * FROM Families.parents
    

    The following sub-documents will be retrieved.

    [
       [
          {
             "familyName": "Wakefield",
             "givenName": "Robin"
          },
    
          {
             "familyName": "Miller",
             "givenName": "Ben"
          }
       ],
    
       [
          {
             "familyName": "Smith",
             "givenName": "James"
          },
    
          {
             "familyName": "Curtis",
             "givenName": "Helen"
          }
       ],
    
       [
          {
             "firstName": "Thomas",
             "relationship": "father"
          },
    
          {
             "firstName": "Mary Kay",
             "relationship": "mother"
          }
       ]
    ]
    

    As a result of this query, we can see that only the parents sub-documents are retrieved.


    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí DocumentDB SQL – Home nhận dự án làm có lương

    DocumentDB SQL Tutorial

    DocumentDB SQL Tutorial







    DocumentDB is Microsoft”s newest NoSQL document database platform that runs on Azure. DocumentDB is designed keeping in mind the requirements of managing data for latest applications. This tutorial talks about querying documents using the special version of SQL supported by DocumentDB with illustrative examples.

    Audience

    This tutorial is designed for developers who want to get acquainted with how to query DocumentDB using a familiar Structured Query Language (SQL).

    Prerequisites

    It is an elementary tutorial that explains the basics of DocumentDB and there are no prerequisites as such. However, it will certainly help if you have some prior exposure to NoSQL technologies.

    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí DocumentDB SQL – Operators nhận dự án làm có lương

    DocumentDB SQL – Operators



    An operator is a reserved word or a character used primarily in an SQL WHERE clause to perform operation(s), such as comparisons and arithmetic operations. DocumentDB SQL also supports a variety of scalar expressions. The most commonly used are binary and unary expressions.

    The following SQL operators are currently supported and can be used in queries.

    SQL Comparison Operators

    Following is a list of all the comparison operators available in DocumentDB SQL grammar.

    S.No. Operators & Description
    1

    =

    Checks if the values of two operands are equal or not. If yes, then condition becomes true.

    2

    !=

    Checks if the values of two operands are equal or not. If values are not equal then condition becomes true.

    3

    <>

    Checks if the values of two operands are equal or not. If values are not equal then condition becomes true.

    4

    >

    Checks if the value of left operand is greater than the value of right operand. If yes, then condition becomes true.

    5

    <

    Checks if the value of left operand is less than the value of right operand. If yes, then condition becomes true.

    6

    >=

    Checks if the value of left operand is greater than or equal to the value of right operand. If yes, then condition becomes true.

    7

    <=

    Checks if the value of left operand is less than or equal to the value of right operand. If yes, then condition becomes true.

    SQL Logical Operators

    Following is a list of all the logical operators available in DocumentDB SQL grammar.

    S.No. Operators & Description
    1

    AND

    The AND operator allows the existence of multiple conditions in an SQL statement”s WHERE clause.

    2

    BETWEEN

    The BETWEEN operator is used to search for values that are within a set of values, given the minimum value and the maximum value.

    3

    IN

    The IN operator is used to compare a value to a list of literal values that have been specified.

    4

    OR

    The OR operator is used to combine multiple conditions in an SQL statement”s WHERE clause.

    5

    NOT

    The NOT operator reverses the meaning of the logical operator with which it is used. For example, NOT EXISTS, NOT BETWEEN, NOT IN, etc. This is a negate operator.

    SQL Arithmetic Operators

    Following is a list of all the arithmetic operators available in DocumentDB SQL grammar.

    S.No. Operators & Description
    1

    +

    Addition − Adds values on either side of the operator.

    2

    Subtraction − Subtracts the right hand operand from the left hand operand.

    3

    *

    Multiplication − Multiplies values on either side of the operator.

    4

    /

    Division − Divides the left hand operand by the right hand operand.

    5

    %

    Modulus − Divides the left hand operand by the right hand operand and returns the remainder.

    We will consider the same documents in this example as well. Following is the AndersenFamily document.

    {
       "id": "AndersenFamily",
       "lastName": "Andersen",
    
       "parents": [
          { "firstName": "Thomas", "relationship":  "father" },
          { "firstName": "Mary Kay", "relationship":  "mother" }
       ],
    
       "children": [
          {
             "firstName": "Henriette Thaulow",
             "gender": "female",
             "grade": 5,
             "pets": [ { "givenName": "Fluffy", "type":  "Rabbit" } ]
          }
       ],
    
       "location": { "state": "WA", "county": "King", "city": "Seattle" },
       "isRegistered": true
    }
    

    Following is the SmithFamily document.

    {
       "id": "SmithFamily",
    
       "parents": [
          { "familyName": "Smith", "givenName": "James" },
          { "familyName": "Curtis", "givenName": "Helen" }
       ],
    
       "children": [
          {
             "givenName": "Michelle",
             "gender": "female",
             "grade": 1
          },
    
          {
             "givenName": "John",
             "gender": "male",
             "grade": 7,
    
             "pets": [
                { "givenName": "Tweetie", "type": "Bird" }
             ]
          }
       ],
    
       "location": {
          "state": "NY",
          "county": "Queens",
          "city": "Forest Hills"
       },
    
       "isRegistered": true
    }
    

    Following is the WakefieldFamily document.

    {
       "id": "WakefieldFamily",
    
       "parents": [
          { "familyName": "Wakefield", "givenName": "Robin" },
          { "familyName": "Miller", "givenName": "Ben" }
       ],
    
       "children": [
          {
             "familyName": "Merriam",
             "givenName": "Jesse",
             "gender": "female",
             "grade": 6,
    
             "pets": [
                { "givenName": "Charlie Brown", "type": "Dog" },
                { "givenName": "Tiger", "type": "Cat" },
                { "givenName": "Princess", "type": "Cat" }
             ]
          },
    
          {
             "familyName": "Miller",
             "givenName": "Lisa",
             "gender": "female",
             "grade": 3,
    
             "pets": [
                { "givenName": "Jake", "type": "Snake" }
             ]
          }
       ],
    
       "location": { "state": "NY", "county": "Manhattan", "city": "NY" },
       "isRegistered": false
    }
    

    Let’s take a look at a simple example in which a comparison operator is used in WHERE clause.

    Comparison Operator

    In this query, in WHERE clause, the (WHERE f.id = “WakefieldFamily”) condition is specified, and it will retrieve the document whose id is equal to WakefieldFamily.

    SELECT *
    FROM f
    WHERE f.id = "WakefieldFamily"
    

    When the above query is executed, it will return the complete JSON document for WakefieldFamily as shown in the following output.

    [
       {
          "id": "WakefieldFamily",
          "parents": [
             {
                "familyName": "Wakefield",
                "givenName": "Robin"
             },
    
             {
                "familyName": "Miller",
                "givenName": "Ben"
             }
          ],
    
          "children": [
             {
                "familyName": "Merriam",
                "givenName": "Jesse",
                "gender": "female",
                "grade": 6,
    
                "pets": [
                   {
                      "givenName": "Charlie Brown",
                      "type": "Dog"
                   },
    
                   {
                      "givenName": "Tiger",
                      "type": "Cat"
                   },
    
                   {
                      "givenName": "Princess",
                      "type": "Cat"
                   }
                ]
    
             },
    
             {
                "familyName": "Miller",
                "givenName": "Lisa",
                "gender": "female",
                "grade": 3,
    
                "pets": [
                   {
                      "givenName": "Jake",
                      "type": "Snake"
                   }
                ]
             }
          ],
    
          "location": {
             "state": "NY",
             "county": "Manhattan",
             "city": "NY"
          },
    
          "isRegistered": false,
          "_rid": "Ic8LAJFujgECAAAAAAAAAA==",
          "_ts": 1450541623,
          "_self": "dbs/Ic8LAA==/colls/Ic8LAJFujgE=/docs/Ic8LAJFujgECAAAAAAAAAA==/",
          "_etag": ""00000500-0000-0000-0000-567582370000"",
          "_attachments": "attachments/"
       }
    ]
    

    Let’s take a look at another example in which the query will retrieve the children data whose grade is greater than 5.

    SELECT *
    FROM Families.children[0] c
    WHERE (c.grade > 5)
    

    When the above query is executed, it will retrieve the following sub document as shown in the output.

    [
       {
          "familyName": "Merriam",
          "givenName": "Jesse",
          "gender": "female",
          "grade": 6,
    
          "pets": [
             {
                "givenName": "Charlie Brown",
                "type": "Dog"
             },
    
             {
                "givenName": "Tiger",
                "type": "Cat"
             },
    
             {
                "givenName": "Princess",
                "type": "Cat"
             }
          ]
       }
    ]
    

    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc