SQL学习笔记(via:LintCode,持续更新)

Level 1

1、Hello SQL

SELECT "Hello SQL!";

注意SQL语句以“;”结尾。

2、简单的SELECT语句

(1)使用 SELECT COLUMN 查询单个列

基础语法如下:

SELECT `column_name`
FROM `table_name`;

例子:

SELECT `name` FROM `courses`;

courses 表中选取 name 列。

(2)使用 SELECT COLUMN, COLUMN 查询多个列

基础语法如下:

SELECT `column_name_1`, `column_name_2`  
FROM `table_name`;

例子:

SELECT `name`, `created_at` FROM `courses`;

courses 表中选取 namecreated_at 列。

(3)使用 SELECT * 查询所有列

基础语法如下:

SELECT * FROM `table_name`;

例子:

SELECT * FROM `courses`;

courses 表中选取所有列。

(4)使用 SELECT DISTINCT 查询不同行

基础语法如下:

SELECT DISTINCT `column_name`
FROM `table_name`

例子:

SELECT DISTINCT `teacher_id` 
FROM `courses`;

courses 表中选取 不重复的teacher_id

(5)使用 SELECT WHERE 对行进行筛选过滤

基础语法如下:

SELECT `column_name1`,`column_name2`…
FROM `table_name`
WHERE `column_name` operator `value`;

例子:

SELECT *
FROM `courses`
WHERE `name` = 'System Design';

courses 表中选取 所有列,取出 nameSystem Design 的那一行。

3、简单的INSERT语句

(1)使用 INSERT INTO 在不指定列的情况下插入数据

基础语法如下:

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

例子:

INSERT INTO `courses` VALUES (13,'Python','400','2021-05-23',3);

courses 表中插入值 (13,'Python','400','2021-05-23',3)

(2)使用 INSERT INTO 在指定的列中插入数据

基础语法如下:

INSERT INTO `table_name`
(`column1`, `column2`, `column3`,...)
VALUES (value1, value2, value3,...);

例子:

INSERT INTO `courses`
(`id`,`name`,`student_count`,`created_at`,`teacher_id`)
VALUES(13,'Flash Sale',100,'2018-01-01',5);

courses 表中的 id、name、student_count、created_at、teacher_id 列中插入对应的值(13,'Flash Sale',100,'2018-01-01',5)

4、简单的UPDATE语句

(1)使用 UPDATE 更新数据

基础语法如下:

UPDATE `table_name`
SET `column1`=value1,`column2`=value2,...
WHERE `some_column`=some_value;

例子:

UPDATE `teachers`
SET `email` = '[email protected]'
WHERE `name` = 'Linghu Chong';

更新 teachers 表 ,在 name  为 Linghu Chong 的行中,设置 email 的值为 [email protected]

5、简单的DELETE语句

(1)使用 DELETE 删除数据

基础语法如下:

DELETE FROM `table_name`
WHERE `some_column` = some_value;

例子:

DELETE FROM `courses`
WHERE `name` = 'Dynamic Programming';

courses 表中,删除 nameDynamic Programming 的行。

Level 2

1、比较运算符

基础语法如下:

A operator B

WHERE A operator B

例子:

SELECT *
FROM `courses`
WHERE `student_count` > 800;

courses 表中选取 student_count > 800 的所有列。

2、逻辑运算符

(1)使用 AND 连接多条件

基础语法如下:

SELECT `column_name` 
FROM `table_name` 
WHERE condition1 AND condition2;

例子:

SELECT *
FROM `courses`
WHERE `student_count` >= 800 AND `student_count` < 1000;

courses 表中,选取 student_count >= 800 并且 student_count < 1000 的列。

(2)使用 OR 连接多个条件

基础语法如下:

SELECT `column_name` 
FROM `table_name` 
WHERE condition1 or condition2;

例子:

SELECT *
FROM `courses`
WHERE `name` = 'System Design' OR `name` = 'Django';

选取 courses 表中,name = System Design 或者 name = Django 的所有列。

(3)使用 NOT 过滤不满足条件的数据

基础语法如下:

SELECT `column_name` 
FROM `table_name` 
WHERE NOT `condition`;

例子:

SELECT *
FROM `teachers`
WHERE NOT (`age` > 20 AND `country` = 'CN');

选取 teachers 表中,除了年龄大于20并且国籍是中国的所有列。

3、特殊条件

(1)使用 IN 查询多条件

基础语法如下:

SELECT *
FROM `table_name`
WHERE `column_name` IN `value`;

例子:

SELECT *
FROM `teachers`
WHERE `country` IN ('CN','UK');

选取 teachers 表中,国籍是CN和UK的所有列。

(2)使用 NOT IN 排除

基础语法如下:

SELECT *
FROM `table_name`
WHERE `column_name` NOT IN value;

例子:

SELECT *
FROM `teachers`
WHERE `country` NOT IN ('JP', 'USA');

选取 teachers 表中,国籍不是JP和USA的所有列。

(3)使用 BETWEEN AND 查询两值间的数据范围

基础语法如下:

SELECT *
FROM `table_name`
WHERE `column_name` BETWEEN `value` AND `value`;

例子:

SELECT *
FROM `teachers`
WHERE (`age` BETWEEN 20 AND 25 ) AND (`country` NOT IN ('CN','UK'));

选取 teachers 表中,年龄在20~25之间(都包括),且国籍不是CN和UK的所有列。

(4)使用 IS NULL 查询空数据

基础语法如下:

SELECT *
FROM `table_name`
WHERE `column_name` IS NULL;

例子:

SELECT *
FROM `teachers`
WHERE `email` IS NULL;

选取 teachers 表中,email是空的所有列。

(5)使用 LIKE 模糊查询

基础语法如下:

SELECT *
FROM `table_name`
WHERE `column_name` LIKE  `value`;

例子:

SELECT *
FROM `courses`
WHERE `name` LIKE 'D%';

选取 courses 表中,name首字母是D的所有列。

4、ORDER BY 与 LIMIT

(1)使用 ORDER BY 对数据进行排序

基础语法如下:

SELECT `column_name`, `column_name`
FROM `table_name`
ORDER BY `column_name`, `column_name` ASC|DESC;

例子:

对一列进行排序:

SELECT *
FROM `courses`
ORDER BY `student_count`;

选取 courses 表,按照student_count的顺序进行排序

对多列进行排序:

SELECT `name`,`teacher_id`,`created_at`
FROM `courses`
WHERE `teacher_id` in (1,2,3)
ORDER BY `teacher_id`,`created_at`;

选取 courses 表中,teacher_id为1、2、3的,并将其按照teacher_id和created_at排序

(2)使用 LIMIT 限制输出行数

基础语法如下:

SELECT `column_name`, `column_name`
FROM `table_name`
LIMIT `offset` , `count`;
  • offset :是返回集的初始标注,起始点是0,不是1哦
  • count :制定返回的数量

例子:

SELECT *
FROM `courses`
ORDER BY `student_count`
LIMIT 3;

选取 courses 表,按照student_count的顺序进行排序,并取出前3列

Level 3

1、算术函数(一)

(1)使用 AVG() 函数求数值列的平均值

基础语法如下:

SELECT AVG(`column_name`) 
FROM `table_name`;

例子:

SELECT AVG(`student_count`) AS average_student_count
FROM `courses`;

courses 表中,选择 student_count求出其均值,并命名为 average_student_count

(2)使用 MAX() 函数返回指定列中的最大值

基础语法如下:

SELECT MAX(`column_name`) 
FROM `table_name`;

例子:

SELECT MAX(`student_count`) AS `max_student_count`
FROM `courses`;

courses 表中,选择student_count中最大的数,并命名为max_student_count

(3)使用 MIN() 函数返回指定列中的最小值

基础语法如下:

SELECT MIN(`column_name`) 
FROM `table_name`;

例子:

SELECT MIN(`student_count`) AS `min_student_count`
FROM `courses`;

courses 表中,选择student_count中最小的数,并命名为min_student_count

(4)使用 SUM() 函数统计数值列的总数

基础语法如下:

SELECT SUM(`column_name`) 
FROM `table_name`;

例子:

SELECT SUM(`student_count`) AS `all_student_count` 
FROM `courses`;

courses 表中,选择student_count列,将数字累加,并命名为all_student_count

2、算术函数(二)

(1)使用 ROUND() 函数将数值四舍五入

基础语法如下:

SELECT ROUND(`column_name`, `decimals`) 
FROM `table_name`;

例子:

【1】 ROUND(X):返回参数 X 四舍五入后的一个整数。

【2】 ROUND(X, D): 返回参数 X 四舍五入且保留 D 位小数后的一个数字。如果 D 为 0,结果将没有小数点或小数部分。

SELECT ROUND(AVG(`student_count`)) AS `avg_student_count`
FROM `courses`;

选择 courses 表中,student_count列,求出其均值,保留整数(四舍五入),并重新命名为avg_student_count

(2)使用 NULL() 函数判断空值

基础语法如下:

SELECT ISNULL(`column_name`)
FROM `table_name`;

它的作用跟:

WHERE `column_name` IS NULL

一样。

SQL学习笔记(via:LintCode,持续更新)_第1张图片

SQL学习笔记(via:LintCode,持续更新)_第2张图片

例子:

SELECT *
FROM `teachers`
WHERE (ISNULL(`email`)) AND (`age` > 20);

 在 teachers 表中,选取所有列其中,emali为空,并且age>20

(3)使用 COUNT() 函数计数

主要可分为以下三种情况:COUNT(column_name) 、COUNT( * ) 和 COUNT(DISTINCT column_name) 。

SQL学习笔记(via:LintCode,持续更新)_第3张图片

SQL学习笔记(via:LintCode,持续更新)_第4张图片

SQL学习笔记(via:LintCode,持续更新)_第5张图片

例子:

SELECT COUNT(*) AS `course_count`
FROM `courses`
WHERE `created_at` BETWEEN '2020-01-01' AND '2020-05-31';

 在 courses 表中,统计在 2020 年 1 月到 5 月的课程

3、时间函数(一)

(1)使用 NOW() 、 CURDATE()、CURTIME() 获取当前时间

SQL学习笔记(via:LintCode,持续更新)_第6张图片

例子:

INSERT INTO `records`
VALUES(NOW());

 向 records 表中,插入当前的时间

(2)使用 DATE()、TIME() 函数提取日期和时间

SQL学习笔记(via:LintCode,持续更新)_第7张图片

CURDATE() 可以和 DATE()相互转化:

SQL学习笔记(via:LintCode,持续更新)_第8张图片

例子:

SELECT `name`,DATE(`created_at`) AS `created_date`
FROM `courses`;

使用 DATE() 函数从课程表 courses查询课程的名字 name 和课程创建时间 created_at,从课程创建时间 created_at 中提取出创建课程的日期,并加以格式化,用 created_date 作为结果集列名

(3)使用 EXTRACT() 函数提取指定的时间信息

基础语法如下:

SELECT EXTRACT(unit FROM date)
FROM `table`

SQL学习笔记(via:LintCode,持续更新)_第9张图片

SELECT DATE_FORMAT(`created_at`,'%Y-%m-%d %H:%i:%s') AS `DATE_FORMAT`
FROM `courses`;

例子:

SELECT `name`,HOUR(`created_at`) AS `created_hour`
FROM `courses`;

 从课程表 courses查询所有课程的课程名称( name )和课程创建时间( created_at )的小时数,将提取小时数的列名起别名为 created_hour

(4)使用 DATE_FORMAT() 格式化输出日期

基础语法如下:

SELECT DATE_FORMAT(date,format);

我们在 SQL 中使用 DATE_FORMAT() 方法来格式化输出 date/time。
需要注意的是 DATE_FORMAT() 函数返回的是字符串格式。

其中
date 一个有效日期。
format 是 date/time 的输出格式。

例子:

SELECT DATE_FORMAT(`created_at`,'%Y-%m-%d %H:%i:%s') AS `DATE_FORMAT`
FROM `courses`;

查询 courses 表,查询课程创建时间,按照 ’年-月-日 时:分:秒’ 的格式返回结果,返回列名显示为 DATE_FORMAT

4、时间函数(二)

(1)使用 DATE_ADD() 增加时间

基础语法如下:

SELECT DATE_ADD(date, INTERVAL expr type)
FROM table_name

SQL学习笔记(via:LintCode,持续更新)_第10张图片

例子:

SELECT `name` , DATE_ADD(`created_at`, INTERVAL 1 DAY) AS `new_created`
FROM `courses`; 

查询 courses 表中课程的课程创建日期,并将课程创建日期均推迟一天,最后返回课程名称 name 及修改后的课程创建时间,修改后的课程创建时间命名为 new_created

(2)使用 DATE_SUB() 减少时间

基础语法如下:

SELECT DATE_SUB(date, INTERVAL expr type)
FROM table_name

SQL学习笔记(via:LintCode,持续更新)_第11张图片

例子:

SELECT `id`,`name`,DATE_SUB(`created_at`,INTERVAL 1 DAY) AS `new_created`
FROM `courses`;

查询 courses 表中课程的课程创建日期,将课程创建日期均提前一天,最后返回课程 id 、课程名称 name 及修改后的开课日期,修改后的课程创建日期命名为 new_created

(3)使用时间函数 DATEDIFF() 和 TIMESTAMPDIFF() 计算日期差

SQL学习笔记(via:LintCode,持续更新)_第12张图片

SQL学习笔记(via:LintCode,持续更新)_第13张图片

例子:

SELECT DATEDIFF(created_at,'2019-03-26') AS `date_diff`
FROM `courses`;

查询 courses 表,计算从 2019 年 03 月 26 日到创建时间(created_at)相差的天数,结果列名以 date_diff 显示

SELECT TIMESTAMPDIFF(Month,created_at,'2020-04-22') AS `MonthDiff`
FROM `courses`;

查询 courses 表,计算 '2020-04-22' 与课程创建时间的月数差,返回列名显示为 MonthDiff

Level 4

1、约束

(1)非空约束 NOT NULL

SQL学习笔记(via:LintCode,持续更新)_第14张图片

(2)唯一约束 UNIQUE

  • UNIQUE 约束唯一标识数据库表中的每条记录
  • UNIQUE 和 主键约束均为列或列集合提供了唯一性的保证
  • 主键约束会自动定义一个 UNIQUE 约束,或者说主键约束是一种特殊的 UNIQUE 约束。但是二者有明显的区别:每个表可以有多个 UNIQUE 约束,但只能有一个主键约束。

SQL学习笔记(via:LintCode,持续更新)_第15张图片

SQL学习笔记(via:LintCode,持续更新)_第16张图片

SQL学习笔记(via:LintCode,持续更新)_第17张图片 

 

 

你可能感兴趣的:(SQL,学习,sql,数据库)