惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
C
Check Point Blog
GbyAI
GbyAI
博客园 - 司徒正美
爱范儿
爱范儿
N
Netflix TechBlog - Medium
H
Hacker News: Front Page
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Security Latest
Security Latest
C
Cyber Attacks, Cyber Crime and Cyber Security
博客园 - Franky
Recent Announcements
Recent Announcements
P
Privacy International News Feed
T
Tor Project blog
Y
Y Combinator Blog
有赞技术团队
有赞技术团队
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
G
GRAHAM CLULEY
The Hacker News
The Hacker News
N
News and Events Feed by Topic
I
Intezer
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
T
The Blog of Author Tim Ferriss
PCI Perspectives
PCI Perspectives
S
Secure Thoughts
P
Proofpoint News Feed
Microsoft Security Blog
Microsoft Security Blog
IT之家
IT之家
T
Threat Research - Cisco Blogs
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
D
DataBreaches.Net
Hacker News - Newest:
Hacker News - Newest: "LLM"
Last Week in AI
Last Week in AI
H
Help Net Security
L
LangChain Blog
大猫的无限游戏
大猫的无限游戏
Help Net Security
Help Net Security
S
Schneier on Security
T
The Exploit Database - CXSecurity.com
Google Online Security Blog
Google Online Security Blog
Cyberwarzone
Cyberwarzone
T
Tailwind CSS Blog
V
Vulnerabilities – Threatpost
Forbes - Security
Forbes - Security
Apple Machine Learning Research
Apple Machine Learning Research
O
OpenAI News
AWS News Blog
AWS News Blog
月光博客
月光博客

博客园 - herryLo

LangChainJs之基础模型(一) 什么是生成式AI 白嫖党体验Claude Code 关于Web GIS基础知识 直播流IOS无法播放问题排查 如何全方位提升博客站点? web前端pdf.js预览pdf实例创建报错:Array. prototype` contains unexpected enumerable properties Windows 10 专业版下推送docker镜像到harbor报错:x509: certificate relies on legacy Common Name field, use SANs instead A Philosophy of Software Design 软件设计哲学 浅读-《深入浅出Nodejs》 腾讯云对象存储 COS搭建个人网站 你知道,前端工程部署有哪些方式嘛? 2022前端开发知识总结归纳(前端掌握知识) 如何使用Docker构建前端项目 Rancher前端服务发布 Axios源码解析:请求响应拦截器 AntV G2可视化引擎, 有用过嘛? 弄懂!ES6中的Iterator迭代器 🔥[译] 正交设计组件的好处 GitHub Action一键部署配置,值得拥有 小程序开发指南之性能优化
知识扩展-SQL查询基础
herryLo · 2022-02-11 · via 博客园 - herryLo

由于公司项目原因,在生产项目中用到了SQL语句,尽管只是一些简单的查询语句,也算是自己前端生涯的技能拓展,所以专门对于SQL语句,作了一些基础练习。网上学习SQL语句教程非常的多,学习资料百度即可。作为一个SQL菜鸟,在这里分享,是为了巩固学习,希望可以帮助到大家。

SQL基础

SQL 是用于访问和处理数据库的标准的计算机语言。目前我接触的数据库有:MySQL、PostgreSQL、MongoDB,前两个是关系型数据库,后一个是非关系型数据库。它们给我的直观区别是:关系型支持SQL语句,非关系型不支持。MySQLPostgreSQL都是支持SQL语句的,这里需要一点前提知识。

  • 数据库: 数据库是一些关联表的集合
  • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格
  • 列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据
  • 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据
  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据,例如id

SQL查询

1. 如何进行数据表的查询?

// 获取数据表中具体那几列的数据
select column_name1, column_name2 from PERSONS

// 获取数据表全部的数据,*表示所有
select * from PERSONS

这个的PERSONS就是数据表,column_name1column_name2列的名称。

2. 如何进行数据表的过滤查询?

// 查询符合 name为liuheng 的数据
select * from PERSONS where name='liuheng';

// 查询符合 name为liuheng和liuheng1 的数据
select * from PERSONS where name='liuheng' and name='liuheng1';

// 查询符合 age大于20 的数据
select * from PERSONS where age > 20;

// 查询符合 age等于20,30 的数据
select * from PERSONS where age in (20, 30);

// 查询符合 name首字母为'l' 的数据
select * from PERSONS where name like 'l%';

// 查询符合 name尾字母为'1' 的数据
select * from PERSONS where name like '%1';

where 子句用于提取那些满足指定条件的记录。like 操作符用于在 WHERE 子句中搜索列中的指定模式。in 操作符允许在 WHERE 子句中规定多个值。

3. 如何多表查询数据?

// 查询PERSONS和DOGS两张表的全部数据
select * from PERSONS, DOGS;

select p.id, p.name, p.age, d.owner dog_name from PERSONS p, DOGS d;

以上sql语句即可进行多表查询,这样的多表查询又称笛卡尔查询,使用笛卡尔查询时要非常小心,由于结果集是目标表的行数乘积,对两个各自有100行记录的表进行笛卡尔查询将返回1万条记录,对两个各自有1万行记录的表进行笛卡尔查询将返回1亿条记录。(谨慎使用)

即使配合where语句也要慎用,因为FROM X,Y是先做笛卡尔乘积,WHERE 再从乘积后的表中选出指定列。

4. 有更好的多表查询方法嘛?—— 连接查询

连接查询分为三种:内查询 INNER JOIN、左查询 LEFT OUTER JOIN、右查询 RIGHT OUTER JOIN;
内查询语句如下:

// 内查询
select p.id, p.name, p.gender, p.age, d.name dog_name
from PERSONS p
inner join DOGS d
on s.name = d.owner;
  1. 确定主表,使用from <表1>的语法(这里的表1 即可以是特定的表,也可以是(select * from ROBOTS;) 这样的语句);
  2. 确定需要连接的表,使用inner join <表2>的语法;
  3. 确定连接条件,使用ON;可选。可选加上where子句、order by等子句;

内查询主要用来查询两表都存在的记录:

5. 左查询和右查询?

左查询语句如下:

// 左查询
select p.id, p.name, p.gender, p.age, d.name dog_name
from PERSONS p
left join DOGS d
on s.name = d.owner;

left join等价于left outer join,左查询是选出左表存在的记录:

右查询语句如下:

// 右查询
select p.id, p.name, p.gender, p.age, d.name dog_name
from PERSONS p
right join DOGS d
on s.name = d.owner;

right join等价于right outer join,右查询是选出左表存在的记录:

6. SQL语句支持函数嘛?

sql是有内建函数,sql的内建函数可以极大便利开发者。

// 返回指定列的最大值
select MAX(age) from PERSONS;

// 返回表中的记录数
select COUNT(*) from PERSONS;

// 返回文本字段中值的长度
select LEN(name) from PERSONS;

// 返回指定的列中第一个记录的值
select FIRST(*) from PERSONS;

以上只是sql内建函数中的几个常用函数,还有更多的函数没有列出,例如:LAST、MIN、SUM、AVG等。

7.如何更新表数据或删除表数据?

// 更新表数据
update table_name set col1=values1, clo2=value2 where col3=value

// 删除表数据
delete from table_name where col=value;

建议对于数据表中的必要数据的删除只是标记删除,保存数据记录。

这次分享到此为止,由于自己也是菜鸟的原因,会持续学习sql,后续也会继续分享相关学习。