7天学SQL

DAY1

什么是SQL?

SQL,全称Structure Query Language(结构化查询语言)

什么是数据库?

平时说到的数据库,一般是指关系型数据库Relational Database,数据库是用来存储大量数据的软件

SQL和数据库有何联系?

SQL是用来操作数据库中的数据的。如果把数据库比作盘子,数据就是盘子里的菜,而SQL就是筷子

什么是关系型数据库呢?

数据库由若干张表(Table)组成,表(Table)由行(rows)和列(Columns)组成。

一个表Table存储一个类别的数据,一行row代表一条数据,一列Column代表一个属性

SELECT简单查询

用法:

SELECT column1(列名),column2 ...

FROM table(表名)

如果想要查询所有列的数据,用(*)表示

SELECT * FROM table(表名)

例子

找到所有电影的名称?

SELECT title

FROM movies

找到所有电影的名称,Id和播放时长

SELECT title,Id,Length_minutes

FROM movies

简单条件查询

用法

SELECT column1(列名),column2 ...

FROM table(表名)

WHERE condition

AND/OR another_condition

例子:

找到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<=5;

找到2010(含)年之后的电影里片长小于两个小时的片子

SELECT *
FROM movies
WHERE Year>=2010
AND Length_minutes <120;

DAY2

复杂条件查询

LIKE(模糊查询):如果没有通配符等价于 =

%(通配符):匹配0个以上的字符"%(匹配的字符)%"

例子

找到所有Toy Story系列电影

SELECT *

FROM movies

WHERE Title

LIKE “%Toy Story%”

找到所有不是John Lasseter导演的电影

SELECT *
FROM movies
WHERE director
NOT LIKE "%John Lasseter%";

找到所有电影名为 “WALL-” 开头的电影

SELECT *
FROM movies
WHERE title
LIKE "%WALL-%";

查询结果过滤Filering和排序Sorting

DISTINCT去重

用法

SELECT DISTINCT column1,column2,...

FROM table

WHERE conditions;

ORDER BY结果排序

用法

SELECT column1,column2,...

FROM table

WHERE conditions

ORDER BY column ASC/DESC;

ASC(升序)、DESC(降序),升序降序按照的是文本的字母序

LIMIT/OFFSET选取部分结果

用法

SELECT column,another_column,...

FROM table

WHERE conditons

ORDER BY column ASC/DESC

LIMIT num_limit(返回多少行) OFFSET num_offset(从哪一行开始返回);

LIMIT/OFFSET选取结果通常和GROUP BY一起用,使用完ORDER BY排好序之后,进行结果选取

例子:

按导演名排重列出所有电影(只显示导演),并按导演名正序排列

SELECT DISTINCT Director
FROM movies
ORDER BY Director ASC;

列出按上映年份最新上线的4部电影

SELECT *
FROM Movies
ORDER BY Year DESC
LIMIT 4;

按电影名字母序升序排列,列出前6-10部电影

SELECT *

FROM movies

ORDER BY Title ASC l

LIMIT 5 OFFSET 5

如果按片长排列,John Lasseter导演导过片长第3长的电影是哪部,列出名字即可

SELECT title
FROM movies
WHERE director
LIKE "%John Lasseter%"
ORDER BY Length_minutes ASC
LIMIT 1 OFFSET 2;

列出美国United States人口3-4位的两个城市和他们的人口(包括所有字段)

SELECT *
FROM north_american_cities
WHERE Country
LIKE "%United States%"
ORDER BY Population DESC
LIMIT 2 OFFSET 2;

JOINS多表联合查询

在学习多表查询之前需要了解下范式,那什么是数据库范式呢?

数据库范式(normalization)是数据库表设计规范,在范式表的规范下,表中的重复数据减小,表与表之间的耦合度降低。随着表的分离,对表的操作难度也随之提升,需要更复杂的SQL语句。

用JOIN来实现多表联合查询

一般的关系表中,都会讲一个属性设置为主键(Primary Key),主键具有唯一标识一个数据的,不会重复。

借助主键(其他唯一的属性也可以)可以将两个表中具有相同主键的数据连接起来,具体我们用到 JOIN 关键字。我们先来学习 INNER JOIN

INNER JOIN用法:

SELECT column,another_column,...

FROM table

INNER JOIN another_table(要连接的表) ON table.id = another_table.id

WHERE conditions

ORDER column BY ASC/DESC

LIMIT nums_limit OFFSET nums_offset;

例子

找到所有电影的国内Domestic_sales和国际销售额

SELECT *
FROM movies
INNER JOIN Boxoffice
ON Boxoffice.movie_id = movies.id;

找到所有国际销售额比国内销售大的电影

SELECT *
FROM movies
INNER JOIN BoxOffice
ON BoxOffice.Movie_id = Movies.id
WHERE Domestic_sales <International_sales;

找出所有电影按市场占有率rating倒序排列

SELECT *
FROM movies
INNER JOIN BoxOffice
ON movies.id = BoxOffice.movie_id
ORDER BY rating DESC;

每部电影按国际销售额比较,排名最靠前的导演是谁,国际销量多少

SELECT Director,International_sales
FROM movies
INNER JOIN BoxOffice
ON movies.id = BoxOffice.movie_id
ORDER BY International_sales DESC
LIMIT 1;

INNER JOIN只会保留两者都存在的数据,这意味着可能存在数据丢失。

那如何避免查询两表的数据丢失呢?

那就要靠外连接了:左连接LEFT JOIN、右连接RIGHT JOIN、全连接FULL JOIN。这几个 连接方式都会保留不能匹配的行。

语法:

SELECT column,another_column,...

FROM table

INNER/LEFT/RIGHT/FULL JOIN another_table(要连接的表) ON table.id = another_table.id

WHERE conditions

ORDER column BY ASC/DESC

LIMIT nums_limit OFFSET nums_offset;

左连接LEFT JOIN不管有没有匹配上右表,都会保存左表数据;右连接RIGHT JOIN不管有没有匹配上左表,都会保存右表数据;全连接FULL JOIN,不管有没有匹配上,都会保留两表数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值