纯小白自学SQL,以下内容是在自学SQL学习时做的笔记。自我谨记:只是看明白了,可能是假象,一定要做题练习,有思考,有输出,才是学会了。
1. select 查询
- select 查询某些属性列(specific columns)的语法
SELECT column(列的名称),another_column,… FROM mytable(表的名称)
- select查询所有列
SELECT * FROM mytable(表名)
要添加没有的列 “内容” as 自定义列名称
SELECT id,title,'美国'as country FROM movies;
2.条件查询(constraints)
由于现实中,单单一列的数据可能有上万条,之前的SQL语句很可能运行时会崩溃。
所以我们只需要下载我们需要的数据就好了,为了更精确的查询出特定的数据,我们用下面这个SQL语法:SELECT 查询的WHERE 子句,其中,WHERE后加一个限定条件condition
条件查询语法 – WHERE
用来筛选数字类型的属性
SELECT column,another_column,… FROM mytable WHERE condition AND/OR another_condition AND/OR
注:condition描述属性列的
关键字 AND 和 OR 可以组装多个条件,
解释:
- =,!=,<,<=,>,>=一般在比较大小时使用
- between 一般用来确定的范围
- in 一般用来枚举
条件查询语法 – LIKE(模糊查询) 和 %(通配符)
SELECT * FROM movies where (title like 'Cars%' or title like 'Toy Story%') and year >=2000 and director = 'John Lasseter'
3.查询结果Filtering过滤和sorting排序
DISTINCT 关键字用来指定某个或某些属性列唯一返回(删除重复的行)。
选取出唯一的结果
SELECT DISTINCTcolumn,another_column,…
FROM mytable
WHERE condition(s);
GOURP BY 返回唯一的行,不过会对具有相同的属性值的行统计求和。
ORDER BY col_name 让结果按一个或多个属性列做排序
结果排序(ordered results)
SELECT column,another_column,…
FROM mytable
WHERE condition(s)
ORDER BY column ASC(升序)/DESC(降序);
LIMIT 和 OFFSET 子句通常和ORDER BY 语句一起使用
LIMIT 指定只返回多少行结果
OFFSET 指定从哪一行开始返回
limited查询
SELECT column,another_column,…
FROM mytable
WHERE condition(s)
ORDER BY column ASC/DESC
LIMIT num_limit OFFSET num_offset;
一般LIMIT和OFFSET在SQL的其他部分都执行完之后,再执行
- 按导演名字母升序,如果导演名相同按年份降序,取前10部电影给我
select * from movies
order by director asc,year desc #前面是按照director升序排列,逗号,后表示如果前面有相同的,按照year降序排列
limit 10 offset 0
- 列出所有在Chicago西部的城市,从西到东排序(包括所有字段),类似的,如果要求的某一条件也是表中的某一值,可以再次使用select语句调出
SELECT * FROM north_american_cities
where longitude <(select longitude from North_american_cities where city like "Chicago")
#括号中的数据是题中的要求,用select语句从表中调取
4.用JOINs进行多表联合查询
- 数据库范式(normalization)是数据表设计的规范,在范式规范下,数据库里每个表存储的重复数据降到最小,同时在数据库范式下,表和表之间不在有很强的数据耦合性,可以独立的增长。
- 主键(primary key) 是唯一标识一条数据的,不会重复。
- 借助主键(其他唯一性的属性也可以),我们可以把两个表中具有相同的主键ID的数据连接起来。用INNER JOIN连接。
用INNER JOIN连接表的语法
SELECT column,another_table_column,…