SQL server 数据库查询

where 条件查询:
  • 基本语法:select (查询列表|*) from (表列表) where (限制条件)
  • 说明:where关键字后面的限制条件不能包含聚合函数
  • 示例:查询所在班级编号是“003”的学生的基本信息
    • Select * from Student_TBL where CNO='003’

in 属于查询:
  • 基本语法:select (查询列表|*) from (表列表) where (字段名) in (值集合)
  • 说明:in关键字的作用是查询某一字段是否在一个集合中,一般在where语句中使用
  • 示例:查询学号为23,34,35,40 学生的信息
    • Select * from Student_TBL where SNO in (23,34,35,40)

between和 Not between的使用:
  • 基本语法:select (查询列表|*) from (表列表) where (字段名) between||not between 值1 AND 值2
  • 说明:判断某个字段的值是否在一个范围之内
  • 示例查询所有学号大于5小于30的学生的信息
    • Select * from Student_TBL where SNO between 5 and 30

order by的使用:
  • 基本语法:select * from table_Name [where..] order by column1 [asc]desc]…
  • 说明:order by 后面可以指定多个列,默认是按升序方式排列的,asc 按升序排列,desc 按降序排列,order by 放在where 语句之后
  • 示例:查询所有学号大于23号的学生信息,并按学号的降序排列
    • Select * from Student_TBL where SNO>23 order by SNO desc

使用like实现模糊查询:
  • 基本语法:select * from table_Name where column like (匹配条件)
  • 说明:“%”匹配任意长度的(长度可以为0)字符串,“_”匹配任意单个字符,“[]”:匹配所给定范围或集合中的任意单个字符,“[^]”匹配所给定的不在所给定的集合或范围中的任意单个字符,通配符或字符串必须用单引号括起来
  • 示例:查询所有姓李的同学地信息:Select * from Student_TBL where SName like '李%'
  • 示例:查询所有学生名字中第二个字为“冰”的同学的信息:Select * from Student_TBL where SName like ‘_冰%’
  • 示例:查询所有编号中含有’e,t,y’字符的班级信息:Select * from Class_TBL where CNO like ‘[e,t,y]’
  • 示例:查询所有编号中不含有’e,t,y’字符的班级信息:Select * from Class_TBL where CNO like ‘[^e,t,y]’

使用is null:
  • 基本语法:select * from table_Name where column is null
  • 说明:查询指定列为输入数据的数据行,通常用在where语句中
  • 示例:查询还没有分配班级的学生的信息

使用compute进行计算:
  • 基本语法:select * from table_name where 查询条件 compute 聚合函数
  • 说明:用来计算总计或进行分组小计,总计或小计值作为附加行出现在查询结果中
  • 示例:计算在编号为‘001’班级的学生的信息并统计该班有多少个学生
    • Select * from Student_TBL where CNO=’001’ compute count(*)

使用compute by分组查询结果:
  • 基本语法:select * from table_Name [where..] order by column compute 聚合函数 by column
  • 说明:在使用compute by之前必须先使用order by 对要进行分组的列进行排序,注意,在oerder by 中进行排序的列的数量和顺序必须和compute by 后的项一样
  • 示例:根据不同班级分组统计各个班级学生的信息
    • Select * from Student_TBL order by CNO compute count(SNO) by CNO

group by的使用:
  • 基本语法:select * from table_name [where…] group by column
  • 说明:在select 子句中使用聚合函数时,group by计算每组的汇总值,使用group by子句时,在select 子句中出现的列名或者出现在聚合函数中,或者出现在group by 子句后面,否则会抱错,另外group by后面还可以跟 with cube||rollup,
  • 示例:统计每个班级有多少学生,不显示学生的信息,只显示统计信息
    • Select CNO,count(SNO) from Student_TBL group by CNO

使用having语句:
  • 基本语法:select * from table_name [where …] group by column having …
  • 说明:having子句用于限定对组或者聚合函数的查询条件,该子句常用于group by 子句后面,在查询结果分组后对组判断是否满足查询条件,在分组之前可以用where语句判断查询条件,使用where比使用having更有效,因为它先将不满足条件的行过滤掉,从而减少了要进行分组的行数
  • 示例:分组统计出编号为‘001’外所有班级学生的人数
    • Select CNO,count(SNO) from Student_TBL group by CNO having CNO<>'001'

使用union运算符合并多个查询结果:
  • 基本语法:select column1 from table1_name union select column2 from table2_name
  • 说明:所有查询中的列数和列的顺序必须相同,所有查询中按顺序对应列的数据类型必须相同或兼容,如果希望重新排序多个查询结果的合并结果,则在最后的select 语句中使用order by子句

使用into存储查询结果:
  • select * into new_table from 学生表

查询多个表或视图的信息:
  • 基本语法:select column1,column2,… from talbe1,table2,…
  • 说明:在涉及多表查询时必须使用where语句给出多表之间的连接条件,对来自N各表或视图查询要写出N-1 个连接条件
  • 示例:查询每个学生所在的系部的名称,班级的名称和姓名
    • Select DName,CName,SName from Student_TBL S,Class_TBL C,Department_TBL Dwhere S.CNO=C.CNO and C.DNO=D.DNO

distinct 消除结果集中的重复行:
  • 基本语法:select distinct column1,… from (表列表)
  • 说明:去除结果集中跟在distinct关键字后面所有字段的值相等的记录
  • 示例:查询所有学生的信息,删除名字相同的多余行
    • Select distinct column1,… from Student_TBL

返回指定的行数(百分率):
  • 基本语法:select top n [percent](column1,…) from (表列表)
  • 说明:n为要返回的行数,若含有percent关键字则按百分比返回,则此时n必须在0~100之间,若查询语句中含有order by 则先对查询结果进行排序,再执行筛选
  • 示例:返回前十名学生的基本信息:Select top 10 * from Student_TBL
  • 示例:返回前百分之十的学生的基本信息:Select top 10 percent * from Student_TBL

改变查询标题:
  • 基本语法1:select '自定义标题'=column1,…. From (表列表)
  • 基本语法2:select column1 '自定义标题',…. From (表列表)
  • 基本语法3:select column1 as '自定义标题',… from (表列表)
  • 说明:改变的只是查询结果的标题,并没有改变表的标题
  • 示例:查询学生的基本信息,SNO SName CNO分别用 学号 姓名 所属班级 显示、这里只使用第三种方法演示:
    • Select '学号' as SNO,'姓名' as SName,'所属班级' as 'CNO' from Student_TBL

在查询结果中显示字符串
  • 基本语法:在select 语句中,将增加的字符串用单引号括起来然后和列的名字写在一起,中间用逗号分开
  • 示例:查询所有学生信息,显示的结果的形式是 [学号+“我的姓名是”+姓名+班级编号]
    • Select SNO,'我的姓名是',SName,CNO from Student_TBL


1 select查询
  • 基本语法:select (查询列表|*) from (表列表)
  • 说明:“查询列表”可以是表的字段,表达式,函数。“表列表”可以包含多张表
  • 示例:查询所有学生的基本信息:select * from Student_TBL


2 简单查询
  • 2.1 投影查询:针对列
    • 选择一个表中指定的列: select 姓名,性别,专业 from 学生表
    • 改变查询标题: select 学号 number,姓名 name from 学生表
    • 计算列值: select 学号,课程号,成绩150=成绩*1.50 from 选课表
  • 2.2 选择查询:针对行
    • where 条件查询: select * from 选课表 where 成绩>=80 and 成绩<=90
    • (not) between and: select * from 选课表 where 成绩 between 80 and 90
    • in 属于查询: select 姓名,学号,专业 from 学生表 where 专业 in('软件工程','网络工程')
    • like模糊查询: select * from 学生表 where 姓名 like '白%'
    • is (not) null : select * from 选课表 where 成绩 is null
  • 2.3 聚合函数查询:数据运算
    • sum(列名)
    • avg(列名) select avg(成绩) as 平均成绩 from 选课表
    • min(列名)
    • max(列名)
    • count(列名)
    • count(*)


3 分组和汇总
  • 3.1 简单分组 group by select 性别,count(性别) 人数 from 学生表 group by 性别
  • 3.2 cube 和 rollup的使用 select 专业,性别,count(*) as '人数' from 学生表 group by 专业,性别 with rollup
  • 3.3 数据汇总
    • compute
    • compute by


4 连接查询:针对多个表
  • 4.1 自连接 select * from 学生表 a inner join 学生表 b on a.姓名=b.姓名 and a.学号<>b.学号
  • 4.2 内连接 select 学生表.姓名,选课表.课程号,选课表.成绩 from 学生表 inner join 选课表 on 学生表.学号=选课表.学号 / select a.姓名,b.课程号,b.成绩 from 学生表 a inner join 选课表 b on a.学号=b.学号
  • 4.3 外链接(会显示无数据的项)
    • left [outer] join 左边的行都显示
    • right [outer] join
    • full [outer] join
  • 4.4 交叉连接(笛卡尔积)
    • cross join select a.*,b.课程号,b.成绩 from 学生表 a cross join 选课表 b


5 子查询(在查询中包含另一个查询,当一个查询依赖另一个查询的结果时使用)
  • 5.1 无关子查询(嵌套子查询)
    • select 学号,姓名,专业 from 学生表 where 专业=(select 专业 from 学生表 where 姓名='刘玲玲')
    • any(some)
    • in 相当于 any
    • not in 相当于 <>any
  • 5.2 相关子查询
    • select 学号,课程号,成绩 from 选课表 a where 成绩<(select avg(成绩) from 选课表 b where a.选课号=b.选课号)
    • exists 存在性测试


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值