SQL 语言基础相关课程资料请看这里:SQL 语言基础
SQL 对大小写不敏感,用来访问和操作数据库。
RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础。
RDBMS 中的数据存储在被称为表(tables)的数据库对象中。 表是相关的数据项的集合,它由列和行组成。
一个数据库通常包含一个或多个表。
每个表由一个名字标识。
表包含带有数据的记录(行)。
列代表字段,行代表记录
可以把 SQL 分为两个部分:
数据操作语言 (DML)
DML:查询和更新指令
数据定义语言 (DDL)。
DDL:创建或删除表格、定义索引(键)、规定表之间的链接、施加表间的约束
主要的DDL语句:
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号
CREATE DATABASE database_name
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
数据类型(data_type)规定了列可容纳何种数据类型。
数据类型 | 描述 |
---|---|
integer(size), int(size), smallint(size), tinyint(size) | 仅容纳整数,括号内规定数字的最大位数 |
decimal(size,d), numeric(size,d) | 容纳带有小数的数字。"size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。 |
char(size) | 容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。在括号中规定字符串的长度。 |
varchar(size) | 容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。 |
date(yyyymmdd) | 容纳日期。 |
选取所有的列:
SELECT * FROM 表名
选取指定的列(可以多个列):
SELECT 字段名1, 字段名2, 字段名3 FROM 表名
SELECT DISTINCT 列名称 FROM 表名称
操作符 描述
= 等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
注意:
不等于号是<>
and 和 or 可以在where 子句中把两个或多个条件结合起来。
ORDER BY 语句用于根据指定的列对结果集进行排序(默认按照升序--ACS)。
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
基本语法:
或是指定所要插入数据的列
修改指定列:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
修改指定多列(逗号隔开):
UPDATE 表名称 SET 列名称1 = '新值1', 列名称2 = '新值2' WHERE 列名称 = '某值'
DELETE FROM 表名称 WHERE 列名称 = 值
删除所有行
可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
DELETE FROM table_name
或者:
DELETE * FROM table_name
TOP 子句用于规定要返回的记录的数目。
注释:并非所有的数据库系统都支持 TOP 子句
SELECT TOP 数目|百分比 字段... FROM 表名
实例:
SELECT TOP 2 * FROM Persons
SELECT TOP 50 PERCENT * FROM Persons
用于在 WHERE 子句中搜索列中的指定模式。
SELECT 字段(s) FROM 表名 WHERE 字段 LIKE 模式
通配符 | 描述 |
---|---|
% | 替代一个或多个字符 |
_ | 仅替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist] 或者[!charlist] | 不在字符列中的任何单一字符 |
示例:
SELECT * FROM Persons WHERE City LIKE 'N%'
搜索以N开头的城市
SELECT * FROM Persons WHERE City LIKE '%lond%'
搜索包含lond的城市
SELECT * FROM Persons WHERE City LIKE '%g'
搜索以g结尾的城市
SELECT * FROM Persons WHERE City LIKE '[ALN]%'
搜索居住的城市以 "A" 或 "L" 或 "N" 开头的人
SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
in 操作符允许我们在 WHERE 子句中规定多个值。
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)
between ... and 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
SELECT column_name(s) FROM 表名 WHERE 字段名 BETWEEN value1 AND value2
可以为列名称和表名称指定别名(Alias)。
表的 SQL Alias 语法:
SELECT column_name(s) FROM table_name AS alias_name
列的 SQL Alias 语法:
SELECT column_name AS alias_name FROM table_name
别名使查询程序更易阅读和书写
join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
我们将主要探讨以下几种约束:
NOT NULL 约束强制列不接受 NULL 值
如果不向字段添加值,就无法插入新记录或者更新记录。
唯一标识数据库表中的每条记录
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
mysql中使用 unique:
MySQL:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
)
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (Id_P)
)
表以存在,添加主键的语句:
alter talble Persons add primary key (Id_P)
撤销 primary key 约束,请使用下面的 SQL:
MySQL:
alter talble Persons drop primary key
一个表中的 foreign key 指向另一个表中的 primary key。
check 约束用于限制列中的值的范围。
如果对单个列定义 check 约束,那么该列只允许特定的值。
如果对一个表定义 check 约束,那么此约束会在特定的列中对值进行限制。
MySQL示例:
在 "Persons" 表创建时为 "Id_P" 列创建 CHECK 约束。CHECK 约束规定 "Id_P" 列必须只包含大于 0 的整数。
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)
)
Persons表已经存在:
alter table Persons add check (Id_P>0)
default 约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新记录。
MySQL:
alter table Persons alter City set default 'SANDNES'
create index 语句用于在表中创建索引
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
- 您可以在表中创建索引,以便更加快速高效地查询数据。
- 用户无法看到索引,它们只能被用来加速搜索/查询。
CREATE INDEX index_name
ON table_name (column_name)
可以配合 desc 关键字。实现降序索引
删除索引、表和数据库
mysql删除索引:
alter table table_name drop index index_name
删除数据库
DROP DATABASE 数据库名称
删除表
DROP TABLE 表名称
相关文章推荐: