数据库总结

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

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)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 1,066评论 0 0
  • 1. 了解SQL 1.1 数据库基础 ​ 学习到目前这个阶段,我们就需要以某种方式与数据库打交道。在深入学习MyS...
    锋享前端阅读 1,038评论 0 1
  • mysql数据库中 :database : 文件夹table : 数据表(数据文件) 进入mysqlmysql -...
    赋闲阅读 556评论 0 0
  • 一、基本概念 记录 -- 行 字段 -- 列 主键: 唯一 外键 完整性 数据完整性实体完整性表中每一记录是唯一实...
    rh_Jameson阅读 3,616评论 2 13
  • 50个常用的sql语句Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname...
    哈哈海阅读 1,224评论 0 7