1.    建原始表

USE [Northwind]

GO

/****** Object:  Table [dbo].[Persons]    Script Date: 2016/6/8 7:31:57 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [dbo].[Persons](

[id] [INT] IDENTITY(1,1) NOT NULL,

[LastName] [NVARCHAR](50) NULL,

[FirstName] [NVARCHAR](50) NULL,

[Address] [NVARCHAR](200) NULL,

[City] [NVARCHAR](200) NULL,

CONSTRAINT [PK_Persions] PRIMARY KEY CLUSTERED

(

[id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

USE [Northwind]

GO

/****** Object:  Table [dbo].[Orders]    Script Date: 2016/6/8 7:32:44 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [dbo].[Orders](

[Id_O] [INT] IDENTITY(1,1) NOT NULL,

[OrderNo] [NVARCHAR](50) NULL,

[Id_P] [INT] NULL,

CONSTRAINT [PK_Orders_1] PRIMARY KEY CLUSTERED

(

[Id_O] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

2.    连接查询

2.1  Inner join

在表中存在至少一个匹配时,INNER JOIN 关键字返回行,与JOIN等效

SELECT  Persons.* ,

Orders.OrderNo

FROM    dbo.Persons

INNER JOIN dbo.Orders ON dbo.Persons.id = dbo.Orders.Id_p

ORDER BY dbo.Persons.LastName

2.2  Left join

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行

SELECT  Persons.* ,

Orders.OrderNo

FROM    dbo.Persons

LEFT  JOIN dbo.Orders ON dbo.Persons.id = dbo.Orders.Id_p

ORDER BY dbo.Persons.LastName

2.3  Right join

RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

SELECT  Persons.* ,

Orders.OrderNo

FROM    dbo.Persons

RIGHT  JOIN dbo.Orders ON dbo.Persons.id = dbo.Orders.Id_p

ORDER BY dbo.Persons.LastName

2.4  Full join

FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配,这些行同样会列出。

SELECT  Persons.LastName ,

Persons.FirstName ,

Orders.OrderNo

FROM    Persons

FULL JOIN Orders ON Persons.id = Orders.Id_p

ORDER BY Persons.LastName

2.5  Union

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

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

SELECT LastName FROM Employees

UNION

SELECT LastName FROM Employees123

2.6  Union all

UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值

SELECT LastName FROM Employees

UNION ALL

SELECT LastName FROM Employees123

3.    拷贝表数据

3.1  Select into

SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。

SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。

SELECT *

INTO Persons_backup

FROM Persons

3.2  拷贝部分列

SELECT LastName,FirstName

INTO Persons_backup

FROM Persons

3.3  带条件语句

SELECT  Persons.LastName ,

Orders.OrderNo

INTO    Persons_Order_Backup

FROM    Persons

INNER JOIN Orders ON Persons.Id = Orders.Id_P

4.    约束

4.1  Not Null

NOT NULL 约束强制列不接受 NULL 值。

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

CREATE TABLE Persons1

(

Id_P INT NOT NULL ,

LastName VARCHAR(255) NOT NULL ,

FirstName VARCHAR(255) ,

Address VARCHAR(255) ,

City VARCHAR(255)

)

4.2  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)

)

Sqlserver

CREATE TABLE Persons

(

Id_P int NOT NULL UNIQUE,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束,请使用下面的 SQL 语法

Mysql  mssql oracle

CREATE TABLE Persons

(

Id_P int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)

)

在已经创建的表上面添加唯一约束

ALTER TABLE Persons

ADD UNIQUE (Id_P)

删除约束

Mysql

ALTER TABLE Persons

DROP INDEX uc_PersonID

Mssql

ALTER TABLE Persons

DROP CONSTRAINT uc_PersonID

4.3  PRIMARY KEY 约束

Mysql

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)

)

Msql

CREATE TABLE Persons

(

Id_P int NOT NULL PRIMARY KEY,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

多个字段

Mysql  mssql oracle一致

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

ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)

删除约束

Mysql

ALTER TABLE Persons

DROP PRIMARY KEY

Mssql

ALTER TABLE Persons

DROP CONSTRAINT pk_PersonID

4.4  FOREIGN KEY

FOREIGN KEY 约束用于预防破坏表之间连接的动作。

FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一

Mysql

CREATE TABLE Orders

(

Id_O int NOT NULL,

OrderNo int NOT NULL,

Id_P int,

PRIMARY KEY (Id_O),

FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)

)

Mssql oracle

CREATE TABLE Orders

(

Id_O int NOT NULL PRIMARY KEY,

OrderNo int NOT NULL,

Id_P int FOREIGN KEY REFERENCES Persons(Id_P)

)

定义多列约束

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 FOREIGN KEY (Id_P)

REFERENCES Persons(Id_P)

命名约束

ALTER TABLE Orders

ADD CONSTRAINT fk_PerOrders

FOREIGN KEY (Id_P)

REFERENCES Persons(Id_P)

删除约束

Mysql

ALTER TABLE Orders

DROP FOREIGN KEY fk_PerOrders

Mssql

ALTER TABLE Orders

DROP CONSTRAINT fk_PerOrders

5.    SQL CHECK 约束

CHECK 约束用于限制列中的值的范围。

如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

Mysql

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)

)

Mssql

CREATE TABLE Persons

(

Id_P int NOT NULL CHECK (Id_P>0),

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

命名约束

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')

)

表已存在

Mysql

ALTER TABLE Persons

ADD CHECK (Id_P>0)

Mssql

ALTER TABLE Persons

ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')

删除约束

Mysql

ALTER TABLE Persons

DROP CHECK chk_Person

Mssql

ALTER TABLE Persons

DROP CONSTRAINT chk_Person

6.    索引

在表中创建索引,以便更加快速高效地查询数据。

用户无法看到索引,它们只能被用来加速搜索/查询。

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

创建可重复的索引

CREATE INDEX index_name

ON table_name (column_name)

创建唯一索引

CREATE UNIQUE INDEX index_name

ON table_name (column_name)

降序索引某个列中的值,可以在列名称之后添加保留字 DESC

CREATE INDEX PersonIndex

ON Person (LastName DESC)

多列上添加索引

CREATE INDEX PersonIndex

ON Person (LastName, FirstName)

7.    Drop

删除索引

Mssql

DROP INDEX table_name.index_name

Mysql

ALTER TABLE table_name DROP INDEX index_name

仅仅需要除去表内的数据,但并不删除表本身

8.    ALTER TABLE

增加列

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

9.    AUTO INCREMENT 字段

Mysql

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)

)

修改起始值

ALTER TABLE Persons AUTO_INCREMENT=100

Mssql

CREATE TABLE Persons

(

P_Id int PRIMARY KEY IDENTITY,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

默认地,IDENTITY 的开始值是 1,每条新记录递增 1。

要规定 "P_Id" 列以 20 起始且递增 10,请把 identity 改为 IDENTITY(20,10)

SQL基础系列(1)-基本语法--转载w3school的更多相关文章

  1. SQL基础系列(2)-内置函数--转载w3school

    1.    日期函数 Mssql: SELECT GETDATE() 返回当前日期和时间 SELECT DATEPART(yyyy,OrderDate) AS OrderYear, DATEPART( ...

  2. SQL基础系列(4)-性能优化建议

    10.1 连接查询表的顺序问题 SQLSERVER的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表driving table)将被最先处理,在FROM子句中包 ...

  3. Python3基础系列-基本入门语法

    本文简单地介绍了python的一些基本入门知识,通过对这些知识的了解,大家可以写一些简单的代码,同时也为后面深入理解打下基础.本文的主要内容如下: 值和类型 值,即value,通常有:1,2,3.14 ...

  4. js基础系列框架图 (转载)

  5. SQL基础系列(3)-变量、函数、存储过程等

    1.    变量 定义变量 DECLARE @a INT 赋值 PRINT @a ) --select 赋值 SELECT @name='zcx' PRINT @name SELECT @name=F ...

  6. mybatis基础系列(三)——动态sql

    本文是Mybatis基础系列的第三篇文章,点击下面链接可以查看前面的文章: mybatis基础系列(二)--基础语法.别名.输入映射.输出映射 mybatis基础系列(一)--mybatis入门 动态 ...

  7. mybatis基础系列(二)——基础语法、别名、输入映射、输出映射

    增删改查 mapper根节点及其子节点 mybatis框架需要读取映射文件创建会话工厂,映射文件是以<mapper>作为根节点,在根节点中支持9个元素,分别为insert.update.d ...

  8. 【转载】C#基础系列——小话泛型

    前言:前面两章介绍了C#的两个常用技术:C#基础系列——反射笔记 和 C#基础系列——Attribute特性使用 .这一章来总结下C#泛型技术的使用.据博主的使用经历,觉得泛型也是为了重用而生的,并且 ...

  9. SQL Server-字字珠玑,一纸详文,完全理解SERIALIZABLE最高隔离级别(基础系列收尾篇)

    前言 对于上述锁其实是一个老生常谈的话题了,但是我们是否能够很明确的知道在什么情况下会存在上述各种锁类型呢,本节作为SQL Server系列末篇我们 来详细讲解下. Range-Lock 上述关于Ra ...

随机推荐

  1. 基于《仙剑奇侠传柔情版》利用Java的简单实现(一)

    基于<仙剑奇侠传柔情版>利用Java的简单实现(一) 2018-12-01 23:55:36   by Louis  一,新建一个类GameFrame.class,具体代码如下: pack ...

  2. 解决tinyint映射成boolean/byte的问题

    前言 最近受疫情的影响,公司要做一个类似一码通的系统为客户服务.由我来进行表的设计.创建表之后需要逆向生成Java的entity.mapper.mapper.xml.由于我在数据库中定义了大量 tin ...

  3. 洛谷1880 区间dp+记忆化搜索 合并石子

    题目网址:https://www.luogu.com.cn/problem/P1880 题意是:给定一个序列,最小规则是相邻两个值的合并,开销是他们的和,将整个序列合并成一个值的情况下,求解该值的最小 ...

  4. MySQL----多表操作

    ##多表之间的关系 1.一对一(了解) * 如:人和身份证 * 分析:一个人只有一个身份证,一个身份证只能对应一个人. 2.一对多(多对一) * 如:部门和员工 * 分析:一个部门有多个员工,一个员工 ...

  5. CF230B T-primes 题解

    原题链接 简要题意: 判断一个数是否只有 \(3\) 个因数. 首先,如果一个数有奇数个因数,那么这个数是完全平方数. 道理很简单:因数是成对的,那么必然存在 \(k^2 = n\),此时 \(k\) ...

  6. leetcode 签到 面试题40. 最小的k个数

    题目 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 1: 输入:arr = [3,2,1], k = ...

  7. 牛客网剑指offer【Python实现】——part1

    斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,n<=39). 循环实现,时间复杂度n def Fibonacci(self, ...

  8. 01FPGA设计流程

    今天学习了FPGA设计流程的视频,我理解要做一个完整的FPGA系统,所要经历的步骤,先将它简单总结如下: 我在对上面的流程图进行解释: 第一:设计定义就是我们这个FPGA系统或者FPGA设计所要实现的 ...

  9. Python第六章-函数04-递归函数和拉姆达表达式

    五.递归函数 什么叫递归(recusive)? 你拿两个镜子互相面对着, 然后去看镜子, 会发现每个镜子中很多个镜子, 层层的嵌套, 无穷尽, 这就是一种递归! 从前有坐山, 山里有座庙, 庙里有个老 ...

  10. OpenCV-Python 哈里斯角检测 | 三十七

    目标 在本章中, 我们将了解"Harris Corner Detection"背后的概念. 我们将看到以下函数:cv.cornerHarris(),cv.cornerSubPix( ...