SQL(一)

https://www.w3cschool.cn/sql/8zragfoj.html

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

    SQL(结构化查询语言Structured Query Language)是用于访问和操作数据库中的数据的标准数据库编程语言。

SQL是关系数据库系统的标准语言。所有关系型数据库管理系统Relational Database Management System(RDMS),如MySQL、MS Access、Oracle、Sybase、Informix、Postgres和SQL Server都使用SQL作为它们的标准数据库语言。

  • SQL可以创建新的数据库及其对象(表,索引,视图,存储过程,函数和触发器)。
  • SQL可以修改现有数据库的结构。
  • SQL可以从数据库中删除(删除)对象。
  • SQL可以TRUNCATE(删除)表中的所有记录。
  • SQL可以对数据字典进行COMMENT。
  • SQL可以RENAME一个对象。
  • SQL可以从数据库中选择(检索)数据。
  • SQL可以将数据插入到表中。
  • SQL可以更新表中的现有数据。
  • SQL可以从数据库表中删除记录。
  • SQL可以在数据库中设置用户的GRANT和REVOKE权限。

尽管SQL 是一门 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言,但是仍然存在着多种不同版本的 SQL 语言。 然而,为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的命令(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。

要创建一个显示数据库中数据的网站,需要:

  • 一个RDBMS数据库程序(即MS Access,SQL Server,MySQL)。
  • 使用服务器端脚本语言,如PHP或ASP。
  • 使用SQL来获取所需的数据。
  • 使用HTML / CSS来设置页面的样式

RDBMS介绍

 关系型数据库管理系统Relational Database Management System

    RDBMS 是 SQL 的基础,也是所有现代数据库系统的基础,比如 MS SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access。

    RDBMS 中的数据存储在被称为的数据库对象中是相关的数据项的集合,它由列和行组成表是关系数据库中最常见和最简单的数据存储形式

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+
SELECT * FROM Customers;

每个表都被分解成称为字段的更小的实体。Customers表中的字段由CustomerID,CustomerName,ContactAge,Address,City,PostalCode和Country组成。字段是表中的一列,用于维护表中每条记录的特定信息。

    记录(也称为数据行)是表中存在的每个单独条目。例如,在上面的Customers表中有91条记录。记录是表中的水平实体。

    列是表中的垂直实体,其包含与表中的特定字段相关联的所有信息。

    表中的空值是显示为空的字段中的值,这意味着具有空值的字段是没有值的字段。【注:空值≠零值或包含空格的字段。具有空值的字段是在创建记录时留空的字段。】

SQL标准命令

DDL(数据定义语言):用于改变数据库结构,包括创建、更改和删除数据库对象。

用于操纵表结构的数据定义语言命令有:

CREATE TABLE 创建(在数据库中创建新表、表视图或其他对象)
ALTER TABLE 更改 (修改现有的数据库对象,如表)
DROP TABLE 删除  (删除数据库中的整个表、表或其他对象的视图)

DML(数据操纵语言):用于检索、插入和修改数据,数据操纵语言是最常见的SQL命令。

    数据操纵语言命令包括:

INSERT插入 (创建记录)
DELETE删除 (删除记录)
UPDATE修改(修改记录)
SELECT检索 (从一个或多个表检索某些记录)

DCL(数据控制语言)为用户提供权限控制命令。

    用于权限控制的命令有:

GRANT授予权限
REVOKE撤销已授予的权限

SQL约束

 约束是在表上的数据列上强制执行的规则。它们用于限制可以进入表中的数据类型。这确保了数据库中数据的准确性和可靠性。

 约束可以是列级别,也可以是表级别。列级约束仅应用于一列,而表级约束则应用于整个表。

NOT NULL约束保证列中数据不能有 NULL 值

DEFAULT 约束

提供该列数据未指定时所采用的默认值

UNIQUE 约束保证列中的所有数据各不相同
主键约束唯一标识数据表中的行/记录
外键约束唯一标识其他表中的一条行/记录
CHECK 约束此约束保证列中的所有值满足某一条件
索引用于在数据库中快速创建或检索数据

约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。

任何现有约束都可以通过在 ALTER TABLE 命令中指定 DROP CONSTRAINT 选项的方法删除掉。

完整性约束:保证关系型数据库中数据的精确性和一致性。对于关系型数据库来说,数据完整性由参照完整性(referential integrity,RI)来保证。有很多种约束可以起到参照完整性的作用,这些约束包括主键约束(Primary Key)、外键约束(Foreign Key)、唯一性约束(Unique Constraint)以及上面提到的其他约束。

#创建约束,CREATE TABLE:
CREATE TABLE table_name (
    column1 datatype constraint,
    column2 datatype constraint,
    column3 datatype constraint,
    ....
);
#创建约束,CREATE TABLE + CONSTRAINT:
CREATE TABLE table_name                
(                
column_name1 data_type(size) constraint_name,                
column_name2 data_type(size) constraint_name,                
column_name3 data_type(size) constraint_name,                
....                
);   

#删除约束(实例:除去EMPLOYEES 表中的主键约束)
ALTER TABLE EMPLOYEES DROP CONSTRAINT EMPLOYEES_PK;

#Oracle中删除一张表的主键约束(不同数据库之间有特定的快捷方式):
ALTER TABLE EMPLOYEES DROP PRIMARY KEY;

①、NOT NULL 约束 :强制列不接受 NULL 值,这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

#实例:强制 "P_Id" 列和 "LastName" 列不接受 NULL 值
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

②、DEFAULT 约束: 默认值(默认缺省时填入的数据)。

#CREATE TABLE时的DEFAULT约束(My SQL/SQL Server/Oracle/MS Access)
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
#通过类似 GETDATE()的函数,DEFAULT约束也可以用于插入系统值
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
OrderDate date DEFAULT GETDATE()
)


#ALTER TABLE时的SQL DEFAULT约束(实例:表已创建,需在"City" 列创建DEFAULT约束)
#MySQL:
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'  

#SQL Server / MS Access:
ALTER TABLE Persons 
ADD CONSTRAINT DF_Persons_City DEFAULT('SANDNES') FOR City
--注释
--Persons 为表名
--City 为列名
--DF_Persons_City 为我们创建的默认约束的名称 约束名称一般为:约束类型简称_表名_列名

#Oracle:
ALTER TABLE Persons
MODIFY City DEFAULT 'SANDNES'


#撤销 DEFAULT 约束
#MySQL:
ALTER TABLE Persons
ALTER City DROP DEFAULT
#SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT

③、UNIQUE 约束: 唯一标识数据库表中的每条记录。

#CREATE TABLE 时的 SQL UNIQUE 约束
#以MySQL为例:创建"Persons" 表时 "P_Id" 列上创建 UNIQUE 约束)
CREATE TABLE Persons                
(                
P_Id int NOT NULL,                
LastName varchar(255) NOT NULL,                
FirstName varchar(255),                
Address varchar(255),                
City varchar(255),                
UNIQUE (P_Id)                
) 

#需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束
#MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons                
(                
P_Id int NOT NULL,                
LastName varchar(255) NOT NULL,                
FirstName varchar(255),                
Address varchar(255),                
City varchar(255),                
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)                
)   


#ALTER TABLE 时的 SQL UNIQUE 约束
# 当表已被创建时,如需在 "P_Id" 列创建 UNIQUE 约束
#MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons                
ADD UNIQUE (P_Id) 
#如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束
ALTER TABLE Persons                
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)


#撤销 UNIQUE 约束
#MySQL:
ALTER TABLE Persons                
DROP INDEX uc_PersonID   
#SQL Server / Oracle / MS Access:
ALTER TABLE Persons                
DROP CONSTRAINT uc_PersonID 

④、PRIMARY KEY 约束唯一标识数据库表中的每条记录(PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束,

每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。)。

#CREATE TABLE 时的 SQL PRIMARY KEY 约束
#"Persons" 表创建时在 "P_Id" 列上创建 PRIMARY KEY 约束
#MySQL:
CREATE TABLE Persons                
(                
P_Id int NOT NULL,                
LastName varchar(255) NOT NULL,                
FirstName varchar(255),                
Address varchar(255),                
City varchar(255),                
PRIMARY KEY (P_Id)                
)
#SQL Server / Oracle / MS Access:
CREATE TABLE Persons                
(                
P_Id int NOT NULL PRIMARY KEY,                
LastName varchar(255) NOT NULL,                
FirstName varchar(255),                
Address varchar(255),                
City varchar(255)                
)     
#如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束
#MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons                
(                
P_Id int NOT NULL,                
LastName varchar(255) NOT NULL,                
FirstName varchar(255),                
Address varchar(255),                
City varchar(255),                
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)                
) 
#注释:在上面的实例中,只有一个主键 PRIMARY KEY(pk_PersonID)。
然而,pk_PersonID 的值是由两个列(P_Id 和 LastName)组成的。 


#ALTER TABLE 时的 SQL PRIMARY KEY 约束
#MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons                
ADD PRIMARY KEY (P_Id) 
#如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束
ALTER TABLE Persons                
ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)  
#注释:如果使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)


#撤销 PRIMARY KEY 约束(MySQL )
ALTER TABLE Persons                
DROP PRIMARY KEY
#撤销 PRIMARY KEY 约束(SQL Server / Oracle / MS Access)
ALTER TABLE Persons               
DROP CONSTRAINT pk_PersonID

⑤、FOREIGN KEY 约束:一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。 (见链接)

⑥、CHECK 约束:限制列中的值的范围。 

 如果对单个列定义 CHECK 约束,那么该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。

 

数据完整性&数据库规范化

实体完整性表中没有重复行
域完整性通过限制值的类型、格式或范围来强制执行给定列的有效条目。
引用完整性不能删除其他记录使用的行。
用户定义的完整性强制执行一些不属于实体、域或引用完整性的特定业务规则。

数据库规范化是在数据库中有效地组织数据的过程。这个规范化过程有两个原因:

  • 消除冗余数据,例如,将相同的数据存储在多个表中。 
  • 确保数据依赖关系是有意义的。

这两个原因都是值得追求的目标,因为它们减少了数据库消耗的空间量,并确保了数据的逻辑存储。

 规范化由一系列指导原则组成(规范化指导原则称为范式),范式的目的是组织数据库结构,使其符合第一范式、第二范式和第三范式的规则。你可以更长远的去选择第四范式,第五范式,等等,但一般来说,第三范式已经足够了。

第一范式(1NF)
第二范式(2NF)
第三范式(3NF)

SQL格式化

SQL 语法规则

  • SQL语句总是以关键字开始,如SELECT、INSERT、UPDATE、DELETE、DROP、CREATE。
  • SQL语句以分号结尾。
  • SQL不区分大小写,意味着update与UPDATE相同

select语句

SELECT column_name(s) FROM table_name

#select + where
SELECT [*] FROM [TableName] WHERE [condition1]

#select + where + and/or
SELECT [*] FROM [TableName] WHERE [condition1] [AND [OR]] [condition2]...

#select + order by
SELECT column_name()
FROM table_name
ORDER BY column_name() ASC or DESC

#select distinct(区分)子句
SELECT DISTINCT column1, column2....columnN
FROM   table_name;

#select + in
SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name IN (val-1, val-2,...val-N);

#select like (类)子句
SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name LIKE { PATTERN };

#select +having
SELECT SUM(column_name)
FROM   table_name
WHERE  CONDITION
GROUP BY column_name
HAVING (arithematic function condition);

insert into语句

INSERT INTO table_name (column, column1, column2, column3, ...)
VALUES (value, value1, value2, value3 ...)

update语句

UPDATE table_name
SET column=value, column1=value1,...
WHERE someColumn=someValue

delete语句

DELETE FROM tableName
WHERE someColumn = someValue

create语句+create index(创建索引(搜索键))语句

CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
.....
columnN datatype,
PRIMARY KEY( one or more columns )
);

#CREATE INDEX语句
CREATE UNIQUE INDEX index_name
ON table_name ( column1, column2,...columnN);

drop语句 + drop index(删除索引)语句

DROP TABLE table_name;

#DROP INDEX语句
ALTER TABLE table_name
DROP INDEX index_name;

desc(降序,从大到小)语句

DESC table_name;

alter table 语句

ALTER TABLE table_name {ADD|DROP|MODIFY} column_name {data_ype};


#对表名重命名
ALTER TABLE table_name RENAME TO new_table_name;

use语句

USE database_name;

commit语句

COMMIT;

rollback语句

ROLLBACK;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值