一,数据库的基本概念
数据库是用于存储和管理数据库的仓库,英文为database简称DB
数据库可以持久化存储数据,也方便管理数据和存储数据,使用同一的方式操作数据库比如sql类型的
二,sql语句
1,数据库的关系介绍
数据库是用来存储和管理数据的仓库,一个数据库中包含多个数据表
数据表:数据表是数据库中最重要的组成部分之一,它由纵向的列和横向的行组成,类似于excel表格一样,可以指定列名,数据类型和约束等,一个表中可以存储多条数据。
数据:想要永久化存储的数据
数据类型:
数值型:int ,double
字符型:varchar 可变长度类型
char 固定长度类型
日期型:
date 年月日
datetime 年月日时分秒 没有默认值是NULL
timestamp 年月日时分秒,如果不给值,默认会用当前系统之间作为值
2.SQL介绍
SQL全称为:Structured Query Language 结构化查询语言,定义了操作所有关系型数据库的规则。每一种数据库操作方式可能存在一些不一样的地方
SQL通用语法:SQL语句可以单行或者多行,以分号结尾, 可以使用空格和缩进来增强语句的可读性,mysql数据库不分大小写,数据库的注释当单行注释用:--注释内容 # 注释内容(mysql特有的),当多行注释的时候,使用/* 注释内容*/
3.DDL-操作数据库
R(Retrieve):查询
查询所有数据库
-- 查询所有的数据库
show databases;
查询某个数据库的创建语句
-- 查看mysql数据库的创建格式
show create database mysql;
C(create):创建
创建数据库
-- 创建一个数据库
creata database user;
创建数据库(判断如果不存在则创建)
-- 创建数据库(判断数据库是否存在,不存在则创建)
create database if not exists user;
创建数据库,并指定字符集
-- 创建数据库,并指定字符集utf8
create database user character set utf8;
-- 查看数据库的字符集
show create database user;
U(Update):修改
修改数据库的字符集
-- 修改数据库的字符集为utf8
alter database user character set utf8;
D(Delete):删除
删除数据库
-- 删除数据库
drop database user;
-- 删除不存在的数据库则会报错
删除数据库(判断,如果存在则删除)
-- 删除数据库(判断,如果存在则删除)
drop database user if exists user;
4.DDL-操作数据表
R(Retrieve):查询
查询数据库中所有的数据表
-- 查询数据库中的所有数据表
show tables;
查询表结构
-- 查询表结构
desc preson;
C(Create):创建
创建数据表
-- 标准语法
create table person(列名 数据类型, 列名 数据类型,……);
复制数据表
-- 复制数据表
create table person like person1;
U(Update):修改
修改表名
-- 修改表名
alter table person rename to person2;
添加一列
-- 给表添加一列
alter table person add color varchar(30);
修改列名称和数据类型
-- 将person中的id 修改为int
alter table person modify color int;
--将color 修改为address ,数据类型为varchar
alter table person change color address varchar(30);
删除列
-- 删除address列
alter table person drop address;
D(Delete):删除
删除数据表
-- 删除person表
drop table person;
删除数据表(判断,如果存在则删除)、
-- 删除preson表,如果存在则删除
drop table if exists person;
5, DML-INSERT语句
新增表数据语法
新增格式1:给指定列添加数据
-- 向peron 表中添加数据
insret into person (id, name) values (1, "tom");
-- 向指定的列添加数据
insert into person (name) values ("jeck");
新增格式2:默认给全部列添加数据
-- 默认给全部列添加数据
insert into person value (2, "rose");
新增格式3:批量添加数据
-- 批量添加数据
insert into person values (3, "n1"), (4, "n2");
-- 批量添加指定列数据
insert into person (id, name) values (5, "n3"), (6, "n4");
6,DML-UPDATE语句
修改表数据语法
-- 修改id 为1 的名字
update person set name = "n4" where id =1;
7,DML-DELETE语句
删除表数据
-- 删除person 表中的id 等于2的信息
delere from person where id=2
8,DQL-单表查询
查询语法
select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序limit 分页限定
查询全部
-- 查询person表所有的数据
select * from product;
查询部分
select name from person;
去除重复查询
-- 查询名字, 去除重复
select distinct name from person;
起别名
-- 给name 起别名
select name as 姓名 from person;
9.聚合函数
基本语法
select 聚合函数名;
count(列名): 统计数量
max (列名):最大值
min(列名): 最小值
sum(列名): 求和
avg(列名) : 平均值
10,排序查询
排序语法
-- 按照id 升序排列
select * from person order by id asc;
-- 按照id 降序排列
select * from person order by id desc;
11.执行顺序
编写顺序:select … from …where …group by …having … order by … limit
执行顺序:from … where …group by … having … select … order by … limit
12.约束
主键约束
特点:
主键约束包含:非空唯一两个功能
一张表只能用一个列作为主键
主键一般用于表中数据的唯一标识
建表时添加约束
create table 表名(列名 数据类型 primary key; 列名 数据类型 ……);
删除主键
-- 删除主键
alter table id drop primary key;
建表后单独添加主键
-- 添加主键
alter table person modify id int primary key;
外键约束
让表和表之间产生关系,一张表关联另外一张表,保证数据的准确性
外键约束格式
constraint 外键名 foreign key (本表外键列名) refernces 主键名(主表主键名)
删除外键约束
-- 删除外键
alter table orderlist drop foreign key ou_fk1;
建表后添加外键约束
-- 标准语法
alter table 表名 add constraint 外键名 foreign key (本表的外键名) references 主表名(主键列名)
三, 多表查询
1,多表查询-笛卡尔积查询
由两张表,获取这两张表的所有组合情况
要完成多表查询,需要消除这些没用的数据
多表查询格式
笛卡尔积查询
-- 标准语法
select 列名 from 表1, 表2,……;
2, 多表查询-内连接查询
查询原理
内连接查询的是两张表有交集的部分数据(有主外键关联的数据)
显式内连接
-- 查询用户信息和对应的订单信息
select * from user inner join orderlist on user.id=orderlist, uid;
select * from user join orderlist on user.id=orderlist.uid;
3,多表查询-外连接查询
左外连接
查询原理
查询左表的全部数据,和左右两张表有交集的数据
右外连接
查询原理
查询右表的全部数据,和左右两张表有交集的数据
4,多表查询-子查询
子查询
查询语句中嵌套了查询语句,就成为子查询
子查询结果是单行单列的
可以作为条件,使用运算符判断
-- 查询年龄最高的用户姓名
select max(age) from user;
-- 查询出最高的年龄
select name ,age from user where age = 26;
-- 根据查询出来的最高年龄,查询姓名和年龄
SELECT NAME,age FROM USER WHERE age = (SELECT MAX(age) FROM USER);