关于Sql语句的学习,选择的DBMS为SQL Server,Sql语句随着工作中的应用不断补充,不具备系统性,为个人笔记汇总,网上有很多优秀的资源,故不对每一处应用做过多细致的说明,后期会对部分篇幅较长的部分提出单独处理,暂时用到的数据表如下:

  • Student表中的CityCCode对应于City表中的Code字段,为城市的英文字母缩写;

1,INSERT TO 插入语句

  INSERT TO语句用于向表格中插入新的记录,如下:

 insert into City(Code,CityCName) values('BJ','北京');
insert into Student(CityCode,StuName) values('北京','SharpL');

2,DECLARE 声明表变量(后期与with as 一同提出)

  Sql语句的查询中,总会涉及到多个表格的查询,会用到子查询,但是如果嵌套的层数过多,会使Sql语句难以阅读和维护,子查询Sql语句如下:

 select Student.StuName from Student where CityCode in
(select Code from City where CityCName like '宁%')

  上面的sql语句,在学生表中查询,所有来自'宁%'(如宁波、宁夏等)的学生姓名,同样的功能用declare语句声明如下:

 DECLARE @t table(Code varchar())
insert into @t(Code) (select Code from City where CityCName like '宁%')
select StuName from Student where CityCode in (select Code from @t)

  其中@t为表变量,使用了临时表,只包括Code一列。DECLARE 声明表变量的方式在嵌套复杂时,优势才能凸显出来。

3,‘%’通配符&Like

  上面的sql语句中用到了‘%’通配符,用来实现模糊查询,百分号通配符是最常使用的通配符,表示任意字符出现任意次数。如上例,‘宁%’可以表示宁波、宁夏、宁静等等。

  为在搜索子句中使用通配符,就必须使用LIKE操作符。如:CityCName like '宁%'。Sql语句见2。

4,With as 添加子查询部分

  在’2‘中使用了声明表变量的方法,但表变量实际上使用了临时表,增加了额外的I/O开销,SQL SERVER提供了CTE(即公共表表达式)来提高可读性与效率,如下:

with A as
(select Code from City where CityCName like '宁%')
select StuName from Student where CityCode in (select Code from A)

  上述Sql语句可以实现与2中的Sql语句一致的效果,更具体的With as 的使用方法请参考:使用WITH AS提高性能简化嵌套SQL。

5,Except 求结果集的差

  即从左查询中返回右查询中没有找到的所有非重复值。

 select CityCode from Student except
(select CityCode from Student where CityCode like 'N%')

  注意是返回非重复值,也就是说如果Student表中存在多条来自上海的记录,返回的CityCode只会包含一条SH,结果见下图左一:

      

6,Case when then(后期提出)

 Sql语句如下,查询的结果如上图左二:

 select Student.StuName ,
(case Student.CityCode
when 'SH' then '上海'
when 'BJ' then '北京'
when 'SZ' then '深圳'
when 'NB' then '宁波'
else '其他'
end)城市
from Student

  与聚合函数count组合使用,查询结果见下图,证明有5名同学来自('SZ','XM','GZ','NB','CQ')即南方。更多用法见:SQL之case when then用法

 select
count(case when Student.CityCode in('SZ','XM','GZ','NB','CQ') then end)南方,
count(case when Student.CityCode in('TJ','DL','BJ') then end)北方
from Student

更多实例sql语句如下:

 select *,
case when ID in (select distinct ID from A) then '来自A'
case when ID in (select distinct ID from B) then '来自B'
case when ID in (select distinct ID from C) then '来自C'
end as 来源
from D

基本Sql语句汇总的更多相关文章

  1. SQL语句汇总(终篇)—— 表联接与联接查询

    上一篇博文说到相关子查询效率低下,那我们怎么能将不同表的信息一起查询出来呢?这就需要用到表联接. 和之前的UNION组合查询不同,UNION是将不同的表组合起来,也就是纵向联接,说白了就是竖着拼起来. ...

  2. SQL语句汇总(一)——数据库与表的操作以及创建约束

    首先,非常感谢大家对上篇博文的支持,真是让本菜受宠若惊,同时对拖了这么久才出了此篇表示抱歉. 前言:此文旨在汇总从建立数据库到联接查询等绝大部分SQL语句.SQL语句虽不能说很多,但稍有时间不写就容易 ...

  3. SQL语句汇总(终篇)—— 表联接与联接查询

    既然是最后一篇那就不能只列出些干枯的标准语句,更何况表联接也是SQL中较难的部分,所以此次搭配题目来详细阐述表联接. 上一篇博文说到相关子查询效率低下,那我们怎么能将不同表的信息一起查询出来呢?这就需 ...

  4. SQL语句汇总(一)——数据库与表的操作以及创建约束

    首先,非常感谢大家对上篇博文的支持,真是让本菜受宠若惊,同时对拖了这么久才出了此篇表示抱歉. 前言:此文旨在汇总从建立数据库到联接查询等绝大部分SQL语句.SQL语句虽不能说很多,但稍有时间不写就容易 ...

  5. SQL语句汇总(三)——聚合函数、分组、子查询及组合查询

    聚合函数: SQL中提供的聚合函数可以用来统计.求和.求最值等等. 分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均值 –MAX:计算列的最大值 –MIN:计 ...

  6. 常用Oracle SQL语句(汇总版)

    Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象 一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...

  7. oracle常用SQL语句(汇总版)

    Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...

  8. 数据库之sql语句汇总20180616

    /*******************************************************************************************/ 一.SQL简 ...

  9. SQL语句汇总(二)——数据修改、数据查询

    SQL语句第二篇,不说废话直接开始吧. 首先创建一张表如下,创建表的方法在上篇介绍过了,这里就不再赘述. 添加新数据: INSERT INTO <表名> (<列名列表>) VA ...

随机推荐

  1. the little schemer 笔记(7)

    第七章 Friends and Relations 这是一个set集合吗 (apple peaches apple plum) 不是,apple出现了不止一次 (set? lat) 是真还是假,其中l ...

  2. AtCoder Grand Contest 017 A

    Problem Statement There are N bags of biscuits. The i-th bag contains Ai biscuits. Takaki will selec ...

  3. Hadoop体系结构管理

    一.查看Zookeeper信息 [hadoop@weekend01 ~]$zkServer.sh status JMX enabled by default Using config: /hadoop ...

  4. vs直接IP访问运行项目

    找到IIS Express 正在运行的项目应用程序,点击网站,会出现配置路径,找到配置路径,显示隐藏的文件夹 localhost替换成本地IP,重新运行项目,然后就可以直接通过IP访问项目,好处就是便 ...

  5. spring mvc 通过拦截器记录请求数据和响应数据

    spring mvc 能过拦截器记录请求数据记录有很多种方式,主要有以下三种: 1:过滤器 2:HandlerInterceptor拦截器 3:Aspect接口控制器 但是就我个人所知要记录返回的数据 ...

  6. JVM线程与Linux内核线程的映射[转]

    Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程. Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是 ...

  7. centos设置系统时间

    系统日期设定成1996年6月10日上午9点date -s 06/22/96date -s 09:00:00

  8. SQL系列学习 基础数据

    //班主任表 CREATE TABLE [dbo].[teacher]( [id] [int] IDENTITY(1,1) NOT NULL primary key, [name] [varchar] ...

  9. hdu 5402 Travelling Salesman Problem (技巧,未写完)

    题意:给一个n*m的矩阵,每个格子中有一个数字,每个格子仅可以走一次,问从(1,1)走到(n,m) 的路径点权之和. 思路: 想了挺久,就是有个问题不能短时间证明,所以不敢下手. 显然只要n和m其中一 ...

  10. RPC(Remote Procedure Call Protocol)远程过程调用协议

    RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在 ...