SQL学习
基于 sqlbolt.com,趁着2019年1月份没过去,再抓紧写两篇
1.SQL是结构化查询语言,对应的是关系型数据库
2.主要的内容:增、删、改、查
1.基础章节练习
SQL Lesson 1: SELECT queries 101
第一章比较简单,直接从例题开始说起吧
1.练习部分
#1.找出表中每个电影的名字
SELECT title FROM movies;
#2.找出表中每个电影的导演
SELECT Director FROM Movies;
#3.找出每个电影的title和导演
SELECT title,director FROM Movies;
#4.找出每个电影的title和发行年
SELECT title,year FROM Movies;
#5.找出每个电影的所有信息
SELECT * FROM Movies;
SQL Lesson 2: Queries with constraints (Pt. 1)
1.WHERE语句对numerical number的使用
目的:为了用已知约束来筛选结果
使用格式
SELECT column, another_column, …
FROM mytable
WHERE condition
AND/OR another_condition
AND/OR …;
AND / OR操作符是用来连接复杂条件的,如:
num_wheels >= 4 AND doors <= 2
可以用在数值数据(整数 / 浮点数)的操作符
2.练习部分
#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 id,title,year FROM movies WHERE Id BETWEEN 1 AND 5;
SQL Lesson 3: Queries with constraints (Pt. 2)
1.WHERE对文本型语句的操作
1.区分大小写的精确字符串比较: =、!=、 < >
2.不区分大小写的字符串精确比较:LIKE、NOT LIKE
- 匹配0个或多个字符串的序列 %(1.相当于* 2.相当于查找包含关键词的词汇)
- 匹配单个字符串的序列 -
- 注意
- 大多数数据库用这些操作符时非常高效,全文检索用Apache Lucene或Sphinx库更专业,支持国际化和高级查询。
2.练习部分
# 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";
#3.找出所有不是John Lasseter拍的电影名和导演名
SELECT id,title,director
FROM movies
WHERE Director NOT LIKE "John Lasseter"
#4.找到所有WALL-*系列电影
SELECT *
FROM movies
WHERE title LIKE "WALL-%"
SQL Lesson 4: Filtering and sorting Query results
1.DISTINCT关键词筛重
使用条件:数据库中的数据是唯一的,但是数据库中的特定查询结果可能不唯一(很多不同的电影可能在同一年发行),这时我们用DISTINCT关键词丢弃重复列值的行。
格式:
SELECT DISTINCT column, another_column, …
FROM mytable
WHERE condition(s);
注意
1.DISTINCT会盲目删除行,日后会用GROUP BY基于特定的列丢弃重复行。
2.ORDER BY给结果排序
格式:
SELECT column, another_column, …
FROM mytable
WHERE condition(s)
ORDER BY column ASC/DESC;
注意:
ORDER BY是按照字母数字的顺序排列的指定列值,某些数据库可以指定一个字符顺序去更好地进行排序。
3.LIMIT和OFFSET的使用
对于筛选出自己关心的结果非常有用
格式:
SELECT column, another_column, …
FROM mytable
WHERE condition(s)
ORDER BY column ASC/DESC
LIMIT num_limit OFFSET num_offset;
LIMIT是限定在某个条件(一共选出来多少个),而OFFSET是偏移量(从当前位置向下移动几个格)
2.练习部分
#1.按照字母顺序,不重复地列出所有皮克斯电影导演
SELECT DISTINCT director
FROM movies
WHERE 1
ORDER BY director ASC;
#2.列出Pixar最近发行的四部电影(按照发行日期倒序)
SELECT *
FROM movies
WHERE 1
ORDER BY year DESC
LIMIT 4 OFFSET 0;
#3.列出按照字母排序的Pixar前五部电影
SELECT title
FROM movies
WHERE 1
ORDER BY title
LIMIT 5 OFFSET 0;
#4.根据3,列出按照字母排序的Pixar下五部电影
SELECT title
FROM movies
WHERE 1
ORDER BY title
LIMIT 5 OFFSET 5;