SQL语言全称是结构化查询语言,它是一种在关系型数据库中定义和操纵数据的标准语言。它实际上包含数据定义、数据查询、数据操作和数据控制等与数据库有关的全部功能。
4.1SQL语言概述
SQL语言是操作关系数据库的标准语言,是一种高级的非过程化编程语言,是沟通数据库服务器和客户端的重要工具,允许用户在高层数据库结构上工作。本节介绍SQL语言的发展过程、特点以及主要功能。
4.1.2SQL语言的特点
一体化,高度非过程化,面向集合的操作方式,提供多种方式使用,语言简洁。
4.1.3SQL语言的功能
四大部分:数据定义、数据查询、数据操纵和数据控制。
数据定义:CREATE,DROP,ALTER
数据查询:SELECT
数据操纵:INSERT,UPDATE,DELETE
数据控制:GRANT,REVOKE,DENY
数据定义功能用于定义、删除和修改数据库中的对象,数据库、关系表、视图、索引等都是数据库对象;数据查询功能用于实现查询数据的功能,数据查询是数据库中使用最多的操作;数据操纵功能用于添加、删除和修改数据库数据;数据控制功能用于控制用户对数据的操作权限。
4.2SQL支持的数据类型
关系数据库的表有不同的属性组成,属性是由名称、类型和长度等来描述的。因此,在定义表结构时,应该为每个属性指定一个确定的数据类型。
共有13个基本数据类型组成:精确数字、近似数字、日期时间型、字符串型(普通字符编码串、统一字符编码串、二进制串)、其他类型。
4.3数据定义功能
创建数据库:create database 数据库名
删除数据库:drop database 数据库名
创建表:create table 表名(列名 数据类型 [列级完整性约束],…… [表级完整性约束])
列级完整性约束:
NOT NULL:非空约束,限制列取值非空。
PRIMARY KEY:主键约束,指定本列为主键。
FOREIGN KEY:外键约束,定义本列为引用其他表的外键。
UNIQUE:唯一值约束,限制列取值不能重复。
DEFAULT:默认值约束,指定列的默认值。
CHECK:列取值范围约束,限制列的取值范围。
定义外键的语法格式:
[foreign key 列名] references 外表名 外表列名
修改表:
ALTER TABLE语句的语法如下:
ALTER TABLE[<架构名>.] <表名>
{ALTER COLUMN <列名> <新数据类型>|ADD <列名> <数据类型> [约束]
I DROP COLUMN <列名 >
I ADD [ constraint <约束名>] 约束定义
DROP<约束名>}
删除表:drop table 表名1,表名2
4.4数据查询功能
SELECT <目标列名序列>
FROM <表名> [JOIN <表名> ON <连接条件>]
[ WHERE <行选择条件>]
[ CROUP BY <分组依据列> ]
[ HAVING <组选择条件>]
[ ORDER BY <排序依据列>]
●SELECT子句用于指定输出的字段。
●FROM子句用于指定数据的来源。
●WHERE子句用于指定数据的行选择条件。
●GROUP BY子句用于对检索到的记录进行分组。
●HAVING子句用于指定对分组后结果的选择条件。
●ORDER BY子句用于对查询的结果进行排序。
<目标列名序列>若是*,则查询的是所有的列名。
对数据进行分组:
group by 分组依据 [having 条件] 有having必须有group by。
别名:列名|表达式[as] 列别名
where 子句:
查询条件 谓词
比较(比较运算符) =、>、>=、<=、<、<>、!=
确定范围 BETWEEN ... AND、NOT BETWEEN ... AND
确定集合 IN、NOT IN
字符匹配 LIKE、NOT LIKE
空值 IS NULL、IS NOT NULL
多重条件(逻辑谓词) AND、OR
LIKE:列名 [not] like <匹配串>
匹配串4种通配符:
●_(下划线):匹配任意一个字符。
●% (百分号):匹配0到多个字符。
●[]:匹配[ J中的任意一个字符。
聚合函数:
(1) COUNT ( * ):统计表中元组的个数(不忽略NULL值)。
(2) COUNT ( [DISTINCT] <列名>):统计本列的列值个数,DISTINCT 选项表示去掉列的重复值后再统计。
(3) SUM (<列名>):计算列值的和值(必须是数值型列)。
(4) AVG (<列名>):计算列值的平均值(必须是数值型列)。
(5) MAX (<列名>):得到列值的最大值。
(6) MIN (<列名>):得到列值的最小值。
多表连接:
内连接:inner join
左外连接:left outer join
右外连接:right outer join
全连接:full outer join
自连接:
FROM表1 AS T1 可想象成在内存中生成表名为“T1”的表发中果
JOIN表1 AS T2 可想象成在内存中生成表名为“T2” 的表
ONT1.列名= T2.列名 对新命名的T1和T2表进行连接
TOP:
使用TOP子句的格式如下:
TOPn[percent ] [ WITH TIES]
●n为非负整数。
●TOP n:取查询结果的前n行数据。
●TOP n percent:取查询结果的前n%行数据。
●WITH TIES:包括并列的结果。
TOP子句写在SELECT单词的后边( 如果有DISTINCT 的话,则在DISTINCT单词之后),查询列表的前边。
CASE:
简单CASE丽数的语法格式为:
CASE测试表达式
WHEN简单表达式1 THEN结果表达式1
WHEN简单表达式2 THEN结果表达式2
WHEN简单表达式n THEN结果表达式n
[ ELSE结果表达式n+1 ]
END
●测试表达式可以是一一个变量名、字段名、函数或子查询。
●简单表达式中不能包含比较运算符,它们给出被比较的表达式或值,其数据类型必须与测试表达式的数据类型相同,或者可以隐式转换为测试表达式的数据类型。
子查询:
WHERE <列名> [NOT] IN (子查询)
WHERE <列名>比较运算符(子查询)
WHERE EXISTS (子查询)
not in 与 <>all 等价 =in 与 =some 等价
查询的集合运算:union 并、intersect 交、except 差
4.5视图
视图是基于SQL语句的结果集的可视化的表。试图包含行和列,就像一个真实的表。视图是一个虚表。
创建视图:create view 视图名 [列名] as select 语句
通常不包含order by和distinct 子句。
视图不仅可用于查询数据,也可以通过视图修改基本表中的数据,但并不是所有的视图都可以用于修改数据。比如,经过统计或表达式计算得到的视图,就不能用于修改数据的操作。能否通过视图修改数据的基本原则是:如果这个操作能够正确落实到基本表上,则可以通过视图修改数据,否则不行。
修改视图:alter view 视图名 [列名] as select 语句
删除视图:drop view 视图名
4.6数据更改功能
插入:insert into 表名[(列名表)] values(值列表)
更改:update 表名 set 列名=表达式 [from 条件 ] where 更新条件(若省略where,则更新所有)
数据删除:delete from 表名 from 条件 where 删除条件(若省略where,则删除所有)