🐼 什么是关系型数据?
🐼 常用的关系型数据库 Oracle mysql sqlserver postgre 非关系型数据
常用的非关系型数据库
Pycharm链接Mysql
sql 结构化查询语言(Structured Query Language)简称SQL
不同数据库厂商在标准SQL的基础上, 都会做一些微调
标准SQL 和 Mysql /Oracle SQL 大多数语句都是一样的, 但是有一些细节上的差别
1、数据定义语言:简称DDL(Data Definition Language)用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
2、数据操作语言:简称DML(Data Manipulation Language)用来对数据库中表的记录进行更新。关键字:insert,delete,update等
3、数据查询语言:简称DQL(Data Query Language)用来查询数据库中表的记录。关键字:select,from,where等
4、数据控制语言:简称DCL(Data Control Language)用来定义数据库的访问权限和安全级别,及创建用户。
DDL/DML/DQL 重点是查询语句 DQL
🐻 创建表
# 创建数据表 创建表的时候, 需要指定字段名字, 字段类型, 如果某些字段需要添加约束 在类型后面写约束的内容
create table category(
cid varchar(20) primary key not null ,
cname varchar(100)
);
🐻 查看表
desc 表名; # 查看表结构
show tables; # 查看当前数据库内所有的数据表
🐻 删除表
drop table 表名;
🐻 修改表
alter table 表名 add 字段名字 类型(长度) [约束]
alter table 表名 change 要修改的字段名字 要改成的字段名字 类型(长度) [约束]
alter table 表名 drop 字段名字
# 修改表名
格式:rename table 表名 to 新表名;
insert into 表名(字段1, 字段2...) values (值1, 值2 ....),(值1, 值2 ....)....
# 如果所有的字段都赋值了, 字段名字可以不写, 传入值的时候, 就按照所有字段的先后顺序传入
insert into 表名 values (值1, 值2 ....),(值1, 值2 ....)....
如果数据中有中文的内容, 最好在建数据库的时候, 就指定数据库的字符集charset=utf8 建数据库的时候指定好了中文字符集, 里面所有的数据表字段都是utf8的, 否则每次建表的时候都要单独指定
update 表名 set 字段名 = 值, 字段名= 值 ...
update category2 set cname = '家电'; # 不加条件, 整列值都修改成相同的
update category2 set cname='水果' where cid = 'c001'; # 加了条件只修改满足条件的记录
1、列名的类型与修改的值要一致. 2、修改值得时候不能超过最大长度. 3、除了数值类型外,其它的字段类型的值必须使用引号引起
delete from 表名 [where 条件]
delete from category2 # 删除表中所有数据
delete from category2 where cid='05'; # 删除 cid是05的数据
truncate category2; # 清空表
delete from category2 truncate category2 使用delete删除表记录时,主键自增序列不清零。使用truncate删除表记录时,主键自增序列清零。
建表的时候, 可以给字段添加约束信息, 用来对字段做一些限制
主键约束
primary key auto_increment
create table person2(
id int primary key auto_increment,
last_name varchar(100),
first_name varchar(100),
address varchar(100),
city varchar(100)
);
1)主键应当是对用户没有意义的 2)永远也不要更新主键。 3)主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。 4) 主键应当由计算机自动生成。
当字段为主键并自增的时候, 插入数据的时候, 可以不传这一列
insert into person2(first_name,last_name) values ('Bill','Gates');
如果只是声明了primary key 没有声明自动增长, 这列信息一定要传, 需要自己维护
insert into person(id,first_name,last_name) values (1,'Bill','Gates');
Not null
非空约束
create table person3(
id int primary key auto_increment,
last_name varchar(100) not null ,
first_name varchar(100),
address varchar(100),
city varchar(100)
);
unique
唯一约束
create table person4(
id int primary key auto_increment,
last_name varchar(100) unique,
first_name varchar(100),
address varchar(100),
city varchar(100)
);
default 默认值
create table person5(
id int primary key auto_increment,
last_name varchar(100) unique,
first_name varchar(100),
address varchar(100),
city varchar(100) default '北京'
);
比较查询
select * from product where pname='花花公子';
select * from product where price=800;
select * from product where price!=800;
select * from product where price<>800;
select * from product where price>60;
select * from product where price<800;
范围查询
select * from product where price between 200 and 1000;
select * from product where price in (200,800);
这里 in 不是范围, 而是两个具体的取值, 上面的sql语句只能查询出价格=200 价格=800的商品, 而不是0<价格<800
逻辑查询
select * from product where price >=200 and price<=1000;
select * from product where price =200 or price=800;
select * from product where not (price =800);
模糊查询
# 模糊查询
select * from product where pname like '香%';
select * from product where pname like '%想%';
% 通配符 这里可以代替0~多个字符 _ 代表一个字符 模糊查询遍历这列数据的所有行, 看字段是否满足传入的条件
非空查询
select * from product where category_id is Null;
select * from product where category_id is not null ;
查询结果排序 order by
select * from product order by price;
select * from product order by price ,category_id DESC ;
默认升序 ASC 降序 DESC 多字段排序, 当前面的字段排序的时候, 排序结果中有相同取值的时候, 后面排序的字段才能看到效果
count() 计数 NULL值会过滤
sum() 求和
avg() 求平均
min() 最小值
max() 最大值
# 聚合查询
# 查询所有商品的条目数
select count(*) from product;
select count(*) from product where category_id='c001';
# 查询类别是c002的所有商品价格的总和
select sum(price) from product where category_id='c002';
# 查询类别是c002的所有商品价格的平均值
select avg(price) from product where category_id='c003';
# 查询c003类别中商品价格最大值最小值
select MAX(price),MIN(price) from product where category_id='c003';
pycharm常用快捷键
shift + alt + ↑↓ 移动一行/多行代码
ctrl+D 复制代码
group by
# 统计各个分类商品的个数
select category_id,count(*) from product group by category_id;
# 统计各个分类商品的个数 , 且只显示个数大于1的类别
select category_id,count(*) from product group by category_id HAVING count(*)>1;
# 统计各个类别商品的平均价格
select category_id,avg(price) from product group by category_id;
select
category_id,
max(price)
from
product
group by
category_id;
1).having是在分组后对数据进行过滤,where是在分组前对数据进行过滤 2).having后面可以使用分组函数(统计函数),where后面不可以使用分组函数。
LIMIT M,N
select * from product LIMIT 0,5;
select * from product LIMIT 5,5;
select * from product LIMIT 10,5;
SQL语言
select 字段 from 表名 where 条件 group by 分组 having 分组之后条件
名称 | 符号 | 说明 |
---|---|---|
比较查询 | > < , <=, >= ,=, <> != | 大于、小于、大于(小于)等于、不等于 |
范围查询 | BETWEEN ...AND... | 显示在某一区间的值(含头含尾) [] |
IN(set) | 显示在in列表中的值,例:in(100,200) | |
模糊查询 | LIKE ‘张%’LIKE ‘%涛%’ | 模糊查询,Like语句中,%代表零个或多个任意字符,代表一个字符,例如:first_name like ‘a%’; |
非空查询 | IS NULL IS NOT NULL | 判断是否为空 |
逻辑查询 | and | 多个条件同时成立 |
or | 多个条件任一成立 | |
not | 不成立,例:where not(salary>100); |
约束 (了解)