数据库常用操作

SQL基础语句

  • SQL 是用于访问和处理数据库的标准的计算机语言。

  • 什么是 SQL?

    • SQL 指结构化查询语言
    • SQL 使我们有能力访问数据库
    • SQL 是一种 ANSI 的标准计算机语言
  • SQL DML 和 DDL

    • 可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
    • SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。
  • 查询和更新指令构成了 SQL 的 DML 部分:

    • SELECT - 从数据库表中获取数据
    • UPDATE - 更新数据库表中的数据
    • DELETE - 从数据库表中删除数据
    • INSERT INTO - 向数据库表中插入数据
  • SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

  • SQL 中最重要的 DDL 语句:

    • CREATE DATABASE - 创建新数据库
    • ALTER DATABASE - 修改数据库
    • CREATE TABLE - 创建新表
    • ALTER TABLE - 变更(改变)数据库表
    • DROP TABLE - 删除表
    • CREATE INDEX - 创建索引(搜索键)
    • DROP INDEX - 删除索引
  • SELECT 列名称 FROM 表名称

  • SELECT * FROM 表名称

  • SELECT LastName,FirstName FROM Persons

  • SELECT DISTINCT 列名称 FROM 表名称

  • SELECT 列名称 FROM 表名称 WHERE 列 运算符 值

    • SELECT * FROM Persons WHERE City=‘Beijing’
    • SELECT * FROM Persons WHERE Year>1965

  • AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤。
    • SELECT * FROM Persons WHERE FirstName=‘Thomas’ AND LastName=‘Carter’
    • SELECT * FROM Persons WHERE firstname=‘Thomas’ OR lastname=‘Carter’

  • ORDER BY 语句用于对结果集进行排序。默认按照升序对记录进行排序。希望按照降序对记录进行排序,可以使用 DESC 关键字。
    • SELECT Company, OrderNumber FROM Orders ORDER BY Company
    • SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
    • SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC

  • INSERT INTO 语句用于向表格中插入新的行。
    • INSERT INTO 表名称 VALUES (值1, 值2,…)
    • INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,…)
    • INSERT INTO Persons VALUES (‘Gates’, ‘Bill’, ‘Xuanwumen 10’, ‘Beijing’)
    • INSERT INTO Persons (LastName, Address) VALUES (‘Wilson’, ‘Champs-Elysees’)

  • Update 语句用于修改表中的数据。
    • UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
    • UPDATE Person SET FirstName = ‘Fred’ WHERE LastName = ‘Wilson’
    • UPDATE Person SET Address = ‘Zhongshan 23’, City = ‘Nanjing’ WHERE LastName = ‘Wilson’

  • DELETE 语句用于删除表中的行。
    • DELETE FROM 表名称 WHERE 列名称 = 值
    • DELETE FROM Person WHERE LastName = ‘Wilson’
    • 可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
      • DELETE FROM table_name
      • DELETE * FROM table_name

高级教程

  • TOP 子句:TOP 子句用于规定要返回的记录的数目。

    • SELECT TOP 2 * FROM Persons 取前两个记录
    • SELECT TOP 50 PERCENT * FROM Persons 取前百分之50的记录
  • LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

    • SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
    • SELECT * FROM Persons WHERE City LIKE ‘N%’ 选择城市为N开头的所有人
    • SELECT * FROM Persons WHERE City LIKE ‘%g’ 选择城市为g结尾的所有人
    • SELECT * FROM PersonsWHERE City LIKE ‘%lon%’ 选取居住在包含 “lon” 的城市里的人
    • NOT 关键字,可以从 “Persons” 表中选取居住在不包含 “lon” 的城市里的人:
      • SELECT * FROM Persons WHERE City NOT LIKE ‘%lon%’

  • 通配符
  • SQL 通配符可以替代一个或多个字符。SQL 通配符必须与 LIKE 运算符一起使用。
    • 通配符 描述
    • % 替代一个或多个字符
    • _ 仅替代一个字符
    • [charlist] 字符列中的任何单一字符
    • [^charlist]或者[!charlist]不在字符列中的任何单一字符
  • SELECT * FROM Persons WHERE City LIKE ‘Ne%’ 选取居住在以 “Ne” 开始的城市里的人
  • SELECT * FROM Persons WHERE City LIKE ‘%lond%’ 选取居住在包含 “lond” 的城市里的人
  • SELECT * FROM Persons WHERE FirstName LIKE ‘_eorge’ 选取名字的第一个字符之后是 “eorge” 的人
  • SELECT * FROM Persons WHERE LastName LIKE ‘C_r_er’ 选取的这条记录的姓氏以 “C” 开头,然后是一个任意字符,然后是 “r”,然后是任意字符,然后是 “er”
  • SELECT * FROM Persons WHERE City LIKE ‘[ALN]%’ 选取居住的城市以 “A” 或 “L” 或 “N” 开头的人
  • SELECT * FROM Persons WHERE City LIKE ‘[!ALN]%’ 选取居住的城市不以 “A” 或 “L” 或 “N” 开头的人

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

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

    • 从上表中选取姓氏为 Adams 和 Carter 的人
    • SELECT * FROM Persons WHERE LastName IN (‘Adams’,‘Carter’)
  • 操作符 BETWEEN … AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

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

    • 需以字母顺序显示介于 “Adams”(包括)和 “Carter”(不包括)之间的人:
    • SELECT * FROM Persons WHERE LastName BETWEEN ‘Adams’ AND ‘Carter’
    • 使用上面的例子显示范围之外的人,请使用 NOT 操作符:
    • SELECT * FROM Persons WHERE LastName NOT BETWEEN ‘Adams’ AND ‘Carter’

  • 可以为列名称和表名称指定别名(Alias)
  • 表的 SQL Alias 语法:
    • SELECT column_name(s) FROM table_name AS alias_name
  • 列的 SQL Alias 语法:
    • SELECT column_name AS alias_name FROM table_name
  • 假设我们有两个表分别是:“Persons” 和 “Product_Orders”。我们分别为它们指定别名 “p” 和 “po”。现在,我们希望列出 “John Adams” 的所有定单。
    • 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

  • join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
  • SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons, Orders
    WHERE Persons.Id_P = Orders.Id_P
  • SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    INNER JOIN Orders
    ON Persons.Id_P = Orders.Id_P

  • 除了我们在上面的例子中使用的 INNER JOIN(内连接),我们还可以使用其他几种连接。
    • JOIN: 如果表中有至少一个匹配,则返回行
    • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
    • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
    • FULL JOIN: 只要其中一个表中存在匹配,就返回行
    • NNER JOIN: 在表中存在至少一个匹配时,INNER JOIN 关键字返回行。
    • 注释:INNER JOIN 与 JOIN 是相同的。
  • SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    INNER JOIN Orders
    ON Persons.Id_P=Orders.Id_P
  • LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
    • SELECT column_name(s)
      FROM table_name1
      LEFT JOIN table_name2
      ON table_name1.column_name=table_name2.column_name
  • RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
    • SELECT column_name(s)
      FROM table_name1
      RIGHT JOIN table_name2
      ON table_name1.column_name=table_name2.column_name
  • 只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。
    • SELECT column_name(s)
      FROM table_name1
      FULL JOIN table_name2
      ON table_name1.column_name=table_name2.column_name

  • UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
  • SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2
  • 注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
  • SELECT column_name(s) FROM table_name1
    UNION ALL
    SELECT column_name(s) FROM table_name2
  • UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

  • SELECT INTO 语句可用于创建表的备份复件。SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。
  • 您可以把所有的列插入新表:
    • SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename
  • 或者只把希望的列插入新表:
    • SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_tablename
  • 下面的例子会制作 “Persons” 表的备份复件:
    • SELECT *
      INTO Persons_backup
      FROM Persons
  • IN 子句可用于向另一个数据库中拷贝表:
    • SELECT *
      INTO Persons IN ‘Backup.mdb’
      FROM Persons
  • 我们希望拷贝某些域,可以在 SELECT 语句后列出这些域:
    • SELECT LastName,FirstName
      INTO Persons_backup
      FROM Persons

创建数据库

  • CREATE DATABASE 用于创建数据库:
    • CREATE DATABASE database_name

创建表

  • CREATE TABLE 语句用于创建数据库中的表。
    • CREATE TABLE 表名称
      (
      列名称1 数据类型,
      列名称2 数据类型,
      列名称3 数据类型,

      )

SQL约束

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

  • NOT NULL 约束强制列不接受 NULL 值。
    • CREATE TABLE Persons
      (
      Id_P int NOT NULL,
      LastName varchar(255) NOT NULL,
      FirstName varchar(255),
      Address varchar(255),
      City varchar(255)
      )

  • NIQUE 约束唯一标识数据库表中的每条记录。
    UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
    PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
    请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
  • CREATE TABLE Persons
    (
    Id_P int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    City varchar(255),
    UNIQUE (Id_P)
    )
  • CREATE TABLE Persons
    (
    Id_P int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    City varchar(255),
    CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
    )
  • 当表已被创建时,如需在 “Id_P” 列创建 UNIQUE 约束,请使用下列 SQL:
    • ALTER TABLE Persons ADD UNIQUE (Id_P)
  • 如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:
    • ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
  • 如需撤销 UNIQUE 约束,请使用下面的 SQL:
    • ALTER TABLE Persons DROP INDEX uc_PersonID

  • RIMARY KEY 约束唯一标识数据库表中的每条记录。

    主键必须包含唯一的值。

    主键列不能包含 NULL 值。

    每个表都应该有一个主键,并且每个表只能有一个主键。

  • CREATE TABLE Persons
    (
    Id_P int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    PRIMARY KEY (Id_P)
    )

  • ALTER TABLE Persons ADD PRIMARY KEY (Id_P)

  • ALTER TABLE Persons
    DROP PRIMARY KEY

函数

  • SELECT AVG(column_name) FROM table_name

  • SELECT COUNT(column_name) FROM table_name

  • SELECT FIRST(column_name) FROM table_name

  • SELECT LAST(column_name) FROM table_name

  • SELECT MAX(column_name) FROM table_name

  • SELECT MIN(column_name) FROM table_name

  • SELECT SUM(column_name) FROM table_name

  • GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。

    • SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer
  • 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

    • SELECT column_name, aggregate_function(column_name)

    FROM table_name

    WHERE column_name operator value

    GROUP BY column_name

    HAVING aggregate_function(column_name) operator value

    • SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000
  • SELECT UCASE(column_name) FROM table_name

  • SELECT LCASE(column_name) FROM table_name

  • SELECT MID(column_name,start[,length]) FROM table_name 用MID 函数从文本字段中提取字符。

  • SELECT LEN(column_name) FROM table_name

  • SELECT ROUND(column_name,decimals) FROM table_name

  • SELECT NOW() FROM table_name

  • SELECT FORMAT(column_name,format) FROM table_name

    • SELECT ProductName, UnitPrice, FORMAT(Now(),‘YYYY-MM-DD’) as PerDate FROM Products

你可能感兴趣的:(数据结构与算法(Python))