SQL SERVER之数据查询



本篇主要讲解查询语句,所有的示例都会按照下面这张表进行。


stuID


stuName


age


sex


11090241031


王小虎


21



11090241032


王小六


22



11090241033


张三


23


1.使用where子句查询表中满足条件的记录

比较查询

算术比较查询

算术比较中常用的就是所谓的>、<、<>、=、!<(不小于)、!=(不等于)等,比较的语法如下

select*
from T_student
where age!>30

select*
from T_student
where stuName<>
‘王小七‘

注意:在where子句中,如果比较的是数值型数据,则可以省略单引号,如果是字符串或者日期的话,需要用单引号引起来

Between and

用来查询指定条件范围的记录

select*
from T_student
where agebetween 3
and 45

注意:between and的查询的记录包括两个边界值

IN运算符查询与列表匹配的记录

使用IN运算符可以查询与列表匹配的记录

select*
from T_student
where agein(32,15)

注意:在SQL语句中也可以使用not in运算符来排除一些记录。

逻辑查询

在SQL中逻辑运算符主要包括AND、OR和NOT三种。

AND:用来同时满足多个条件的记录

OR:用来满足多个条件中的其中任意一个条件

NOT:用来满足反条件的记录

select*
from T_student
where agein(30,15)and
stuName =‘王小虎‘

(如果有一个条件为False的话,就不会显示结果)

select*
from T_student
where agein(32,15)or
stuName =‘王小虎‘

(只要满足任何一个条件就可以显示记录)

select*
from T_student
where agenot
in(32,15)

(查询的是反条件记录,也就是不满足年龄在32和15的记录)

复杂逻辑

复杂逻辑其实就是AND、OR、NOT的运算符使用的组合,正如我们所知运算符也有先后顺序

NOT>AND>OR

select*
from T_student
where agenot
in(32,15)OR
stuName =‘王小六‘

(根据先后顺序可知,查询的是年龄不是32和15或者名字是王小六的记录)

空值查询

在使用SQL语句时,有时可能遇到该字段中没有值,那么就称为空值(null),查询语句也非常简单.

select*
from T_student
where stuNameIS
NOT NULL

(查询表汇总名字不是空值的记录)

Like模糊查询

使用LIKE操作符实现模糊查询

在使用SQL时,可能有时会遇到一种情况,不能完全确定自己要查找的信息,但是这些信息又有一些明显的特征,那么就可以采取下面的模糊查询

匹配任意单个字符

通配符“_”表示匹配单个字符,在查询中可以用到

select*
from T_student
where stuName like
‘王_虎‘

(表示查询王*虎的记录)

匹配0个或者多个字符

通配符“%”表示匹配0个或者多个字符,即一个%可以表示一个字符或者多个字符

select*
from T_student
where stuName like
‘王%‘

(表示名字中首字符石王的记录)

通配符[]

字符列中的任何单一字符

select*
from T_student
where stuName like
‘[王菲]%‘

(表示姓名以王或者菲开头的记录)

通配符[^]

表示不在字符列中的任何单一字符

select * from T_student where stuName like ‘[^菲]%‘

(表示姓名不是已菲开头的记录)

转义字符

在使用SQL执行模糊查询时,如果数据表某个字段本身就包含通配符时,又该怎么办

(1):在需要转义的“%”或者是“_”前加一个转义符,该转义符可以是一个任意字符

(2):在ESCAPE关键字后指定该转义符的名称

select * from T_student where sutID  like ‘%$_%‘ ESCAPE ‘$‘

(该查询语句表示,ID中包含_的记录,其中转义符$已经把_转义)

---------------------------------------------------------------------------------------

2.数据表的分组操作

表中的数据的排序和分组

我们在使用SQL语句查询操作时,可能查询出的语句是没有规律的,那么为了更好的观察自己查到的结果可以对其进行排序。

GROUP BY

通过ORDER BY子句可以对查询结果指定的列进行升序或降序,这取决于后面的关键字

select * from T_student order by age desc

(将查出后的结果按降序排序)

注意:ORDER BY子句只是对最终结果进行排序,不能用在select子查询中的select语句中,而且ORDER BY子句的位置必须放在所有子句的最后,也就是说,如果查询语句中有多个子句的话,那么ORDER
BY子句必须放在这些子句之后

常用的聚合函数

所谓的聚合函数就是统计函数,主要是对得到的数据进行排序求值等操作


函数


功能


COUNT(列表达式)


计算给定列或者表示式中非空行数


COUNT(*)


计算数据表中的总行数,包括空值


MAX(列表达式)


计算给定列中或者表达式中的最大值


MIN(列表达式)


计算给定列或者表达式中的最小值


SUM(列表达式)


计算给定列或者表达式中所有的总和


AVG(列表达式)


计算给定列或者表达式中的所有值得平均值

使用GROUP BY子句对表中数据进行分组

GROUP by子句可以根据数据列的多个数据查询出来的结果进行分组

select age, count(stuname)from t_student whereage <50 group by age order by age

(以年龄进行分组,并且统计每个年龄段的学生的数目)

使用having限制分组后的查询结果

如果要对分组后的结果限制查询条件,就可以使用having语句,该语句放在GROUP BY语句的后面

select age, count(stuname)from t_student whereage <50 group by age having age >15 order by age

(跟上面的相同,只不过又多了年龄的限制,必须大于15)

限制结果集行数

有些时候,我们并不希望看到查出的结果的全部,只显示几行就可,尤其当在分页操作中的时候,只关心前几条记录就OK了,这时候就需要对结果集进行限制

语法:select top n {precent}列名1,列名2 from表名

Top:关键字,表示限制结果集行数的关键字

N:表示限制结果集行数

Precent:表示返回查询的结果集中的前N%的行数

selecttop 1
agefromt_student
where age
<50

(表示只返回一行)

SQL SERVER之数据查询,布布扣,bubuko.com

时间: 2024-10-27 12:16:49

SQL SERVER之数据查询的相关文章

sql server数据库数据查询成功

1 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> 2 <%@ page import="java.sql.*" %> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" &q

Sql Server 存储过程中查询数据无法使用 Union(All)

原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正常的SQL语句,使用了Union(All)查询: SELECT ci.CustId --客户编号 , ci.CustNam --客户名称 , ci.ContactBy --联系人 , ci.Conacts --联系电话 , ci.Addr -- 联系地址 , ci.Notes --备注信息 , ai

SQL Server 基础 03 查询数据基础

查询数据 简单的查询 1 create table stu_info 2 ( 3 sno int not null 4 ,sname varchar(20) not null 5 ,sex varchar(2) not null 6 ,birth varchar(20) not null 7 ,email varchar(20) not null 8 ,telephone int not null 9 ,depart varchar(20) not null 10 ) 11 12 13 sele

SQL Server 批量数据导入

1. 由于Bulk Insert通常配合格式化文件批量导入数据更方便,所以这里先介绍bcp工具导出格式化文件的方法. bcp是SQL Server提供的命令行实用工具提供了数据的导出.导入.格式文件导出等功能,导出格式化文件的语法如下: bcp 数据库名.用户名.表名 format nul -- 这里的nul必须存在,用于不是导出和导入数据的情况下 -f 输出的格式化文件名 [-x] -c -- -x参数指定输出的格式文件为xml格式(默认非xml格式); -c参数指定数据存储方式为字符,并默认

将SQL Server 2000数据导入到MySQL 5.5的方法

一.安装MySQL 5.5(可以与SQL Server不在同一台服务器上),并新建一个空的数据库(一般用utf-8编码),用于接收导入的数据. 二.在SQL Server的服务器上安装mysql-connector-odbc-5.3.2-win32. 三.在SQL Server的服务器上运行"管理工具"->"数据源(ODBC)",切换到"系统DSN"面板,添加"MySQL ODBC 5.3 Unicode Driver"

SQL Server 跨数据库查询

不同服务器数据库之间的数据操作 --创建链接服务器 exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 ' --查询示例 select * from ITSV.数据库名.dbo.表名 --导入示例 select * into 表 from ITSV.数据库名.dbo.表名 --以后不再使用时

SQL Server中的查询

      本博文简单介绍一下SQL Server中常用的几类查询及相关使用的方法.       一.ExecuteScalar方法获取单一值       ExecuteScalar方法是SqlCommand类的方法之一,执行查询,并返回查询所返回的结果集中的第一行第一列.        class Program { static void Main(string[] args) { string strCon = "Data Source=192.168.24.193;Initial Cat

Sql Server删除数据表中重复记录 三种方法

本文介绍了Sql Server数据库中删除数据表中重复记录的方法. [项目]数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除![分析]1.生成一张临时表new_users,表结构与users表一样:2.对users表按id做一个循环,每从users表中读出一个条记录,判断new_users中是否存在有相同的u_name,如果没有,则把它插入新表:如果已经有了相同的项,则忽略此条记录:3.把users表改为其它的名称,把new_use

SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第3部分)(完结)

原文:SQL Server 2012:SQL Server体系结构--一个查询的生命周期(第3部分)(完结) 一个简单的更新查询 现在应该知道只读取数据的查询生命周期,下一步来认定当你需要更新数据时会发生什么.这个部分通过看一个简单的UPDATE查询,修改刚才例子里读取的数据,来回答. 庆幸的是,直到存取方法(Access Methods)前,更新操作和刚才SELECT语句流程是一模一样的. 这次存取方法(Access Methods)需要修改数据,因此在I/O请求传递前,修改的细节要存放于硬盘