美文网首页
数据库系统概论(3)

数据库系统概论(3)

作者: 骑着白龙马的猪八戒 | 来源:发表于2018-10-21 20:49 被阅读0次
    一些最重要的 SQL 命令

    SELECT - 从数据库中提取数据

    UPDATE - 更新数据库中的数据

    DELETE - 从数据库中删除数据

    INSERT INTO - 向数据库中插入新数据

    CREATE DATABASE - 创建新数据库

    ALTER DATABASE - 修改数据库

    CREATE TABLE - 创建新表

    ALTER TABLE - 变更(改变)数据库表

    DROP TABLE - 删除表

    CREATE INDEX - 创建索引(搜索键)

    DROP INDEX - 删除索引

    特殊条件

    1.空值判断: is null

    Select * from emp where comm is null;

    查询 emp 表中 comm 列中的空值。

    2.between and (在 之间的值)

    Select * from emp where sal between 1500 and 3000;

    查询 emp 表中 SAL 列中大于 1500 的小于 3000 的值。

    注意:大于等于 1500 且小于等于 3000, 1500 为下限,3000 为上限,下限在前,上限在后,查询的范围包涵有上下限的值。

    3.In

    Select * from emp where sal in (5000,3000,1500);

    查询 EMP 表 SAL 列中等于 5000,3000,1500 的值。

    4.like

    Like模糊查询

    Select * from emp where ename like 'M%';

    查询 EMP 表中 Ename 列中有 M 的值,M 为要查询内容中的模糊信息。

    % 表示多个字值,_ 下划线表示一个字符;

    M% : 为能配符,正则表达式,表示的意思为模糊查询信息为 M 开头的。

    %M% : 表示查询包含M的所有内容。

    %M_ : 表示查询以M在倒数第二位的所有内容。

    SQL关于删除的三个语句:DROP、TRUNCATE、 DELETE 的区别。

    DROP:

    DROP test;

    删除表test,并释放空间,将test删除的一干二净。

    TRUNCATE:

    TRUNCATE test;

    删除表test里的内容,并释放空间,但不删除表的定义,表的结构还在。

    DELETE:

    1、删除指定数据

    删除表test中年龄等于30的且国家为US的数据

    DELETE FROM test WHERE age=30 AND country='US';

    2、删除整个表

    仅删除表test内的所有内容,保留表的定义,不释放空间。

    DELETE FROM test 或者 DELETE FROM test;

    DELETE * FROM test 或者 DELETE * FROM test;

    IN 与 = 的异同

    相同点:均在WHERE中使用作为筛选条件之一、均是等于的含义

    不同点:IN可以规定多个值,等于规定一个值

    IN

    SELECT column_name(s)
    FROM table_name
    WHERE column_name IN (value1,value2,...);
    =
    SELECT column_name(s)
    FROM table_name
    WHERE column_name=value1;

    首先,连接的结果可以在逻辑上看作是由SELECT语句指定的列组成的新表。

    左连接与右连接的左右指的是以两张表中的哪一张为基准,它们都是外连接。

    外连接就好像是为非基准表添加了一行全为空值的万能行,用来与基准表中找不到匹配的行进行匹配。假设两个没有空值的表进行左连接,左表是基准表,左表的所有行都出现在结果中,右表则可能因为无法与基准表匹配而出现是空值的字段。

    这部分主要涉及的是表连接的逻辑问题,教程主讲语法的话这部分确实需要自己再去搜资料

    left join : 左连接,返回左表中所有的记录以及右表中连接字段相等的记录。

    right join : 右连接,返回右表中所有的记录以及左表中连接字段相等的记录。

    inner join : 内连接,又叫等值连接,只返回两个表中连接字段相等的行。

    full join : 外连接,返回两个表中的行:left join + right join。

    cross join : 结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。

    关键字 on

    数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

    在使用 left jion 时,on 和 where 条件的区别如下:

    1、 on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录。

    2、where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

    SQL SELECT INTO 实例

    创建 Websites 的备份复件:

    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;

    提示:SELECT INTO 语句可用于通过另一种模式创建一个新的空表。只需要添加促使查询没有数据返回的 WHERE 子句即可:

    SELECT *
    INTO newtable
    FROM table1
    WHERE 1=0;

    +----+--------------+---------------------------+-------+---------+

    | id | name        | url                      | alexa | country |

    +----+--------------+---------------------------+-------+---------+

    | 1  | Google      | https://www.google.cm/    | 1    | USA    |

    | 2  | 淘宝          | https://www.taobao.com/  | 13    | CN      |

    | 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      |

    | 4  | 微博          | http://weibo.com/        | 20    | CN      |

    | 5  | Facebook    | https://www.facebook.com/ | 3    | USA    |

    | 7  | stackoverflow | http://stackoverflow.com/ |  0 | IND    |

    +----+---------------+---------------------------+-------+---------+

    下面是 "apps" APP 的数据:

    mysql> SELECT * FROM apps;

    +----+------------+-------------------------+---------+

    | id | app_name  | url                    | country |

    +----+------------+-------------------------+---------+

    |  1 | QQ APP    | http://im.qq.com/      | CN      |

    |  2 | 微博 APP | http://weibo.com/      | CN      |

    |  3 | 淘宝 APP | https://www.taobao.com/ | CN      |

    +----+------------+-------------------------+---------+

    3 rows in set (0.00 sec)

    SQL INSERT INTO SELECT 实例

    复制 "apps" 中的数据插入到 "Websites" 中:

    实例

    INSERT INTO Websites (name, country)
    SELECT app_name, country FROM apps;

    只复 QQ 的 APP 到 "Websites" 中:

    实例

    INSERT INTO Websites (name, country)
    SELECT app_name, country FROM apps
    WHERE id=1;
    在 SQL 中,我们有如下约束:

    NOT NULL - 指示某列不能存储 NULL 值。

    UNIQUE - 保证某列的每行必须有唯一的值。

    PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

    FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

    CHECK - 保证列中的值符合指定的条件。

    DEFAULT - 规定没有给列赋值时的默认值。

    在默认的情况下,表的列接受 NULL 值。

    SQL NOT NULL 约束

    NOT NULL 约束强制列不接受 NULL 值。

    NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

    下面的 SQL 强制 "P_Id" 列和 "LastName" 列不接受 NULL 值:

    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    )
    SQL PRIMARY KEY 约束

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

    主键必须包含唯一的值。

    主键列不能包含 NULL 值。

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

    CREATE TABLE 时的 SQL PRIMARY KEY 约束

    下面的 SQL 在 "Persons" 表创建时在 "P_Id" 列上创建 PRIMARY KEY 约束:

    MySQL:

    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    PRIMARY KEY (P_Id)
    )

    SQL Server / Oracle / MS Access:

    CREATE TABLE Persons
    (
    P_Id int NOT NULL PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    )

    如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束,请使用下面的 SQL 语法:

    MySQL / SQL Server / Oracle / MS Access:

    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)

    )

    注释:在上面的实例中,只有一个主键 PRIMARY KEY(pk_PersonID)。然而,pk_PersonID 的值是由两个列(P_Id 和 LastName)组成的。

    ALTER TABLE 时的 SQL PRIMARY KEY 约束

    当表已被创建时,如需在 "P_Id" 列创建 PRIMARY KEY 约束,请使用下面的 SQL:

    MySQL / SQL Server / Oracle / MS Access:

    ALTER TABLE Persons
    ADD PRIMARY KEY (P_Id)

    如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束,请使用下面的 SQL 语法:

    MySQL / SQL Server / Oracle / MS Access:

    ALTER TABLE Persons

    ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)

    注释:如果您使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)。

    撤销 PRIMARY KEY 约束

    如需撤销 PRIMARY KEY 约束,请使用下面的 SQL:

    MySQL:

    ALTER TABLE Persons
    DROP PRIMARY KEY

    SQL Server / Oracle / MS Access:

    ALTER TABLE Persons
    DROP CONSTRAINT pk_PersonID

    SQL CHECK 约束

    CHECK 约束用于限制列中的值的范围。

    如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

    如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。

    CREATE TABLE 时的 SQL CHECK 约束

    下面的 SQL 在 "Persons" 表创建时在 "P_Id" 列上创建 CHECK 约束。CHECK 约束规定 "P_Id" 列必须只包含大于 0 的整数。

    MySQL:

    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CHECK (P_Id>0)
    )

    SQL Server / Oracle / MS Access:

    CREATE TABLE Persons
    (
    P_Id int NOT NULL CHECK (P_Id>0),
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    )

    如需命名 CHECK 约束,并定义多个列的 CHECK 约束,请使用下面的 SQL 语法:

    MySQL / SQL Server / Oracle / MS Access:

    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
    )
    ALTER TABLE 时的 SQL CHECK 约束

    当表已被创建时,如需在 "P_Id" 列创建 CHECK 约束,请使用下面的 SQL:

    MySQL / SQL Server / Oracle / MS Access:

    ALTER TABLE Persons
    ADD CHECK (P_Id>0)

    如需命名 CHECK 约束,并定义多个列的 CHECK 约束,请使用下面的 SQL 语法:

    MySQL / SQL Server / Oracle / MS Access:

    ALTER TABLE Persons
    ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')

    撤销 CHECK 约束

    如需撤销 CHECK 约束,请使用下面的 SQL:

    SQL Server / Oracle / MS Access:

    ALTER TABLE Persons
    DROP CONSTRAINT chk_Person

    MySQL:

    ALTER TABLE Persons
    DROP CHECK chk_Person

    相关文章

      网友评论

          本文标题:数据库系统概论(3)

          本文链接:https://www.haomeiwen.com/subject/qwdizftx.html