SQL Server T-SQL基础
--数据库:数据库软件:mssqlserver,oracle,db2, ACCESS,SQLITE
--数据库文件:分数据文件(MDF)和日志文件(log)
班级名称:(四期班训练营)长度可变,有中文----n var char
性别字段:如果考虑“男,女”那么就用bit类型,smallin类型
手机:长度 手机号11位 ,座机咋办, ,
身份证号码:长度:不变18位,有木有中文,没有,
Char
会重复,
分类 备注和说明 类型 说明
二进制数据类型 存储非子符和文本的数据 Image 可用来存储图像
文本数据类型 字符数据包括任意字母、符号或数字字符的组合 固定长度的非 Unicode 字符数据。固定长度的字符串相对于可变长度的字符串来说效率要高一些,在数据长度固定的情况下优先选用固定长度,省去了计算长度的过程,提高效率
Unicode字符会吧所有字符都当两位来-存储
可变长度非 Unicode 数据
固定长度的 Unicode 数据
可变长度 Unicode 数据
Text
varchar(max) 存储长文本信息(指针,2G)
varchar(max),大字符串类型可以保存非常多的字符,但是对于这种类型的数据DBMS经常将它们保存到单独的空间中,这就导致了数据的保存和加载速度比较慢,因此除非必要,否则不要使用。
Ntext
nvarchar(max) Nvarchar(max)代替
日期和时间 日期和时间在单引号内输入 Datetime 日期和时间
数字数据 该数据仅包含数字,包括正数、负数以及分数 int
smallint 整数
float
real 数字
货币数据类型 用于十进制货币值,money 和 smallmoney 数据类型精确到它们所代表的货币单位的万分之一。 Money(C#:double)
Bit数据类型 表示是-false)
分离数据库:将当前数据库文件和数据库引擎的关系断开,没有任何关系了,这样我就可以随意的拷贝,剪切
在数据库文件上右键任务分离,勾选“删除连接”,确定
脱机:告诉数据库引擎,暂停操作当前数据库,知道你重新“联机”,,也可以随意拷贝,剪切
附加:把已经分离的数据库文件,重新让数据库引擎管理,重新把管理关系建立上
主键:
标识一张表里面数据行,到底哪一行是哪一行,
没有主键的时候,如果有重名的,重号的
比如,一家公司,给所有员工编号,a0003 b0002,但是某天人事喝酒了,就弄错了,
员工编号就重复了
身份证:有重复的,
银行卡号:升位
主键分为:逻辑主键和业务主键
业务主键就是具有真实意义的,就比如身份证,银行卡,员工编号,一但变化,难以维护
逻辑主键:没有任何实际含义,只为了标识当前列在当前数据表里的唯一标识,由系统自身维护
不可以手动编辑(特殊情况下除外)
主键列:就是不能插入重复数据(默认带索引)
如果数据行数量大于int的最大取值范围,那么说明,这张表的数据已经超过几十亿行了
每一张表都推荐有主键列,主键列,设置标识
最终这个列就会是不会有重复的数据,自动编号的
主键标识列:就算数据行被删除了,增长的数字也是按照原来的增长,
主外键:
作用:就是减少重复数据,
把一个表中重复是重复的数据提取出来,单独放在另外一个表中,这样,在原来的表中只要存储一个指向提起出的数据的表的行,
在数据库里面,在外键上右键,可以添加 主外键约束(约束外键值,只能是主键值有的值),但是,这已经不推荐使用了
例子:
书:书名,价格,分类ID
分类表:id,分类名字,所在区域
SQL语句
基础语句
selEct * FROM dbo.Student WHERE Name='张a'----大小写问题
字符串用单引号表示
关键字大小写不区分
注释用/* */,--
单等号判断
创建数据库,表
create database MySchool
on
(
--括号一定是圆括号
name='MySchool_data',--数据库名称
filename='d:\MySchool_data.mdf',--物理文件名
size=5mb,--初始大小,
maxsize=10mb,--最大大小
filegrowth% --主文件增长率
)
log on
(
name='MySchool_log',--日志文件名
filename='d:\MySchool_log.ldf',--日志物理文件名
maxsize=4mb,--最大大小
size=2mb,
filegrowth=1mb
)
go
创建数据表
CREATE TABLE Student
(
id ,) primary key,
NAME ) NOT NULL,
age INT NOT NULL
)
DELETE FROM Student
删除所有数据
TRUNCATE TABLE Student
清空表,重置表(把表重置会刚刚创建时候的状态,自增列,重新从1开始了)
以上两者效率有很大差别,如果用delete会产生很多的日志,truncate 就只会产生一行日志
DROP TABLE Student
直接删除表,不仅仅是数据,连表都不见了
增删查改
增加语句
INSERT INTO dbo.Student
(name,gender,Address,Phone,Age,Birthday,CardId,CId)
VALUES
(,,)
--增加的时候。Bit字段要用 “,”表示true和false
--时间字段用单引号包括,但是里面还是要遵循基本的时间格式'2012-01-01'
--INSERT 语句中列的数目要和 VALUES 后面的值的数目一样
--不能为标识列插入数据(特殊情况下可以,SET IDENTITY_INSERT)
--直接拖拽“列”就可以快速的插入列名
INSERT INTO dbo.Student
VALUES
(,,)
除了表示列,其他所有字段的值,都要写出来,而且还要按照顺序写出来
INSERT INTO dbo.Student
(Name,Gender,Age,Birthday,CardId),,')
可以只给指定的列插入数据,不能为null 的字段必须填,除非有默认值,默认值用default,不用打单引号
)
不能为phone插入null值
INSERT INTO dbo.Student (Name,Gender,Phone)
VALUES
(N,)
在插入特殊字符的时候,字符串前面需要加上大写的N
INSERT INTO dbo.Student
VALUES
(,)
在插入数据的时候,可以显示的告诉数据库使用该字段的默认值
INSERT INTO dbo.Student
VALUES
(,)
插入的数据中有单引号的时候,需要输入两个单引号 “''”
修改语句
修改了student表中所有行的age值
WHERE Name='陈珊'
修改了student表中name是陈珊的age值
,gender
修改了student表中name是陈珊的age值和gender值
Where后面可以有多个条件判断,多个条件中间用“空格and空格”隔开
OR Name='王五6'
) AND Name='王五6'
在数据库执行的时候,and条件是优先于or条件执行的
--2005 不支持
Set值的时候,可以取出原来的值
= < > != <>
UPDATE dbo.Student SET Address = '未知' WHERE Address = NULL--这个是不行滴
UPDATE dbo.Student SET Address = '未知' WHERE Address IS NULL
UPDATE dbo.Student SET Address='北京' WHERE Address IS NOT NULL
NULL 值的特殊判断
不等于“!=”
写法:update 表名 set 列名=值 , 列名=值 where 条件 条件中间用and和or连接 and优先于or执行
关于密码的大小写问题
约束
非空约束---就是不能为 null
主键约束(PK) primary key constraint---唯一(不重复的) 且 不为空
唯一约束+非空位数
唯一约束 (UQ)unique constraint 唯一,允许为空(null),但只能出现一次
默认约束 (DF)default constraint 如果不给值,默认值
检查约束 (CK)check constraint 范围以及格式限制
在设计界面,字段上右键,有“check约束”,点击之后
外键约束 (FK)foreign key constraint 表关系—主外键关系
添加主外键关系,外键的值必须来自主键表
查询语句
* FROM dbo.Student--取出前10条的所有数据
Name,Gender,Age FROM dbo.Student--取出前10条的部分数据
PERCENT * FROM dbo.Student---取出前面10%的数据,所有小数,是进位的,21/10=2.1 3
--19/10 1.9 2
Distinct
去除重复行,但是是正对于查询之后的结果,来去除重复行,
它是判断结果数据中,整行数据,只要有一个列不相同,那么就不认为是相同数据
Top和distinct结合使用的话,distinct是先执行的,先去除重复项,然后在去除想要的条数
聚合函数
Count,取得满足条件的数据行的 行数
Where
BETWEEN and 在数据库内部是做过特殊优化的,执行效率比> and < 等这种方式快
---25的有,30也有
相当于Age
小分页:
)
:
:
IN关键字
判断一个列的值是否在后面括号内,
SELECT * FROM dbo.Student WHERE Gender IN ('男','女')--正确
,,)--错误,两者数据的类型不同
模糊查询
使用系统已经定义好的匹配符,按照定义的规则匹配数据,如果能匹配就查出来
通配符,匹配符:_ % [] ^
_ 代表一个任意字符
% 代表零个或多个任意字符
[] 代表一个字符 的 取值区间
^ 配合[]使用,表示不是这个区间,
数据库不兼容的,sqlserver可以用,其他数据库要用not like
里面不区分大小写
效率很低
如果在匹配时,就要匹配这几个符号,那么需要把符号放在[]中,^不用,因为,它不放在[]中就默认是普通字符了
空值判断
SELECT * FROM dbo.Student WHERE Address <> NULL—错误
SELECT * FROM dbo.Student WHERE Address IS NULL—判断是为null 的
SELECT * FROM dbo.Student WHERE Address IS NOT NULL—判断不是为null 的
SELECT Name,ISNULL([Address],'地球') FROM dbo.Student
Isnull可以判断后面是否为null,为null就用第二个参数代替
) FROM dbo.Student
数据排序
ORDER
将当前查询出来的数据结果,进行排序,排序按照后面指定的列排序
SELECT * FROM dbo.Student ORDER BY Gender DESC
DESC—倒序排序(降序),ASC—正序排序(升序)
汉字,用拼音的首字母排序,升序是从a-z,降序是从z-a
Order by 是放在where后面的
系统默认的是升序排序,关键字:ASC,如果想倒过来,关键字:DESC
如果是根据多个列排序,那么两个之间用逗号隔开
排序会先按照前面一个排序之后,再按照后面一个排序
Group by
最数据进行分组,分组之后的数据就是“分组信息”,和原来的表里的信息就没有联系了
分组之后,可以取到分组根据,就是根据什么字段分组,就能去到字段的名字,
还能使用聚合函数
Having
对分组信息进行过滤,因为分组之后的信息和原来的表信息没有关系了
Having可以用的之后出现在group子句中的列,还有聚合函数
执行顺序
查询某张表,如果表里面有1000W数据,我们只查出100条数据
再对着100条数据进行分组,可以筛选分组,
如果指定列,结果集就更小了,这里只有100条指定列的数据
取出前面几条,或者取出重复
最进行排序,排序就只需要对100条数据排序了
类型转换
Cast(待转换的值 as 想要转换成的类型)
))
联合结果集
连接两个结果集
两个集合必须具有相同的列数
列具有相同的数据类型(至少能隐式转换的)
最终输出的集合的列名由第一个集合的列名来确定
UNION
Union默认会去除重复行
UNION All
Union all 不会去除重复行
一般都是使用union all
批量插入
INSERT INTO dbo.Student (Name, Pwd, Gender, Address, Phone, Age, Birthday, CardId, CId)
SELECT Name, Pwd, Gender, Address, Phone, Age, Birthday, CardId, CId FROM dbo.Student
将一个结果集当成值插入数据库,结果集的列数量,类型,都要一样
可以复制一张表的结构信息,没有主键
SQL Server T-SQL基础的更多相关文章
- .NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Ruby/Shell/Agile/CSS/HTML/HTTP/Unix/Linux大量PDF书籍/电子书籍下载, Effective Java 下载
223本电子书籍,囊括了.NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Shell/A ...
- 【SQL Server】SQL触发器经验详解
[SQL Server]SQL触发器经验详解 | 浏览: 4314 | 更新: 2013-01-07 15:33 25 11 全文阅读分步阅读 加入杂志 步骤 1 2 3 4 5 6 7 8 ...
- SQL Server经典sql语句大全(转)
一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...
- PowerDesigner反向数据库时遇到[Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句。SQLSTATE = 37错误解决方法
逆向工程中,有时会出现如下错误 ... [Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句 SQLSTATE = 37000 解决方案: 1. ...
- [Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效(转)
原帖由 qingyun 于 2010-6-21 15:44 发表 在写pl/sql的时候,有个很重要的注意点:比如:begin update 某个sqlserver的表@dblink名字 .... ...
- (转)[SQL Server] 动态sql给变量赋值(或返回值给变量)
本文转载自:http://blog.csdn.net/xiaoxu0123/article/details/5684680 [SQL Server] 动态sql给变量赋值(或返回值给变量) decla ...
- SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件
原文:SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件 从2005开始,就引入了"数据库邮件"功能.并且取代SQLMail.原有SQLMail ...
- SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)
原文:SQL Server审计功能入门:SQL Server审核 (SQL Server Audit) 介绍 Audit是SQL Server 2008之后才有的功能,它能告诉你"谁什么时候 ...
- sql server 与 sql server compact 互相数据导入
从SQL Server 导出数据到 Sql Compact 使用 Sql Server Compact Tool box 从SQL Server Comapct 导出数据到 Sql Server 使 ...
- SQLSERVER 免费对比数据库结构和数据的工具支持:SQL Server 2012, SQL Server 2008 and SQL Server 2005
New xSQL Schema Compare - version 5 Compare the schemas of two SQL Server databases, review differen ...
随机推荐
- SQL Server 存储过程之基础知识(转)
什么是存储过程呢?存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令. 通俗来讲:存储过程其实就是能完成一定操作的一组SQL语句. 那为什么要用存储过程呢?1.存储过程只在创造时进行编译, ...
- Android Activity和intent
- Maven 学习笔记
1. Maven 工具的意义: 从事软件开发,无论什么样的项目,什么样的技术,都要经历:编码.测试.打包.发布等几个特定过程,而这些过程在软件开发周期中都是重复的.繁琐的.Maven的出现是为了将开发 ...
- 快速下单!简化EcStore的购物结算流程
EcStore拥有完善的购物车功能,方便顾客浏览挑选商品,但是在提交订单时必须要求用户先登录注册 如果是未注册用户还多出一个注册用户的步骤这些多出来的步骤和操作会影响购物下单的流畅性,降低了用户购物下 ...
- Bone Collector II(HDU 2639 DP)
Bone Collector II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 实用AutoHotkey功能展示
AutoHotkey是什么 AutoHotkey是一个自动化脚本语言. AutoHotkey有什么用 可以让你用热键操控一切,操作电脑就像在表演魔术 我的口号 AutoHotkey!用过都说好! Au ...
- HttpClient post中文乱码解决
在javase方式下使用HttpClient没有进行任何编码设置,本地从服务端获取到数据不存在中文乱码. 但是将此段代码部署到Tomcat下面出现了中文乱码,此时设置: post.getParams( ...
- Ubuntu14.0.4 64位 ADT 连接手机调试问题
1:使用 lsusb 命令查看USB 设备 y@y:~$ lsusbBus 001 Device 002: ID 8087:8000 Intel Corp. Bus 001 Device 001: I ...
- USB_scsi 之旅
现在总结一下scsi,scsi协议有很多,所以只总结这次在usb mass storage里面用到的协议,主要包括inquiry,format , read write等等命令. 下面会一个一个总结. ...
- 对Qt for Android的评价(很全面,基本已经没有问题了,网易战网客户端就是Qt quick写的),可以重用QT积累20年的RTL是好事,QML效率是HTML5的5倍
现在Qt不要光看跨平台了,Qt也有能力和原生应用进行较量的.可以直接去Qt官网查看他和那些厂商合作.关于和Java的比较,框架和Java进行比较似乎不且实际.如果是C++和Java比较,网上有很多文章 ...