欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL基礎查詢和LINQ集成化查詢

 更新時間:2022年01月17日 15:01:33   作者:癡者工良  
本文詳細講解了SQL基礎查詢和LINQ集成化查詢,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

SELECT

SELECT 語句用于從表中選取數(shù)據,是 SQL 最基本的操作之一。

通過 SELECT 查詢的結果被存儲在一個結果表中(稱為結果集)。

SQL SELECT 語法

只查詢某個列的數(shù)據:

SELECT [列名稱] FROM [表名稱]

查詢所有列的數(shù)據

SELECT * FROM [表名稱]

SQL

查詢所有數(shù)據

SELECT * FROM categories

查詢一列或多列

SELECT category_id,category_name FROM categories

查詢表達式

            var list = from categories in context.Categories
                       select new
                       {
                           categories.CategoryId,
                           categories.CategoryName
                       };

            var lists = from categories in context.Categories
                        select categories;

查詢語句

            var list = context.Categories.Select(categories =>
            new
            {
                categories.CategoryId,
                categories.CategoryName
            });
            var lists = context.Categories.Select(categories => categories);

SQL SELECT DISTINCT 語句

DISTINCT 可以去除查詢結果集中完全相同的項,只有每一個列中每一個數(shù)據都相同,才能被認為是“完全相同”。

可在 categories 表中添加相同數(shù)據的項進行測試(除主鍵外相同)。

SQL

SELECT DISTINCT category_id,category_name FROM categories

查詢表達式

            var dislist = list.Distinct();

            var dislist2 = (from categories in context.Categories
                            select new
                            {
                                categories.CategoryId,
                                categories.CategoryName
                            }).Distinct();

查詢語句

            var dislist = list.Distinct();
            var dislist2 = context.Categories.Distinct().Select(categories =>
              new
              {
                  categories.CategoryId,
                  categories.CategoryName
              });

WHERE 和 操作符

用于條件篩選。

操作符描述
=等于
<>不等于
>大于
<小于
>=大于等于
<=小于等于
BETWEEN在某個范圍內
LIKE搜索某種模式

注釋:在某些版本的 SQL 中,操作符 <> 可以寫為 !=。

BETWEEN 和操作符

BETWEEN ... AND 或 BETWEEN ... OR

C# 中可以使用 && 或 ||表示。

SQL

SELECT [列名稱] FROM [表名稱] WHERE [列] [運算符] [值]
SELECT
	category_id,
	category_name 
FROM
	categories 
WHERE
	BETWEEN category_id > 1 
	AND category_id < 5

查詢表達式

            var list3 = from categories in context.Categories
                        where categories.CategoryId > 1 && categories.CategoryId < 5
                        select categories;

查詢語句

            var list3 = context.Categories.Where(x => x.CategoryId > 1 && x.CategoryId < 5);

LIKE 和通配符

在 SQL 中,可使用以下通配符:

通配符描述
%替代一個或多個字符
_僅替代一個字符
[charlist]字符列中的任何單一字符
[^charlist]或者[!charlist]不在字符列中的任何單一字符

SQL

SELECT * FROM categories WHERE  category_name like 'B%'

查詢表達式

            var list4 = from categories in context.Categories
                        where categories.CategoryName.StartsWith("B")
                        select categories;

不能直接使用 %。

查詢語句

            var list4 = context.Categories.Where(x => x.CategoryName.StartsWith("B"));

Linq 只有 Startwith 、 Endwith 和 Contains,沒有其它通配符。

而 EF中提供了 EF.Functions.Like() 來進行通配符操作。

例如:

            var list5 = from categories in context.Categories
                        where EF.Functions.Like(categories.CategoryName,"B_")
                        select categories;
            var list5 = context.Categories.Where(x => EF.Functions.Like(x.CategoryName, "B_"));

更多通配符操作,請自行了解 EF.Functions.Like()。

ORDER BY 排序

SQL

SELECT * FROM categories ORDER BY category_id

C#

            var list6 = (from categories in context.Categories
                         select categories).OrderBy(c => c.CategoryId);


            var list7 = from categories in context.Categories
                        orderby categories.CategoryId
                        select categories;
            var list6 = context.Categories.OrderBy(x => x.CategoryId).ToList();

            var list7 = context.Categories.ToList().OrderBy(x=>x.CategoryId);

TOP

PostgreSQL 中沒有 TOP,可以使用 OFFSET、LIMIT 代替。

SELECT select_list
    FROM table_expression
    [ ORDER BY ... ]
    [ LIMIT { number | ALL } ] [ OFFSET number ]

Top(5) 的表達

SELECT * FROM test ORDER BY test  LIMIT 5

或者

SELECT * FROM test OFFSET 0 LIMIT 5

一般與 Order by 一起使用

SELECT * FROM test ORDER BY test OFFSET 5 LIMIT 5

LIMIT ALL 的效果和省略LIMIT子句一樣,例如下面的 SQL 或獲取全部數(shù)據。

SELECT * FROM test LIMIT ALL   --等價 SELECT * FROM test

C#代碼中,則相應使用 Take 、 Skip。

            var list = (from c in context.UserRoles
                        select c).Skip(0).Take(5);
            var list = context.UserRoles.Skip(0).Task(5);

例外:

T-SQL 中的 Top(1) ,在 PostgreSQL 中,可以表示

SELECT * FROM test LIMIT 1

而 C# 表示:

            var list00 = (from c in context.UserRoles
                         select c).First();
            var list01 = (from c in context.UserRoles
                          select c).FirstOrDefault();
            var list02 = (from c in context.UserRoles
                          select c).Take(1);

            var list10 = context.UserRoles.First();
            var list11 = context.UserRoles.FirstOrDefault();
            var list12 = context.UserRoles.Take(1);

可以使用 First() 或 FirstOrDefault() 返回查詢結果中的第一條數(shù)據,方法體中不加條件,相當于 Top(1)。

TakeWhile 和 SkipWhile

TakeWhile

運行查詢,直到某一條件成立才停止獲??;即當條件成立時,才會停止。

SkipWhile

運行查詢,直到某一條件成立才停止跳過;即當條件成立時,才會開始。

In

與 Where 一起使用,表示符合條件中的一個。

SELECT * FROM test WHERE test IN ('1','2')
SELECT * FROM test WHERE test NOT IN ('1','2')

C# 中用 Contains 表示

            string[] item = new string[] { "a","b","c"};
            var list = from c in context.UserRoles
                       where item.Contains(c.RoleId)
                       select c;
            var list2 = context.UserRoles.Where(x => item.Contains(x.RoleId));

Alias(as)

SQL 中,可以給查詢的列設置別名,例如

SELECT test as ttttt FROM test 

C#中,應該無直接如此的操作。

不過,很多操作形式最后生成的 SQL 都會出現(xiàn) AS。

EXISTS 和 NOT EXISTS

SQLC#
INContains
EXISTSAny
NOT EXISTSAll

EXISTS

判斷子查詢中是否有結果集返回,如果有即為 TRUE。

子查詢中應當有 where 等條件

SELECT * FROM test EXISTS ({子查詢})

EXISTS 并不關注 子查詢中返回了什么、返回了多少結果集,它只判斷有沒有結果返回(查詢返回的結果集,行數(shù)>0)。

例如

SELECT * FROM test EXISTS (SELECT 1 FROM test where test == "a")

C#

使用 .Any()

            var list = from s in context.UserRoles
                       where (from c in context.UserRoles
                              select c).Any()
                       select s;
            var list2 = context.UserRoles.Where(x => context.UserRoles.Any());

Any() 中也可以加條件

            var list = from s in context.UserRoles
                       where (from c in context.UserRoles
                              select c).Any(x => x.RoleId != "x")
                       select s;
            var list2 = context.UserRoles.Where(x => context.UserRoles.Any(x => x.RoleId != "x"));

NOT EXISTS

無結果集返回則為,沒有返回則為 TRUE。

子查詢中應當有 where 等條件判斷。

Linq 的 拓展方法 All,表示每一個元素是否都符合條件。返回 Bool。。

            var list = from s in context.UserRoles
                       where context.UserRoles.All(x=>x.RoleId=="a")
                       select s;
            var list2 = context.UserRoles.Where(x => context.UserRoles.All(x => x.RoleId == "x"));

In 比 EXISTS 的速度快。

到此這篇關于SQL基礎查詢和LINQ集成化查詢的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • SqlServer異常處理常用步驟

    SqlServer異常處理常用步驟

    SQL Server常見的問題主要是SQL問題造成,常見的主要是CPU過高和阻塞。關于SqlServer異常處理常用步驟有哪些呢?大家了解嗎?下面小編通過本篇文章給大家介紹SqlServer異常處理常用步驟,感興趣的朋友一起看看吧
    2015-11-11
  • SQL Server基礎之行數(shù)據轉換為列數(shù)據

    SQL Server基礎之行數(shù)據轉換為列數(shù)據

    這篇文章主要給大家介紹了關于SQL Server基礎之行數(shù)據轉換為列數(shù)據的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用SQL Server具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • SQLServer批量更新兩個關聯(lián)表數(shù)據的方法

    SQLServer批量更新兩個關聯(lián)表數(shù)據的方法

    這篇文章主要介紹了SQLServer批量更新兩個關聯(lián)表數(shù)據的方法,提供了2種關聯(lián)查詢與更新語句的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • 通過SQL語句直接把表導出為XML格式

    通過SQL語句直接把表導出為XML格式

    有時候我們需要把從數(shù)據庫里讀出的數(shù)據直接保存為XML的形式,這里我們通過SQL語句就可以達到這種效果。
    2010-09-09
  • Row_number()函數(shù)用法小結

    Row_number()函數(shù)用法小結

    Row_number()函數(shù)是SQL SERVER系統(tǒng)函數(shù)中的一種,本文主要介紹了Row_number()函數(shù)用法小結,文中根據實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-05-05
  • SQL Server 數(shù)據庫中的收縮數(shù)據庫和文件操作

    SQL Server 數(shù)據庫中的收縮數(shù)據庫和文件操作

    收縮數(shù)據文件通過將數(shù)據頁從文件末尾移動到更靠近文件開頭的未占用的空間來恢復空間,在文件末尾創(chuàng)建足夠的空間后,可取消對文件末尾的數(shù)據頁的分配并將它們返回給文件系統(tǒng),本文給大家介紹SQL Server 數(shù)據庫中的收縮數(shù)據庫和文件的相關知識,一起看看吧
    2023-07-07
  • SQL Server 2008 到底需要使用哪些端口?

    SQL Server 2008 到底需要使用哪些端口?

    SQL Server在安裝到服務器上后,由于出于服務器安全的需要,所以需要屏蔽掉所有不使用的端口,只開放必須使用的端口。
    2012-10-10
  • SqlServer存儲過程實現(xiàn)及拼接sql的注意點

    SqlServer存儲過程實現(xiàn)及拼接sql的注意點

    這篇文章主要介紹了SqlServer存儲過程實現(xiàn)及拼接sql的注意點的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • 徹底刪除SQL Server注冊表的方法

    徹底刪除SQL Server注冊表的方法

    在卸載SQL Server后,大家都希望能夠將注冊表信息完全刪干凈,下面就將教您徹底刪除SQL Server注冊表的方法,需要的朋友可以參考下
    2015-08-08
  • 深入SQLServer中ISNULL與NULLIF的使用詳解

    深入SQLServer中ISNULL與NULLIF的使用詳解

    本篇文章是對SQLServer中ISNULL與NULLIF的使用進行了詳細分析介紹,需要的朋友參考下
    2013-06-06

最新評論