SQL高级教程--笔记

1.SQL TOP 子句

TOP 子句用于规定要返回的记录的数目。并非所有的数据库系统都支持 TOP 子句。

(1)语法

SELECT TOP number|percent column_name(s) FROM table_name
(2)例子

--选择前两条查询结果
SELECT TOP 2 * FROM Persons
--选择前50%的查询结果
SELECT TOP 50 PERCENT * FROM Persons

2.SQL LIKE 操作符

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

(1)语法

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern

3.SQL 通配符

在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。

通配符
%替代一个或多个字符
_仅替代一个字符
[charlist]字符列中的任何单一字符
[^charlist]不在字符列中的任何单一字符
[!charlist]不在字符列中的任何单一字符

4.SQL IN 操作符

IN 操作符允许我们在 WHERE 子句中规定多个值。

(1)语法

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)

5.SQL BETWEEN 操作符

操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

(1)语法

SELECT column_name(s)
FROM table_name
WHERE column_name
(NOT) BETWEEN value1 AND value2

(2)例子

SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'

SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'
注意:不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。某些数据库会列出介于 "Adams" 和 "Carter" 之间的人,但不包括 "Adams" 和 "Carter" ;某些数据库会列出介于 "Adams" 和 "Carter" 之间并包括 "Adams" 和 "Carter" 的人;而另一些数据库会列出介于 "Adams" 和 "Carter" 之间的人,包括 "Adams" ,但不包括 "Carter" 。

6.SQL Alias(别名)

通过使用 SQL,可以为列名称和表名称指定别名(Alias)。

(1)语法

--表的 SQL Alias 语法
SELECT column_name(s)
FROM table_name AS alias_table_name
--列的 SQL Alias 语法
SELECT column_name AS alias_column_name
FROM table_name
(2)例子

--使用表别名
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John'
--使用列别名
SELECT LastName AS Family, FirstName AS Name
FROM Persons

7.SQL JOIN

SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。数据库中的表可通过键将彼此联系起来。

(1)例子

--不使用join
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 

--使用join
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

(2)不同join的类型

  • JOIN (INNER JOIN): 如果表中有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行

8.SQL UNION 和 UNION ALL 操作符

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

(1)语法

--UNION  只会选择不同的值
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
--UNION ALL  与UNION基本上以上,但是会返回所有的值
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2


(2)例子

UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

SELECT E_Name FROM Employees_China
UNION (ALL)
SELECT E_Name FROM Employees_USA

9.SQL SELECT INTO 语句

SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。
SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。

(1)语法

--您可以把所有的列插入新表:
SELECT *
INTO new_table_name [IN externaldatabase] 
FROM old_tablename
--或者只把希望的列插入新表:
SELECT column_name(s)
INTO new_table_name [IN externaldatabase] 
FROM old_tablename
(2)例子

SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P

10.CREATE DATABASE 语句

CREATE DATABASE 用于创建数据库。

CREATE DATABASE database_name

11.CREATE TABLE 语句
CREATE TABLE 语句用于创建数据库中的表。

(1)语法

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)容纳日期。

(2)例子

CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

11.SQL 约束 (Constraints)

约束用于限制加入表的数据的类型。
可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。

  • NOT NULL
  • UNIQUE:
  • PRIMARY KEY
  • FOREIGN KEY
  • CHECK
  • DEFAULT

12.SQL NOT NULL 约束

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

(1)例子

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

13.SQL UNIQUE 约束

UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

(1)例子

--新建表时加入UNIQUE约束
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
--uc_PersonID是约束的名字
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
)
--对已经创建的表添加约束
ALTER TABLE Persons
ADD UNIQUE (Id_P)
--删除约束
ALTER TABLE Persons
DROP INDEX uc_PersonID

14.SQL PRIMARY KEY 约束

PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。

--新建表的时候加入约束
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
)
--对已存在的表添加主键
ALTER TABLE Persons
ADD PRIMARY KEY (Id_P)
--对已存在的表删除主键
ALTER TABLE Persons
DROP PRIMARY KEY

15.SQL FOREIGN KEY 约束

一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。

(1)例子

--新建表
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
)
--对已经存在的表添加外键
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
--删除外键约束
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

16.SQL CHECK 约束

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

--创建
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
)
--添加
ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
--删除
ALTER TABLE Persons
DROP CHECK chk_Person

17.SQL DEFAULT 约束

SQL DEFAULT 约束
DEFAULT 约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新记录。

--新建
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
NowTime date DEFAULT GETDATE(),
City varchar(255) DEFAULT 'Sandnes'
)
--添加
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'
--删除
ALTER TABLE Persons
ALTER City DROP DEFAULT

18.SQL CREATE INDEX 语句

CREATE INDEX 语句用于在表中创建索引。
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。

用户无法看到索引,它们只能被用来加速搜索/查询。
注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

(1)语法

--SQL CREATE INDEX
CREATE INDEX index_name
ON table_name (column_name)
--SQL CREATE UNIQUE INDEX
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
(2)例子

--可以降序索引某个值
CREATE INDEX PersonIndex
ON Person (LastName DESC) 
--可以索引多个值
CREATE INDEX PersonIndex
ON Person (LastName, FirstName)

19.SQL DROP

--SQL DROP INDEX 语句
ALTER TABLE table_name DROP INDEX index_name
--SQL DROP TABLE 语句
DROP TABLE 表名称
--SQL DROP DATABASE 语句
DROP DATABASE 数据库名称
--SQL TRUNCATE TABLE 语句
TRUNCATE TABLE 表名称

20.SQL ALTER TABLE 语句

ALTER TABLE 语句用于在已有的表中添加、修改或删除列。
(1)语法:

--在表中添加列
ALTER TABLE table_name
ADD column_name datatype
--删除表中的列
ALTER TABLE table_name 
DROP COLUMN column_name
--改变表中列的数据类型
ALTER TABLE table_name
ALTER COLUMN column_name datatype

21.SQL AUTO INCREMENT 字段

我们通常希望在每次插入新记录时,自动地创建主键字段的值。

(1)例子

CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)

MySQL 使用 AUTO_INCREMENT 关键字来执行 auto-increment 任务。
默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。
要让 AUTO_INCREMENT 序列以其他的值起始,请使用下列 SQL 语法:

ALTER TABLE Persons AUTO_INCREMENT=100












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值