sql:基础总结
数据库:存储数据的仓库。sql语句作用就是为了操作数据库的数据,其操作分为:增删改查
注意事项:
1、标点符号用英文输入法
2、多个值或者多个字段间用逗号, 分隔
3、每个Sql语句用分号 ; 结尾
——增(创建表):
创建 表 表名 (
字段名 数据类型 是否为空 字段备注 , 字段名 数据类型 是否为空 字段备注 , 字段名 数据类型 是否为空 字段备注 );
create table `student` (
`id` int(11) not null auto_increment primary key comment '主键',
`studentNo` varchar(10) not null comment '学号',
`age` int(11) not null comment '年龄',
`address` varchar(50) default null comment '地址'
);
注:
数据类型:包含汉字(字符串)和数字(数值)两种,除数字以外都可以用字符串,字符串类型的值需要用 '单引号'
NOT NULL / NULL:代表字段的值是否可以为空null,NOT NULL代表不能为空,DEFAULT NULL代表默认为空null
auto_increment:代表这个字段的值不用管,自己会增长值,一般用在主键字段上
primary key :标识当前这个字段为主键,主键的作用是为了区分每行数据的
——增(新增数据):
插入 到 表名 值列表 (值1,值2,值3); --给所有字段赋值,除主键列(自动增长)
insert into student values ('001',18,'北京');
插入 到 表名 (字段列表) 值列表 (值1,值2,值3); -- 给指定字段赋值
insert into student (studentNo,age) values ('002',15);
注:
如果插入数据时给表中所有字段赋值,可以省略字段列表,值的顺序要和表中字段排列的数据一致
如果插入数据时给表中指定字段赋值,需要写上字段列表,值的顺序要和字段列表的顺序一致
值列表中,汉字(字符串)类型的要用 '单引号' ,数字(数值)类型的不用
多个字段和多个值用逗号 , 分隔
——删(删除表):
1、删表及数据:
删除 表 表名;
drop table student;
2、删所有数据,不能与where一起使用,不可以后悔(操作后不能恢复)
截断 (表) 表名;
truncate table student;
3、删指定数据,可以后悔(操作后能恢复)
删除 来自 表名 (条件);
delete from student where studentNo='001';
注:条件可选,不写条件是删除表中所有数据,写条件是删除符合条件的数据
——改(修改表):
修改 表名 设置 字段名=新值, 字段名=新值, 字段名=新值 (条件);
update student set -- 修改单个字段值
age=18
where studentNo='001';
update student set -- 修改多个字段值
age=18,
address='北京'
where studentNo='001';
注:
修改多个字段时,使用逗号 , 分隔
条件可选,不写条件是修改所有数据,写条件是修改符合条件的数据
——查(单表查询):
查询 字段列表 来自 表 (条件);
select * from student where studentNo='001'; -- 查询所有字段
select age,address from student where studentNo='002'; --查询指定字段
注:
字段列表为 * 时,代表查询表中所有字段。多个字段中间用逗号 , 分隔 (列)
条件可选,不写条件是查询所有数据,写条件是查询符合条件的数据 (行)
select与from关键词之间的 -- 限定列:
1、 * 号与字段列表
2、聚合函数:
count(字段名):统计记录数
sum(字段名):求字段的总和
max(字段名):求字段的最大值
min(字段名):求字段的最小值
avg(字段名):求字段的平均值
注:
count(*)是对行数目进行计数
count(字段名)是对字段中不为空的行进行计数
where后面的关键词 -- 限定行:
1、基础语法
where 字段名 符号 值; -- 基础语法
where 字段名 符号 值 and 字段名 符号 值; -- 多个条件同时满足:and 连接
where 字段名 符号 值 or 字段名 符号 值; -- 多个条件满足一个:or 连接
-- 查询年龄在15到17的学生;
where age >=15 and age <=17;
where age >14 and age <18;
where age =15 or age =16 or age =17;
2、范围查询
where 字段名 in (值1,值2,值3); -- 查询字段的值在括号中的
where 字段名 bweteen 值1 and 值2; -- 查询字段的值在值1与值2之间的
--查询年龄在15到17岁的学生;
where age in (15,16,17);
where age between 15 and 18;
3、分组
分组 根据 字段名
group by address;
注:分组的意思就是以哪个字段为单位去区分数据
4、排序
排序 根据 字段名 (排序方式);
order by age asc; -- 按年龄升序
order by age dese; -- 按年龄降序
注:
排序方式可选,不写默认为asc
根据哪个字段排序,字段名就写那个字段
5、分页
限制 数字;
limit n; -- 等价于 limt 0,n; 返回n条数据;
限制 从几开始,取几条数据(不包含x)
limit x,n; -- 返回从x+1开始,之后的n条数据
limit 1; -- 返回表中第1条数据
limit 5; -- 返回表中前5条数据
limit 1,3; --表中第2条数据开始,返回往后数3条内的数据
——查(单多表查询):
1、子查询:
有两个select关键词,第二查询语句需要用到第一个查询的返回结果
2、自连接查询: 一个表自己关联自己
3、多表连接查询:
全连接:inner join 取两个表的交集 --左右两表匹配上的数据
左连接:left join --左边所有数据+右表能与左表匹配上的数据
有连接:reight join --右表所有数据+左表能与右表匹配上的数据
△写sql语句方法总结:
1、先找关键词,搭好Sql的框架
新增/增加:表操作--create table,数据操作--insert table
删除:表操作--drop table,数据操作--truncate table 或 delete
修改/更新:数据操作--update
查询/查找:数据操作--select
2、区分哪些是条件
不分组条件关键词用where
分组后条件关键词用having
3、区分哪些是结果
聚合函数、字段列表或 *
——sql语句练习:
1、查询女学生人数; 查询 -- select 人数 -- count() ~结果 女生 -- sex ='女' ~条件 整理sql: select count(*) from student where sex='女'; 2、查询年龄最大的女生住址; 查询 -- select 年龄最大 -- max() ~条件 女生 -- sex ='女' ~条件 住址 -- address ~结果 整理sql: -- 1、按年龄倒序排序,第一条数据是年龄最大的 select address from student where sex ='女' order by age desc limit 1;
-- 2、子查询,先查询年龄最大的,然后查询年龄=最大的年龄 select address from student where age =(select max(age) from student where sex ='女');
-- 3、分组查询,按照性别分组,聚合匹配年龄=最大年龄 select address,sex from student group by sex having age=max(age);