![01ef99f75d0e16ea8461649120124ed0.png](https://i-blog.csdnimg.cn/blog_migrate/7859ebd32e40876c1e1f99feab4d024f.jpeg)
前言
本篇文章的主要目的是帮助初学者快速入门SQL
查询,从而解决实际业务中80%
的SQL
查询问题。早先时候写给产品经理的女朋友用于取数写用户分析报告的,近期抽空补充了一些用例。
本文主要框架如下:
- 上篇:介绍
SQL
的语法顺序和执行顺序 - 中篇:介绍条件子句、分组查询和排序的细节
- 下篇:表的连接和其他常用关键字
希望学完这三篇后能助你系统地入门SQL
。
快速上手SQL的常用语法
1. 通过单表查询逐步理解SQL
语法
学生表student
结构:
![ffb8297407e312448be7e629c64162e3.png](https://i-blog.csdnimg.cn/blog_migrate/d314bc87285e824447cd46f02a58f745.jpeg)
先看一个查询例子:
查询表中所有学号小于
8
的男学生的学号和姓名:
select
sid, sname # 需要查询出来的字段
from student # 从哪张表中取数
where ssex = '男' and sid < 8 # 设置查询的条件, 两个条件用and(和)/or(或)连接
暂时我们没有对字段做处理,如果你需要对选择出来的结果进行处理,需要使用函数和order by
,再看一个例子:
查询每个男学生的学号、姓名和年龄,并按照学号降序排列
select
sid, sname
, (curdate())-year(sage) as age #当前年份减去出生年份得到年龄
from student
where ssex = '男'
order by sid desc # order by表示按照字段排序, desc表示降序
其他常用的函数和where
条件:
查询学号非空,姓“张”的学生,按照
sid
升序并取前三条
select
sid, sname
from student
where sname like '张%' # 通过like和通配符%进行模糊匹配
and sid is not null # 学号非空
order by sid
limit 3 # 只取前三条
2.多表查询
学生表student
:
![ffb8297407e312448be7e629c64162e3.png](https://i-blog.csdnimg.cn/blog_migrate/d314bc87285e824447cd46f02a58f745.jpeg)
成绩表sc
:
![0bfe2f85eb26049195867ff81ca0f469.png](https://i-blog.csdnimg.cn/blog_migrate/ef3e515d5243731b3ee7219438b7cc17.jpeg)
通过join
连接两张表:
查询赵雷每门课的成绩
select
sname, cid, score
from student
inner join sc
on student.sid = sc.sid # 两张表的连接条件,满足条件的两行会并为一行
where sc.sname = '赵雷'
本文用到数据库表
为方便学习,我们继续使用之前用到的学生表student
和成绩表sc
,为了模拟业务中复杂的查询任务,我们再引入课程表course
和教师表teacher
。
笔者寄语:熟练使用
SQL
的前提一定是先了解你的数据库表,现在花点时间看看这四张表的字段信息(描述每个字段的意义)和数据样例(给出部分真实数据),关于业务中用到的表结构可以找数据小哥拿。
1.字段信息
学生表:
Student(SId,Sname,Sage,Ssex)
SId 学生编号,Sname 学生姓名