《SQL必知必会》学习记录总结 1-5 课

87 阅读4分钟

做了两年 PM,每次拉数据都直接找开发,之前怕把数据库搞坏了。换了家公司,开启自力更生。

早上在地铁上,疯狂翻看《SQL必知必会》,其实看不太懂,一定要在 PC 端,边看边在数据库试验。

因为英文输入法、某个符号不知道怎么输入(" `) ,查询多次报错,幸好有 AI ,粘进去帮我改了,我再 copy 出来看看具体是哪里错了。

AI 还有一个不知疲倦的“逐词翻译”的功能,很好用,疯狂用。

奋发图强学习的原因还有一个原因是,昨天开发突然“水灵灵”地说没办法和我解释,我不懂业务也不懂代码怎么写…… 我剩下的就只有专业度,不带情绪地沟通技巧了hhhhhhhhh

学一下

初学者最佳打开模式 -- EXPLAIN

# 这是一条注释:先看单一表的表结构
EXPLAIN item  

输出的内容是 item 表里面的列名

基本规则

database数据库
table
column
row
primary key主键
SQL专门用来与数据库沟通的语言
syntax语法

检索 -- SELECT FROM

1、所需的列名写在 SELECT 关键字之后,FROM 关键字指出从哪个表中检索数据

SELECE  item_id
FROM item
iten id
95,684
188,429
5,244,533
5,903,092

2、形式变换

# 检索
SELECT item_id,user_id,create_time,PID,URL    --查找多列
FROM item

SELECT *                                      --查找所有列
FROM item

SELECT * -- 注释:学会加注释 英文下两个连字符,之后加空格
FROM item; -- 注释

# 多行注释
/* SELECT item_id,user_id,create_time,PID,URL    --查找多列
FROM item

SELECT *                                      --查找所有列
FROM item*/

SELECT * -- 注释:学会加注释 英文下两个连字符,之后加空格
FROM item; -- 注释

排序 -- ORDER BY

ORDER BY 子句取一个或多个列的名字,据此对输出进行排序。

# 排序
SELECT item_id, user_id, PID, URL
FROM item
ORDER BY user_id                   -- 按 user_id 排序
 
# 按多列排序
ORDER BY PID, user_id             -- 先按 PID 排序, 然后按 user_id 排序  ,能查出都买过同一pid商品的用户有哪些

# 按列位置排序
ORDER BY 32                     -- 先按 PID 排序, 然后按 user_id 排序  ,用数字代表列

# 指定排序方向
SELECT item_id, user_id, PID, unit_price
FROM item
ORDER BY 4 desc                    -- 先按 unit_price 排序,然后倒序,能查出 最高价商品

# 指定排序方向
SELECT item_id, user_id, PID, unit_price
FROM item
ORDER BY 4 desc ,2 desc                 -- 先按 unit_price 排序,然后倒序,能查出 最高价商品,user_id 默认降序排列,先看到新用户     
limit 100

# 指定排序方向
SELECT item_id, user_id, PID, unit_price
FROM item
ORDER BY 4 desc ,2                 -- 先按 unit_price 排序,然后倒序,能查出 最高价商品,user_id 默认升序排列 asc ,先看到老用户 
limit 100

过滤 -- WHERE

where子句操作符说明
=等于
<>不等于
!=不等于
<=小于等于
!<不小于
>=大于等于
!>不大于
BETWEEN在指定的两个值之间
IS NULL为空值
# 过滤
SELECT item_id, user_id, PID, unit_price
FROM item
WHERE user_id = 2252365
ORDER BY 4 desc           --按照价格降序排列
limit 100

# 高级过滤数据 -- AND
SELECT item_id, user_id, PID, unit_price
FROM item
WHERE user_id = 2252365 AND unit_price <10000   -- 用户购买<1w日元的商品
ORDER BY 4 desc 
limit 100

# 高级过滤数据据 -- or 
SELECT item_id, user_id, PID, unit_price
FROM item
WHERE user_id = 2252365 or unit_price <10000   -- 用户购买>1w日元的商品
ORDER BY 4 desc 
limit 100
# 高级过滤数据据 -- in 
SELECT item_id, user_id, PID, unit_price
FROM item
WHERE user_id in  (2252365 , 2226146)   -- 查两个用户购物记录
ORDER BY 4 desc 
limit 100

# 高级过滤数据据 -- or 
SELECT item_id, user_id, PID, unit_price
FROM item
WHERE user_id = 2252365 OR user_id = 2226146   -- 查两个用户购物记录
ORDER BY 4 desc 
limit 100

为什么要使用 IN 操作符?其优点如下。

  • 在有很多合法选项时,IN 操作符的语法更清楚,更直观。
  • 在与其他 AND 和 OR 操作符组合使用 IN 时,求值顺序更容易管理。
  • IN 操作符一般比一组 OR 操作符执行得更快(在上面这个合法选项很 少的例子中,你看不出性能差异)。
  • IN 的最大优点是可以包含其他 SELECT 语句,能够更动态地建立 WHERE 子句。
# 使用 not in,数字用英文 () 即可
# 高级过滤数据据 -- not in 
SELECT item_id, user_id, PID, unit_price
FROM item
WHERE user_id NOT IN (2252365,2226146)   -- 查除了这两个用户,其余所有用户的购物记录
ORDER BY 4 desc 
limit 100


# 使用 <>,数字要用英文引号隔开
# 高级过滤数据据 -- <> 
SELECT item_id, user_id, PID, unit_price
FROM item
WHERE user_id <> "2252365" "2226146"   -- 查除了这两个用户,其余所有用户的购物记录
ORDER BY 4 desc 
limit 100