子查询
子查询就是从表中查出初步的条件后,再用这个作为条件再进行查询
28.子查询之单行单列查询 (使用= != > <判断)
1.先写出子查询的语句,2.再嵌套到大的查询语句里面,例子:查询比虞姬大的年龄都有哪些 ?
那就先查询出虞姬的年龄,再嵌套到查询全部人的年龄里面比较
格式为:
第一步select 对比的列名 from 表名 where 对比条件;
第二步select * from 表名 where 对比的列名 >(第一步的子查询);
select age from home where name = '虞姬';--为第二步做准备的 select * from home where age >(select age from home where name = '虞姬');--把第一步嵌套到括号里面
运行结果:
原表:
第一步:
最终步骤
29.子查询之多行单列查询 (使用in判断)
可以用来提取两个表中的两种列的信息,例子:查询表1中会舞剑的,在表2里面有几个
格式为:
select * from 表名2 where 表名2 in(select 根据什么提取的列名 from 表名1 where 要提取的列名 ='列中具体信息' or 要提取的列名 ='列中具体信息');
select * from home where name in (select username from mm where hobby='舞剑');
运行结果(原图参考上一题):
30.子查询之多行多列查询(作为虚拟表)
可以用来提取两个表中都符合条件的两个列信息,例子:根据id,提取出表中在1955-3-7后出生的人
格式为:
select * from (select * from 表1的表名 where 表1的列名>'列名具体条件')表1的表名 ,表2的表名 where 表1的表名.列名=表2的表名.列名;
select * from (select * from home where hire_date>'1995-3-7')home ,mm where home.id=mm.id;
运行结果 :
三、增
1.直接创建一个数据库
格式为:create database 数据库名;
create database love;
2.先判断该数据库是否存在再创建
格式为: create database if not exists 数据库名;
create database if not exists dog;
3.创建一个表,里面设置3列标题(注意,建表之前要先指定用哪一个数据库)
解析,20代表username的这个字符数不能超过20,起到限制作用,其他的同理
mysql> create table people( -> id int, -> username varchar(20), -> password varchar(24) -> );
4.表中加添一列
格式为:alter table 表名 add 列名 数据类型;
alter table bb add pig int;
5.给表中添加数据
格式为:insert into 表名(列名1,列名2,.....)values(数据值1,数据值2,.....);
insert into mm(id,username,password,hobby) values(1,'张三','123456','踢足球');
6.给表中大批量添加数据
格式为:insert into 表名(列名1,列名2,.....)values(数据值1,数据值2,.....),(数据值1,数据值2,.....);
insert into mm(id,username,password,hobby) values(1,'张三','123456','打篮球'), (2,'李四','6668888','踢足球');
四、删
1.直接删除某个数据库。
格式为:drop database 要删除的数据库名;
drop database dog;
2.先判断该数据库是否存在,再执行删除。
格式为:drop database if exists 要删除的数据库名;
drop database if exists love;
3.删除表。
格式为:drop table 表名;
drop table people;
4. 先判断表是否存在再删除
格式为:drop table if exists 表名;
drop table if exists cc;
5.删除列
格式为:alter table 表名 drop 要删除的列名;
alter table bb drop dog;
6.删除表中的数据
格式为:delete from 表名 where 列名 = '列名对应条件';
delete from mm where password = '123456';
五、改
1.修改表名
格式为:alter table aa rename to 表名;
alter table aa rename to zz;
2.修改表中列的数据类型
格式为:alter table 表名 modify 列名 char(50);
alter table bb modify pig char(50);
3.修改列名和数据类型
格式为:alter table 表名 change 列名 新列名 新数据类型;
alter table bb change pig dog int;
4.修改数据内容
格式为: update 表名 set 列名 = '改后值' where 列名 = '列名对应数据';
update mm set username = '坏人' where id = '1';--判断条件设置不一样而已 update mm set username = '笨蛋' where hobby = '踢足球';---判断条件设置不一样而已
运行结果:
原:
第一次修改后:
第二次修改后:
六、其他操作
1.使用指定的数据库。
格式为:use 要使用的数据库;
use love;
七、约束
1.约束格式
需要什么约束就在什么列里面加上约束就好了
非空约束:not null
唯一约束:unique
主键约束:primary key
检查约束:check
默认约束:default
foreign key--这个是表和表之间连接使用的
格式为:创建列值 约束,
create table wz( id int primary key auto_increment,--非空且自增,非空是primary key 自增是auto_increment name varchar(20) not null,--非空 girlfriend varchar(30) not null unique,--非空且唯一 parent varchar(20) unique,--唯一约束 money int default 0);--默认约束
建完表后添加非空约束
alter table 表名 modify 字段名 数据类型 not null;
删除约束
alter table 表名 modify 字段名 数据类型;
2.外键约束
(1)外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性
(2)外键就是让两个表之间的两个列建立绑定连接
(3)两张表之间可以有多个外键
(4)主表(别称为父表),从表(别称为子表)
注意点:
(1)主表必须有主键,从表有没有主键都可以,这样才可以创建外键连接。
(2)建表和添加数据时候都要先添加主表的,再添加从表的
建表时添加外键:
格式为:
1.先建立主表
2.在从表建表时最下面添加这个连接语句
constraint 自定义的外键名 foreign key(本表要绑定的列名) references 主表(主表要绑定的主键列名)
--主表(老大) create table car( id int primary key, name varchar(20) ); --从表(小弟) create table BM( my_id int , name varchar(30), money int, constraint zzzz foreign key(my_id) references car(id) ); ---zzzz是自己定义的外键名,要删除的时候用得着
建表后添加外键:
格式为:
alter table 从表表名 add constraint 自定义的外键名称 foreign key(从表列名) references 主表表名(主表的主键列名);
alter table BM add constraint hhhh foreign key(money) references car(id); ---hhhh:自己定义的外键名称,删除时候用得着
删除外键:
格式为:
alter table 从表的表名 drop foreign key 外键名;
alter table BM drop foreign key zzzz; --zzzz:外键名,在创建时候就定义好了,如果不知道外键名可以在本文章中的查里面找找相关的查询语句