mysql创建数据库
drop database if exists myexp;-- 删除数据库 如果 发现
create database myexp;-- 创建数据库
use myexp;-- 使用数据库
create table students(
stuid int primary key, -- 约束输入不可以重复
stuname varchar(20),
stusex int not null, -- 约束不可以为空
birthday date
);
使用数据库(一些方法)
drop database if exists myexp;-- 删除数据库 如果 发现
create database myexp;-- 创建数据库
use myexp;-- 使用数据库
create table students(
stuid int,
stuname varchar(20),
birthday date
);
alter table students add genderint;-- 添加一列到表上
alter table students change gender sex char(2);-- 修改某列
alter table students drop sex;-- 删除列
drop table students;-- 删除表
insert into students(stuid,stuname,birthday) values(1,'zhangshan','2000-1-6')
-- 当确定好组后,直接插
insert into students values(4,'jdjf','2002-2-8');
insert into students values(5,'jdf','2021-4-6'),(6,'djflkd','2032-1-2')
-- 修改数据
undate students set stuname='zhangshanhjhfg' where stuid=1;
undate students set stuname='zs',birthday='1999-9-9' where stuid=1;
-- 删除
delete from students where stuid=1;
delete from students;
truncate students;-- 强制删除,永久
-- 查寻数据
select * from students;
select stuid,stuname, birthday from students;
主外键上约束
alter table 外键名 add constraint Fk_主键名_副键名
foregin key (外键列名) references 主表名(主键列名)
-- 约束用处:1. 限制插入或更新操作:如果在添加或更新学生表时,指定的课程ID在课程表中不存在,那么就会出现外键约束错误。-
2. 级联操作:如果在删除课程表中的一条记录时,与之关联的学生记录也会被删除,而且要先删外表。
注意:在同一MySQL虚拟机中只可以有一个外键约束
添加,修改某列
alter table students add genderint;-- 添加一列到表上
alter table students change gender sex char(2);-- 修改某列
alter table students drop sex;-- 删除列
drop table students;-- 删除表
insert into students(stuid,stuname,birthday) values(1,'zhangshan','2000-1-6')
-- 当确定好组后,直接插
undate students set stuname='zhangshanhjhfg' where stuid=1; -- 修改数据
undate students set stuname='zs',birthday='1999-9-9' where stuid=1;
删除
delete from students where stuid=1;
delete from students;
truncate students;-- 强制删除,永久
查寻数据
select * from students;
select stuid,stuname, birthday from students;
%作用:
我们将查找包含以test为开头的字符串的所有行。
SELECT * FROM table_name WHERE column_name LIKE 'test%';
如果要查找包含以特定字符结尾的字符串的行,则将%放在开头。
SELECT * FROM table_name WHERE column_name LIKE '%test';
给列起别名(也可以做引用)
select st.studentName,st.address,rt.examDate,rt.studentResult from student st cross join result re;
where查找数据
select studentResult studentName from result
(1)where studentResult>=80 and studentResult<90
(2)where studentResult between 80 and 90
(3)where studentReault=7(!=7)
(4)where studentName (not) link '李'
(5)where studentNo=1000 or studentNo=1009
(6)where studentNo (not) in (1000,1009,2000)
左右表提取数据
使用形式(及选择左右表格相同部分)
select from 顾客表 right join 订单表 on 顾客表.customid=订单表.customid
inner join on -- 提取左右表格指定相同的所有部分
left join on -- 提取左所有部分,和右表格指定相同的部分
right join on -- 提取右所有部分,和左表格指定相同的部分
cross join on -- 左边每一个和右边每一个相结合
full join on -- 左右一起提取出来,无的填null
-- 要应用两个表格必须两个表格有相同的数据,用on相连
排序
order by bornDate asc,loginPWd desc limit 0,3 -- 表示取前三
查找方法,如何使用
select st.studentNo ,st.studentName,subjectNo,r.studentResult
from student st inner join result r on st.studentNo = r.studentNo
where subjectNo=(select subjectNo from subject where subject.subjectName='C语言-1')
order by studentResult desc limit 5;
select a.studentNo,studentName,studentResult from
(select st.studentNo ,st.studentName,r.subjectNo,r.studentResult
from student st inner join result r on st.studentNo = r.studentNo ) a
where a.subjectNo=5 order by a.studentResult desc limit 5;
方法
ifnull(score,0) -- 判断是否有空,有的话填0
if(score is null ,0,score)
--判断条件并打印表格
case when score >=60 then '合格'
when score is null then '缺考'
else '不合格'
end score3 -- 输入表格名字
from abc
group by -- 分组
having count(条件)>=3 -- 去组(留下满足条件的)
where和having注意事项
where和having区别
唯一区别是为了区别where:其实是where只能跟着from后,having只能跟着group by后。
即:
having是对一个表的数据进行了分组之后,对“组信息”进行相应 条件筛选;
可见:
having筛选时,只能根据select子句中可出现的字段(数据)来进行条件设定。
having子句与where子句一样,都是用于条件判断的