SQL学习笔记(一)

逻辑删除

所谓的逻辑删除其实并不是真正的删除,而是在表中将对应的是否删除标识或者字段做修改操作。在逻辑上数据是被删除的,但数据本身依然存在库中

例如
update students3 set isdelete=0
update students3 set isdelete=1 where id=1
select *from students3 where isdelete=0


1.设计表,给表添加一个字段isdelete,1代表删除,0代表没有被删除
2.把所有的数据isdelete改为0
3.要删除某一条数据时更新isdelete为1
4.当要查询数据时,只查询isdelete=0的数据

数据操作-查询

创建数据
create table students(
studentNo varchar(10) primary key,
name varchar(10),
sex varchar(1),
hometown varchar(20),
age tinyint(4),
class varchar(10),
card varchar(20)
)

插入数据

insert into students values
('001','王昭君','女','北京','20', '1班','340322199001247654'),
('002','诸葛亮','男','上海','19','2班','340322199002242354'),
('003','张飞','男','南京','24','3班','340322199003247654'),
('004','白起','男','安徽','22','4班','340322199005247654'),
('005','大乔','女','天津','19','3班', '340322199004247654'),
('006','孙尚香','女','河北','18','1班','340322199006247654'),
('007','百里玄策','男','南京','24','3班','340322199007247654'),
('008','小乔','女','河南','15','3班','340322199008247654'),
('009','百里守约','男', '湖南', '21','3班','340322199009247654'),
('010','妲己','女','广东','26','2班','340322199010247654'),
('011','礼拜','男','北京','30','4班','340322199011247654'),
('012','孙膑','男', '新疆','26','4班','340322199012247654');

查询所有列:select * from students

查询指定字段:select 列1,列2,… from 表名

使用as给字段起别名

select name as 姓名,sex as 性别,hometown as 家乡 from students

不会影响这个表(查询是不会影响表中的数据的),也可以给表起别名

去重distinct:重复的数据只显示一条

格式:select distinct 列1, … from 表名;

条件查询

比较运算符

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

例1

例2:查询20岁以下的学生
Select * from students where age<20;
例3:查询家乡不在北京的学生
Select * from students where hometown!= '北京';select * from students where hometown<>'北京'

逻辑运算 and or not



模糊查询

like、%表示任意多个任意字符、_表示一个任意字符



范围查询

n表示一个非连续的范围内
例1:查询家乡是北京或上海或广东的学生
select * from students where hometow='北京' or hometow= '上海' or hometow=''广东)
select * from students where hometown in('北京', '上海', ''广东)
Between…and…表示在一个连续的范围内
例2:查询年龄为18至20的学生。
select * from students whereage>18 and age<20
select * from students whereage between 18 and 20

空判断null

is null 是空,没有填写,''是空字符串,有填写
select * from students where card is null
is not null 判非空
select * from students where card is not null

排序

asc 升序,从小到大;desc 降序,从大到小
例1:查询所有学生信息,按照年龄从小到大排序。
Select * from students order by age
例2:查询所有学生信息,按年龄从大到小排序,年龄相同,再按学号从小到大排序
Select * from students order by age desc,studentNo asc

默认升序asc,可省略不写

例:查询所有学生信息,按照学生姓名顺序排序
select * from students order by convert(name using gbk)
因为选的是utf-8编码,姓名是中文需要改编码后进行排序

聚合函数,一般用来统计数据,聚合函数不能在where中使用

Count()表示计算总行数,括号中写与列名,结果是相同的
Max(列)表示求此列最大值
Min(列)表示求此列最小值
Sum(列)表示求此列的和
Avg(列)表示求此列的平均值

分组

语法:select 列1,列2,聚合…from 表名group by 列1,列2…
例1:查询各种性别的人数。
Select sex,count() from students group by sex;
例2:查询各种年龄的人数。
Select age,count(
) from students group up age;
group by 也有去重的作用

分组过滤

语法:select 列1,列2,聚合... from 表名 group by 列1,列2,列3,…having 列1,…聚合…

having必须跟在group by 后

先过滤再分组或先分组再过滤
Where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
Having是对group by的结果进行筛选

分页(获取部分行)

语法:select * from 表名limit start,count
从start开始,获取count条数据,索引从0开始

posted @ 2019-10-19 21:21  cielpupu  阅读(203)  评论(0编辑  收藏  举报