数据库day_02

这篇博客涵盖了MySQL的基本操作,包括删除特定年龄范围内的学生记录,查看所有数据库,创建表结构,添加和删除列,以及更新商品信息。此外,还详细讲解了DQL查询,如单表查询、条件查询、排序、分组、模糊查询、去重及多表联查等,并探讨了主键和唯一约束、外键约束及其在实际应用中的问题。
摘要由CSDN通过智能技术生成

1.删除年龄在25到30之间的学生

delete from student where age between 25 and 30;
delete from student where age >=25 and age <= 30;

2.查看所有的数据库

show databases;

3.建表:id,name,price,type;

create table goods(
	gid int(10),
	gname varchar(20),
	price double(10,2),
	gtype varchar(20)
);

4.添加商品描述列

alter table goods add(detail varchar(20));

5.删除类型列

alter table goods drop gtype;

6.将id为2的商品名称修改为华为手机

update goods set gname='华为手机' where gid = 2;
复习:
DDL:
DML:
DQL:数据查询语言
编码格式:
set names gbk;
添加数据:
insert into 表名() values(),(),();
修改数据
update 表名 set 列名=值	where 条件;
删除:
delete from 表名 where 条件;
登录:
mysql -uroot -p密码
选择使用数据库:
use 库名;
查看所有表
show tables;
查看表结构:
desc 表名;

DQL:

单表简单查询:
1.查询所有数据:
select * from 表名;	*代表所有列,效率低;
select id,sname,age,sex from 表名;
2.条件查询:
查询所有的男生;
select * from student where sex='男';

查询已经成年的学生
select * from student where age >= 18;

查询姓名不为null的同学;
select * from student where sname is not null;

查询id是1,3,5,7,9的学生
select * from student where id in(1,3,5,7,9);
3.聚合查询:
查询最大的学生:
max(age):select max(age) from student;

查询最小的学生:
min(age):select min(age) from student;

平静年龄:
avg(age):select avg(age) from student;

总条数:
count(*):select count(*) from student;

有几个男生:
select count(*) from student where sex='男';

年龄总和:
sum(age):select sum(age) from student;
4.别名:as关键字可以省略不写
select sname as '姓名' from t_stu;
5.排序:null最为最小值存在的;
order by 默认是升序:asc 	
降序是desc;-->desc是关键字,不能作为列名,表名称存在;

根据id升序排序:
select * from t_stu order by id;
6.分组:group by;
性别分组:两组	男:10	女:10
select sex,count(*) from t_stu group by sex;

根据商品的类型分组:
select gtype,count(*) from goods group by gtype;
7.模糊查询:
like	: _代表一个字符	%代表多个字符
查询名字有两个字符构成的学生:
select * from t_stu where sname like '__';

查询名字中包含三的学生:
select * from t_stu where sname like '%三%'

查询姓张的学生;
select * from t_stu where same like '张%'
8.去重语句:distinct
select distinct age from t_stu;
9.多表联查,子查询–》建表约束;
建表约束:
	default:指定默认值
	unique:唯一约束,数据不能重复的,可以有null
	not null:非空,数据不能为null
	primary key:主键约束: unique+not null	数据不能重复。数据不能为null
	foreign key:外键,当两张表之间有关联关系时,需要建立外键

默认值约束:
	学生的性别默认值为男
	create table student(sid int(10),sname varchar(20),sex char(4) default '男');
	
唯一约束:
	sname是唯一的,不能重复的;
	create table student(sname varchar(20) unique);
非空约束:
	create table student(sname varchar(20) not null);
测试:
	desc student;

添加数据:
	不给性别赋值,查看该数据是否持有默认值
	不给sname赋值,查看是否可以为null,添加两条相同数据,查询是否可以执行;
	赋值为null,是否提示错误
主键约束:非空唯一的;
自然主键:
	和表记录相关的列就是自然主键:pname,sex
代理主键:
	和标记率相关性不大的列:pid

创建一个emp表:eid,ename,salary,age,sex;-->eid作为主键存在;
create table emp(eid int(10) primary key,ename varchar(20),salary double(10,2),age int(10),sex char(4));
主键约束和唯一约束的区别:
唯一约束允许有null值,数据保证唯一,不能重复
主键约束不允许为null,数据不能重复
primary key=not null +unnique;
处理主键不会重复的问题:
eid:int类型,如果不处理,需要录入数据的人员清楚记得哪些数据不曾被使用;

让mysql自己维护自己的主键:auto_increment	自增:每次+1;

create table emp(eid int(10) primary key auto_increment,ename varchar(20),salary double(10,2),age int(10),sex char(4));
建表后添加主键:alter table 表名 add primary key(主键列名);
外键约束:
foreign key :
班级表:cid,cname	--->cid
学生表:sid,sname,cid-->sid主键,cid外键

定义班级表:
	create table class(cid int(10) primary key auto_increment,cname varchar(20));
定义学生表:
	create table student(sid int(10)primary key auto_increment,sname varchar(20),cid int(10),
		foreign key(cid) references class(cid)
	 );

foreign key(cid) references class(cid):将当前表的cid作为外键,关联班级表的cid;
建立主外键关系:
添加数据:先添加班级,后添加学生:先有班级才能有学生
删除数据:先删除学生,后删除班级:想要取消一个班级,前提是该班没有学生;
修改数据:因为一端发生变化,另一端也需要变换,无法自动完成修改,失败;
删除表:先删除学生表,才能删除班级表;
主表和从表:
主表:自己的主键作为了外键的表:class
从表:将别人的主键作为自己的外键:student
如何解决那些问题?
级联操作:
	
create table student(sid int(10)primary key auto_increment,sname varchar(20),cid int(10),
		foreign key(cid) references class(cid) on delete cascade on update cascade
	 );
关联查询:
笛卡尔集:
	select * from student,class;--->两张表的条数相乘
where等值联查:92语法 习惯使用92语法
select * from student s,class c where s.cid = c.cid;

inner join on:内连接查询:99语法	建议使用
select * from student s inner join class c on s.cid = c.cid;

特点:
	只展示符合条件的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值