-- 查询表结构
-- 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.持久性:事务一旦提交或者回滚,它对数据库中的数据的改变就是永久的
*/
-- 事务:默认自动提交
MySQL数据库
于 2024-03-09 16:20:51 首次发布