美文网首页
数据库总结

数据库总结

作者: lyf_god | 来源:发表于2019-07-15 14:27 被阅读0次

    以下是我对所学的数据库的总结,希望能对你有帮助

    mysql -u root -p     开启MYSQL

    数据库

    1. 查看现有数据库

    SHOW DATABASES;

    2. 新建数据库

    CREATE DATABASE <数据库名>;

    3. 选择数据库

    USE <数据库名>;

    4. 从.sql文件引入SQL语句

    SOURCE <.sql文件路径>;

    5. 删除数据库

    DROP DATABASE <数据库名>;

    6. 查看当前数据库中的表

    SHOW TABLES;

    7. 创建新表

    CREATE TABLE<表名>(<列名1><列类型1>,<列名2><列类型2>,<列名3><列类型3>,    PRIMARY KEY (<列名1>),    FOREIGN KEY (<列名2>) REFERENCES<表名2>(<列名2>));

    主键(PRIMARY KEY)用来标识一条记录(一行),所以每条记录的主键值必须是唯一的。主键可以定义在多列上,这称为联合主键(composite primary key)

    如果我们把表视作具有某种结构的数组(例如,C语言中的struct),那么外键(FOREIGN KEY)可以视作指针。

    例子:

    CREATE TABLEinstructor(    ID CHAR(5),    nameVARCHAR(20)NOT NULL,    dept_nameVARCHAR(20),    salaryNUMERIC(8,2),    PRIMARYKEY(ID),    FOREIGNKEY(dept_name)REFERENCESdepartment(dept_name));

    在上面的例子中,我们创建了一个教员(instructor)表,该表的主键是ID,外键是教员所在的部门名称(dept_name),关联部门(department)表。此外,教员表还包括姓名(name)、薪水(salary)。其中,姓名有约束NOT NULL,表示姓名这一项不能为空。

    8. 概述表中的列

    使用如下语句查看表中的列的基本信息:

    DESCRIBE <表名>;

    下图显示了一些例子:

    9. 在表中插入新纪录

    INSERT INTO <表名> (<列名1>, <列名2>, <列名3>, …)VALUES (<值1>, <值2>, <值3>, …);

    也可以省略列名(依序在所有列上插入新值):

    INSERT INTO <表名>VALUES (<值1>, <值2>, <值3>, …);

    10. 在表中更新记录

    UPDATE<表名>SET<列名1>=<值1>,<列名2>=<值2>, ...    WHERE<条件>;

    11. 清空表

    DELETE FROM <表名>;

    12. 删除表

    DROP TABLE <表名>;

    查询

    13. SELECT

    SELECT语句可以从表中选择数据:

    SELECT<列名1>,<列名2>, …    FROM<表名>;

    以下语句选择所有内容:

    SELECT * FROM <表名>;

    选中部门(department)表和课程(course)表中的所有内容

    artment)表和课程(course)表中的所有内容

    14. SELECT DISTINCT

    SELECT DISTINCT过滤掉了重复的值:

    SELECT DISTINCT<列名1>,<列名2>, …    FROM<表名>;

    15. WHERE

    我们之前在更新记录时已经用到了WHERE关键字,用来指明条件。这里我们稍微详细一点地介绍下WHERE

    WHERE的条件通常是:

    比较文本(text)

    比较数字(numbers)

    ANDORNOT等逻辑运算

    让我们来看一些例子:

    SELECT * FROM course WHERE dept_name='Comp. Sci.';SELECT * FROM course WHERE credits>3;SELECT * FROM course WHERE dept_name='Comp. Sci.'ANDcredits>3;

    16. GROUP BY

    GROUP BY语句可以分组结果,常用于COUNTMAXMINSUMAVG聚合函数(aggregate functions)

    SELECT<列名1>,<列名2>, …    FROM<表名>GROUP BY<列名>;

    让我们来看一个例子,列出每个部门的课程数量:

    SELECTCOUNT(course_id), dept_name      FROM course      GROUP BY dept_name;

    17. HAVING

    乍看起来,HAVINGWHERE很像:

    SELECT<列名1>,<列名2>, …    FROM<表名>GROUP BY<列名x>HAVING<条件>;

    那么,HAVINGWHERE有什么不同呢?让我们先来看一个例子,列出开了不止一门课程的部门开设的课程数:

    SELECTCOUNT(course_id), dept_name    FROM course    GROUP BY dept_name    HAVINGCOUNT(course_id)>1;

    这里HAVING不能换成WHERE,因为WHERE直接针对行操作,且在GROUP BY之前运行(即先通过WHERE筛选行,之后再将筛选出的行通过GROUP BY分组)。假设SQL中不存在HAVING语句,那么我们只能先新建一张表,将COUNT(course_id)作为新表的列,然后在新表上再通过WHERE进行筛选(当然,实际上SQL提供了派生表、CTE等机制,并不用真的手工建新表)。

    18. ORDER BY

    ORDER BY可以对结果进行排序,在没有明确指定ASC(升序)或DESC(降序)的情况下,默认按升序排列。

    SELECT<列名1>,<列名2>, …FROM<表名>ORDER BY<列名1>,<列名2>, …, ASC|DESC;

    例子:

    SELECT * FROM course ORDER BY credits;

    SELECT * FROM course ORDER BY credits DESC;

    19. BETWEEN

    BETWEEN语句用于指定区间

    SELECT<列名1>,<列名2>, …    FROM<表名>WHERE<列名x>BETWEEN<值1>AND<值2>;

    其中“值”可能是数字,文本,乃至日期等。

    例如,列出薪资在50000和100000之间的教员:

    SELECT * FROM instructor    WHERE salary BETWEEN50000AND100000;

    20. LIKE

    LIKE用于匹配文本中的特定模式

    SELECT<列名1>,<列名2>, …    FROM<表名>WHERE<列名x>LIKE<模式>;

    模式中可以使用以下两个通配符:

    %(零个、一个或多个字符)

    _(单个字符)

    例子:列出课程名中包含“to”的课程,以及课程ID以“CS-”开头的课程。

    SELECT * FROM course WHERE title LIKE'%to%';SELECT * FROM course WHERE course_id LIKE'CS-___';

    21. IN

    IN语句表示值属于某个集合。

    SELECT<列名1>,<列名2>, …    FROM<表名>WHERE<列名n>IN (<值1>,<值2>, …);

    例子:列出计算机科学、物理、电子工程部门的学生。

    SELECT *FROM student    WHERE dept_nameIN('Comp. Sci.','Physics','Elec. Eng.');

    22. JOIN

    JOIN用来组合两张以上表中的值。下图展示了JOIN的三种类型:

    SELECT<列名1>,<列名2>, …    FROM<表名1>JOIN<表名2>ON<表名1.列名x>=<表名2.列名x>

    让我们来看三个例子,分别对应三种JOIN的类型。

    第一个例子,列出课程时包含开设课程的部门详情:

    SELECT * FROM course

        JOIN department

        ON course.dept_name=department.dept_name;

    第二个例子,列出所有具有前置课程的课程的详情:

    SELECT prereq.course_id, title, dept_name, credits, prereq_id

        FROM prereq

        LEFT OUTER JOIN course

        ON prereq.course_id=course.course_id;

    最后一个例子,列出所有课程的详情,不管是否具有前置课程:

    SELECT course.course_id, title, dept_name, credits, prereq_id

        FROM prereq

        RIGHT OUTER JOIN course

        ON prereq.course_id=course.course_id;

    23. 视图

    视图(view)是虚拟的SQL表。它包含行和列,和一般的SQL表格很类似。视图总是显示数据库中的最新数据。

    CREATE VIEW

    创建视图:

    CREATE VIEW<视图名>AS    SELECT<列名1>,<列名2>, …    FROM<表名>WHERE<条件>;

    DROP VIEW

    删除视图:

    DROP VIEW <视图名>;

    例如,创建3学分的课程视图:

    CREATE VIEW my_viewASSELECT * FROM course    WHERE credits=3;

    24. 聚合函数

    我们之前已经提到聚合函数,这里列出最常用的一些聚合函数:

    COUNT(列名)返回行数

    SUM(列名)返回指定列的值之和

    AVG(列名)返回指定列的平均值

    MIN(列名)返回指定列的最小值

    MAX(列名)返回指定列的最大值

    25. 嵌套子查询

    在SQL请求中,可以嵌套SELECT-FROM-WHERE表达式,称为嵌套子查询(nested subqueries)

    相关文章

      网友评论

          本文标题:数据库总结

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