目录
1.SQL语句学习网站(来源于https://www.jianshu.com/p/723e8bd6c5c8)
1.SQL语句学习网站(来源于https://www.jianshu.com/p/723e8bd6c5c8)
(1)http://www.w3school.com.cn/sql/
速查基础SQL命令,快速理解SQL命令的含义和使用方法
(2)CodeCademy
https://www.codecademy.com/learn/learn-sql
https://www.codecademy.com/learn/sql-table-transformati
交互式地学习并在类似真实数据库下使用SQL。需要注册,解锁高级功能需要付费。
推荐这个学习网站,这个网站上有详细解释SQL语句功能,并提供可交互的在线编程环境,配合练习题巩固所学知识点,无需注册。
(4)http://www.w3resource.com/sql-exercises/
题量丰富但基础,提供可交互的编程窗口,但界面不够友好。适合已经大体掌握SQL后巩固之用,无需注册。
题量丰富且困难,出题的人考虑到了实际使用时的一些坑爹场景。适合刷题解闷,理解SQL运行的深层逻辑。网站风格古老,需要注册。
网友推荐
2.SQL练习题
本人使用的是https://sqlbolt.com/,既了解句法结构,又可以巩固知识点。
2.1 第二节练习题 带约束的查询
#1.找出电影id=6的这一行
SELECT * FROM movies WHERE id=6;
#2.找出在2000年到2010年发行的电影
SELECT * FROM movies WHERE year BETWEEN 2000 AND 2010;
#3.找出不在2000年到2010年发行的电影
SELECT * FROM movies WHERE year NOT BETWEEN 2000 AND 2010;
#4.找出前五个电影和他们的发行年
SELECT title,year FROM movies WHERE Year <=2003
或者
SELECT title,year FROM movies WHERE Year IN(0,1,2,3,4,5)
2.2 第三节 有约束的查询
- 知识点 :常见的文本数据特定运算符,分为两类,一类是区分大小写的精确字符串比较,=、!=、<>;另一类是不区分大小写的字符串精确比较,LIKE、NOT LIKE.
- 匹配0个或多个字符串序列用%,可以替代*,可以解释为查找包含关键词的词汇;
- 匹配单个字符串的序列用-符号。
Operator | Condition | Example | Explaining |
= | Case sensitive exact string comparison (notice the single equals) | col = "abc" | 等于 |
!= or <> | Case sensitive exact string inequality comparison | col_name != "abcd" | 不等于 |
LIKE | Case insensitive exact string comparison | col_name LIKE "ABC" | 等于 |
NOT LIKE | Case insensitive exact string inequality comparison | col_name NOT LIKE "ABCD" | 不等于 |
% | Used anywhere in a string to match a sequence of zero or more characters (only with LIKE or NOT LIKE) | col_name LIKE "%AT%" (matches "AT", "ATTIC", "CAT" or even "BATS") |
模糊匹配 |
_ | Used anywhere in a string to match a single character (only with LIKE or NOT LIKE) | col_name LIKE "AN_" (matches "AND", but not "AN") |
模糊匹配单字符串 |
IN (…) | String exists in a list | col_name IN ("A", "B", "C") | 在集合 |
NOT IN (…) | String does not exist in a list | col_name NOT IN ("D", "E", "F") | 不在集合 |
- 练习题
# 1.找出所有Toy Story电影
SELECT * FROM movies WHERE title LIKE "%Toy Story%";
# 下面也可以
SELECT * FROM movies WHERE title LIKE "Toy Story%";
# 2.找出所有John Lasseter拍的电影
SELECT * FROM movies WHERE Director LIKE "John Lasseter";
# 下面也可以
SELECT * FROM movies WHERE director="John Lasseter";
# 3.找出所有不是John Lasseter拍的电影
SELECT * FROM movies WHERE director!="John Lasseter";
# 4.找出WALL-*系列电影
SELECT * FROM movies
WHERE title LIKE "WALL-_";
2.3 第四节 筛选和排序查询
(1)知识点
SQL提供了一种使用DISTINCT
关键字丢弃具有重复列值的行的便捷方法。原因在于即使数据库中的数据可能是唯一的,任何特定查询的结果可能都不是 - 例如,以我们的电影表为例,许多不同的电影可以在同一年发布。基本语句是:
SELECT DISTINCT column, another_column, …
FROM mytable
WHERE condition(s);
由于
DISTINCT
关键字会盲目删除重复行,因此我们将在以后的课程中学习如何使用分组和GROUP BY
子句根据特定列丢弃重复项。
- order by命令
为解决表中数量增加到海量造成数据难以阅读问题,SQL提供了一种使用order by子句按升序对给定列排序结果的方法。基本句式为:
选择具有有序结果的查询
SELECT column, another_column, …
FROM mytable
WHERE condition(s)
ORDER BY column ASC/DESC;
当一个ORDER BY
指定的子句,每行被排序的α-数值基于指定的列的值。在某些数据库中,您还可以指定排序规则以更好地对包含国际文本的数据进行排序。
通常与该ORDER BY
子句一起使用的另一个子句是LIMIT
和OFFSET
子句,它们是一种有用的优化,用于向数据库指示您关注的结果的子集。这LIMIT
将减少要返回的行数,而可选项OFFSET
将指定从哪里开始计算行数。句式结构为
选择有限行的查询
SELECT column, another_column, …
FROM mytable
WHERE condition(s)
ORDER BY column ASC/DESC
LIMIT num_limit OFFSET num_offset;
(2)练习题
#1.按照字母顺序,不重复地列出所有皮克斯电影导演
SELECT DISTINCT director FROM movies
ORDER BY director ASC;
#2.列出Pixar最近发行的四部电影(按照发行日期倒序)
SELECT title, year FROM movies
ORDER BY year DESC
LIMIT 4;
#3.列出按照字母排序的Pixar前五部电影
SELECT TITLE,YEAR FROM movies
ORDER BY TITLE ASC
LIMIT 5;
#4.根据3,列出按照字母排序的Pixar下五部电影
SELECT title FROM movies
ORDER BY title ASC
LIMIT 5 OFFSET 5;