数据库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 TABLE instructor ( ID CHAR(5), name VARCHAR(20) NOT NULL, dept_name VARCHAR(20), salary NUMERIC(8,2),PRIMARY KEY (ID), FOREIGN KEY (dept_name) REFERENCES department(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 <表名>;
文章插图
artment)表和课程(course)表中的所有内容</center>14. SELECT DISTINCT
SELECT DISTINCT过滤掉了重复的值:
SELECT DISTINCT <列名1>, <列名2>, … FROM <表名>;
文章插图
15. WHERE
我们之前在更新记录时已经用到了WHERE关键字,用来指明条件 。这里我们稍微详细一点地介绍下WHERE 。
WHERE的条件通常是:
- 比较文本(text)
- 比较数字(numbers)
- AND、OR、NOT等逻辑运算
SELECT * FROM course WHERE dept_name='Comp. Sci.';SELECT * FROM course WHERE credits>3;SELECT * FROM course WHERE dept_name='Comp. Sci.' AND credits>3;
文章插图
16. GROUP BY
GROUP BY语句可以分组结果,常用于COUNT、MAX、MIN、SUM、AVG等聚合函数(aggregate functions) 。
SELECT <列名1>, <列名2>, … FROM <表名> GROUP BY <列名>;让我们来看一个例子,列出每个部门的课程数量:
SELECT COUNT(course_id), dept_nameFROM courseGROUP BY dept_name;
文章插图
17. HAVING
乍看起来,HAVING和WHERE很像:
SELECT <列名1>, <列名2>, … FROM <表名> GROUP BY <列名x> HAVING <条件>;那么,HAVING和WHERE有什么不同呢?让我们先来看一个例子,列出开了不止一门课程的部门开设的课程数:
SELECT COUNT(course_id), dept_nameFROM courseGROUP BY dept_nameHAVING COUNT(course_id)>1;这里HAVING不能换成WHERE,因为WHERE直接针对行操作,且在GROUP BY之前运行(即先通过WHERE筛选行,之后再将筛选出的行通过GROUP BY分组) 。假设SQL中不存在HAVING语句,那么我们只能先新建一张表,将COUNT(course_id)作为新表的列,然后在新表上再通过WHERE进行筛选(当然,实际上SQL提供了派生表、CTE等机制,并不用真的手工建新表) 。
推荐阅读
- 晚上睡觉小腿肚抽筋
- 小腿肚大的原因
- 梦见自己开大巴车拉着很多人 梦见开班车拉着很多人
- 周公解梦梦见狗往怀里扑亲我 梦到狗很亲热的扑向我
- 肉夹馍|选择钓场也是一门学问,钓场周边看地形,岸边环境很重要,水中有鱼腥才更好
- 梦见辣椒树上结很多红辣椒跟青辣椒 梦见辣椒树上结很多红辣椒是什么意思
- 防晒 喝茶居然能防晒, 你听说过吗
- 算法面试 - 水壶问题
- 秋季喝茶的四点好处 很实用
- 从阿里、头条面试回来,面试官最喜欢问的Jvm和Redis你了解多少?