表结构

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上映的电影
  1. 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反序

distinct 去重并返回唯一

结果排序】按导演名排重列出所有电影(只显示导演),并按导演名正序排列
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表所有数据