MySQL数据库

-- 查询表结构
-- desc 表名称
USE mydb16_jdbc;
DESC student;

-- 修改数据类型
-- alter table 表名 modify 列名 新数据类型
-- 修改列名加数据类型
-- alter table 表名 change 列名 新列名 新数据类型
-- 修改表名
-- alter table 

-- 给指定列添加数据 insert into 表名(列名1,列名2,...) values(值1,值2...);

SELECT
	* 
FROM
	student;
	
-- 	修改数据 update 表名 set 列名1=值1,列名2=值2...where 

update student set age =26 where sname='宋江';
-- 注意:如果update语句没有加where条件,则会将表中所有数据都修改


-- 删除数据delete from 表名 WHERE
-- 注意:如果不加where,删除所有数据


-- 基础查询
-- 1查询所有数据尽量不要使用*

-- 2去除重复数据
select distinct age from student

-- 3起别名 as可以省略
select sname as 姓名 ,age as 年龄 from student;


-- 条件查询
-- 查询年龄在20到30之间的
select * from stu where age>20 && age<30;
select * from stu where age>20 and age<30;
select * from stu where age between 20 and 30;

-- 查询年龄不等于18岁的学生信息! <>
select * from student where age !=18;
select * from student where age <>18;

-- 查询年龄等于18 或者 26 或者28 的学生信息
select * from student where age =18 or age=26 or age=28;
select * from student where age in(18,26,28);

-- null的比较不能使用= !=,需用is null is not null


-- 模糊查询Like----
/*
通配符
(1)_代表当个任意字符
(2)%代表任意个字符
*/

-- 1.查询姓宋的人
select * from student where sname like '宋%';
-- 2.查询第二个字是江的
select * from student where sname like '_江%';
-- 3.查询名字中包含松的
select * from student where sname like '%松%';

select * from student order by age asc;-- -asc升 desc降

-- 查询学生信息,按照数学成绩降序排序,如果数学成绩一样,则按照英语成绩升序排序
select * from stu order by math desc,english asc;
-- 当多个排序条件,前一个一样时,才启用后一个


-- 聚合函数
/*
count():统计
max:最大值
min:最小值-- null不参与
sum:求和
avg:求平均值
*/
-- 1.统计班里有多少学生
select count(sid) from student; -- 不能为null


-- -分组函数
select 字段列表 from 列名 [where 分组前查询] group by 分组字段名 [having 分组后条件过滤]

-- 1.查询男女平均分
select sex ,avg(math) from stu group by sex;
-- 2.查询男同学和女同学各自的数学平均分,以及各自人数,要求,分数低于70分的不参与分组
select sex,avg(math),count(*) from stu where math>70 group by sex;
-- 3.查询男同学和女同学各自的数学平均分,以及各自人数,要求,分数低于70分的不参与分组
select sex,avg(math),count(*) from stu  group by sex having count(*) >2;


-- 分页查询
-- 1.从0开始,查询3条 sid 123
select * from student limit 0,3;
-- 2.查询第2页
select * from student limit 3,3;

-- 索引计算公式:(当前页码-1) *每页显示的条数

-- 约束
-- 唯一 unique ,主键非空且唯一

-- 外键
-- 员工表
create table emp(
	id int primary key auto_increment,
	name varchar(20),
	age int,
	dep_id int,
constraint fk_emp_dept foreign key (dep_id ) references dept(id)

);

-- 主表--先创建
create table dept(
	id int primary key auto_increment,
	dep_name varchar(20),
	addr varchar(20)
);

insert into dept(dep_name,addr) values('研发部','广州'),('销售部','深圳');

insert into emp(name,age,dep_id) values('张三',20,1),('李四',20,1),('王五',20,1),('赵六',20,2),('孙琪',20,2),('周八',20,2);

-- 删除外键
alter table emp drop foreign key fk_emp_dept;
-- 创建表后,添加外键
alter table emp add constraint fk_emp_dept foreign key(dep_id) references dep(id);


-- 数据库设计
-- 多对1:在多的一方加外键

-- 多对多:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
use mydb16_jdbc;
-- 订单表
create table tb_order(
	id int primary key auto_increment ,
	payment double(10,2),
	payment_type tinyint,
	status TINYINT
);

-- 商品表
create table tb_goods(
	id int primary key auto_increment ,
	title varchar(20),
	price double(10,2)
);

-- 订餐中间表
create table tb_order_goods(
	id int primary key auto_increment,
	order_id int,
	goods_id int,
	count int
);


-- 添加外键
alter table tb_order_goods add constraint fk_order_id foreign key (order_id) references tb_order(id);
alter table tb_order_goods add constraint fk_goods_id foreign key (goods_id) references tb_goods(id);


-- 一对一:在任意一方加入外键,并且设置外键唯一

-- 外键 ,unique 外键名(外键列1,外键列2)



-- 多表查询----
-- 笛卡尔积:取AB集合所有组合情况
-- 多表查询:从多张表查询数据

-- 隐式内连接
select * from emp,dept where emp.dep_id=dept.did;

-- 显式内连接-- inner可以省
select * from emp inner jOIN dept on emp.dep_id=dept.did;
select * from emp  JOIN dept on emp.dep_id=dept.did;

-- 左外连接--左表和交集
-- 拆线呢emp表所有数据和对应的部门信息
select * from emp left join dept on emp.dep_id=dept.id;
-- 右外连接--右表和交集
select * from emp right join dept on emp.dep_id=dept.id;


-- 子查询
-- 查询工资高于猪八戒的员工信息
select * from emp where salary>(select salary from emp where name='猪八戒');


-- 练习
-- 1.查询所有员工信息,查询员工编号,员工姓名,工资,职务名称,职务描述
SELECT
	a.id,
	a.ename,
	a.salary,
	b.jname,
	b.description 
FROM
	emp a,
	job b 
WHERE
	a.job_id = b.id;
	
select a.id,a.ename,a.salary,b.jname,b.description from emp join job on a.job=b.id;


-- de kaidanmu
-- 2.查询员工编号,员工姓名,工资,职位名称,植物描述,部门名称,工资等级
SELECT
	a.id,
	a.ename,
	a.salary,
	b.jname,
	b.description 
FROM
	emp a,
	job b ,
	dept c
WHERE
	a.job_id = b.id and a.dept_id=c.id ;
	-- **
SELECT
	a.id,
	a.ename,
	a.salary,
	b.jname,
	b.description 
FROM
	emp a
	JOIN job b ON a.job = b.id
	JOIN job c ON a.dept_id = c.id;

-- 3.查询工资姓名,工资,工资等级

-- 4.查询员工姓名,工资,职位名称,部门信息





-- 事务
use mydb16_jdbc;
drop table if exists account;
 
--  创建账户表
create table account(
	id int primary key auto_increment,
	name varchar(10),
	money double(10,2)
);


-- 添加数据
insert into account(name,money) values('张三',1000),('李四',1000);

select * from account;

-- 开启事务
 -- begin ;
update account set money =money-500 where name='李四';
-- 出错了...
update account set money=money+500 where name='张三';

-- 回滚事务
rollback;

-- 提交事务
commit;

-- 事务四大特征
/*
1.原子性:事务是不可分割的最小操作单元,要么同时成功,要么同时失败
2.一致性:事务完成时,必须使所有的数据都保持一致状态
3.隔离性:多个事务之间,操作的可见性
4.持久性:事务一旦提交或者回滚,它对数据库中的数据的改变就是永久的
*/

-- 事务:默认自动提交

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值