目录
从简单的查询开始学

这是一张名为movies的表
初体验
小练习
--查看表格的所有信息
SELECT * FROM movies;
--查看所有电影标题
SELECT title FROM movies;
--查看表格前4条信息
SELECT * FROM movies WHERE Id < 5;
--查看表格中前四条的电影名和导演
SELECT title,director FROM movies WHERE Id < 5;
--查看表格的总条数
SELECT count(*) FROM movies;
--直接使用SQL做计算题
SELECT 1 + 1
lesson1查询
语法:
SELECT 查询某些列
FROM 查询某些表
SELECT column(列名), another_column, …
FROM mytable(表名);
小练习
--找到所有电影的名称title
SELECT title FROM movies;
--找到所有电影的导演
SELECT director FROM movies;
--找到所有电影的名称和导演
SELECT title, director FROM movies;
--找到所有电影的名称和上映年份
SELECT title,year FROM movies;
--找到所有电影的所有信息
SELECT * FROM movies;
--找到所有电影的名称,Id和播放时长
SELECT title, Id, length_minutes FROM movies;
lesson2条件查询
语法:
SELECT 查询某些列
FROM 查询某些表
WHERE 查询条件
(1) 筛选数字类型的属性
| Operator(关键字) | Condition(意思) | SQL Example(例子) |
|---|---|---|
| =, !=, < <=, >, >= | 基础的 大于,等于等比较 | col_name != 4 |
| BETWEEN ... AND ... | 在两个数之间 | col_name BETWEEN 1.5 AND 10.5 |
| NOT BETWEEN ... AND ... | 不在两个数之间 | col_name NOT BETWEEN 1 AND 10 |
| IN (...) | 在其中某个列表 | col_name IN (2, 4, 6) |
| NOT IN (...) | 不在一个列表 | col_name NOT IN (1, 3, 5) |
(1) 筛选字符串类型的属性
| Operator(关键字) | Condition(意思) | SQL Example(例子) |
|---|---|---|
| = | 完全等于 | col_name = "abc" |
| != or <> | 不等于 | col_name != "abcd" |
| LIKE | 没有用通配符等价于 = | col_name LIKE "ABC" |
| NOT LIKE | 没有用通配符等价于 != | col_name NOT LIKE "ABCD" |
| % | 通配符,代表匹配0个以上的字符 | col_name LIKE "%AT%" (匹配 "AT", "ATTIC", "CAT", "BATS" 等) |
| _ | 和 % 相似,代表1个字符 | col_name LIKE "AN_" (匹配 "AND",不匹配 "AN") |
| IN (...) | 在列表 | col_name IN ("A", "B", "C") |
| NOT IN (...) | 不在列表 | col_name NOT IN ("D", "E", "F") |
SELECT column, another_column, …
FROM mytable
WHERE condition
AND/OR another_condition
AND/OR …;
小练习1--数字型
--找到id为6的电影
SELECT * FROM movies WHERE Id = 6;
--找到在2000-2010年间year上映的电影
SELECT * FROM movies WHERE year BETWEEN 2000 AND 2010;
--找到不是在2000-2010年间year上映的电影
SELECT * FROM movies WHERE year NOT BETWEEN 2000 AND 2010;
--找到头5部电影
SELECT * FROM movies WHERE Id < 6;
--找到2010(含)年之后的电影里片长小于两个小时的片子
SELECT * FROM movies WHERE year>= 2010 AND length_minutes < 120;
小练习2--字符型
--找到所有Toy Story系列电影
SELECT * from movies WHERE title LIKE "%Toy Story%";
--找到所有John Lasseter导演的电影
SELECT * FROM movies WHERE director = "John Lasseter";
--找到所有不是John Lasseter导演的电影
SELECT * FROM movies WHERE director NOT LIKE "John Lasseter";
--找到所有电影名为 "WALL-" 开头的电影
SELECT * FROM movies WHERE title LIKE "WALL-_";
--有一部98年电影中文名《虫虫危机》请给我找出来
SELECT * FROM movies WHERE year = 1998;
lesson3查询结果Filtering过滤和sorting排序
语法:
(1)DISTINCT
可能很多电影都是同一年Year发布的,如果你想要按年份排重,一年只能出现一部电影到结果中, 你可以用 DISTINCT 关键字来指定某个或某些属性列唯一返回。
SELECT DISTINCT column, another_column, …
FROM mytable
WHERE condition(s);
(2)GROUP BY
因为DISTINCT语法会直接删除重复的行, 我们还会学习GROUP BY语句,对具有相同的属性值的行做一些统计计算。
①ORDER BY col_name 排序的语法来让结果按一个或多个属性列做排序。让结果按照 col_name 列的具体值做 ASC升序 或 DESC 降序。
SELECT column, another_column, …
FROM mytable
WHERE condition(s)
ORDER BY column ASC/DESC;
②LIMIT 和 OFFSET子句通常和ORDER BY 语句一起使用,当我们对整个结果集排序之后,我们可以 LIMIT来指定只返回多少行结果 ,用 OFFSET来指定从哪一行开始返回。你可以想象一下从一条长绳子剪下一小段的过程,我们通过 OFFSET 指定从哪里开始剪,用 LIMIT 指定剪下多少长度。
SELECT column, another_column, …
FROM mytable
WHERE condition(s)
ORDER BY column ASC/DESC
LIMIT num_limit OFFSET num_offset;
小练习
--按导演名排重列出所有电影(只显示导演),并按导演名正序排列
SELECT DISTINCT director FROM movies ORDER BY director ASC;
--列出按上映年份最新上线的4部电影
SELECT * FROM movies ORDER BY year DESC LIMIT 4;
--按电影名字母序升序排列,列出前5部电影
SELECT * FROM movies ORDER BY title ASC LIMIT 5;
--按电影名字母序升序排列,列出上一题之后的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 LIMIT 1 OFFSET 2;
review---select复习
SELECT column, another_column, …
FROM mytable
WHERE condition(s)
ORDER BY column ASC/DESC
LIMIT num_limit OFFSET num_offset;
小练习

--列出所有加拿大人的Canadian信息(包括所有字段)
SELECT *
FROM North_american_cities
WHERE Country = "Canada";
--列出所有在Chicago西部的城市,从西到东排序(包括所有字段)Longitude经度(越小越靠西)
SELECT *
FROM North_american_cities
WHERE Longitude < -87.63
ORDER BY Longitude ASC;
--用人口数population排序,列出墨西哥Mexico最大的2个城市(包括所有字段)
SELECT *
FROM North_american_cities
WHERE Country LIKE "Mexico"
ORDER BY Population DESC
LIMIT 2
--列出美国United States人口3-4位的两个城市和他们的人口(包括所有字段)
SELECT *
FROM North_american_cities
WHERE Country LIKE "%United S_%"
ORDER BY Population DESC
LIMIT 2 OFFSET 2
待更新……
浙公网安备 33010602011771号