子查询
说明:指的是查询单张表的数据,但是条件在另外一张表中可以使用子查询
student表
score表 
例:查询1号学科考了80分的同学姓名
内连接方法:
子查询:
思路:1、首先找到学科1考了80的人员编号
2、根据编号找到人员姓名
总结:当条件的结果数量>1的时候用 in
条件的结果唯一的时候,用 =
例:查询男同学学科2得分的总分
内连接方法:
子查询:
思路:1、查男同学的s_id
2、通过s_id 查到总分

例:查询孙风的所有科目平均成绩
内连接方法:
子查询:
思路:1、先查出孙风的s_id
2、通过s_id查出平均成绩
例:查询女同学的学科三得分的最小分
内连接方法:
子查询:
思路:1、查出女同学的s_id
2、通过s_id及学科三的条件查出最小分
例:查询1号学科小于80分的人员生日
内连接方法:
子查询:
思路:1、通过1号学科及成绩小于80分的条件查出s_id
2、再通过该s_id查出人员生日
练习1:
1、查询赵雷学科2考了多少分
2、查询学科3考了80分的学生性别?
答案:
1、查询赵雷学科2考了多少分
select c_id,s_score
from score
where c_id = 2 and
s_id =(select s_id from student where s_name =’赵雷’);
2、查询学科3考了80分的学生性别?
select s_sex
from student
where s_id in (select s_id from score where s_score=80 and c_id = 3);
练习2:
1、查询与周梅相同性别的同学 排除周梅不显示
2、查询与钱电同年出生的同学 排除钱电不显示
3、查询与赵雷同月出生的同学 (先求赵雷出生月份)
答案:
— 1、查询与周梅相同性别的同学 排除周梅不显示
SELECT from student
where s_sex=
(SELECT s_sex from
student where s_name=”周梅” )
and s_name !=”周梅”;
— 2、查询与钱电同年出生的同学 排除钱电不显示
SELECT from student
where year(s_birth)=(
SELECT year(s_birth) from
student where s_name=”钱电”)
and s_name !=”钱电”;
— 3、查询与赵雷同月出生的同学 (先求赵雷出生月份)
select * from student
where month(s_birth)=(
SELECT month(s_birth) from
student where s_name=”赵雷”);
索引的优点:
1、通过创建唯一性的索引,可以保证表中数据的唯一性;
2、加速数据的检索速度;
3、加快表与表之间的连接;
4、在使用分组与排序数据检索时,可以显著减少检索分组与排序的时间;
5、在查询的过程中使用优化隐藏器,提供系统性能。
语法:
alter table 表名
add index 索引的名称(字段名);
给huihui表s_id添加索引,索引名为sid_index
select s_id from huihui;
ALTER table huihui add INDEX sid_index(s_id);
缺点:
1、创建索引需要时间,且随着数据量的增加而增加;
2、索引需要占用物理空间;
3、当对表中数据进行修改时,索引也要动态维护,降低了数据的维护速度。
1、表字段操作
1.1、表字段的操作属于DDL(数据定义语言)
1.2、更改表结构的关键字 alter table 表名
1.3、查看表结构 : desc 表名
1.1.1、新增字段:add
语法:alter table 表名 add 新增字段名 数据类型[属性]
举例:alter table test18 add s_sex char(1) not null;
1.1.2、新增字段在某个字段的后面
语法:alter table 表名 add 新增的字段名 数据类型[属性] after 已存在的字段名
举例:alter table test18 add s_class varchar(2) after s_name;
1.1.3、新增字段在第一列
语法:alter table 表名 add 新增的字段名 数据类型[属性] first
举例:alter table test18 add s_score int first ;
1.1.4、新增多个字段
语法:alter table 表名 add 新增的字段名 数据类型[属性], add 新增的字段名 数据类型[属性]….
2.1.1、删除字段 drop
语法:alter table 表名 drop 字段;
2.1.2、删除多个字段 drop
语法:alter table 表名 drop 字段,drop 字段……;
3.1.1、更改字段的数据类型
语法:alter table 表名 modify 字段名 数据类型[属性]
举例:alter table test18 modify s_name char(10);
怎么查看表结构:desc 表名
3.1.2、更改多个字段的数据类型
语法:alter table 表名 modify 字段名 数据类型[属性],modify 字段名2 数据类型[属性]
4.1.1、更改字段名 change
语法:alter table 表名 change 字段名 新字段名 数据类型[属性];
5.1.1、更改表名
语法:alter table 表名 rename to(可以省略) 新表名;
1 人点赞
1

