Sql分类详解及单表curd
2018-11-06 本文已影响0人
dev晴天
再次看下我们的知识架构
image.png补充:
我们要想操作数据库必须登录数据库软。登录数据库软件的方式有多种
- cmd窗口登录方式
- Mysql 命令行方式
-
图形化界面方式
图解:
登录mysql软件.png
一 数据定义语言-DDL
image.png1 操作数据库
- 数据库的创建
- 数据库的删除
- 数据库的修改
语法:
1 数据库的创建:
create database 数据库名
2 数据库的删除:
drop database 数据库名
3 数据库的修改
一般修改字符集,数据库名 作用不大。
ps:show databases 可查看当前所有的数据库名字
use 数据库名 可进入指定的数据库中
2 操作表
- 创建表
- 修改表
- 删除表
语法:
1 表的创建:
create table 表名(字段描述,字段描述);
字段描述:字段名 字段类型[约束条件]
注意:约束可以不写
例如创建学生(stu)表:
create table stu(id int primary key auto_increment,username varchar(20));
ps: show tables:查看当前数据库下面的所有表
desc 表名:查看表结构(也就是表的描述)
show create table 表名:查看建表语句(有时需要吧表拿来写个相似的,可以看过源码直接粘贴)
2 修改表
2.1修改表名:
alter table 表名 rename to 新表名
2.2表添加字段
alter table 表名 add 列名 字段描述
例如向stu添加pwd字段
alter table student1 add pwd varchar(20);
2.3修改字段名
alter table 表名 change 字段名称 新字段描述
例如吧stu表的pwd字段修改为password:
alter table stu change pwd password varchar(20);
注意:修改字段名时字段描述也可以改,如上代码varchar(20)
也可以写为 int(20),亦可以使用如下2.4代码修改
2.4修改字段描述
alter table 表名 modify 字段名称 字段类型[约束]
例如 alter table stu modify password int;
注意:这种方式不能修改字段名字 否则报错的
2.5删除字段
alter table 表名 drop 字段
例如删除stu表的 password字段:
alter table stu drop password;
收获感觉2.4的语法更灵活可以取代2.5的功能。
3 删除表:
drop table 表名;
二 数据操纵语言-DML
- 操作对象记录(行)
- 关键词: insert,update,delete
Demo表:
image.png
1 插入
语法1:insert into 表名 values(字段值1,字段值2.....);
注意:
默认给全部字段插入值(上表id,username,pwd字段)
必须保证values后面的值的类型和顺序与表结构中的一致
例如:上表的id int类型,username字符类型,pwd字符类型,则你插入 的值必须为 int ,字符,字符类型。
如向上表插入一些值:
insert into stu values(10,'kate','123');
注意:上表有三个字段 你value(xxx)xxx也要满足三个值,少一个就不行。
语法2(常用):
insert 表名 (字段1,字段2,...)values(值1,值2,...)
注意:
指定字段插入指定的值
必须保证values后面的值的类型和顺序与表结构中的一致
也就是如上表你要向id ,pwd 这两个字段插入值,则:
insert into stu(id,pwd) values(30,15); 只要类型一致就行,username没
插入数据,查询时显示null。(但是你指定两个字段此处你插入三个值或者插入一个就报错,还是少一个也不行)
2 修改
语法:
update 表名 set 字段名1=字段值1,字段名2= 字段名2...[where 条件]
例如 吧username为tom的用户名改为john
update stu set username = 'john' where username = 'tom';
注意:上代码如果不写where条件默认吧所有的用户名改为john
当然你也可以根据id改变name字段:
update stu set username = 'kate' where id = 10;吧id为10 的username 改
为kate
总结:修改就是修改字段值,根据某一字段值
3 删除
语法:
delete from 表名 [where 条件]
例如删除id为30 的 某项
delete from stu where id = 30;
则id为30 的某一相关信息都会删除。
三 数据查询语言-DQL(非官方叫法)
关键词:select
- 基本查询
- 基本条件查询
- 高级查询
完整的语法格式:
select 字段 from 表名 where条件 group by 分组字段 having 条件 order by 排序字段 ase|desc(增或者减顺序)
1基本查询:
1 简单的案例:查询表中所有字段信息
select * from products;
2 查看指定的字段信息
select 字段名1,字段名2,.... from table;
例如:
select pname from products;
3查询时还可以去掉重复的字段值:
例如
select distinct price from products;
(多个相同的price 只显示一个)
4 还可以在查询结果上进行运算(+ - * / 等),但是不会影响数据库中的值。
例如:将所有商品的价格+10元进行显示
select price+10 from products;
5 还可以给查询的结果起个别名
格式 字段名 别名
例如:select price+10 ‘新价格’ from products;
注意 新的字段名最好用字符形式(‘’)否则容易出错(比如新*价格就出错,不用‘’时)
注意:sql的语法 查询的结果是一张新表,显示给你看的。
2 基本条件查询
1 查询所有:
select * from 表名;
2 指定范围查询
例如:查询商品价格>60元的所有的商品信息:
select * from product where price>60;
3.模糊查询
模糊匹配 格式: 字段名 like "匹配规则"
匹配规则: 内容匹配"%"
数字匹配"_":_ 代表占个位
例如:"龙" 值为龙
"%龙" 值以龙结尾
"龙%" 值 以龙开头
"%龙%" 值 包含龙
案例 查询商品名称中包含”新”的商品:
select * from products where pname like "%新%";
4.查询价格为38,68,98的商品
or 或者in的用法
or: 或者
in:(a,b,c):满足 含有a,或者b 或者 c的。
and 并且
例如:
select * from products where price=38 or price=68 or price = 98;
select * from products where price in(38,68,98);
5 查询所有薪资在 50 -70之间的
select * from products where price between 50 and 70;
select * from products where price >=50 and price<=70 ;
小总结:
where后的条件写法:
> ,<,=,>=,<=,<>
like 使用占位符 _ 和 % _代表一个字符 %代表任意个字符.
in:在某个范围中获得值.(值不一定连续)
between num1 and num2 :代表在某一连续区间 例如[num1,num2]
3 高级查询
- 排序查询: order by
- 聚合函数 sum() avg() max() min() count()
- 分组:group by
案例驱动举例子:
1 排序查询
查询所有的商品,按价格进行排序.(asc-升序,desc-降序)
select * from products order by price desc;(降序)
查询名称有“新”的商品的信息并且按价格降序排序.
select * from products where pname like"%新%"order by price desc;
2 聚合函数
sum(字段)求和
avg(字段) 平均值
max(字段) 最大值
min(字段) 最小值
count(字段) 总数
round(数字,保留小数位数) 四舍五入
注意:
以前我们操作的都是行的数据,而聚合函数操作的是列的数据 并且返回
一个结果,但是聚合函数会忽略null的值。
获得所有商品的价格的总和:
select sum(price) from products ;
获得商品表中价格的平均数:
select round(avg(price),2) from products ;
获得商品表中有多少条记录(多少个字段)
select count(*) from products ;
3 分组
语法要求满足:在where的后面 在order by 前面
***一般分组伴随着聚合函数***
语法:
根据某字段分组,伴随聚合函数(一般分组都伴随聚合) from 表 group by 字段
select 字段,聚合函数 from table group by 字段
举个栗子:
根据cno字段分组,分组后统计商品的个数
select cno,count(cno) from products group by cno;
*******************************再举个重要的栗子******************************
根据cno分组,分组统计每组商品的总数量,并且总数量> 200;
select cno,sum(pnum) from products group by cno having sum(pnum)>200;
注意: where 与having 的区别:
where是对分组前的数据进行过滤 having是对分组后的数据进行过滤
where 后面不能使用聚合函数 having可以