T-SQL DBMS
dbo 默认架构schema
从一个数据库操作另个数据库的表的时候,要select * from 数据库.dbo.biao
表名前面的dbo是一个默认架构schema,一个架构还有多张表,用来区分表格数据优化,权限管理
分离附加
数据库文件粘贴复制时,要先在sql中分离关闭数据库连接。
数据库附加时,右击任务附加,只会显示mdf,自动加载ldf文件。
注意:附加时长出的问题,一般出权限问题,就在mdf和ldf文件右击属性安全用户添加everyone 并在权限中对勾上
设计 编辑前200行
元祖:一行数据称为
08改不了,05可以改。列名字的更改:工具-选项-design-阻止更改
类型
sql联级丛书
二进制,image
字符串nvarchar()char() nchar varchar
var可变长度,没有就是固定长度 nvar 后面可以max2^31-1 存储的位置不同了
比如char(非unicode字节1-8000) char(10) 10个字节 10个数字1234567890 5个字 ABCDE 如果12存入后面就会自动补全有8个空格存入,因为固定。varchar也是字节数,但是不会自动补全
varchar比char检索效率高,数据优化,char需要 去掉空格。 存储的时候的char比varchar高,空间固定 手机号可以
n就是unicode编码,unicode字符一个字符占2个字节
nchar(unicode字符1-4000) unicode字符一个字符占2个字节 nvarchar() 里面的1 2 3数字也占2个字节,因为也是unicode编码
date08时候加进来 少用
常用日期类型datetime,当成字符串来赋值2015-12-25 00:00:00.000
钱money 当成整数或者小数。
int smallint real float
bool类型,设计器只能用true和false,SQL语句也可以,同时也可以用0 1代表,最后显示也是false和true
主键Primary Key:一列,区分不同的元祖(一条数据) 设计-右击列设为主键
改之后,要把修改后的选项卡关闭,然后再处理,因为选项卡保存的是改之前的状态。
业务主键:比如name 身份证号 是一个数据的一个部分。 业务主键可能重复
逻辑主键:单独加上的一列,一般为数字,也有字符串GUID 自动增长 设计 id-是否标示 是增量1 种子1
外键:两张表间关联Foreign Key,在外表的一列是主键的这列。
主键表含有主键的表
外键表含有外键(一列的数据在别的表中是主键,在此表这列就是外键)的表
SQL大小写一样,字符串用‘’单引号 双引号报错
DCL数据库控制语言 GRANT授权某用户 REVOKE取消授权 权限控制
DML数据库管理语言 增删查改
DDL 数据库定义语言建库 建表
use 数据库 go
自动增长的那列,不用赋值。
语句分号;结束 -- 注释 /* ssss*/
delete from biao where id=
子查询:单值子查询和多值子查询
独立标量(单值)子查询:就是一个select返回一个值。例如id。将这个查询出来的一个值,作为另个select查询的where条件。通常两张表。
独立多值子查询:返回多个值,例如id。这些值在另一个查询中当做where条件。因为返回多个值,所以where条件中在这些值中不能用”=“,而是用“in”。
字段:一张表中,要留空余的字段和和isdel是否删除的字段。
--解释 选中tap键向右移动
= like in is
where条件注意项:
1>2
多条件,括号的优先级调配。用(条件)and or(条件)
处理日期:查询某年某时间的匹配项。有一些函数,来处理。
当前时间getdate()year(时间字段) month(时间) day(时间)得到对应的年月日。
例如:(year(getdate())-year(时间)=20)
时间:select id from biao where DATEDIFF()
模糊条件 like not like 会全表扫描,木有优化。
%:任意个 任意字符
_任意一个字符
[]任意一个在括号的字符 假如值匹配_ 用[_]
[^]任意一个不是括号内的字符
where (name like ”李%“) and (sex='女')
between and
in
带条件查询的条件补充
多少多少之间的用between and
select * from 表 where 字段 between 18 and 25 包含18和25
查询id 为 1 2 3的数据 not in
select * from 表 where 字段 in (1,2,3)
as:就是一列数据的名字1,字段 as 别名(as可以省略) 2,别名 = 字段 注意别名在前
select可以显示数据和运算结果。
select ‘李可’ 例如:select ‘李可’ ,* from 表 会在没行数据前都加上‘李可’
select getdate(), 2+3
从左到右运算,变量。同一级别 select 1 +'1' 显示2
top order by放在select 后面,其他字段前面,后面不要加”,“top(50),括号可以省略 --desc倒序 asc 默认升序
1,筛选排名前多少行或者多少百分比2,把这些前多少数据进行排序
select top (100) * from where sex='女' order by fenshu desc
select top (100) percent * from where sex='女' order by fenshu desc
数据库是基于集合概念,就有无规律特征,top 100数据 结果不一定完全一样,而MSSQL按照存入数据的顺序来筛选。
结果集:数据有一个数据集概念,通过没有order by查询得到的结果,成为结果集。
游标cursor:只有order by的时候。不具备一些集合的特征,派生表 表表达式 公共表表达式 视图 存储过程 结果集 子查询 都不能使用游标,因为游标不是集合
1,使用order by查出的的数据就不是(集合),有了顺序的结果,成为游标。
top 和order by连用时候是结果集。
筛选和排序()。因为排序有可能是一个无序的结果。比如:一张表有10个10岁的,top 5个时候order by年龄 ,可能从这10个中随机选,所以是无序的。所以是结果集。
2,查询数据的一种索引方式。
distinct 去除重复的数据,多集(有重复的数据)转换成单集,但是并木有修改数据库的东西和top一样是”修饰”字段的。
select distinct 字段 from 表
*代替字段不好的原因:
1,当数据库更新的时候,假如多了几个字段,但是依然是*,就会出现错误
2,从优化的角度,查询这张表的话会先从数据库中查询这张表有多少字段,然后再查询。多了一步。不优化。
聚合函数:汇总的意思。select 聚合函数代替*了做汇总。总数,平均,最大,最小。一般起个名字 as哦!
MAX(字段) MIN(字段) AVG(字段) SUM(字段) COUNT(*) 只是一行值。所以select 聚合后不能再跟一列出现多行数据字段。
avg(分数) 不会计入null的个数和值,不考虑null。
count(分数)不会计入个数,但是count(*)会计入
null
1,select中isnull(字段,123)如果数据为null 则被替换成123,有数据就不替换。数据类型一定相同。
select isnull(字段,123)from
2,在where 条件中 不能用= 而是用is null 或者is not null
在sql中三值逻辑 不是true的话,可能是false 还可能是null
=
>
<
>=
<=
<>(!=)不等于
!>(<=)不大于 小于等于
!<(>=)不小于 大于等于
select *from 表名 where sex <> '女' 可能为男,也可能为null
null表示不知道,不论加减乘除都为null
等价,永远不会有数据
select * from 表名 where 字段 = null
select * from 表名 where 字段 <> null
group by数据分组 和order by 位置一样放在最后 查各班的人数
一般和聚合函数搭配使用。查询按某个字段分组后汇总信息。
select banji , count(*) from biao where sex = ‘女’ group by banji 因为为汇总信息只有一行,所以select后不能是含有多行数据的字段。
执行顺序
from选择数据源
where对数据源筛选
group by对筛选后的数据汇总
having 对汇总的数据再进行筛选
select后执行顺序distinct top
order by得到集合或者cursor
所以不能在where使用count(*)
查询名字出现2次或者两次以上的女人
select name ,count(*)
from biao
where sex='女' and count(*)>=2 有对应的分组后的的数据再进行筛选就是having
group by name
having count(*)>=2
having用来分组后对数据筛选 和top 位置不一样也是筛选
筛选 where having top 位置不同哦
ADO.NET是一组类库
FWGH SDTO
SQL-Sever执行逻辑流程 书籍:SQL-Sever技术内幕2005存储内幕 深入理解SQL-Sever2008
服务器上的DBMS数据库管理系统 里面几个引擎,这几大引擎通力合作。
sql语句-->DBMS(关系引擎(语法解析器(检查语法报错)-->优化器--> 执行器得到编译好的sql语句)-- 存储引擎 )-->只经过FROM WHERE数据文件-->DBMS(得到set虚拟表(也是结果集)group having->set虚拟表-->distinct top-->set虚拟表-->set或者cursor-->应用程序)
事务:sql语句每个动作都是一个事务
每个过程都会得到一张set 虚拟表(结果集),供作下一过程的数据源
UNION
多集 联合结果集
UNION并集INTERSECT交集 EXCEPT差集 两个select之后的两张表的合并 看联级丛书
union和union all(并集中可以包含重复数据(两行数据完全一样叫做重复,叫做多集),效率高于union)
select '平均' as ‘说明’,avg(fen_01), avg(fen_02), avg(fen_03) from biao where id=1 --起列明用第一个表的as后列名字
union all --允许多集
select '总分', sum(fen_01), sum(fen_02), sum(fen_03) from biao where id=1 --数据类型要相同
说明 | fen_01 | fen_02 | fen_03 |
平均 | |||
总分 |
insert select
插入数据的时候可以用 insert select ,此时的select 代替了values
insert into 表(列) select 查询 --一次性插入多个数据,将一个结果集插入
insert into 表(列) select 列 --每次只能插入一行数据 这个歌select是一个显示方法,得到的结果集,所以可以插入一行的数据
一次性插入多行数据(用union)
可以使用union将结果集联合后得到一个联合结果集插入。
2008以前2005的用法,08的替代方法是“表值构造函数”
values (值),(值),(值) --这些值是一个虚拟的表,操作是”原子性“的,不可分割。如果给这个表添加约束,只要有一个插入的某个值不符合这个约束,这张虚拟表都不能插入。
insert into biao(列1,列2,列3,) --select * from (values(1,值),(2,值),(3,值))as biaoming(列名,列名)
select 列1,列2,列3 union
select 列1,列2,列3
字符串函数 日期函数 类型转化函数
都是用于select 之后用于显示。select nchar(25105),LEN(N'12345'),datalength(N'12345'),lower(‘abDc’),upper('abDc') ,ltrim(' abc '),rtrim(' abc ')
--我 转换成字符 5字符个数(默认去掉里面的空格不算) 10 字节长度 unicode编码(系统函数) 10 小写 大写 去掉左空格 右面空格 ltrim(rtrim(' adc '))去掉左右空格
substring(字符串,开始位置,长度)不是从0开始,而是从1开始。
日期时间函数 year() month() day()
dateadd(部分,增量,时间)在这是时间上的那个部分增多少select getdate(),dateadd(YY,10,getdate()) 得到也是个时间yy--mm-dd
yy mm d getdate()同时运行,时间一样
datediff(单位,开始时间,结束时间) 得到时间长度
select datediff(d,‘2015-1-16 09:00:00.000’,'2015-6-25 12.00.00.999') hour minute millisecond
类型转换函数 比如在union中数据类型要相同
1cast(数据 as 类型)
2convert(类型 数据)
针对时间类型,有第三个参数控制格式 select convert(nvarchar(10), getdate(),20)
查联机丛书上的类型格式代码 一般都是110 客户端 拿到这个时间,只需split一下就好
T-SQL DBMS的更多相关文章
- SQL injection
SQL injection is a code injection technique, used to attack data-driven applications, in which malic ...
- (其他)SQL注入(转)
转自维基百科: SQL注入是一种代码注入技术,用于攻击数据驱动的应用程序,在这种应用程序中,恶意的SQL语句被插入输入字段中执行(例如将数据库内容转储给攻击者).[1] SQL注入必须利用应用程序软件 ...
- SQL记录-PLSQL-DBMS输出
PL/SQL DBMS输出 DBMS_OUTPUT是一个内置的软件包,能够显示输出显示调试信息,并从PL/ SQL块,子程序,包和触发器发送消息.我们已经使用这个包在我们所有的教程中. 让我们来看 ...
- SQL必知必会|SQL基础篇
了解SQL DBMS的前世今生 SQL是如何执行的 DDL语法 关于外键的性能问题? 是否使用外键确实会有一些争议.关于外键的使用: 首先,外键本身是为了实现强一致性,所以如果需要正确性>性能的 ...
- Hibernate的数据查找,添加!
1.首先看一下测试数据库的物理模型 2.测试所需要的Hibernate的jar包 3.数据库的sql /*=============================================== ...
- MySql操作
用C#写了个系统更新的小程序,用到MySql MySQL 5.1参考手册 1.使用MySqlConnection 需要引用dll: MySql.Data.rar 连接数据库 string conStr ...
- 【转】oracle数据库开发的一些经验积累
1.不安装Oracle客户连接Oracle 8的方法 请将以下文件拷贝到运行文件所在目录 一.ODBC动态库 : ctl3d32.dll msvcrt40.dll odbc16gt.dll odbc ...
- MapReduce: 一个巨大的倒退
前言 databasecolumn 的数据库大牛们(其中包括PostgreSQL的最初伯克利领导:Michael Stonebraker)最近写了一篇评论当前如日中天的MapReduce 技术的文章, ...
- ODBC具体使用
应用程序 应用程序对外提供使用者交谈界面,同时对内执行资料之准备工作数据库系统所传回来的结果在显示给使用者看.简单来说,应用程序即ODBC 界面执行下列主要工作:1. Request a connec ...
- 一个小时学会MySQL数据库
随着移动互联网的结束与人工智能的到来大数据变成越来越重要,下一个成功者应该是拥有海量数据的,数据与数据库你应该知道. 一.数据库概要 数据库(Database)是存储与管理数据的软件系统,就像一个存入 ...
随机推荐
- Netbeans快捷键
一.常用快捷键:1.在文件中查找指定内容 Ctrl+F2.在文件中替换指定内容 Ctrl+H3.在整个项目中查找指定内容 Ctrl+Shift+f4.自动复制整行代码 Ctrl+Shift+上/下方向 ...
- redhat6.2下的ssh密钥免密码登录(原创)
这个是我自己写的,鼓励转载,请说明转载地址:http://www.cnblogs.com/nucdy/p/5664840.html 在进行hadoop的免密码的登录操作是,老是发生no route等错 ...
- jquery easy ui 1.3.4 事件与方法的使用(3)
3.1.easyui事件 easyui事件可以在构建的时候就通过属性方式添加上去,比如在panel收缩的时候添加一个事件,在构建的时候代码如下 onCollapse: function () { al ...
- Javascript操作剪切板数据(支持IE、Chrome、360、搜狗),亲测!
clipboarddata只能在IE浏览器中使用,在chrome下会提示对象未定义!以下的方法支持IE.Chrome.360.搜狗等浏览器,其它浏览器还未验证. <!DOCTYPE html&g ...
- 最新版Duilib在VS2012下编译错误的解决方法
svn了好几次最新版本的项目源代码, 在VS2012下编译老是出错, 改了后没记录, 结果又忘记, 所以在此记录下. 这个问题很普遍, 非常多的人遇到. 至于 ...
- Windows 程序支持 Unicode
宽字符 阅读了 UTF-8 Everywhere 一文,推荐在程序中对于字符串都使用 UTF-8 编码.Unix-like 系统默认是支持 UTF-8 编码的Unicode字符串,标准库函数也默认支持 ...
- Android__Context
Context字面意思上下文,位于framework package的android.content.Context中, 其实该类为LONG型,类似Win32中的Handle句柄,很多方法需要通过Co ...
- matlab练习程序(构造简单多边形)
简单多边形是指各边不相交的多边形. 首先计算出所有顶点中心位置. 然后求每个顶点与中心的极角. 再对极角进行排序. 连接排序后的点就行了. 结果如下: matlab代码如下: clear all;cl ...
- GridView块布局
<GridView android:id="@+id/gridview" android:layout_width="match_parent" andr ...
- Ready事件与Onload事件的区别
这两种事件都是在页面文档加载时触发的,但Ready比onload先执行. 具体区别如下: 1.在Javascript中,通常使用window.onload方法. window.onload必须等到页面 ...