SELECT "Hello SQL!";
注意SQL语句以“;”结尾。
基础语法如下:
SELECT `column_name`
FROM `table_name`;
例子:
SELECT `name` FROM `courses`;
在 courses 表中选取 name 列。
基础语法如下:
SELECT `column_name_1`, `column_name_2`
FROM `table_name`;
例子:
SELECT `name`, `created_at` FROM `courses`;
在 courses 表中选取 name、created_at 列。
基础语法如下:
SELECT * FROM `table_name`;
例子:
SELECT * FROM `courses`;
在 courses 表中选取所有列。
基础语法如下:
SELECT DISTINCT `column_name`
FROM `table_name`
例子:
SELECT DISTINCT `teacher_id`
FROM `courses`;
在 courses 表中选取 不重复的teacher_id。
基础语法如下:
SELECT `column_name1`,`column_name2`…
FROM `table_name`
WHERE `column_name` operator `value`;
例子:
SELECT *
FROM `courses`
WHERE `name` = 'System Design';
在 courses 表中选取 所有列,取出 name 为 System Design 的那一行。
基础语法如下:
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)。
基础语法如下:
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)。
基础语法如下:
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] 。
基础语法如下:
DELETE FROM `table_name`
WHERE `some_column` = some_value;
例子:
DELETE FROM `courses`
WHERE `name` = 'Dynamic Programming';
在 courses 表中,删除 name 为 Dynamic Programming 的行。
基础语法如下:
A operator B
WHERE A operator B
例子:
SELECT *
FROM `courses`
WHERE `student_count` > 800;
在 courses 表中选取 student_count > 800 的所有列。
基础语法如下:
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 的列。
基础语法如下:
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 的所有列。
基础语法如下:
SELECT `column_name`
FROM `table_name`
WHERE NOT `condition`;
例子:
SELECT *
FROM `teachers`
WHERE NOT (`age` > 20 AND `country` = 'CN');
选取 teachers 表中,除了年龄大于20并且国籍是中国的所有列。
基础语法如下:
SELECT *
FROM `table_name`
WHERE `column_name` IN `value`;
例子:
SELECT *
FROM `teachers`
WHERE `country` IN ('CN','UK');
选取 teachers 表中,国籍是CN和UK的所有列。
基础语法如下:
SELECT *
FROM `table_name`
WHERE `column_name` NOT IN value;
例子:
SELECT *
FROM `teachers`
WHERE `country` NOT IN ('JP', 'USA');
选取 teachers 表中,国籍不是JP和USA的所有列。
基础语法如下:
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的所有列。
基础语法如下:
SELECT *
FROM `table_name`
WHERE `column_name` IS NULL;
例子:
SELECT *
FROM `teachers`
WHERE `email` IS NULL;
选取 teachers 表中,email是空的所有列。
基础语法如下:
SELECT *
FROM `table_name`
WHERE `column_name` LIKE `value`;
例子:
SELECT *
FROM `courses`
WHERE `name` LIKE 'D%';
选取 courses 表中,name首字母是D的所有列。
基础语法如下:
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排序。
基础语法如下:
SELECT `column_name`, `column_name`
FROM `table_name`
LIMIT `offset` , `count`;
例子:
SELECT *
FROM `courses`
ORDER BY `student_count`
LIMIT 3;
选取 courses 表,按照student_count的顺序进行排序,并取出前3列。
基础语法如下:
SELECT AVG(`column_name`)
FROM `table_name`;
例子:
SELECT AVG(`student_count`) AS average_student_count
FROM `courses`;
在 courses 表中,选择 student_count ,求出其均值,并命名为 average_student_count。
基础语法如下:
SELECT MAX(`column_name`)
FROM `table_name`;
例子:
SELECT MAX(`student_count`) AS `max_student_count`
FROM `courses`;
在 courses 表中,选择student_count中最大的数,并命名为max_student_count。
基础语法如下:
SELECT MIN(`column_name`)
FROM `table_name`;
例子:
SELECT MIN(`student_count`) AS `min_student_count`
FROM `courses`;
在 courses 表中,选择student_count中最小的数,并命名为min_student_count。
基础语法如下:
SELECT SUM(`column_name`)
FROM `table_name`;
例子:
SELECT SUM(`student_count`) AS `all_student_count`
FROM `courses`;
在 courses 表中,选择student_count列,将数字累加,并命名为all_student_count。
基础语法如下:
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。
基础语法如下:
SELECT ISNULL(`column_name`)
FROM `table_name`;
它的作用跟:
WHERE `column_name` IS NULL
一样。
例子:
SELECT *
FROM `teachers`
WHERE (ISNULL(`email`)) AND (`age` > 20);
在 teachers 表中,选取所有列,其中,emali为空,并且age>20。
主要可分为以下三种情况:COUNT(column_name) 、COUNT( * ) 和 COUNT(DISTINCT column_name) 。
例子:
SELECT COUNT(*) AS `course_count`
FROM `courses`
WHERE `created_at` BETWEEN '2020-01-01' AND '2020-05-31';
在 courses 表中,统计在 2020 年 1 月到 5 月的课程。
例子:
INSERT INTO `records`
VALUES(NOW());
向 records 表中,插入当前的时间。
CURDATE() 可以和 DATE()相互转化:
例子:
SELECT `name`,DATE(`created_at`) AS `created_date`
FROM `courses`;
使用 DATE() 函数从课程表 courses 中查询课程的名字 name 和课程创建时间 created_at,从课程创建时间 created_at 中提取出创建课程的日期,并加以格式化,用 created_date 作为结果集列名。
基础语法如下:
SELECT EXTRACT(unit FROM date)
FROM `table`
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。
基础语法如下:
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。
基础语法如下:
SELECT DATE_ADD(date, INTERVAL expr type)
FROM table_name
例子:
SELECT `name` , DATE_ADD(`created_at`, INTERVAL 1 DAY) AS `new_created`
FROM `courses`;
查询 courses 表中课程的课程创建日期,并将课程创建日期均推迟一天,最后返回课程名称 name 及修改后的课程创建时间,修改后的课程创建时间命名为 new_created 。
基础语法如下:
SELECT DATE_SUB(date, INTERVAL expr type)
FROM table_name
例子:
SELECT `id`,`name`,DATE_SUB(`created_at`,INTERVAL 1 DAY) AS `new_created`
FROM `courses`;
查询 courses 表中课程的课程创建日期,将课程创建日期均提前一天,最后返回课程 id 、课程名称 name 及修改后的开课日期,修改后的课程创建日期命名为 new_created 。
例子:
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。