您的位置:首页 > 数据库

数据库基础知识整理:

2017-02-16 15:48 344 查看
该篇是梳理W3School SQL教程而来。详细戳W3School SQL教程

以表Students为例:

1. 首先创建表:

CREATE TABLE Students(

ID int,

Name varchar(50),

Gender varchar(8),

Age int,

Height double,

ClassID int

)

2. 增删改查:

1) 增:INSERT INTO Students VALUES(‘001’,’Bill’,’Male’,’19’,’3’)

2) 删:DELETE FROM Students WHERE ClassID = ‘3’

注:delete操作意味着表的结构、属性等都是完整,仅仅删除具体条件下的数据。

若想将表的整个结构、属性删除,即:DROP TABLE 表名称

3) 改:UPDATE Students SET ClassID = ‘1’ WHERE ID = ‘001’

4) 查:SELECT * FROM Students

3. 关键字:

1) DISTINCT

表中,可能会包含重复值,有时仅仅想列出不同的值。

如:SELECT DISTINCT ClassID FROM Students

2) ORDER BY

用于根据指定的列对结果集进行排序。默认按照升序( ASC )进行排序;希望按照降序对数据进行排序,使用DESC关键字。

如:SELECT * FROM Students ORDER BY ClassID DESC

SELECT * FROM Students ORDER BY ClassID DESC,ID ASC

4. 操作符:

1) LIKE:用于在WHERE子句中搜索列中的指定模式。

例:SELECT * FROM Students WHERE Name LIKE ’Adam% ’

注:”%”可用于定义通配符(模式中缺少的字母),替代一个或多个字符;”_”仅替代一个字符。

SELECT * FROM Students WHERE Name NOT LIKE ‘%am%’

2) IN:允许我们在WHERE子句中规定多个值。

例:SELECT * FROM Students WHERE ClassID IN(‘1’, ‘3’)

3) BETWEEN:在WHERE子句中使用,作用是选取介于两个值之间的数据范围。

例:显示班级介于’1’(包括)、’3’(不包括)之间的人。

SELECT * FROM Students WHERE ClassID BETWEEN ‘1’ AND ‘3’

注:不同的数据库对 BETWEEN…AND 操作符的处理方式是有差异的。

SELECT * FROM Students WHERE ClassID NOT BETWEEN ‘1’ AND ‘3’

4) AS:可以为列名称和表名称指定别名。

SELECT Name AS Family, Gender AS Sex FROM Students

5) JOIN:用于根据两个表中列之间的关系,从表中查询数据。

假设有两个表:Students(学生信息)、Classes(班级信息)。表中,每个主键的值都是唯一的。表Students中,ID(学生学号) 是主键,表Classes中,ID(班级序号) 是主键。

SELECT Students.ID, Name FROM Students, Classes WHERE Students.ClassID = Classes.ID ,除此,还可以使用JOIN关键词,如:

SELECT Students.ID, Name FROM Students INNER JOIN Classes ON Students.ClassID = Classes.ID

注:不同的JOIN连接,上面例子使用了INNER JOIN(内连接),还有其他几种连接

JOIN:如果表中有至少一个匹配,则返回行。(与INNER JOIN是相同的)

LEFT JOIN:即使右表中没有匹配,也返回左表的所有行。

RIGHT JOIN:即使左表中没有匹配,也返回右表的所有行。

FULL JOIN:只要一个表中存在匹配,就返回行。

6) UNION 和UNION ALL:UNION操作符用于合并两个或多个SELECT语句的结果集。

默认地,UNION操作符选取不同的值。如果允许重复的值,请使用UNION ALL。

例:SELECT ID FROM Students

UNION

SELECT ID FROM Classes

5. 约束:限制加入表的数据的类型。可以在创建表的时候规定约束()

1) NOT NULL:强制列不接受NULL值。意味着,如果不给某列赋值,就无法插入新纪录或者更新记录。

例:

CREATE TABLE Students

(

ID int NOT NULL,



)

2) UNIQUE:约束唯一标识数据库表中的每条记录。和PRIMARY KEY约束均为列或列集合提供了唯一性的保证。

注:每个表可以有多个UNIQUE约束,但是只能有一个PRIMARY KEY约束。作为PRIMARY KEY的域不能是NULL,而UNIQUE可以为NULL。

例:

CREATE TABLE Students

(

ID int, //或者ID int UNIQUE,

…
UNIQUE(ID)


)

若多个列需要定义UNIQUE约束,则如下:

CREATE TABLE Students

(

ID int,



CONSTRAINT uc_StudentID UNIQUE(ID, Name)

)

3) PRIMARY KEY:主键,每个表都应该有一个主键,并且每个表只能有一个主键。主键必须包含唯一的值,主键列不能包含NULL值。

4) FOREIGN KEY:外键,一个表中的FOREIGN KEY指向另一个表中的PRIMARY KEY。

例如表Student及Classes: 在Students表中,ClassID列是FOREIGN KEY,而在Classes中,ID是PRIMARY KEY。

CREATE TABLE Students

(

ID int,

…,

ClassID int, //或者ClassID int FOREIGN KEY REFERENCES Classes( ID ),

PRIMARY KEY( ID),

FOREIGN KEY( ClassID ) REFERENCES Classes( ID)

)

6. 索引:在表中创建索引,在不读取整个表的情况下,索引使得数据库应用程序可以更快地查找数据。

更新包含索引的表需要更多的时间,这是因为索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

例:CREATE INDEX StudentIndex ON Students( Name)

7. 视图:基于SQL语句的结果集的可视化的表。包含行和列,就像一个真实的表。

如:CREATE VIEW [Students Name] AS

SELECT DISTINCT FROM Students

8. 函数:

合计函数:面向一系列的值,并返回一个值:



标量函数:面向某个单一的值,并返回与其对应的单一的值:



1) AVG函数:返回数值列的平均值。NULL值不包括。

SELECT AVG(Age) AS AgeAverage FROM Students

SELECT Name FROM Students WHERE Age > (SELECT AVG(Age) FROM Students

)

2) COUNT函数:返回匹配指定条件的行数。

SELECT COUNT( * ) AS Num FROM Students

3) FIRST函数:返回指定的字段中第一个记录的值。

SELECT FIRST(Name) AS FirstStudent FROM Students

4) LAST函数:返回指定的字段中最后一个记录的值。

SELECT LAST(Name) AS LastStudent FROM Students

5) MAX函数:返回一列最大值。NULL值不包括。

SELECT MAX(Age) AS MaxAge FROM Students

注:MAX/MIN也可用于文本列,以获得按字母顺序排列的最高或最低值。

6) MIN 函数:返回一列最小值。NULL值不包括。

SELECT MIN(Age) AS MinAge FROM Students

7) SUM函数:返回数值列的总数。

SELECT SUM(Age) AS AgeTotal FROM Students

8) GROUP BY语句:结合合计函数,根据一个或者多个列对结果集进行分组。SUM等函数常常需要添加GROUP BY语句。

SELECT ClassID,COUNT(Name) FROM Students

GROUP BY ClassID

9) HAVING语句:作用是测试查询结果是否符合条件。存在的原因是,WHERE关键字和合计函数无法一起使用。

SELECT ClassID,COUNT(Name) FROM Students

GROUP BY ClassID

HAVING COUNT(Name) > 10

SELECt ClassID,COUNT(Name) FROM Students

WHERE ClassID = ‘1’ OR CLassID = ‘2’

GROUP BY ClassID

HAVING COUNT(Name) > 10

10) UCASE函数:把字段的值转换为大写。

SELECT UCASE(Name) as Name FROM Students

11) LCASE函数:把字段的值转换为小写。

12) MID函数:用于从文本字段中提取字符。

SELECT MID(Name, 1, 4) as SmallName FROM Students

13) LEN函数:返回文本字段中值的长度。

SELECT LEN(Name) AS LengthOfName FROM Students

14) ROUND函数:把数值字段舍入为指定的小数位数。

如:把学生身高舍入为最接近的整数。

SELECT ROUND(Height, 0) as UpdatedHeight FROM Students

15) NOW函数:返回当前的日期和时间。

SELECT Name,ClassID,NOW() as Date FROM Students

16) FORMAT 函数

SELECT Name,ClassID,FORMAT(NOW(), ‘YYYY-MM-DD’) as Date FROM Students

9. SQL快速参考:

参考

10. 事务:是访问并可能更新数据库中各种数据项的一个程序执行单元。在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: