SQL 基础+重点+难点操作

目录

一、数据库操作

1、查看所有数据库

2、查看当前使用的数据库

3、创建数据库

4、删除数据库

5、使用数据句库

6、查看数据库中所有表

二、表的操作

1、查看表

(1)、查看表结构

(2)、查看表的创建语句–详细过程

2、创建表结构的语法

3、修改表

(1)、修改表–添加字段

(2)、修改表–修改字段–重命名版

(3)、修改表–修改字段–不重命名

(4)、修改表–删除字段

4、删除表

三、对每一条数据的操作(重点)

1、查询

(1)、查询所有列

(2)、查询指定列

2、增加

(1)、全列插入

(2)、部分列插入

(3)、全列多行插入

(4)、部分列多行插入

3、修改

4、删除

四、关键字(重点)

1、as 关键字

(1)、使用 as 给字段起别名

(2)、可以通过 as 给表起别名

2、where 关键字——条件语句查询

3、like 关键字——模糊查询

五、运算符

1、比较运算符

2、逻辑运算符

六、范围查询(重点)

1、in

2、between … and …

七、空判断(重点)

1、判断为空 is null

2、判非空 is not null

八、排序 order by(难点🌟🌟)

九、分组 group by(难点🌟🌟🌟🌟)

十、分页 limit(重点)

十一、聚合函数

1、总数 count()

2、最大值 max()

3、最小值 min()

4、求和 sum()

5、平均值 avg()

十二、多表联查 join(难点 🌟🌟🌟🌟🌟)

1、简单的多表联查

2、内连接多表联查

3、左外连接多表联查

4、右外连接多表联查

5、全外连接多表联查

十三、子查询(难点🌟🌟🌟)

1、标量子查询

2、列级子查询

3、行级子查询


SQL 教程:分页查询 - 廖雪峰的官方网站

一、数据库操作

1、查看所有数据库

show databases;

2、查看当前使用的数据库

select database();

3、创建数据库

create databases 数据库名 charset=utf8;

4、删除数据库

drop database 数据库名

5、使用数据句库

use database 数据库名

6、查看数据库中所有表

show tables;

二、表的操作

1、查看表

(1)、查看表结构

desc 表名

(2)、查看表的创建语句–详细过程

show create table 表名

例如:

show create tabele students;

2、创建表结构的语法

create table table_name(字段名 数据类型 可选的约束条件);

例如:创建班级和学生表

create table classes(
    id int unsigned auto_increment primary key not null,
    name varchar(10)
);
create table students(
    id int unsigned primary key auto_increment not null,
    name varchar(20) default '',
    age tinyint unsigned default 0,
    height decimal(5,2),
    gender enum('男','女','人妖','保密'),
    cls_id int unsigned default 0
)

3、修改表

(1)、修改表–添加字段

alter table 表名 add 列名 类型

例如:

alter table students add birthday datetime;

(2)、修改表–修改字段–重命名版

alert table 表名 change 原名 新名 类型及约束

例如:

alter table syudents change birthday birth  datetime not null;

(3)、修改表–修改字段–不重命名

alter table 表名 modify 列名 类型及约束

例如:

alter table students modify birth date nout noll;

(4)、修改表–删除字段

alter table 表名 drop 列名

例如:

later table students drop birthday;

4、删除表

drop table 表名

例如:

drop table students;

三、对每一条数据的操作(重点)

1、查询

(1)、查询所有列

select * from 表名
例:
select * from classes;

(2)、查询指定列

select 列1,列2,...from 表名;
例:
select id,name from classes;

2、增加

说明:主键列是自动增长,但是在全列插入时需要占位,通常使用空值(0或者null) ; 字段默认值 default 来占位,插入成功后以实际数据为准

(1)、全列插入

全列插入:值的顺序与表结构字段的顺序完全一一对应
此时 字段名列表不用填写

insert into 表名 values (...)
例:
insert into students values(0,’郭靖‘,1,'蒙古','2016-1-2');

(2)、部分列插入

部分列插入:值的顺序与给出的列顺序对应
此时需要根据实际的数据的特点 填写对应字段列表

insert into 表名 (列1,...) values(值1,...)
例:
insert into students(name,hometown,birthday) values('黄蓉','桃花岛','2016-3-2');

上面的语句一次可以向表中插入一行数据,还可以一次性插入多行数据,这样可以减少与数据库的通信

(3)、全列多行插入

insert into 表名 values(...),(...)...;
例:
insert into classes values(0,'python1'),(0,'python2');

(4)、部分列多行插入

insert into 表名(列1,...) values(值1,...),(值1,...)...;
例:
insert into students(name) values('杨康'),('杨过'),('小龙女');

3、修改

update 表名 set 列1=值1,列2=值2... where 条件
例:
update students set gender=0,hometown='北京' where id=5;

4、删除

delete from 表名 where 条件
例:
delete from students where id=5;

逻辑删除,本质就是修改操作

update students set isdelete=1 where id=1;

四、关键字(重点)

1、as 关键字

as 关键字用来起别名,可省略。

(1)、使用 as 给字段起别名

select id as 序号, name as 名字, gender as 性别 from students;

(2)、可以通过 as 给表起别名

select s.id,s.name,s.gender from students as s;

2、where 关键字——条件语句查询

where 后面支持多种运算符,进行条件的处理。

  • 比较运算符
  • 逻辑运算符
  • 模糊查询
  • 范围查询
  • 空判断

3、like 关键字——模糊查询

  • %表示任意多个任意字符
  • _表示一个任意字符

例1:查询姓黄的学生

select * from students where name like '黄%';

例2:查询姓黄并且“名”是一个字的学生

select * from students where name like '黄_';

例3:查询姓黄或叫靖的学生

select * from students where name like '黄%' or name like '%靖';

五、运算符

优先级:

  • 由高到低的顺序为:小括号,not,比较运算符。
  • 逻辑运算符and比or先运算,如果同时出现并希望先算or,需要结合()使用。

1、比较运算符

  • 等于: =
  • 大于: >
  • 大于等于: >=
  • 小于: <
  • 小于等于: <=
  • 不等于: != 或 <>

例1:查询编号大于3的学生

select * from students where id > 3;

例2:查询编号不大于4的学生

select * from students where id <= 4;

例3:查询姓名不是“黄蓉”的学生

select * from students where name != '黄蓉';

例4:查询没被删除的学生

select * from students where is_delete=0;

2、逻辑运算符

  • and
  • or
  • not

关系型运算符的优先级高到低为:not > and > or

【拓展】:可以用“()”来改变执行顺序。

例1:查询编号大于3的女同学

select * from students where id > 3 and gender=0;

例2:查询编号小于4或没被删除的学生

select * from students where id < 4 or is_delete=0;

六、范围查询(重点)

范围查询分为连续范围查询和非连续范围查询

1、in

in 表示在一个非连续的范围内

例1:查询编号是1或3或8的学生

select * from students where id in(1,3,8);

2、between … and …

between … and …表示在一个连续的范围内

例2:查询编号为3至8的学生

select * from students where id between 3 and 8;

例3:查询编号是3至8的男生

select * from students where (id between 3 and 8) and gender=1;

七、空判断(重点)

1、判断为空 is null

例如:查询没有填写身高的学生

select * from students where height is null;

注意: null与''是不同的。

2、判非空 is not null

例1:查询填写了身高的学生

select * from students where height is not null;

例2:查询填写了身高的男生

select * from students where height is not null and gender=1;

八、排序 order by(难点🌟🌟

排序查询语法:

select * from 表名 order by 列1 asc|desc [,列2 asc|desc,...]

语法说明:

  • 将行数据按照列1进行排序,如果某些行 列1 的值相同时,则按照 列2 排序,以此类推。
  • ASC 从小到大排列,即升序。
  • DESC 从大到小排序,即降序。
  • 默认按照 ASC 排序。

例1:查询未删除男生信息,按学号降序

select * from students where gender=1 and is_delete=0 order by id desc;

例2:查询未删除学生信息,按名称升序

select * from students where is_delete=0 order by name;

例3:显示所有的学生信息,先按照年龄从大–>小排序,当年龄相同时 按照身高从高–>矮排序

select * from students  order by age desc,height desc;

九、分组 group by(难点🌟🌟🌟🌟

group by

在这里插入图片描述

在这里插入图片描述

group by + group_concat()

group_concat(字段名)根据分组结果,使用group_concat()来放置每一个分组中某字段的集合
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

group by + 聚合函数

通过group_concat()的启发,我们既然可以统计出每个分组的某字段的值的集合,那么我们也可以通过集合函数来对这个值的集合做一些操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

group by + having

having 条件表达式:用来过滤分组结果
having作用和where类似,但having只能用于group by 而where是用来过滤表数据
在这里插入图片描述

group by + with rollup

with rollup的作用是:在最后新增一行,来记录当前表中该字段对应的操作结果,一般是汇总结果。
在这里插入图片描述
在这里插入图片描述

十、分页 limit(重点)

select * from 表名 limit start=0,count

说明
从start开始,获取count条数据
start默认值为0
也就是当用户需要获取数据的前n条的时候可以直接写上 xxx limit n;
例1:查询前3行男生信息

select * from students where gender=1 limit 0,3;

关于分页的一个有趣的推导公式

已知:每页显示m条数据,当前显示第n页

求总页数:此段逻辑后面会在python项目中实现

查询总条数p1
使用p1除以m得到p2
如果整除则p2为总数页
如果不整除则p2+1为总页数
获取第n页的数据的SQL语句求解思路

第n页前有n-1页
所在第n页前已经显示的数据的总量是(n-1)*m
由于数据的下标从0开始 所以第n页前所有的网页的下标是0,1,…,(n-1)*m-1
所以第n页的数据起始下标是(n-1)*m
获取第n页数据的SQL语句

select * from students where is_delete=0 limit (n-1)*m,m

注意:在sql语句中limit后不可以直接加公式

十一、聚合函数

更多 SQL 函数请戳这里:SQL 函数 | 菜鸟教程

1、总数 count()

count(*) 表示计算总行数,括号中写星与列名,结果是相同的
例1:查询学生总数

select count(*) from students;

2、最大值 max()

max(列) 表示求此列的最大值

例2:查询女生的编号最大值

select max(id) from students where gender=2;

3、最小值 min()

min(列) 表示求此列的最小值

例3:查询未删除的学生最小编号

select min(id) from students where is_delete=0;

4、求和 sum()

sum(列) 表示求此列的和

例4:查询男生的总年龄

select sum(age) from students where gender=1;

– 平均年龄

select sum(age)/count(*) from students where gender=1;

5、平均值 avg()

avg(列) 表示求此列的平均值

例5:查询未删除女生的编号平均值

select avg(id) from students where is_delete=0 and gender=2;

十二、多表联查 join(难点 🌟🌟🌟🌟🌟)

  • 内连接:inner join ... on ... 只返回两个数据集合之间匹配关系的行—— 如果表中有至少一个匹配,则返回行。
  • 外连接:(outer可省略) 
    • 左外连接:left join ... on ... 结果集包括左表的所有行—— 即使右表中没有匹配,也从左表返回所有的行。
    • 右外连接:right join ... on ... 结果集包括右表的所有行—— 即使左表中没有匹配,也从右表返回所有的行。
    • 全外连接:full join ... on ... 返回左表和右表中的所有行—— 只要其中一个表中存在匹配,就返回行。

注意 JOIN 查询的使用思路是:

  1. 先确定主表,仍然使用FROM <表1>的语法;
  2. 再确定需要连接的表,使用INNER JOIN <表2>的语法;
  3. 然后确定连接条件,使用ON <条件...>;
  4. 可选:加上WHERE子句、ORDER BY等子句。

1、简单的多表联查

简单的多表联查不使用 join 关键字。

SELECT
    s.id sid,
    s.name,
    s.gender,
    s.score,
    c.id cid,
    c.name cname
FROM students s, classes c
WHERE s.gender = 'M' AND c.id = 1;

2、内连接多表联查

例1:使用内连接查询班级表与学生表

select * from students inner join classes on students.cls_id = classes.id;

例2:查询学生姓名及班级名称

select s.name,c.name from students as s inner join classes as c on s.cls_id = c.id;

3、左外连接多表联查

例如:使用左连接查询班级表与学生表
此处使用了as为表起别名,目的是编写简单

select * from students as s left join classes as c on s.cls_id = c.id;

4、右外连接多表联查

例如:使用右连接查询班级表与学生表

select * from students as s right join classes as c on s.cls_id = c.id;

5、全外连接多表联查

例如:使用全连接查询班级表与学生表

SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
FULL OUTER JOIN classes c
ON s.class_id = c.id;

十三、子查询(难点🌟🌟🌟

在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句,外部那个select语句则称为主查询。
主查询和子查询的关系:

  • 子查询是嵌入到主查询中
  • 子查询是辅助主查询的,要么充当条件,要么充当数据源
  • 子查询是可以独立存在的语句,是一条完整的 select 语句

1、标量子查询

查询班级学生平均年龄
查询大于平均年龄的学生
查询班级学生的平均身高

select * from students where age > (select avg(age) from students);

2、列级子查询

查询还有学生在班的所有班级名字
找出学生表中所有的班级 id
找出班级表中对应的名字

select name from classes where id in (select cls_id from students);

3、行级子查询

需求: 查找班级年龄最大,身高最高的学生
行元素: 将多个字段合成一个行元素,在行级子查询中会使用到行元素

select * from students where (height,age) = (select max(height),max(age) from students);

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server是一种关系数据库管理系统,用于存储和管理数据。JSP(Java Server Pages)是一种用于创建动态网页的Java技术,而Servlet是一种服务器端的Java程序,用于处理客户端请求并生成响应。将这三者结合起来,可以构建一个班级管理系统,用于管理学生和课程信息。 在这个系统中,可以使用SQL Server来存储学生和课程的相关信息,包括学生的姓名、年龄、性别等个人信息,课程的名称、授课教师、上课时间等课程信息。通过JSP和Servlet,可以创建一个用户界面,包括登录管理、学生信息管理、课程信息管理等功能。学生可以登录系统查看自己的个人信息和选课情况,管理员可以登录系统管理学生和课程的信息。通过与SQL Server的交互,可以实现对班级管理系统数据的增删改查操作,从而实现对学生和课程信息的有效管理。 在系统开发的过程中,需要设计数据库表结构、编写JSP页面和Servlet程序,并确保它们与SQL Server数据库的连接和交互正常。此外,还需要考虑系统的安全性和性能等方面的问题,确保班级管理系统能够稳定运行并满足用户的需求。 综上所述,SQL Server、JSP和Servlet可以结合起来构建一个功能完善的班级管理系统,用于对学生和课程的信息进行有效管理和交互。这种系统能够提高班级管理的效率和便利性,为学生和教师提供更好的服务和支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值