表结构
| Id | Title | Director | Year | Length_minutes |
|---|---|---|---|---|
| 1 | Toy Story | John Lasseter | 1995 | 81 |
| 2 | A Bug’s Life | John Lasseter | 1998 | 95 |
| 3 | Toy Story 2 | John Lasseter | 1999 | 93 |
| 4 | Monsters, Inc. | Pete Docter | 2001 | 92 |
| 5 | Finding Nemo | Finding Nemo | 2003 | 107 |
| 6 | The Incredibles | Brad Bird | 2004 | 116 |
| 7 | Cars | John Lasseter | 2006 | 117 |
| 8 | Ratatouille | Brad Bird | 2007 | 115 |
| 9 | WALL-E | Andrew Stanton | 2008 | 104 |
| 10 | Up | Pete Docter | 2009 | 101 |
betwenn/not betwenn
找到不在2000-2010年间year上映的电影
SELECT * FROM Movies where year not between 2000 and 2010
AND
找到2010(含)年之后的电影里片长小于两个小时的片子
SELECT * from movies where Length_minutes <120 and year >=2010
Like / not like
找到所有Toy Story系列电影
Select * from movies where Title LIKE "%Toy%"
DISTINCT 去重 Order by ASC正序 DESC反序
结果排序】按导演名排重列出所有电影(只显示导演),并按导演名正序排列
SELECT DISTINCT Director FROM movies order by Director ASC
LIMIT 指定返回多少行结果
【结果排序】列出按上映年份最新上线的4部电影 ✓
SELECT * FROM movies order by year DESC LIMIT 4
OFFSET 从某行切断 一般与LIMIT一起
【结果排序】按电影名字母序升序排列,列出上一题之后的5部电影 ✓
SELECT * FROM movies order by Title ASC limit 5 offset 5
【结果排序】如果按片长排列,John Lasseter导演导过片长第3长的电影是哪部,列出名字即可
SELECT Title FROM movies
where Director="John Lasseter" order by Length_minutes DESC
limit 1 offset 2
多表联合查询
语法
SELECT column, another_table_column, …
FROM mytable (主表)
INNER JOIN another_table (要连接的表)
ON mytable.id = another_table.id (想象一下刚才讲的主键连接,两个相同的连成1条)
WHERE condition(s)
ORDER BY column, … ASC/DESC
LIMIT num_limit OFFSET num_offset;
举例:
SELECT Distinct Director,International_sales //取导演和销量的去重
FROM movies //主表 :moies
INNER JOIN Boxoffice //连接表:Boxoffice
on Movies.id=Boxoffice.Movie_id //主键连接
order by International_sales DESC //销量排序
LIMIT 1 //返回第一行
外连接
语法
用LEFT/RIGHT/FULL JOINs 做多表查询
SELECT column, another_column, …
FROM mytable
INNER/LEFT/RIGHT/FULL JOIN another_table
ON mytable.id = another_table.matching_id
WHERE condition(s)
ORDER BY column, … ASC/DESC
LIMIT num_limit OFFSET num_offset;
- 左连接
保留所有主表内的数据,不管有没有匹配上B表的数据
- 右连接
保留所有B表内的数据,不管有没有匹配上A表的数据
- 全连接
保留AB表所有数据
