sql 的分类: DDL: 数据定义语言 create drop alter DML: 数据操作语言 记录 DQL:数据查询语言 : 非官方的 查询语句 DCL:数据控制语言 : 事物,管理net start MySQLmysql -u用户名 -p密码DDL: 数据库定义语言 创建数据库: create database 数据库名称; 删除数据库:drop database 数据库名称; 常用命令: 查看所有数据库 : show databases; 切换或者使用数据库: user 数据库名称; 操作表: 创建表: create table 表名(字段描述,字段名称); 字段描述: 字段名称,字段类型 [约束 ] create table user ( id Int PRimary key auto_increment , username varchar(20) ) 查看所有表: show tables; 查看表结构: desc 表名; 看看建表语句: show create table 表名; 修改表名: alter table 表名(旧表名) rename to 表名(新表名); 添加字段: alter table 表名 add [column] 字段描述; 例如: alter table user add passWord varchaer(20); 修改字段名称: alter table 表名 change 字段名称(旧字段) 字段名称(新字段名称) 字段描述 修改字段描述: alter table 表名 modify 字段名称 字段类型 [约束] ; 删除字段: alter table 表名 drop 字段名; 删除表: drop table 表名;DML: 数据操作语言 关键字 insert update delete 注意: 若字段类型为数字,可以省略引号,尽量别省略 插入: insert into 表名 values(字段值1,字段值2,字段值n);--默认插入所有字段,必须保证value后的类型和顺序要与键表结构顺序一致 insert into 表名 (字段名,字段名) values(字段值,字段值);--插入指定的值, 必须保证和创表的类型与顺序一致 修改: update 表名 set 字段名=字段值, 字段名1=字段值 [条件查询] ; 删除: delete from 表名 【where】;DQL: 数据查询语言 select * form 表名 where group by having order by ase| desc select * from 表名; select 字段名1, 字段名2 from 表名; select distincet 字段名 from 表名 ; // distincet 去重的意思 可以在查询的结果上进行运算,但是不影响数据库里面的值 select 字段名 + 10 from 表名; 起别名(给列或者字段别名) select 字段名 + 10 新别名 from 表名; select 字段名 + 10 ’新别名‘ from 表名; select 字段名 + 10 ·新别名· from 表名; 条件查询 select *from 表名 where 字段名=value; select *form 表名 where 字段名 > 20; select * from 表名 where 字段名 like 匹配规则 匹配个数, 匹配内容 //模糊查询 select * from 表名 where 字段名 like ”__“ 占2个位置 select * from 表名 where 字段名 like %龙 select * from 表名 where 字段名 like 龙% select * from 表名 where 字段名 like %龙% select *form 表名 where 字段名 = 20 or 字段名 = 30 or 字段名=40; select *form 表名 where 字段名 in(20,30,40); select *form 表名 where 字段名 between 20 and 40; select *from 表名 order by 字段名 (asc升序, desc 降序) select * from 表名 where 字段名 like ”“ order by 聚合函数 (忽略null值) sum() avg() max() min() count() 获得总和 select sum(字段名) from 表; 获得平均数 select avg(字段名) form 表名; round 函数,四舍五入 select round(avg(字段名),2)from 表名; 计算 select count(*) form 表名 获得一共多少条记录 分组 在where 后面 order by前面 where 与 having区别 where 是分组前的数据进行过滤,后面不能使用聚合函数 having是分组后的数据进行过滤, 可以使用聚合函数 select 字段名, count(*) from 表名 group by 字段名 ; select 字段名, sum(字段名) from 表名 group by 字段名; select 字段名, sum(字段名) from 表名 group by 字段名 having > 200; 数据类型的问题 mysql java tinyInt byte smallInt short Int int bigInt long varchar varChar/char (varChar 可变长度 char不可变长度) int boolean float float double(5,2) double 注”:double(5,2) 改小数长度为5,小数占2位 date java.sql.Date time java.sql.Time timesTamp java.sql.timesTamp dateTime 日期加+时间 无 text (最大4g厂文件) java.sql.clob()存长文本 blob java.sql.blob() 存文二进制文件(电影)约束: 作用:为了保证数据的有效性与完整性 mysql常用约束: primary key 主键约束 unique 唯一约束 not null 非空 foreign key 外键约束 主键约束: 修饰过过的字段唯一非空,一张表只能有一个主键,这个主键可以保函多个字段 方式1: 键表的同时添加约束 字段名称 字段类型 primary key 方式2: 键表的同时在约束区域添加约束 primary key(字段1,字段2) creat table user ( id int, username varchar(20), primary key(id) ); 方式3: 添加完表之后,通过修改表结构,修改主键 alter table 表名 add primary key(字段名1,字段名2) (联合主键) 唯一约束: 被修饰过的字段唯一, 对null值不起作用 方式1: 键表的同时添加约束 字段名称 字段类型 unique 方式2: 键表的同时在约束区域添加约束 unique(字段1,字段2) creat table user ( id int, username varchar(20), unique(id) ); 方式3: 添加完表之后,通过修改表结构,修改主键 alter table 表名 add unique(字段名1,字段名2) (联合主键) 非空约束: 被修饰的字段非空 creat table user ( id int not null, username varchar(20), ); truncate: 清空表 格式: truncate 表名; //清空表,重新创建一张新表 delete 属于逐条删除 auto_increment : 要求, 被修饰的字段要满足自增,被修饰的字段必须是key,一般是primary key 多表操作 sql:举例操作:网上商城网上商城的实体: 1 用户 2 订单 3 商品 4分类 常见关系: 一对多关系: 用户和订单 分类和商品 多对多关系: 订单和商品 一对一关系: 丈夫和妻子 ER图,可以描述实体与实体的关系 一对多关系: 一称之为主表 多称之为 从表 会在多表一份添加一个字段,字段名称称之为主表_id 与主表的主键类型保持一致,我们称之为外键 用户和订单列表: 用户表: create table user( id int primary key auto_increment, userName varchar(20) ) 订单列表 create table orders( id int auto_increment, totlePrice double, user_id int, ) 添加外键约束:在多表的一方添加约束 alter table 多表名称 add foreign key (外键名称) reference 一表名称(主键) alter table orders add foreight key(user_id) reference user(id) 添加了外键之后又如下特点,主表中不能删除从表中已经引用的数据 ,从表中不能添加主表 中不存在的数据 多对多关系:商品和订单 create table orders( id int auto_increment, totlePrice double, user_id int, ) create table product( id int auto_increment, pname varchar(20) Price double, ) create table orderItem( oid int , pid int , ) 在开发中,我们一般引入中间表来表示他们的关系,在中间表中,存放2表的主键,然后一般还会将这个两个主键设置成中间表的联合主键,将多对多变为2个一对多,为了保证数据的一致性,在中间表上添加2个外键即可 alter table orderItem add foreign key(oid) reference orders(id)alter table orderItem add foreign key(pid) refence product(id)多表查询笛卡尔迪: 多张表无条件的联合查询,没有任何意义 select A表.* ,B表 from A表,B表;内连接 : 格式1: 显示的内连接 select A表.* , B表.* from A[inner] join B on AB的链接条件 格式2: 隐示的内连接 select A表.*, B表.* from A ,B where ab的链接条件 外链接 1 左外链接 select A表.*, B表.* from A表 left[outer] join B表 on 链接条件; 先展示join左边的表的所有数据,根据条件关联查询join 右边的表(b),符合条件的展示出来 不符合的null展示 2 右外链接 select A表.*, B表.* from B表 right [outer] join A表 on 链接条件 先展示join右边的数据,根据条件关联查询join左边的表的数据,符合条件的则展示,不符合 条件则以null显示 子查询例如:查询用户的订单,没有订单的用户不显示 隐示的内连接: select user.*, order.* from user, orders where user.id=orders.user_id;显示的内连接:select user.*, order.* from user join orders on user.id=orders.use.id;查询所有用户的订单详情左外连接: select user.*, order.* from user left join orders on user.id=orders.use.id;右外链接: select user.*, orders.* form orders join user on user.id=orders.use.id;子查询一个查询依赖与另一个查询 例如:查询用户为张三的详情 select *from orders where user_id = (select id from user where username = '张三'); 查询出订单价格大于300的用户信息 in 对应多个信息 select * from user where user_id in (select user_id from orders where totleprice > 300); 查询出订单价格大于300的订单信息及用户信息 as 给表起别名 //内链接 select user.*,order.* from user,orders where user.id = order.user_id and order.price > 300; //子查询 select user.* , tamp.* from user, (select *from order where pice > 300) as tamp where user.id=tamp.user_id