数据基本查询

SELECT语句的语法结构
Select FieldNameList
[All | Distinct] // Distinct 去重,重复的记录只保留一个
[Top n [Percent]] // 取前面n,若指定Percent则表示取前n%行
[Into TableName]
From TableNameList
[Where Condition]
[Order By Order_FieldName [ASC | DESC]] // asc升序|desc降序
[Group By Group_FieldName]// 按照某字段分组
[Having HavingCondition]// 分组条件

基本SELECT查询

查询表中所有列

SQL为我们提供了“*”符号,用来代替所有的字段
例如查询student表中所有学生信息
Use STU // 打开stu数据库
Select * From student // 查询所有学生信息

查询表中指定列的信息

常用的、比较有效的方法是在查询时逐一指定所需要查询的列名
例如查询student数据表中学生Name、Age的信息
Select Name, Age From student

在查询列表中使用列表达式

在Select语句中可以使用算术运算符对文字型数据列进行加减乘除以及取余运算
从而构造列表达式来取得经过计算处理过的查询结果
例如查询score表中所有学生的分数,以及socre统一提高分数10%
Select ID,score,score*1.1 as new_score from score

重新命名结果列名

为了突出数据处理后所代表的意义,数据查询的结果经常要指定列名,这样更利于程序的可读性和可理解性
例如查询Name和Age时分别将他们指定为“姓名”和“年龄”,其代码如下
Select 姓名 = Name, 年龄 = Age From student;
Select Name As 姓名,Age As 年龄 From student;

说明列的定义

为了增加查询结果的可读性,可以在SELECT语句中增加一些说明列,增加的说明文字用单引号引起来
例如在查询中插入姓名、年龄说明列
Select '姓名:', Name As 姓名,'年龄:',Age As 年龄 From student

取得查询结果的部分行集

在SQL语句中,使用TOP子句限制返回到结果集中的行数,其语法如下:
Top n [percent]
例如只显示前5条学生信息
Select Top 5 ID,Name,Age From student
也可以Top 变量,通过改变变量值,返回不同结果集
Declare @N Int
Set @N = 5
Select Top(@N) ID,Name,Age From student

基于条件的查询

在实际查询中,我们可能要求查询部分数据记录,即根据给定的查询条件,查询出符合要求的记录。
条件查询其实是根据二维表的横向来进行筛选的。
这个筛选是在WHERE子句中指定查询条件来完成的。其具体语法格式如下:
Select FieldNameList
[All | Distinct]
[Top n [Percent]]
From TableNameList
[Where Condition]
根据Condition的不同来实现不同的查询

使用关系表达式查询条件

在WHERE条件中,可以将关系运算符和列名构成关系表达式,从而实现条件查询。
主要关系运算符有>、<、>=、<=、=、<>(不等于)。
例如查询student表中年龄大于24的学生信息
Select * From student Where Age>24

使用LIKE关键字进行模糊查询

有时,我们要查询的条件时不确定的。在SQL中,给出LIKE运算法来进行字符串的模糊匹配
即查找指定的属性列值与匹配字符串相匹配,匹配字符串可使用通配符。语法格式:
[NOT] LIKE '<匹配符>'
通配符及其含义如下。

  • %:代表任意多个字符,也可以是0.
  • _:代表单个任意字符。
  • []:指定某个字符的取值范围。 [^]:指定某个字符排除的取值范围。
    例如:
    以“王”开头的字符:王%
    包含“王”的字符:%王%
    以“王”结尾的字符:%王
    第二个字符为“王”:_王%
    第三个字符为“王”:_王%
    倒数第二个字符为“王”:%王

Like 't%':查询以‘t’和‘T’开头的字符
Like Binary 't%':查询't'开头的字符 //加上Binary区分大小写

使用逻辑表达式表示查询条件

  • AND
    用AND连接两个关系表达式,只有当两个关系表达式都成立时结果才为真,只要两个关系式中一个为假,结果就为假。
  • OR
    用OR连接两个关系表达式,只要两个关系表达式有一个成立结果就为真。如果 两个关系表达式都不成立时,其结果为假。
    例如查询学生年龄在24~26岁的学生信息或者姓为“高”的学生
    Select * From student
    Where (Age>=24 and Age<=26) or Name Like '高%'
    |Where (Age Between 24 and 26) or Name Like '高%'// 用between...and关键字可以达到相同效果
  • NOT
    NOT用于单个关系表达式前,与关系表达式结果相反。因此只有当关系表达式值为假时,整个结果才为真
    例如查询年龄不是24的学生信息
    Select * From student Where Not (Age=24)

IN关键字表示查询条件

IN关键字可以查询符合列表中任何一个值的记录。它可以去除不连续的、离散的一些列值。
例如要查询年龄为23岁、25岁和26岁的学生信息时,用逻辑运算符和比较运算符可以完成
Select * From student Where Age=23 or Age=25 or Age=26//过于繁琐,且容易根据中文句意把逻辑运算符写成AND
用IN关键字可以简化此过程
Select * From student Where Age In(23, 25, 26)

对查询结果排序输出

在一般情况下,使用SQL语言进行数据库查询得到的数据记录行是无序的,它只是按照记录在表的顺序排序
使用ORDER BY子句,可以将查询结果按指定的列进行排序。其语法格式为:
Select FieldNameList
[All | Distinct]
From TableNameList
[Where Condition]
[Order By Order_FieldName [ASC | DESC]]
ASC关键字表示升序,DESC关键字表示降序,在默认情况下,数据记录是按照升序进行排序的
例如显示前5个学生的信息,并且将这些学生按照年龄从小到大进行排序输出
Select Top 5 * From student Order By Age ASC

查询结果的新建表存储

有时查询出来的信息作为重要的资源需要进行保存,以便进行更进一步的加工处理。
例如显示student表中前5条记录的学生信息,并把信息存入一个新表new_stu
Select Top 5 * Into new_stu From student
Select * From new_stu

聚合函数在查询中的使用

聚合函数是指对一组值执行计算并返回单一的值。聚合函数忽略空值。
所有的聚合函数都具有确定性。在任何时候用一组给定的输入值调用它们时,都返回相同的值。
假设月销价格总额存在price列中,数据表名为ProductOrders

SUM函数

用于返回系列值的总数。语法格式:SUM([All[Distinct] 表达式)
例如显示某公司一年的销售业绩总和
Select SUM(price) As total_price From ProductOrders

AVG函数

它给我们提供系列值的算术平均数。语法格式:AVG([All[Distinct] 表达式)
例如计算某公司每月销售额
Select AVG(price) As total_price From ProductOrders

MAX函数 & MIN函数

MAX()返回指定数据集中的最大值,MIN()返回指定数据集中的最小值。
例如查询某公司一年中销售的最值
Select MAX(price),MIN(price) As "maxPrice","minPrice" From ProductOrders

COUNT 和 COUNT(*) 函数

SQL提供COUNT函数来满足计数。语法格式:COUNT([All[Distinct]) COUNT()
**COUNT()不计算空值行,但是COUNT(
)计算所有行(包括空值行)**
例如计算student表中学生总数
Select COUNT(NAME) AS NUM From student

查询结果的汇总

在实际应用中往往需要进行分组统计和汇总,此时我们需要用GROUP BY子句进行汇总
有时,我们需要知道详细的数据记录,可以使用COMPUTE或者COMPUTE BY生成明细汇总结果

posted @ 2022-03-28 17:23  土豆泥不好吃  阅读(144)  评论(0编辑  收藏  举报