一、关系型数据库

  关系型数据库的基本元素是二维表,这些二维表可以被独立或者通过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. Kotlin教程

    Kotlin是一种静态类型的编程语言,由JetBrains开发.如果你有Java的基础知识,你很快就能学会Kotlin.这个Kotlin教程是为初学者设计的,因此即使您不了解Java,也可以理解Kot ...

  2. php 云片国外短信实例

    <?php namespace Ruifi\App; class SmsL { public function smsIcode($moblie,$sms_code,$intl_code){ h ...

  3. 使用Rabbit MQ消息队列

    使用Rabbit MQ消息队列 综合概述 消息队列 消息队列就是一个消息的链表,可以把消息看作一个记录,具有特定的格式以及特定的优先级.对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息 ...

  4. Shiro加盐加密

    接本人的上篇文章<Shiro认证.角色.权限>,这篇文章我们来学习shiro的加盐加密实现 自定义Realm: package com.czhappy.realm; import org. ...

  5. select 和v-model

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. mysql支持emoji表情符存储

    一.教你如何让数据库支持emoji表情符存储 解决方式: 更换字符集utf8-->utf8mb4 问题描述: 前台应用抓取微博信息,每天总有几条数据插入不成功.应用日志显示: java.sql. ...

  7. 【转帖】Linux 内核系统架构

    Linux 内核系统架构   描述Linux内核的文章已经有上亿字了 但是对于初学者,还是应该多学习多看,毕竟上亿字不能一下子就明白的. 即使看了所有的Linux 内核文章,估计也还不是很明白,这时候 ...

  8. java - redis学习

    在学习redis之前,我们首先需要了解一下NoSQL(非关系数据库).非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定. 为什么需要NoSQL? (1) ...

  9. C++中的swap(交换函数)

    交换两个变量的值很简单. 比如 int a = 1; b = 2; 交换a b的值 这个很简单 很容易想到的是找个中间变量比如  int temp  = a; a = b; b = temp; 不需要 ...

  10. SAS学习笔记19 SAS删除空格函数(left、right、trim、strip、compress、compbl函数)