.Net_03_查询语句 (Sql 语句)
select * from 表 where 条件
1.查询语句中的条件
-> 可以对数据进行筛选
-> 只有数据的对应条件满足要求的时候,才会将数据取出
-> 如果有多个条件,使用and、or等连接起来
->在SQL Server中条件判断所用到的判断方法 =, > ,< ,>= ,<=, <> (!=) ,!> (<=), !< (>=) ,is not null
between 18 and 26 (范围) 等等;
1 select * frm Student where stuAge >=10 and stuAge<30 2 --例如筛选年龄在18到26岁之间 3 select * from Student where stuAge between 18 and 26
2.时间函数
getdate()获取当前时间。
year()、month()、day() 这些函数可以得到时间的对应部分
1 --查询年龄 2 select year(getdate())-year(strBirthdate) as 年龄 from Student
3.聚合函数
-> MAX(字段) --最大值
-> MIN(字段) --最小值
-> AVG(字段) --平均值
-> 在计算时,对于null的数据不计入总是
-> SUM(字段) --总和
-> COUNT(字段)
-> count(*)计算所有的列、count(字段)不计为null的列
1 select 2 max(year(getdate()) - year(stuBirthdate)) as 最大年龄, 3 min(year(getdate()) - year(stuBirthdate)) as 最小年龄 4 from Student; 5 ------------------------------------------------------ 6 select 7 sum(testBase) as 基础课程总分, 8 avg(testBase) as 基础课程平均分, 9 from 10 Score 11 where 12 stuId = 1; 13 ----------------------------------------------------- 14 select count(*) as 总人数 15 from Student 16 where 17 year(stuStudydate) = 2012 18 and 19 month(stuStudydate) = 7;
4.模糊查询
在查询过程中使用“字段=值”形式表示这个字符应该是多少的时候,
才获取数据 如果在处理某些字符串的时候(匹配姓氏等),只需要匹配一部分,
那么就得考虑模糊查询 在SQL Server中模糊查询常用的关键字符有三个 :
% 任意个任意字符
_ 任意一个字符;
[] 在方括号中的任意一个字符,使用;
[^]表示不在方括号中的一个字符
在使用模糊匹配的时候使用的是like
select * from Student where address like '北京%'; select * from Student where Name like '张_'; select * from Student where Name like '[李张王]三'; select * from Student where Name like '[^张李王]三';
5.case函数
-> 简单case函数(switch-case)
case 字段
when 值1 then 显示1
when 值2 then 显示2
...
when 值n then 显示n
else 显示n+1
end
-> 搜索case函数(if else-if)
case
when 关于字段的表达式 then 显示1
when 关于字段的表达式 then 显示2
...
when 关于字段的表达式 then 显示n
else 显示n+1
end
1 select 2 stuId, 3 stuName, 4 case stuSex 5 when 'f' then '女' 6 when 'm' then '男' 7 else '未知' 8 end as [stuSex], 9 stuBirthdate 10 from 11 Student 12 ------------------------------------------------------ 13 select 14 stuId, 15 stuName, 16 case 17 when stuSex = 'f' then '女' 18 else '男' 19 end as [stuSex], 20 stuBirthdate 21 from 22 Student
6.独立标量子查询(子查询返回一个值)
-> 有一部分查询,内部查询与外部查询有一定的相关联信息,称为相关子查询
-> 求“凤姐”同学的考试分数
-> 将一个查询,查出来的一个值,作为另一个查询的一个条件的匹配项
-> 必须保证子查询中的结果为一个“单值”
例如分别有两个表一个分数表Score(主键表),一个学生表Student(外键表)
1 Select 分数 from Score where 学号 in(Select 学号 from Student where Name ='凤姐')
7.表链接
-> 交叉连接(*)
求两个表的笛卡尔积
select t1.成员, t2.成员 from
表1 as t1
cross join
表2 as t2
-> 内连接(在交叉连接基础之上多进行的筛选)
-> 先实现交叉连接
-> 在交叉连接的基础之上进行条件筛选
select *
from
表1 as t1
inner join
表2 as t2
on t1.字段 = t2.字段
where
t1.字段 = ...
-> 外连接
外连接分为左外连接与右外连接
-> 左外连接就是在内连接的基础之上
-> 将左中有的数据,而右表中没有数据的项再添加到结果中
-> 没有数据的项,补null
select *
from
左表 as s1
left join
右表 as s2
on s1.字段 = s2.字段
-> 连接中数据是合并表,但是修改了表的结构
-> 联合中数据也是合并,但是没有修改表的结构,而是简单的将数据加起来
1 create table ltbl1 2 ( 3 id int, 4 name nvarchar(5) 5 ); 6 create table ltbl2 7 ( 8 id int, 9 name nvarchar(5) 10 ); 11 12 insert into ltbl1(id, name) values(3, '李四'); 13 insert into ltbl1(id) values(2); 14 15 insert into ltbl2(id, name) values(1, '程序员'); 16 insert into ltbl2(id, name) values(2, '测试员'); 17 18 select * from ltbl1; 19 select * from ltbl2; 20 21 --交叉连接 22 select * from ltbl1 cross join ltbl2 23 --内连接 24 select * from ltbl1 as t1 inner join ltbl2 as t2 on t1.id = t2.id; 25 --做外连接,将含有李四的那张表放在坐标的位置 26 select * from ltbl1 as t1 left join ltbl2 as t2 on t1.id = t2.id;
10、复制表结构/表结构和数据,创建新表
select * into 新表名 from 旧表名 where 条件
-> select * from 旧表名 where 1 > 2
-> 检索所有数据中,满足where条件的数据,并将所有满足的数据列出来
-> 没有检索出任何数据
-> select *
into 新表名
from 旧表名 where 1 > 2
-> 将检索出来的数据,加到新表中
-> 有没有数据呢?没有,那么新表就只包含旧表的表结构
-> 表结构包含所有的字段,以及identity的属性,没有包含约束
-> 需要手动添加约束
1 --复制表结构,创建新表。 2 select * into newStudent from Student where 1 > 2 3 --复制表结构,并且把id小于10的数据复制,创建新表 4 select * into newStudent from Student where id<10