SQL基础之基本操作
1.UNION操作符
union操作符用来合并两个或多个select语句的结果,要注意union内部的每个select语句必须拥有相同数量的列,而且列也必须拥有相似的数据类型和相同的列顺序。下面是我的数据表的截图一个小例子。
那现在对数据表进行联合操作,这里我们联合这两个表的bookName。
select bookName from myrank
union
select bookName from mybook;
从结果可以看出bookName这列显示的是两张表的联合的数据,而且你如果仔细看会发现其实应该是有重复数据的,而结果没有显示说明重复数据被过滤掉了。如果想显示重复数据可在union后添加All关键字。
select bookName from myrank
union all
select bookName from mybook;
2.select into与insert into select操作符
通过select into语句我们可以将一个表的信息复制到另一个表中,新创建的表中的列名会和原来的表的列名一样。
--将mybook表的数据复制到mybookcopy表中,mybookcopy表无需我们创建,执行这条语句后会自动创建mybookcopy表
select * into mybookcopy from mybook;
--复制多个表的列到新表中
select mybook.bookName,myuser.userName into newtable from mybook join myuser on mybook.userID=myuser.userId
insert into select语句则是从一个表中复制数据然后插入到另一个已存在的表中,目标表中原有的行不会受到任何影响。
insert into myrank(userId) select userID from mybook
3.约束
约束用于规定表中的数据规则,如果存在违反约束的数据行为,行为将会被约束终止。在SQl中有以下六个约束:
NOT NULL:这个应该很熟悉,就是不能为空
UNIQUE:保证列的每行都必须有唯一的值
PRIMARY KEY:主键,可以理解为是not null和unique的结合,确保这个表的某列有唯一标识
FOREIGN KEY:外键,它标识这个列是另外一个表的主键,用于保证这两个表之间的参照完整性
CHECK:创建列中的值的范围,保证列中的值符合指定的条件
DEFAULT:规定列的默认值
接下来是这6大操作的sql语句,每条语句上都有它的解释。
--创建表时在列的后面加上NOT NULL关键字则添加了非空的约束
create table mytable
(
myID int NOT NULL,
myName nvarchar(32) NOT NULL
)
--创建表时在列的后面加上UNIQUE关键字则添加了唯一的约束
create table mytable2
(
myID int NOT NULL UNIQUE,
myName nvarchar(32) NOT NULL
)
--当表被创建好后,可以使用alter来新增唯一性约束
alter table mytable2 add constraint nameunique unique(myName)
--使用alter和drop来删除唯一性约束
alter table mytable2 drop nameunique --将mytable2删除后重新创建,并设置myID为主键
create table mytable2
(
myID int NOT NULL,
myName nvarchar(32) NOT NULL,
constraint myprimary primary key(myID)
)
--而且在这个地方我还发现当删除数据表后,如果马上新建名字和字段一样的表会直接将刚刚删除的表重新显示,原有的数据还在,只是添加了主键
--删除主键
alter table mytable2 drop myprimary
--新增主键
alter table mytable2 add constraint myprimary primary key(myID,myName) --首先删除上面mytable2的主键,创建mytable3,并设置myName为主键
create table mytable3
(
myName nvarchar(32) NOT NULL PRIMARY KEY,
age int NOT NULL
)
--然后设置mytable2的myName为外键,删除方式和上面差不多,也是采用drop关键字
alter table mytable2 add constraint myforeign foreign key(myName) references mytable3(myName)
--创建表时在列的后面加上check关键字则添加了约束
create table mytable3
(
myID int NOT NULL check (myID>0),
myName nvarchar(32) NOT NULL
)
--新增check约束
alter table mytable3 add constraint mycheck check(myName!='hh')
--删除check约束
alter table mytable3 drop mycheck --创建表时在列的后面加上default关键字,只是这个地方SQL2008做得还不够好,添加一行数据如果不填myName它会显示NULL,关了再查看才为fyz
create table mytable3
(
myID int NOT NULL check (myID>0),
myName nvarchar(32) default'fyz'
)
--删除default约束
alter table mytable3 drop constraint DF__mytable3__myName__2B3F6F97;
--新增default约束
alter table mytable3 add default'hhh' for myName;
最后一个default约束我差不多搞了一上午才解决。本来我是按照菜鸟教程上写的,结果发现并不可以,百度到w3c又发现菜鸟其实是复制w3c的,而百度基本前两页页又全是那些复制菜鸟或者根本没有具体例子的。好了,首先是我要删除default约束,前面我都是给约束起了名字的,删除时可以直接删除约束。在default约束这里我是直接在创建表时指定的,使用菜鸟上的drop default并不可以,最后知道如果我在创建表时就添加约束则会有一个默认约束,数据库系统会自动给这个约束命名,可以使用下面的方法得到这个约束的名字:
select c.name from sysconstraints a
inner join syscolumns b on a.colid=b.colid
inner join sysobjects c on a.constid=c.id
where a.id=object_id('mytable3')
and b.name='myName'
得到名字后再去删除。第二个问题是我要修改约束,最后在微软官网上才知道原来如果要修改default约束,必须要先删除已有的约束然后再设置新的约束。我不知道是不是版本问题,菜鸟上是ALTER TABLE Persons ALTER COLUMN City DROP DEFAULT,但是在我的SQL 2008上并没有什么用,最后看到一位前辈使用add才添加成功。
4.create index、auto increment和null操作
当数据表的数据很多时,我们可以利用索引在不读取整个表的情况下更快地查找数据。我们可以在表中创建索引,它是看不到的,只能利用加速搜索/查询。但是使用索引也有缺点,更新一个包含索引的表比更新一个没有索引的表花费更多的时间,因为索引本身也需要更新。由于索引有这个缺点,因此一般较好的做法是仅仅在常常被搜索的列上使用索引。我在敲完教程上的索引后竟然发现没有讲如何使用索引,把教程上的例子敲完我会再去深入学习下索引。auto increment从名字可以看到是自增的意思,这样可以保证在新记录插入表中时生成一个唯一的数字。
--创建索引,可以使用重复的值
create index myIdindex on mytable3(myId);
--创建不允许有重复值,一个索引只能对应这唯一的一行
create unique index myuniqueIndex on mytable3(myId); --使用drop可以删除索引、表、数据库等
drop index myIdindex on mytable3;
drop index mytable3.myuniqueIndex;
--tip:如果我们需要清空表里的数据而不删除表本身
truncate table myrank;
--alter table可用于在已有的表中添加、删除和修改列
alter table mybook add bookOther nvarchar(32);
alter table mybook alter column bookOther nvarchar(64);
alter table mybook drop column bookOther; --设置auto-increment主键字段,identity是设置主键的关键字,第一个1表示从1开始,第二个1表示每条记录递增1
create table mytable4
(
myId int identity(1,1) primary key,
myname nvarchar(16)
)
null代表未知数据,在sql里我们不能用“=”来判断是否为null,必须使用is null和is not null来进行判断。另外有时候我们需要对某一列的数据进行算术运算,可是这个时候这列的某些数据还是null,这样就无法完成操作。既然有这个需求那肯定是有解决方案的,sql里有一个isnull函数,可将为null的某列的值设置一个默认值。下面是sql语句:
insert into mytable4 values('hh');
insert into mytable4 (myname) values (null);
--查找为空的行和不为空的行
select * from mytable4 where myname is null;
select * from mytable4 where myname is not null;
--isnull()函数,这样如果某行的myname为null,则会输出fyz
select myId,ISNULL(myname,'fyz') as myaname from mytable4;
SQL基础之基本操作的更多相关文章
- [SQL] SQL 基础知识梳理(一)- 数据库与 SQL
SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...
- [SQL] SQL 基础知识梳理(二) - 查询基础
SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(三) - 聚合和排序
SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...
- [SQL] SQL 基础知识梳理(四) - 数据更新
SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(五) - 复杂查询
SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...
- 黑马程序员+SQL基础(上)
黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...
- Oracle SQL 基础学习
oracel sql 基础学习 CREATE TABLE USERINFO ( ID ,) PRIMARY KEY, USERNAME ), USERPWD ), EMAIL ), REDATE DA ...
- 第一章 SQL基础
第一部分:SQL基础1. 为什么学习SQL自人类社会形成之日起,社会的运转就在不断地产生和使用各种信息(文献.档案.资料.数据等):在如今所谓的信息时代,由于计算机和互联网的作用,信息的产生和使用达到 ...
- SQL基础--> 约束(CONSTRAINT)
--============================= --SQL基础--> 约束(CONSTRAINT) --============================= 一.几类数据完 ...
随机推荐
- 动态规划(DP)基础
DP基础 简单dp 背包问题 记忆化搜索 简单dp 数字三角形 给一个数字构成的三角形,求从顶端走到底部的一条路径,使得路径上的和最大(或者最小). 1 2 3 6 5 4 Example_1 7 3 ...
- linux管道命令grep命令参数及用法详解---附使用案例|grep
功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...
- Java的生日
你知道巴西的税务系统,亚马逊的Kindle阅读器以及韩国的第一大镁板制造厂有什么共同点吗?乍一看上去,这简直就是风马牛不相及,但是这些系统同世界上其它100亿个设备共享一个元素,那就是Java. 19 ...
- 外景VR的应用
留坑,续写. 最近在做外景的项目,被相关的帧率优化和灯光布置困扰的不要不要的.下面写下我是怎么优化帧率和对帧率的一些理解. 帧率,游戏的重要影响因素,会对玩家的手感以及视觉产生重大的影响,一般的游戏帧 ...
- 在ie浏览器,360浏览器下,margin:0 auto;不居中的原因
转自 http://blog.sina.com.cn/s/blog_6eef6bf60100nn4m.html margin:0 auto:不居中可能有以下两个的原因 没有设置宽度 看看上面的代码,根 ...
- [Centos] Centos 7笔记
命令行与图形界面 在X-Window图形操作界面中按“Alt+Ctrl+功能键Fnn=1~6”就可以进入Console字符操作界面.这就意味着你可以同时拥有X-Window加上6个Console字 ...
- php 301 重定向 转自http://www.icoa.cn/a/475.html
内容简介 有时候我们的有多个域名指向同一个网站,或者我们更换了网站的网址,那么怎么样将原来网站的流量导入到新网址中呢,那么我们可以用301重定向的方式,而且这种方式是对搜索引擎比较友好的方式.如果首页 ...
- Daily Scrum Meeting ——TenthDay
一.Daily Scrum Meeting照片 二.Burndown Chart 新增了几个issues 三.项目进展 1.完成了登录界面与管理员和发布者界面的整合. 2.活动发布者界面的完成 四.问 ...
- 【安卓】安卓res文件夹下的资源文件与R.java文件里面类的对应关系
对于drawable.layout.menu文件夹下的每一个文件都分别会在R.java文件里面生成drawable.layout.menu类的一个常量,类名就是文件夹的名字,常量的名字就是文件名字. ...
- (备忘)自定义viewgroup与点击分发事件
public class ScoreButton extends ViewGroup 在类中重写onTouchEvent方法 @Override public boolean onTouchEvent ...