查询套路 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 对结果集排序默认升序,降序为DESCselect * 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] 不在字符列中的任何单一字符
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)
)
插入数据 insert intoINSERT INTO 表名称 VALUES (值1, 值2,….)
INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,….)INSERT INTO Persons (LastName, Address) VALUES (‘Wilson’, ‘Champs-Elysees’)
修改数据 update setUPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值UPDATE Person SET FirstName = ‘Fred’ WHERE LastName = ‘Wilson’
更改一行中的某几列UPDATE Person SET Address = ‘Zhongshan 23’, City = ‘Nanjing’
WHERE LastName = ‘Wilson’
删除表中的数据 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 约束
定义单列uniqueCREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
)
如果需要命名 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)
)
表已存在时添加uniqueALTER TABLE Persons
ADD UNIQUE (Id_P)
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
撤销uniqueMySQLALTER TABLE Persons
DROP INDEX uc_PersonID
SQL Server / Oracle / MS Access:ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
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)
)
添加ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
撤销ALTER TABLE Persons
DROP PRIMARY KEY
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
(
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)
)
撤销同主键