zoukankan      html  css  js  c++  java
  • 数据库学习笔记

    L的定义:

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

    • SQL 指结构化查询语言,全称是 Structured Query Language。
    • SQL 让您可以访问和处理数据库。
    • SQL 是一种 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言。

    2.RDBMS

    • RDBMS 指关系型数据库管理系统,全称 Relational Database Management System。
    • RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access。
    • RDBMS 中的数据存储在被称为表的数据库对象中。
    • 表是相关的数据项的集合,它由列和行组成。

    3.SQL语法

    • use 数据库名称; 命令用于选择数据库。
    • set names utf8; 命令用于设置使用的字符集。
    • SELECT * FROM Websites; 读取数据表的信息。
    • SQL 对大小写不敏感:SELECT 与 select 是相同的。
    • select 语句
    SELECT name,country FROM Websites;
    
    SELECT DISTINCT country FROM Websites;//SELECT DISTINCT 语句用于返回唯一不同的值。
    SELECT * FROM Websites WHERE country='CN';
    • and & or 运算符
    SELECT * FROM Websites
    WHERE country='CN'
    AND alexa > 50;
    SELECT * FROM Websites
    WHERE country='USA'
    OR country='CN';
    • order by语法
    SELECT * FROM Websites
    ORDER BY alexa;//默认就是升序排列,即SELECT * FROM Websites ORDER BY alexa ASC
    SELECT * FROM Websites
    ORDER BY alexa DESC;
    • insert into 语法

    第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:

    INSERT INTO table_name
    VALUES (value1,value2,value3,...);

    第二种形式需要指定列名及被插入的值:

    INSERT INTO table_name (column1,column2,column3,...)
    VALUES (value1,value2,value3,...);
    • update语法
    UPDATE Websites 
    SET alexa='5000', country='USA' 
    WHERE name='菜鸟教程';

    在更新记录时要格外小心!在上面的实例中,如果我们省略了 WHERE 子句,所有数据中的alexa 和 country 都会被更改

    • delete语法
    DELETE FROM Websites
    WHERE name='百度' AND country='CN';
    • select top , limit , rownum语法

      并不是所有的数据库系统都支持select top 语法,下面是SQL,MS Access数据库系统

    SELECT TOP number column_name(s)
    FROM table_name;
    
    SELECT TOP 50 PERCENT * FROM Websites;

      MY SQL数据库系统

    SELECT column_name(s)
    FROM table_name
    LIMIT number;

      ORACLE数据库系统

    SELECT *
    FROM Persons
    WHERE ROWNUM <=5;

       LIKE 操作符

    SELECT * FROM Websites
    WHERE name LIKE 'G%';
    
    SELECT * FROM Websites
    WHERE name NOT LIKE '%oo%';
    通配符描述
    % 替代一个或多个字符
    _ 仅替代一个字符
    [charlist] 字符列中的任何单一字符

    [^charlist]

    或者

    [!charlist]

    不在字符列中的任何单一
    SELECT * FROM Websites
    WHERE name REGEXP '^[A-H]';//^在[]外面的就表示以A-H开头
    
    SELECT * FROM Websites
    WHERE name REGEXP '^[^A-H]';//如果^在[]里面面表示不以A-H开头 
    • in 操作符

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

    SELECT column_name(s)
    FROM table_name
    WHERE column_name IN (value1,value2,...);
    
    
    SELECT column_name(s)
    FROM table_name 
    WHERE coumn_name IN (SELECT column_name FROM table_name WHERE ...)
    • between操作符

    BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。

    SELECT * FROM Websites
    WHERE alexa BETWEEN 1 AND 20;
    
    SELECT * FROM Websites
    WHERE alexa NOT BETWEEN 1 AND 20;
    
    SELECT * FROM Websites
    WHERE (alexa BETWEEN 1 AND 20)
    AND NOT country IN ('USA', 'IND');
    
    SELECT * FROM Websites
    WHERE name NOT BETWEEN 'A' AND 'H';// SQL 语句选取 name 不介于 'A' 和 'H' 之间字母开始的所有网站

    在某些数据库中,BETWEEN 选取介于两个值之间但不包括两个测试值的字段。
    在某些数据库中,BETWEEN 选取介于两个值之间且包括两个测试值的字段。
    在某些数据库中,BETWEEN 选取介于两个值之间且包括第一个测试值但不包括最后一个测试值的字段。

    • SQL别名
    SELECT column_name AS alias_name
    FROM table_name;
    SELECT column_name(s)
    FROM table_name AS alias_name;
    SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info
    FROM Websites;//把三个列(url、alexa 和 country)结合在一起,并创建一个名为 "site_info" 的别名
    • SQL JOIN

    1. INNER JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。

    最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)。 SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行。

    SQL INNER JOIN

    SELECT Websites.id, Websites.name, access_log.count, access_log.date
    FROM Websites
    INNER JOIN access_log
    ON Websites.id=access_log.site_id;

    2. LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。

    SQL LEFT JOIN

    SELECT column_name(s)
    FROM table1
    LEFT JOIN table2
    ON table1.column_name=table2.column_name;
    
    SELECT column_name(s)
    FROM table1
    LEFT OUTER JOIN table2
    ON table1.column_name=table2.column_name;

    例如:

    SELECT Websites.name, access_log.count, access_log.date
    FROM Websites
    LEFT JOIN access_log
    ON Websites.id=access_log.site_id
    ORDER BY access_log.count DESC;

    3. RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。

    SQL RIGHT JOIN

    SELECT column_name(s)
    FROM table1
    RIGHT JOIN table2
    ON table1.column_name=table2.column_name;
    
    SELECT column_name(s)
    FROM table1
    RIGHT OUTER JOIN table2
    ON table1.column_name=table2.column_name;

    4.

    FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.

    FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。

    SQL FULL OUTER JOIN

    SELECT column_name(s)
    FROM table1
    FULL OUTER JOIN table2
    ON table1.column_name=table2.column_name;
    •  union操作符

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

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

    SELECT country FROM Websites
    UNION
    SELECT country FROM apps
    ORDER BY country;

    与union差不多的还有intersection(交),difference(差),使用的方法和union是一致的

    但需要注意的一点是,这三个关系代数查询的前提是两个查询的结构一致,还有一点就是最后的结果是自动去掉重复的,所以如果需要展示所有的,就需要使用union all

    SELECT country FROM Websites
    UNION ALL
    SELECT country FROM apps
    ORDER BY country;
    • select into 语句

    通过 SQL,您可以从一个表复制信息到另一个表。

    SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。(

    MySQL 数据库不支持 SELECT ... INTO 语句,但支持 INSERT INTO ... SELECT 。

    当然你可以使用以下语句来拷贝表结构及数据:CREATE TABLE 新表 SELECT * FROM 旧表)

    SELECT *
    INTO WebsitesBackup2016
    FROM Websites;//创建备份
    
    SELECT name, url
    INTO WebsitesBackup2016
    FROM Websites;//只备份部分列到新的表中
    
    SELECT *
    INTO WebsitesBackup2016
    FROM Websites
    WHERE country='CN';//只备份国家为中国的数据到新的表中
    
    SELECT Websites.name, access_log.count, access_log.date
    INTO WebsitesBackup2016
    FROM Websites
    LEFT JOIN access_log
    ON Websites.id=access_log.site_id;//复制多个表中的数据到新的表中
    • insert into select语句

    通过 SQL,您可以从一个表复制信息到另一个表。

    INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。

    INSERT INTO table2
    SELECT * FROM table1;
    
    INSERT INTO Websites (name, country)
    SELECT app_name, country FROM apps;
    
    INSERT INTO Websites (name, country)
    SELECT app_name, country FROM apps
    WHERE id=1;
    • SQL UNIQUE 约束

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

    UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

    PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。

    需要注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

    CREATE TABLE Persons
    (
    P_Id int NOT NULL UNIQUE,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    )//为某一列添加约束unique
    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)//可以添加constraint name
    )//添加多个列为unique
    ALTER TABLE Persons
    ADD UNIQUE (P_Id)//alter时为某一列的unique约束
    ALTER TABLE Persons
    ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)//alter时添加某几列的unique约束
    ALTER TABLE Persons
    DROP INDEX uc_PersonID//MY Sql数据库系统中,撤销或删除某一列的unique约束
    ALTER TABLE Persons
    DROP CONSTRAINT uc_PersonID//SQL Server / Oracle / MS Access数据库系统中,撤销或删除某一列的;unique约束
    • primary key约束

    平时创建表时直接在列后面添加primary key即可

    ALTER TABLE Persons
    ADD PRIMARY KEY (P_Id)//alter时添加一个primary key
    
    ALTER TABLE Persons
    ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)//alter时添加几个primary key
    ALTER TABLE Persons
    DROP PRIMARY KEY//MY SQL数据库系统
    
    ALTER TABLE Persons
    DROP CONSTRAINT pk_PersonID//SQL MS ACCESS 数据库系统

    foreign key 约束

    CREATE TABLE Orders
    (
    O_Id int NOT NULL,
    OrderNo int NOT NULL,
    P_Id int,
    PRIMARY KEY (O_Id),
    CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
    REFERENCES Persons(P_Id)
    )//可以添加多个foreign key
    ALTER TABLE Orders
    ADD FOREIGN KEY (P_Id)
    REFERENCES Persons(P_Id)//alter时修改单个列的foreign key
    
    
    ALTER TABLE Orders
    ADD CONSTRAINT fk_PerOrders
    FOREIGN KEY (P_Id)
    REFERENCES Persons(P_Id)//alter时修改多个列的foreign key
    ALTER TABLE Orders
    DROP FOREIGN KEY fk_PerOrders//MySQL
    
    ALTER TABLE Orders
    DROP CONSTRAINT fk_PerOrders//SQL Server / Oracle / MS Access
  • 相关阅读:
    查询数据库表的列字段、字段类型、字段长度、是否为空
    AndroidManifest.xml配置文件详解(转载)
    SQL Server Profiler(转载)
    sql 临时表
    sql 全局查询
    react.js
    middleware
    el
    jade模板使用心得
    jade template
  • 原文地址:https://www.cnblogs.com/fireporsche/p/7140655.html
Copyright © 2011-2022 走看看