数据库基本总结

SQL:结构化查询语言
SQL语句分为:
DDL(数据定义语言)用于创建、修改和删除数据内的数据结构。
DQL:(数据查询语言) 用于从一个或多个表中查询指定的数据。
DML:(数据操作语言) 用于修改数据库中的数据。
DCL:(数据控制语言) 控制对数据库的访问。
创建个使用数据库:
CREATE DATABASE 数据库名;
连接到数据库:
USE 数据库名;
删除数据库:
DROP DATABASE 数据库名;
管理表:
创建表:
CREATE TABLE<表名>
((列名)<列的数据类型>[(列的约束)]);
删除表:
DROP TABLE (表名)

复制表:
SELECT * INTO (表名1) FROM 表名2;
注:如果是只复制表结构不复制数据,只需在WHERE 子句中添加一个永远不等于TRUE的条件即可;
修改表:
(添加某一列)
ALERT TABLE 表名 要添加的列名 数据类型;
注;如果要添加一个NOT NULL的列,表中必须是没有记录的空表。
(删除某一列) 
ALERT TABLE 表名 DROP COLUMN 列名;
创建索引:
CREATE INDEX<索引名> ON <表名>(<列名一>,<列名二>......);


删除索引:
DROP  INDEX  表名.索引名;


数据完整性概述
根据数据完整性的实施方法,可分为四类:
1:实体完整性;
2:域完整性;
3:应用完整性;
4:自定义完整性;


创建非空约束:
NOT NULL.
设置主键约束:


CONSTRAINT 主键名(可省略)PRIMARY KEY(设定为主键的列名);
主键自带非空性和唯一性。


设置唯一约束;
UNIQUE;


唯一约束与主键的区别:
除了允许NULL外,唯一约束在功能上和主键约束是一致的。尽管两种约束都实现了唯一性,但是在实现以下方面的
唯一性时应该使用唯一约束而不使用主键约束:
1:列或几个列的组合不是主键,有时需要多个列的值的唯一。此时不能使用主键约束,这是因为一个表   只能定义一个主键约束。而一个表可以定义多个唯一约束。
2:列的值允许NULL值。唯一约束可以定义在允许为NULL值的列上,而主键约束只能定义不允许为NULL的   列上。

指定默认值:
如:PhoneNo varchar(15)DEFAULT‘不知道号码’NOT NULL;


设置检查约束:
如:Age INT,
CONSTRAINT 检查约束名(CHECK Age BETWEN 10 and 100 );

   SSN VARCHAR(15)NOT NULL,
CHECK (SSL LIKE '[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' );(正则表达式)
使用自动编号:
如:
id int IDENTITY PRIMARY KEY,
注:默认情况下增量和种子值都是1。当然也可以指定增量和种子值:
id int IDENTITY(1000,1) PRIMARY KEY,




外键约束:
如:
FriendID INT ;
FPREIGN KEY (FriendID ) REFERENCE 表名(列名),


使用DML语句更改数据
添加数据:
插入单行数据:
INSERT INTO <表名> VALUES (<值列表>);

注:字符串和日期用被单引号包含。

插入多行数据:

INSERT INTO <表名>SELECT  <SELECT 语句>;
使用这种语句,实际上是讲数据从一张表复制到另一张表,但是源表和目标表的列名和列数不一定相同。表名必须 已经存在。

表数据的复制:
SELECT <列名>INTO <新表名> FROM <表名>
更改数据:
UPDATE <表名> SET <列1=新值1,列2=新值2,>WHERE <过滤条件>;
删除数据:
DELETE FROM <表名> WHERE <过滤条件>;


TRUNCATE TABLE<表名>(不能用于有外键约束的表)

注:TRUNCATE  TABLE 被优化,执行起来比DELETE 快,因为它不留下详细的删除记录日志,这也意味着TRUNCATE   TABLE是不可回滚的,因为数据被永久性删除,同时TRUNCATE  TABLE也不会触发我们触发器。




简单的数据查询
排除重复数据
SELECT DISTINCT 列A FROM 表名
返回限定行数的查询
SELECT TOP ROWCOUNT 列A,列B FROM 表名

SELECT 5 PERCENT ROWCOUNT 列A,列B FROM 表名


聚合函数与分组


常用的聚合函数如下:
COUNT:返回结果集中行的数目。
SUM: 返回结果集中所有值的总和。
AVG:返回结果集中所有值的平均值。
MAX:返回结果集中所有值的最大值。
MIN:返回结果集中所有值的最小值。


执行行和列计数
SELECT COUNT<计数规范> FROM 表名;
计数规范如下:
* 计算所有选择的行包括NULL值
  ALL    计算指定列的所有非空值行。如果没有仅仅是指定列而不带ALL或者DISTINCT,这是默认操作
DISTINCT 计算指定列的唯一非空值行。




数据分组:
SELECT 列A,聚合函数 FROM 表名
WHERE 过滤条件
GROUP BY 列A


使用HAVING 子句


SELECT StudentId,Avg(Mark)AS AverageMark FROM StudentExam GROUP BY StudentId HAVING Avg(Mark) <50 OR Avg(Mark)>70


SQL语句的执行顺序:
SELECT 字句
FROM  字句
WHERE 字句
GROUP  BY  字句
ORDER BY  字句
HAVING 字句

1:首先执行FROM字句
2: 如果有WHERE 字句,则根据其中的过滤条件,从中间表中去掉不满足过滤条件的行。
3:根据GROUP BY 字句中指定的分组列,对中间表中的数据进行分组。
4:为每个组计算SELECT 字句聚合函数的值,并为每组生成查询结果中的一行。
5:如果有HAVING 字句,则根据HAVING字句的过滤条件,分组计算聚合函数计算的结果再次过滤。
6:如果有ORDER BY 字句,则根据ORDER BY 字句中的列,对结果集进行排序。
使用子查询:
子查询分为相关子查询和非相关子查询;
非相关子查询是独立于外部查询的子查询。子查询总共执行一次,执行完毕后将值传递给外部子查询。

相关子查询的执行依赖于外部子查询的数据,外部子查询返回一行,子查询就执行一次。
SELECT COLUMNA,(子查询) AS COLUMN B FROM 表名;


在子查询中使用运算符:


使用EXISTS 运算符:
EXISTS 运算符允许我们查找满足条件的行,EXISTS后面总是跟一个子查询,只要子查询返回了行, EXISTS的值就为真。


下面的查询返回在任何一次考试中分数低于40的学生的ID和姓名:
SELECT StudentID,Name FROM Student s WHERE EXISTS(SELECT  StudentID FROM 


StudentExam e WHERE Mark<40 AND e.StudentID =s.StudentID ); 


使用ALL运算符
ALL运算符与子查询和比较运算符一起使用。如果子查询返回的所有值都满足比较运算。那么比较表达式 就为真。如果不是所有值都满足比较运算或子查询没有给外部语句返回行,则返回假。
SELECT COLUMN A FROM TABLEA WHERE COLUMN A >ALL(SELECT COULUMB FROM TABLEB);
这个查询返回C从A表中返回COLUMN A 列值大于TABLE B中的每个COULMN B列值的所有行。


使用ANY运算符:
ANY 与ALL的工作方式不同,不同的是:在子查询返回的值中,只要有一行满足比较运算,那么比较表达 式就为真,如果所有值都不满足,则返回假。
SELECT COLUMN A FROM TABLEA WHERE COLUMN A >ALL(SELECT COULUMB FROM TABLEB);
这个查询返回C从A表中返回COLUMN A 列值大于TABLE B中的任何一个COULMN B列值的所有行。






组合查询数据:
SQL提供了几种运算符允许我们组合多个SQL查询来实现这个用途。这些运算符分别是:
UNION、UNION ALL、INTERSECT 和DIFFERENCE
基本语法如下:
SELECT COLUMN A、 COLUMN B FROM TABLE A
<OPERATOR>
SELECT COLUMN C、 COLUMN D FROM TABLE B;




使用UNION 运算符:
SELECT COLUMN A、 COLUMN B FROM TABLE A
UNION
SELECT COLUMN C、 COLUMN D FROM TABLE B;
通常UNION的结果集列名与UNION的第一个SELECT语句的结果集中的列名相同,另一个SELECT语句的结果集的列名将 被忽略。


UNION用来去重复;
如:
{1,2,3,4}UNION{3,4,5,6};
结果为{1,2,3,4,5,6}
保留重复行:
SELECT COLUMN A、 COLUMN B FROM TABLE A
UNION ALL
SELECT COLUMN C、 COLUMN D FROM TABLE B;
通常UNION的结果集列名与UNION的第一个SELECT语句的结果集中的列名相同,另一个SELECT语句的结果集的列名将 忽略。


UNION ALL用来保留重复;
如:
{1,2,3,4}UNION{3,4,5,6};
结果为{1,2,3,3,4,4,5,6}


交集和差分(oracle)


{1,2,3,4}INTERSECT{3,4,5,6};
结果为{3,4}

{1,2,3,4}EXCEPT(OR MINUS){3,4,5,6};
结果为{1,2,5,6}

联接
使用两表相等联接
SELECT table1.column1,table1.column2,table2.column3 from table1,table2 where table1.column1=table2.column3;


SELECT table1.column1,table1.column2,table2.column3 from table1 join table2 on table1.column1=table2.column3;


使用多表相等联接
SELECT * from table1 join  table2
on table1.column1=table2.column2 
join table3
on table1.column3=table3.column4;




使用非相等联接:
SELECT * from table1,table2
where  table1.column1 <table2.column2;












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值