zoukankan      html  css  js  c++  java
  • SQL Server学习之路(六):“增删改查”之“查”

    0.目录

    1.前言

    2.最基本的SQL查询语句

    3.select...from...

    4.order by

    5.where

    6.group by & having

    1.前言

    增删改查都是对数据的操作,其中“查”对应的SQL语句便是“select”,也就是“选择”的意思。
    本篇主要介绍数据的查询,主要使用SQL Server提供的T-SQL语句查询数据。
    本篇主要参考了慕课网的视频SQL Server基础--T-SQL语句,以及部分参考了网易云课堂的视频SQLServer数据库基础,另外还参照了一下w3school的SQL 教程。如果有时间的话,推荐去看一下视频课程。

    2.最基本的SQL查询语句

    最基本的SQL查询语句语法如下:

    SELECT <table fields list>
    FROM <table names list>
    WHERE <row constraints specification>
    GROUP BY <grouping specification>
    HAVING <grouping selection specification>
    ORDER BY <order rules specification>
    

    Tips & Tricks:
    1、Select...From... 语句是必须的。
    2、Where, group by 以及 order by 三个语句不是必须的。

    上面的语法先不必死记硬背,以下会依次介绍他们的功能。

    3.select...from...

    3.1 “*”与“Top num *”

    select * from student
    -- "*"代表选择所有,即查询student表中的所有数据
    select Top 5 * from student
    -- "Top num"代表选择前num行,即查询student表中的前num行数据
    

    3.2 查询指定列

    select sno, sname
    from student
    -- 如果只想看student表中的学号和姓名列,那就只需要查询指定列
    

    3.3 Isnull函数:判断空值

    select cno, cname, isnull(cpno, ''), ccredit
    from course
    -- isnull(cpno,'')将cpno中的NULL值置空,用户就看不到NULL了,只能看见空白。但是列的名字会变为(No column name/无列名)
    

    原表如下:

    查询出的表如下:

    3.4 使用"+"将"列"与"字符串"连接起来(使用as重命名)

    select sno, sname as '姓名',
    '学号是' + sno + '的同学叫' + sname +'.' as IDname
    from student
    -- 使用"+"将两列进行合并
    -- 使用"as"将列名重命名
    

    4.order by

    原表:

    4.1 asc(正序)

    select *
    from FactSalesQuota
    order by SalesAmountQuota
    -- 默认就是asc正序排序(从小到大)
    

    4.2 desc(倒序)

    select *
    from FactSalesQuota
    order by EmployeeKey desc
    -- desc倒序排序(从大到小)
    

    4.3 其他

    select *
    from FactSalesQuota
    order by EmployeeKey desc, SalesAmountQuota
    -- 先按EmployeeKey倒序排序,如果EmployeeKey相同再按SalesAmountQuota排序
    

    5.where

    5.1 比较运算符

    -- 比较运算符有 =、>、<、>=、<=、<>("<>"是不等于的意思)
    select *
    from student
    where sdept = '理学院'
    
    select *
    from student
    where sage >= 20
    
    select *
    from student
    where ssex <> '男'
    

    5.2 or 或 and

    -- and就是两个条件都要满足,or就是满足一个条件即可
    -- and就是两个条件都要满足,or就是满足一个条件即可
    select *
    from student
    where sdept = '理学院' and sage >= 20
    
    select *
    from student
    where sage >= 20 or sno = '0001'
    
    select *
    from student
    where ssex = '男' and ssex = '女'
    


    可以看到,没有既是"男"又是"女"的学生,所以第三张表没有任何数据。

    5.3 Like "%" 或 "_" 通配符

    原表:

    -- like代表要模糊查找
    -- "%"代表任意符,表示可以有任何东西也可以没有
    -- "_"代表占位符,就是有且仅有一个字母,但是忘记了那个字母具体是什么
    select *
    from FactCallCenter
    where Shift like 'AM'
    -- like'Shift'代表精确查找'AM',相当于where Shift = 'AM'
    

    select *
    from FactCallCenter
    where Shift like 'PM%'
    -- like 'PM%'代表以PM开头的所有字符串
    -- like '%PM'代表以PM结尾的所有字符串
    

    select *
    from FactCallCenter
    where Shift like '%M%'
    -- like '%M%'代表M前面和后面都可以有任何东西
    

    select *
    from FactCallCenter
    where Shift like 'PM_'
    -- like 'PM_'代表PM后面有且仅有一个字母或者数字,不能是空
    

    5.4 in 或 not in

    select *
    from FactCallCenter
    where DateKey in ('20101101', '20101105', '20101110')
    

    select *
    from FactCallCenter
    where WageType not in ('weekday')
    -- 相当于where WageType <> 'weekday'
    

    5.5 is null 或 is not null

    select *
    from DimProduct
    where ProductSubcategoryKey is null
    
    select *
    from DimProduct
    where ProductSubcategoryKey is not null
    

    5.6 between...and...

    操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。(在SQLServer中两个端点的值都会包括)
    例如:

    select *
    from FactCallCenter
    where DateKey between '20101105' and '20101107'
    -- DateKey在20101105-20101107范围内的所有数据
    
    -- 如果要取不在这个范围的则可以用以下语句
    select *
    from FactCallCenter
    where DateKey not between '20101105' and '20101107'
    

    6.group by & having

    6.1 常用的聚合函数 & 经典查询语句

    常用的函数有:
    count、Avg、Min、Max、Sum

    6.2 count

    select count(*)
    from FactCallCenter
    where Shift = 'AM'
    -- count用来统计符合条件的行数
    

    6.3 Avg、Min、Max、Sum

    select
    Avg(LevelOneOperators) as AverageLevelOneOperators
    ,Min(LevelOneOperators) as MinimumLevelOneOperators
    ,Max(LevelOneOperators) as MaximumLevelOneOperators
    ,Sum(LevelOneOperators) as SummaryLevelOneOperators
    from FactCallCenter
    -- Avg平均值,Min最小值,Max最大值,Sum求和
    

    6.4 group by & having 的作用

    select Shift, Max(LevelOneOperators) as LevelOneOperators最大值
    from FactCallCenter
    where Shift is not null
    group by Shift
    -- group by Shift表示对不同的Shift值,分别求LevelOneOperators的最大值
    

    select Shift, Max(LevelOneOperators) as LevelOneOperators最大值
    from FactCallCenter
    where Shift is not null
    group by Shift
    having Max(LevelOneOperators) > 2
    -- group by Shift表示对不同的Shift值,分别求LevelOneOperators的最大值
    -- having Max(LevelOneOperators) > 2 进一步对结果进行筛选
    

  • 相关阅读:
    常用搜索指令
    chrome浏览器常用快捷键
    倒排文档
    hdu4570Multi-bit Trie (间隙DP)
    HTTP工作原理
    腾讯和58都市“聘请”秘诀是什么?
    Atitit。团队建设--管理最佳实践--如何留住关键人才,防止人才外流 ??
    于Eclipse传导C/C++配置方法开发(20140721新)
    通过京东淘宝的技术发展和技术演进,探索未来的技术和体系结构
    C++ Primer 学习笔记_41_STL实践与分析(15)--先来看看算法【下一个】
  • 原文地址:https://www.cnblogs.com/PyLearn/p/7642236.html
Copyright © 2011-2022 走看看