SQL基础查询和LINQ集成化查询
作者:痴者工良 发布时间:2024-01-18 21:51:47
SELECT
SELECT 语句用于从表中选取数据,是 SQL 最基本的操作之一。
通过 SELECT 查询的结果被存储在一个结果表中(称为结果集)。
SQL SELECT 语法
只查询某个列的数据:
SELECT [列名称] FROM [表名称]
查询所有列的数据
SELECT * FROM [表名称]
SQL
查询所有数据
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 可以去除查询结果集中完全相同的项,只有每一个列中每一个数据都相同,才能被认为是“完全相同”。
可在 categories 表中添加相同数据的项进行测试(除主键外相同)。
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 或获取全部数据。
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() 返回查询结果中的第一条数据,方法体中不加条件,相当于 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 都会出现 AS。
EXISTS 和 NOT EXISTS
SQL | C# |
---|---|
IN | Contains |
EXISTS | Any |
NOT EXISTS | All |
EXISTS
判断子查询中是否有结果集返回,如果有即为 TRUE。
子查询中应当有 where 等条件
SELECT * FROM test EXISTS ({子查询})
EXISTS 并不关注 子查询中返回了什么、返回了多少结果集,它只判断有没有结果返回(查询返回的结果集,行数>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 的速度快。
来源:https://www.cnblogs.com/whuanle/p/11360160.html
猜你喜欢
- ceil()方法返回x的值上限 - 不小于x的最小整数。语法以下是ceil()方法的语法:import mathmath.cei
- 本文实例为大家分享了python接入微信聊天机器人的具体代码,供大家参考,具体内容如下1.安装库wxpy:pip install -U wx
- 4款JavaScript放大镜特效脚本。准确的说,Anythingzoomer和Bezoom才是正宗的放大镜特效,当鼠标悬浮在图片上时,能放
- 呵呵,先说明一下下面的程序大部分收集自网络,因为本人在asp编程中经常使用到随机函数,所以收集了一些这类的函数,并做了些注释,方便使用。首发
- 在访问数据库时,特别是新手,可能会需要查询表中数据总数,以下这段代码可以非常简便的获取到数据数目//先建立数据库连接,执行查询语句Conne
- 使用MySQL,安全问题不能不注意。以下是MySQL提示的23个注意事项:1.如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就
- 实例如下所示:import numpy as npW_val, b_val = sess.run([weights_tensor, bias
- 1.我们看到字典形式的数据如下所示list=[["2891-1", "D"],["2892
- 前言最近在研究 pyecharts 的用法,它是 python 的一个可视化工具,然后就想着结合微信来一起玩不多说,直接看效果:
- 本文介绍了4个asp数据库管理中常用到的access数据库操作程序,一般的网站管理后台都提供了这个功能,方便管理员对数据库数据的管理维护。1
- 字体大小CSS2规范根据长度——水平和垂直尺寸——来定义字体。这个长度为一个数值,前面可能带一个可选的加(+)或减(-)标记符。另外,该数值
- 作用域:顾名思义,作用的范围。如果你是自学者,而且已经进军到函数这一部分了,那么就应当了解下Python的作用域。否则你可能会像我一样,总是
- Python代码集体右移的方法:直接选中需要右移的代码,按tab键即可。Python中代码集体左移的方法:直接选中需要左移的代码,按shif
- 如下所示:将i前面加str(i)就可以了补充拓展:python 连接字符串和数字 python 连接字符串和数字的问题:首先要说的
- 要想在不宽裕的页面展现丰富的内容,现在通用的做法使用tab,在一块区域通过tab切换来更换该区域的内容。这篇文章分析了tab设计很在理,今天
- Anaconda是一个开源的Python发行版本,包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等。其
- 1.在浏览器上搜索PyCharmhttps://www.jetbrains.com/pycharm/download/#section=wi
- 最近开始学Python,想直接通过命令行的方式进行学习。奈何没有Tab补全,操作实在麻烦,网上各种百度后无果(x64系统,x86的可以直接下
- 源自MySQL 5.7 官方手册 手册地址一、SELECT…INTO介绍SELECT…INTO用
- 最近一直在玩数独,突发奇想实现图像识别求解数独,输入到输出平均需要0.5s。整体思路大概就是识别出图中数字生成list,然后求解。输入输出d