一. SQL 开篇
1. where用法
1 #region 封装EF调用SQL语句查询
2 public static List<T> ExecuteQuery<T>(string sql, params SqlParameter[] pars)
3 {
4 return db.Database.SqlQuery<T>(sql, pars).ToList();
5 }
6 #endregion
1 #region 01-where用法2 {3 //1. where用法4 //1.1 查询账号为admin的用户信息5 Console.WriteLine("---------------------------- 1. where用法 ----------------------------------------");6 Console.WriteLine("---------------------------- 1.1 查询账号为admin的用户信息 ----------------------------------------");7 string sql1 = @"select * from Sys_UserInfor where userAccount = 'admin'";8 List<Sys_UserInfor> sUserList1 = ExecuteQuery<Sys_UserInfor>(sql1);9 foreach (var item in sUserList1)
10 {
11 Console.WriteLine("用户名:{0},用户账号:{1},用户年龄:{2},用户性别:{3}", item.userName, item.userAccount, item.userAge, item.userSex);
12 }
13 //1.2 查询账号为中包含admin且性别为男的用户信息
14 Console.WriteLine("---------------------------- 1.2 查询账号为中包含admin且性别为男的用户信息 ----------------------------------------");
15 string sql2 = @"select * from Sys_UserInfor where userAccount like '%admin%' and userSex='男'";
16 List<Sys_UserInfor> sUserList2 = ExecuteQuery<Sys_UserInfor>(sql2);
17 foreach (var item in sUserList2)
18 {
19 Console.WriteLine("用户名:{0},用户账号:{1},用户年龄:{2},用户性别:{3}", item.userName, item.userAccount, item.userAge, item.userSex);
20 }
21 }
22 #endregion
2. select用法
1 #region 02-select用法2 {3 //2. select用法 (SQL语句中,查询部分字段,必须要有个实体接收,不能用var类型接收)4 //2.1 查询账号中包含 admin 的用户的 姓名、年龄和性别 三条信息5 Console.WriteLine("---------------------------- 2. select用法 ----------------------------------------");6 Console.WriteLine("-------------2.1 查询账号中包含 admin 的用户的 姓名、年龄和性别 三条信息 )-------------------------");7 string sql1 = @"select userName,userAge,userSex from Sys_UserInfor where userAccount like '%admin%'";8 List<model1> sUserList1 = ExecuteQuery<model1>(sql1);9 sUserList1.ForEach(u =>
10 {
11 Console.WriteLine("用户名:{0},用户年龄:{1},用户性别:{2}", u.userName, u.userAge, u.userSex);
12 });
13
14 }
15 #endregion
3. order by用法
1 #region 03-order by用法2 {3 //区分:在Lambda中有 orderby(OrderByDescending、ThenBy、ThenByDescending),但在SQL中 只有order by asc(默认是升序) 和order by desc4 //需要按照多个条件进行升序或降序,格式为: order by x1, x2 descending,x3(表示先按照x1升序排,x1相同的话,再按照x2降序排,x2相同的话,在按照x3升序排列)5 //3. Order By用法 (单条件升降序、多条件综合排序)6 //3.1 查询delflag 为1 的所有用户信息,按照时间升序排列7 Console.WriteLine("------3. orderby用法 (单条件升降序、多条件综合排序)-------------");8 Console.WriteLine("--------------------- 3.1 查询delflag 为1 的所有用户信息,按照时间升序排列 ------------------------------");9
10 string sql1 = @"select * from Sys_UserInfor where delFlag =1 order by addTime";
11 List<Sys_UserInfor> sUserList1 = ExecuteQuery<Sys_UserInfor>(sql1);
12 foreach (var item in sUserList1)
13 {
14 Console.WriteLine("用户名:{0},用户账号:{1},用户年龄:{2},用户性别:{3},创建时间:{4}", item.userName, item.userAccount, item.userAge, item.userSex, item.addTime);
15 }
16 //3.2 查询delflag 为1 的所有用户信息,先按照时间升序排列,再按照年龄降序
17 Console.WriteLine("---------------3.2 查询delflag 为1 的所有用户信息,先按照时间升序排列,再按照年龄降序----------------------");
18 string sql2 = @"select * from Sys_UserInfor where delFlag =1 order by addTime,userAge desc";
19 List<Sys_UserInfor> sUserList2 = ExecuteQuery<Sys_UserInfor>(sql2);
20 foreach (var item in sUserList2)
21 {
22 Console.WriteLine("用户名:{0},用户账号:{1},用户年龄:{2},用户性别:{3},创建时间:{4}", item.userName, item.userAccount, item.userAge, item.userSex, item.addTime);
23 }
24 }
25 #endregion
4. 多表关联查询
这里SQL语句里的查询,查询包括内连接和外连接,其中,
内连接分为:隐式内连接和显示内连接。特点:查询出来的结果是多表交叉共有的。
外连接分为:左外连接和右外连接.
左外连接:查询出JOIN左边表的全部数据,JOIN右边的表不匹配的数据用NULL来填充。
右外连接:查询出JOIN右边表的全部数据,JOIN左边的表不匹配的数据用NULL来填充。
#region 04-多表关联查询{//4.查询账号中含有admin的所有用户的用户昵称、账号、和登录信息//4.1 隐式内连接的写法Console.WriteLine("---------------04-多表关联查询--------------------");Console.WriteLine("---------------4.1 隐式内连接的写法--------------------");string sql1 = @"select a.userName,a.userAccount,b.loginCity,b.loginIp,b.loginTimefrom Sys_UserInfor a,LoginRecords bwhere a.id =b.userId and a.userAccount like '%admin%'";List<model2> uList1 = ExecuteQuery<model2>(sql1);foreach (var item in uList1){Console.WriteLine("姓名:{0},账号:{1},登录城市:{2},登录IP:{3},登录时间:{4}", item.userName, item.userAccount, item.loginCity, item.loginIp, item.loginTime);}//4.2 隐式外链接Console.WriteLine("---------------4.2 隐式外链接 --------------------");string sql2 = @"select a.userName,a.userAccount,b.loginCity,b.loginIp,b.loginTimefrom Sys_UserInfor a join LoginRecords b on a.id =b.userIdwhere a.userAccount like '%admin%'";List<model2> uList2 = ExecuteQuery<model2>(sql2);foreach (var item in uList2){Console.WriteLine("姓名:{0},账号:{1},登录城市:{2},登录IP:{3},登录时间:{4}", item.userName, item.userAccount, item.loginCity, item.loginIp, item.loginTime);}//4.3 查询所有用户的登录信息(左外连接的方式)Console.WriteLine("-----------------------4.3 查询所有用户的登录信息(外连接的方式)----------------------------");string sql3 = @"select a.userName,a.userAccount,b.loginCity,b.loginIp,b.loginTimefrom Sys_UserInfor a left join LoginRecords b on a.id =b.userId";List<model2> uList3 = ExecuteQuery<model2>(sql3);foreach (var item in uList3){Console.WriteLine("姓名:{0},账号:{1},登录城市:{2},登录IP:{3},登录时间:{4}", item.userName, item.userAccount, item.loginCity, item.loginIp, item.loginTime);}}#endregion
5. group By用法
group By分组(SQL中的group by分组和linq、lambda完全不同。特别注意:select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中) 常见的聚合函数有:sum avg min max
1 #region 05-group By分组2 {3 //5. Group By分组(SQL中的group by分组和linq、lambda完全不同,4 /*特别注意:select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中)5 常见的聚合函数有:sum avg min max6 */7 8 //5.1 根据用户的性别进行分类,并且统计不同性别的年龄总和9 Console.WriteLine("-------------------- 5. GroupBy分组------------------------");
10 Console.WriteLine("-------------------- 5.1 根据用户的性别进行分类,并且统计不同性别的年龄总和------------------------");
11 string sql1 = @"select userSex,SUM(userAge) as TotalAges
12 from Sys_UserInfor
13 group by userSex";
14 List<model3> sUserListGroup1 = ExecuteQuery<model3>(sql1);
15 foreach (var item in sUserListGroup1)
16 {
17 Console.WriteLine("性别:{0},年龄总和:{1}", item.userSex, item.TotalAges);
18 }
19
20 //5.2 根据用户性别进行分类,并且统计不同性别年龄的最大值
21 Console.WriteLine("-------------5.2 根据用户性别进行分类,并且统计不同性别年龄的最大值-------------------");
22 string sql2 = @"select userSex,MAX(userAge) as TotalAges
23 from Sys_UserInfor
24 group by userSex";
25 List<model3> sUserListGroup2 = ExecuteQuery<model3>(sql2);
26 foreach (var item in sUserListGroup2)
27 {
28 Console.WriteLine("性别:{0},年龄最大值:{1}", item.userSex, item.TotalAges);
29 }
30 }
31 #endregion
6. 分页用法