一、关系型数据库

  关系型数据库的基本元素是二维表,这些二维表可以被独立或者通过join语句连接起来使用。主键和外键是用来连接二维表之间的主要工具

  1.主键(primary key)和外键(foreign key)

    主键是来唯一的标识一行数据,而且主键列必须包含唯一值,且不能包含空值(null)

    主键可以建立在每张二维表的单列或多列上

    一张二维表的外键可以引用某张二维表对应的主键

    

  2.数据库中的关系表

    

二、SQL语句

  1.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>

    *SELECT...FROM..语句是必须的,从某个表选择某列

      WHERE  对行进行限制,例如筛选ID>9,则小于等于9的行就被过滤

      GROUPBY 集合运算时添加的一些定义,例如计算age平均值

      HAVING 针对集合运算进行限制条件,例如average age>30

     ORDERBY 排列,例如有ID,name,age等列,想按照ID排列则可以 ORDERBY ID

  2.SELECT....FROM关键字

     1)SELECT....FROM

 select * from [Production].[Product]                                         --*表示所有

 select ProductID, Name, ProductNumber, Color, Size, ListPrice                --从表中显示指定列
from Production.Product select ProductID, Name, ProductNumber, Color, Size, ListPrice
from Production.Product
order by listprice desc --desc=descending order ; asc=ascending order --按照listprice的降序显示 select ProductID, Name, ProductNumber, Color, Size, ListPrice
from Production.Product
order by listprice desc,Name --按照listprice的降序,Name的升序显示(没有写des或asc默认以升序排列) select ProductID, Name, ProductNumber, Color, Size, ListPrice
from Production.Product
order by 2                                         --2表示Name,按照Name的升序排列,3表示ProductNumber

    2)isnull函数,判断是否为空

select ProductID, Name, ProductNumber, isnull(Color,''), isnull(Size,''), ListPrice    --将color,size中的空值null替换为‘ ’,列名也为空
from Production.Product select ProductID, Name, ProductNumber,
isnull(Color,'') as Color, isnull(Size,'') as Size123, --using an alias --as..修改列名
ListPrice
from Production.Product

   执行该语句后:

    3)"+"关键字:将列与字符串连接

 select ProductID, Name as ProductName,        --using an alias
'The ProductNumber ' + ProductNumber + '.'as ProductNumber , --using the concatenation to join character end-to-end.
'The list price for ' + ProductNumber + ' is $ ' + convert(varchar,ListPrice) +'.' as [Description] --convert函数转换类型
from [Production].[Product]

    执行后:

    4)算数表达式

 select BusinessEntityID
,rate*40*52 as AnnualSalary --Annual salary的值为rate*40*52
,round(rate*40*52,1) as AnnualSalary --rate*40*52,结果保留一位小数
,round(rate*40*52,0) as AnnualSalary --rate*40*52,结果保留两位小数
from [HumanResources].[EmployeePayHistory]

  3.WHERE..关键字

    WHERE 子句中的运算符

      

    1)or 或and

 select SalesOrderID,OrderDate,SalesPersonID,TotalDue as TotalSales
from [Sales].[SalesOrderHeader]
where SalesPersonID=275 and TotalDue>5000 and Orderdate between '2005-08-01' and '1/1/2006' --比较符=,>,<,>=,<=,<>,and且,or或orderdate在2005-08-1到2006-01-01之间 select SalesOrderID,OrderDate,SalesPersonID,TotalDue as TotalSales
from [Sales].[SalesOrderHeader]
where SalesPersonID=275 and TotalDue>5000 and Orderdate >= '2005-08-01' and Orderdate < '1/1/2006' --orderdate大于等于2005-08-01且小于等于2006-01-01
 select SalesOrderID,OrderDate,SalesPersonID,TotalDue as TotalSales
from [Sales].[SalesOrderHeader]
where (SalesPersonID=275 or SalesPersonID=278) and TotalDue>5000 --ID=275或278中 Due>5000的结果

    2)like“%”或“_”通配符

 select * from [Production].[Product]
where name like'Mountain' --name ='Mountain' select * from [Production].[Product]
where name like'%Mountain%' --Wildcard % matches any zero or more characters --筛选出name中含有Mountain的结果,例如...Mountain...,Mountain...,...Mountain select * from [Production].[Product]
where name like'mountain%' -- "_" matches any single character --筛选出name中以Mountain开头的结果,例如Mountain.... select * from [Production].[Product]
where name like'_ountain%' --‘_’表示任意字符,如countains

    3)in 和not in

 select * from [Production].[Product]
where color in ('red','white','black') --即color='red' or color='white' or color='black' select * from [Production].[Product]
where class not in ('H') -- same as using: <> 'H' --即clas <>'H',有些地方不等于可以用!=

    4)is null 和is not null

  3.聚合函数

    1)常用函数

 select count(SalesPersonID)              --计算数量
from [Sales].[SalesOrderHeader]
where SalesPersonID is not null select distinct(SalesPersonID) --列出不同的值,如有1,1,1,2,2,3,4,则结果为1,2,3,4
from [Sales].[SalesOrderHeader]
where SalesPersonID is not null select count(distinct(SalesPersonID)) --计算不同值的数量
from [Sales].[SalesOrderHeader]
where SalesPersonID is not null

    2)集合运算

 select
Avg(TotalDue) as AverageTotalSales --取平均值
,Min(TotalDue) as MinimumTotalSales   --取最大值
,Max(TotalDue) as MaximumTotalSales --取最小值
,Sum(TotalDue) as SummaryTotalSales --取总和
from [Sales].[SalesOrderHeader]

    *注,如果select中同时包含集合函数和非集合函数,则非集合函数要放到group by中

 select SalesPersonID,Max(TotalDue) as MaximumTotalSales
from [Sales].[SalesOrderHeader]
where SalesPersonID is not null
group by SalesPersonID --取每个salespersonID对应的最大值
order by SalesPersonID

    3)经典的T-SQL语句

 select SalesPersonID,OrderDate,Max(TotalDue) as MaximumTotalSales       --结果显示的列
from [Sales].[SalesOrderHeader]
where SalesPersonID is not null and OrderDate >='2007/1/1'        --限制条件为ID不为空,orderdate大于等于2007-01-01
group by SalesPersonID,OrderDate
having Max(TotalDue)>150000 --筛选出total due大于1500000的对应信息
order by OrderDate desc                             --以order date降序排列

【SQL server】SQL server基础(一)的更多相关文章

  1. .NET编程和SQL Server ——Sql Server 与CLR集成 (学习笔记整理-1)

    原文:.NET编程和SQL Server ——Sql Server 与CLR集成 (学习笔记整理-1) 一.SQL Server 为什么要与CLR集成 1. SQL Server 提供的存储过程.函数 ...

  2. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  3. C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法

    C#构造方法(函数)   一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...

  4. 13Microsoft SQL Server SQL 高级事务,锁,游标,分区

    Microsoft SQL Server SQL高级事务,锁,游标,分区 通过采用事务和锁机制,解决了数据库系统的并发性问题. 9.1数据库事务 (1)BEGIN TRANSACTION语句定义事务的 ...

  5. SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因

    复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过 ...

  6. SQL Server SQL分页查询

    SQL Server SQL分页查询的几种方式 目录 0.    序言 1.    TOP…NOT IN… 2.    ROW_NUMBER() 3.    OFFSET…FETCH 4.    执行 ...

  7. Qt调用Server SQL中的存储过程

    Server SQL中的存储过程如下: CREATE procedure PINSERTPC @pcnum int, @pcname varchar(50), @pctype int, @ipaddr ...

  8. 对SQL Server SQL语句进行优化的10个原则

    1.使用索引来更快地遍历表. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存放在数据页上.合理的索引设计要建立在对各种查询的分析和预测上.一般来说:①.有大 ...

  9. MySQL连接数据库报时区错误:java.sql.SQLException: The server time zone value

    连接MySQL数据库时报以下时区错误信息: java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized ...

  10. 连接mysql数据库报错java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized...解决方法

    今天连接mysql数据库报错如下: java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or r ...

随机推荐

  1. Java RSA分段加密

    我们通过Java进行RSA加密的时候,可能会出现如下问题: /** * 私钥加密 * * @param data 待加密数据 * @param key 密钥 * @return byte[] 加密数据 ...

  2. 使用MockMvc进行springboot调试(SpringbootTest)

    测试前关闭web项目.springboot启动程序WebApplication.class 笔者本地自定了端口SpringBootTest.WebEnvironment.DEFINED_PORT 代码 ...

  3. 【Leetcode_easy】720. Longest Word in Dictionary

    problem 720. Longest Word in Dictionary 题意: solution1: BFS; class Solution { public: string longestW ...

  4. angular入门 - 环境安装及项目创建

    1.安装node.js 下载,安装,在终端测试安装是否成功:node -v(查看nodejs版本) npm -v(查看npm版本) 下载地址:https://nodejs.org/en/downloa ...

  5. vue中的$attrs属性和inheritAttrs属性

    一.vue中,默认情况下,调用组件时,传入一些没有在props中定义的属性,会把这些“非法”属性渲染在组件的根元素上(有一些属性除外),而这些“非法”的属性会记录在$attrs属性上. 二.如何控制不 ...

  6. 安卓中listview中性能优化的处理

    1.在adapter中的getView方法中尽量少使用逻辑 不要在你的getView()中写过多的逻辑代码,我们能够将这些代码放在别的地方.比如: 优化前的getView(): @Override p ...

  7. APP 和小程序中通过日期格式获取时间戳的一个bug

    介绍一下背景:业务逻辑就不多说了,就说关键出问题的一步,需要将 2019-10-10 这个格式转换为时间戳.在不同平台不同场景下问题还很怪异 app上:ios 安卓线上的都有问题  ios模拟器没问题 ...

  8. react生成二维码

    图片实例: 简介: QRCode.js 是一个生成二维码的JS库.主要是通过获取 DOM 的节点,再通过 HTML5 Canvas 绘制而成,不依赖任何库. 用法: 1. 在项目中引入qrcode.m ...

  9. web平台大数据请求传输性能处理

    在XMLHttpRequest请求中使用ArrayBuffer方式,和后端服务器进行二进制的传输交互. 在项目中发现随着用户增长,部分前端功能,请求的数据量越来越大,传统的josn的方式,在下载.序列 ...

  10. kubeadm 部署kubernetes1.14

    节点信息: 主机名 IP 角色 k8s-master 10.10.0.10 master节点 k8s-node01 10.10.0.11 集群worke节点 k8s-node02 10.10.0.12 ...