查询套路 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] 不在字符列中的任何单一字符

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 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’


删除表中的数据 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)
      )
  • 如果需要命名 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)
      )
  • 表已存在时添加unique
    • ALTER TABLE Persons
      ADD UNIQUE (Id_P)
    • ALTER TABLE Persons
      ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,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 约束唯一标识数据库表中的每条记录
  • 每个表都应该有一个主键,并且每个表只能有一个主键
  • 在创建表时指定主键
    • (
      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)
      )
  • 撤销同主键