sql语句
==========================================sql之left join、right join、inner join的区别======================================================
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
举例如下:
--------------------------------------------
表A记录如下:
aID aNum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115
表B记录如下:
bID bName
1 2006032401
2 2006032402
3 2006032403
4 2006032404
8 2006032408
--------------------------------------------
1.left join
sql语句如下:
select * from A
left join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
(所影响的行数为 5 行)
结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
--------------------------------------------
2.right join
sql语句如下:
select * from A
right join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
NULL NULL 8 2006032408
(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
--------------------------------------------
3.inner join
sql语句如下:
select * from A
innerjoin B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
-------------------------------------------------------------------------------------------------------------------------------------------
===================================索引=================================================================================================
类型:普通索引、唯一索引、主键索引、聚集索引。
----普通索引
最基本的索引类型,没有唯一性之类的限制。普通索引可以通过以下几种方式创建:
创建索引,例如CREATE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);[3]
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );
----唯一索引
唯一索引是不允许其中任何两行具有相同索引值的索引。
当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在 employee 表中职员的姓 (lname) 上创建了唯一索引,则任何两个员工都不能同姓。
对某个列建立UNIQUE索引后,插入新纪录时,数据库管理系统会自动检查新纪录在该列上是否取了重复值,在CREATE TABLE 命令中的UNIQE约束将隐式创建UNIQUE索引。
创建唯一索引的几种方式:
创建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表); ;
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );
-----主键索引
简称为主索引,数据库表中一列或列组合(字段)的值唯一标识表中的每一行。该列称为表的主键。
在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。
提示尽管唯一索引有助于定位信息,但为获得最佳性能结果,建议改用主键索引。
-----候选索引
与主索引一样要求字段值的唯一性,并决定了处理记录的顺序。在数据库和自由表中,可以为每个表建立多个候选索引。
-----聚集索引
也称为聚簇索引,在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引, 即如果存在聚集索引,就不能再指定CLUSTERED 关键字。
索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。聚集索引更适用于对很少对基表进行增删改操作的情况。
如果在表中创建了主键约束,SQL Server将自动为其产生唯一性约束。在创建主键约束时,指定了CLUSTERED关键字或干脆没有制定该关键字,SQL Sever将会自动为表生成唯一聚集索引。
-----操纵索引
--创建索引
SQL3没有提供建立索引的方法。但是,从事DBMS开发、销售的公司都提供他们具有这种功能的SQL工具。因为这些工具不是标准化的,它们相互不同。SQL语言使用CREATE INDEX 语句建立索引,其一般格式是:
CREATE [UNIQUE] [CLUSTERED| NONCLUSTERED] INDEX <索引名>
ON <表名>(<列名>[ASC|DESC] [, <列名>[ASC|DESC]...])
说明:与表一样,索引也需要有唯一的名字,且基于一个表来建立,可以根据表中的一列或者多列,当列的顺序都是升序默认可不必标出,当属性列有按照降序排列的,所有属性的升序降序都不要标明。
UNIQUE——建立唯一索引。
CLUSTERED——建立聚集索引。
NONCLUSTERED——建立非聚集索引。
ASC——索引升序排序。
DESC——索引降序排序
--修改索引
对于已经建立的索引,如果需要对其重新命名,可以使用ALTER INDEX 语句。其一般格式为
ALTER INDEX <旧引索名字> RENAME TO<新引索名>
--删除索引
当某个时期基本表中数据更新频繁或者某个索引不在需要时,需要删除部分索引。SQL语言使用DROP INDEX 语句删除索引,其一般格式是:
DROP INDEX<索引名>
删除索引时,DBMS不仅在物理删除相关的索引数据,也会从数据字典删除有关该索引的描述。
----------注意事项
并非所有的数据库都以相同的方式使用索引。作为通用规则,只有当经常查询索引列中的数据时,才需要在表上创建索引。索引占用磁盘空间,并且降低添加、删除和更新行的速度。如果应用程序非常频繁地更新数据或磁盘空间有限,则可能需要限制索引的数量。在表较大是在建立索引,表中的数据越多,索引的优越性越明显。
可以基于数据库表中的单列或多列创建索引。多列索引使您可以区分其中一列可能有相同值的行。
如果经常同时搜索两列或多列或按两列或多列排序时,索引也很有帮助。例如,如果经常在同一查询中为姓和名两列设置判据,那么在这两列上创建多列索引将很有意义。
确定索引的有效性:
检查查询的 WHERE 和 JOIN 子句。在任一子句中包括的每一列都是索引可以选择的对象。
对新索引进行试验以检查它对运行查询性能的影响。
考虑已在表上创建的索引数量。最好避免在单个表上有很多索引。
检查已在表上创建的索引的定义。最好避免包含共享列的重叠索引。
检查某列中唯一数据值的数量,并将该数量与表中的行数进行比较。比较的结果就是该列的可选择性,这有助于确定该列是否适合建立索引,如果适合,确定索引的类型。
==================================T-SQL语言===================================
数据定义语言ddl:(create ,alter,drop)用于在数据库系统中对数据库,表,视图,索引等数据库对象进行创建和管理。
数据控制语言dcl:(revoke,deny,grant)用于实现对数据库中数据的完整性,安全性等的控制。
数据操纵语言dml:(insert,updat,delete)用于插入,修改,删除和查询数据库中的数据。
---T-SQL语句分类
变量说明语句:用来说明变量的命令。
数据定义语句:用来建立数据库,数据库对象和定义列,大部分是以Create开头的命令。
数据操纵语句:用来操纵数据库中数据的命令,如Select,Insert,Update,Delete等等。
数据控制语句:用来控制数据库组件的存取许可,存取权限等命令,如Grant,Revoke等等。
流程控制语句:用于设计应用程序流程的语句,如If While和Case等等。
内嵌函数:说明变量的命令。
其他命令:嵌于命令中使用的标准函数。
---简单T-SQL语言的使用
1. Create database 语句
语法格式为:Create database 数据库名,创建一个数据库
2. Drop database 语句
语法格式为:Drop database 要删除的数据库名,删除一个数据库
3. Create table 语句
语法格式为:Create table 表名(
列名 1 数据类型,
列名 2 数据类型,
列名 3 数据类型,
...
)创建一个数据表
4. Drop table 语句
语法格式为:Drop table 要删除的表名,删除一个数据表
5. Insert 语句
向表中插入数据使用Insert语句,语法格式为:Insert 表名 (字段1,字段2,...,字段n) values (值1,值2,...,值n)。
对于向表中的所有非标识列字段插入数据,简写为下面格式:Insert 表名 values (值1,值2,...,值n)。
6. Update 语句
更改表中的内容是由Update语句实现的,语法格式为:Update 表名 set 字段1=值1,字段2=值2,...,字段n=值n where 条件1 and 条件2 and...and 条件n 其中不加where和后面的条件是更新表中所有内容,加上where和后面的条件是只更新符合条件的内容。
7. Delete 语句
删除数据表中的内容通过Delete语句实现,语法格式为:Delete 表名 where 条件1 and 条件2 and ... and 条件n,其中不加where和后面的条件是删除数据表中的所有内容,加上where和后面的条件是只删除符合条件的内容。
8. SeLect 语句
查询数据表中的内容是通过Select语句实现的,语法格式为:Select 子段1,子段2,...,子段n from 表 where 条件1 and 条件2 and ... and 条件n。查询数据表中的所有子段的格式为:Select * from 表 where 条件1 and 条件2 and ... and 条件n。其中不加where和后面的条件是查询数据表中的所有内容,加上where和后面的条件是只查询符合条件的内容。
create table UserInformation(
id int primary key,
userName varchar(50),
userSex varchar(50),
userTel varchar(50),
userAge tinyint,
userAdress varchar(50)
)
Insert UserInformation values(1,'管理员', '女','12345678','30','新华路24号')
Update UserInformation set userTel='175000111' where id=1
Delete UserInfomation where userSex='女'
Select * from UserInformation userAge>30
浙公网安备 33010602011771号