查询套路 select+ where+ group by+ having+ order by:
select 选取
- select 列名 from 表名
- select * from 表名
where 条件
- select * from where 条件(列 运算符 值)
- select * from orders where customer=’google’
group by 结合合计函数,对结果集分组
- select 列名,合计函数(列名) from 表名 where 条件 group by 列名
- select customer,sum(orderprice) from orders group by customer
having 对where的补充,因为where无法与合计函数一起使用
- select 列名,合计函数(列名) from 表名 where 条件 group by 列名 having 条件(合计函数(列名) 运算符 值)
- select customer,sum(orderprice) from orders where customer=’google’ group by customer having sum(orderprice)<2000
order by 对结果集排序
- 默认升序,降序为DESC
- select * from orders order by customer,orderdate desc
一些辅助查询的关键字
and & or 在where中把两个或多个条件结合起来
distinct 返回唯一值
- select distinct 列名称 from 表名称
limit 规定要返回的记录的数目
- select 列名称 from 表名称 limit 数量
like+通配符 在 where中搜索列中的指定模式
- select 列名称 from 表名称 where 列名 like 模式
- select * from orders where customer like ‘_G%’
- “%” 代替一个或多个字符
- “_” 仅代替一个字符
- [charlist] 字符列中的任何单一字符
- [!charlist] 不在字符列中的任何单一字符
- select * from orders where customer like ‘_G%’
in 在where中规定多个值
- select 列名称 from 表名称 where 列名 in (值1,值2…)
between…and 在where中选取介于两个值之间的数据
- select 列名称 from 表名称 where 列名 between 值1 and 值2
union (all)合并两个或多个 SELECT 语句的结果集
- union内部的 select语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条select语句中的列的顺序必须相同
- union默认选取不重复的值,union all允许重复的值
- union结果集中的列名总是等于union中第一个select语句中的列名
select into 从旧表创建新表(多用于表备份)
- select 列1… into 新表名 from 旧表名 where 条件
- SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
表连接join on
(Inner) join
- 如果表中有至少一个匹配,则返回行
- select 列名 from 表名1 inner join 表名2 on 表名1.列名 = 表名2.列名
- select c.name,o.orderid from customer as c inner join orders as o on c.id = o.customerid
left join
- 即使右表中没有匹配,也从左表返回所有的行
right join
- 即使左表中没有匹配,也从右表返回所有的行
full join
- 只要其中一个表中存在匹配,就返回行
创建create
create database 创建数据库
- create database 数据库名称
create table 创建数据库中的表
- CREATE TABLE 表名称
(
列名称1 数据类型 可选是否有约束,
列名称2 数据类型 可选是否有约束,
列名称3 数据类型 可选是否有约束,
….
)- CREATE TABLE Persons
(
Id_P int not null,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
- CREATE TABLE Persons
插入数据 insert into
- INSERT INTO 表名称 VALUES (值1, 值2,….)
- INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,….)
- INSERT INTO Persons (LastName, Address) VALUES (‘Wilson’, ‘Champs-Elysees’)
修改数据 update set
- UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
- UPDATE Person SET FirstName = ‘Fred’ WHERE LastName = ‘Wilson’
- 更改一行中的某几列
- UPDATE Person SET Address = ‘Zhongshan 23’, City = ‘Nanjing’
WHERE LastName = ‘Wilson’
- UPDATE Person SET Address = ‘Zhongshan 23’, City = ‘Nanjing’
删除表中的数据 delete from
- 删除某行 DELETE FROM 表名称 WHERE 列名称 = 值
- 删除所有行 DELETE FROM 表名称
约束-限制加入表的数据类型
可以在创建表时规定约束(通过 CREATE TABLE 语句)或者在表创建之后也可以(通过 ALTER TABLE 语句)
主要讨论以下几种约束:
NOT NULL 列不接受空值
- CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
UNIQUE 唯一值
- UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证
- PRIMARY KEY 拥有自动定义的 UNIQUE 约束
- 每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束
- 定义单列unique
- 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
- 如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束
- 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)
)
- CREATE TABLE Persons
- 表已存在时添加unique
- ALTER TABLE Persons
ADD UNIQUE (Id_P) - ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
- ALTER TABLE Persons
- 撤销unique
- MySQL
- ALTER TABLE Persons
DROP INDEX uc_PersonID
- ALTER TABLE Persons
- SQL Server / Oracle / MS Access:
- ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
- ALTER TABLE Persons
- MySQL
PRIMARY KEY 主键
- PRIMARY KEY 约束唯一标识数据库表中的每条记录
- 每个表都应该有一个主键,并且每个表只能有一个主键
- 在创建表时指定主键
- (
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (Id_P)
)
- (
- 定义多列
- 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)
)
- CREATE TABLE Persons
- 添加
- ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
- ALTER TABLE Persons
- 撤销
- ALTER TABLE Persons
DROP PRIMARY KEY
- ALTER TABLE Persons
Foreign Key REFERENCES 外键
- 用于预防破坏表之间连接的动作
- 防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一
- 创建表时定义
- 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)
)
- CREATE TABLE Orders
- 需要定义多列或命名
- 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)
)
- CREATE TABLE Orders
- 撤销同主键