三章 高级查询

1.修改表名:

     alter table<旧表名> rename [to] <新表明>;

     alter table `demo01` rename `demo02`;

2.添加字段:

    alter table 表名 add 字段名 数据类型 [属性];

   alter table demo02 add `password` varchar(20) not null;

 

3.修改字段
      alter table 表名 change 原字段名 新字段名 数据类型 [属性];
     alter table demo02 change `name` `username` char(10) not null;

4.删除字段
      alter table 表名 drop 字段名;
     alter table demo02 drop `password`;

5.添加主键约束
     alter table 表名 add constraint 主键名 primary key 表名 (字段名);

     5.1  将grade表中的gradeId字段设置成主键
     alter table `grade` add constraint `pk_grade` primary key `grade` (gradeId);

6.添加外键约束
   alter table 表名 add constraint 外键名 foreign key (外键字段) references 关联表名 (关联字段)

  6.1 设置syudent表的gradid字段与grade表的gradid字段建立主外键关联
   alter table `student` add constraint fk_student_grade foreign key(`gradeId`) references `grade` (`gradeId`);

7.插入单行数据

  insert into 表名 [(字段名列表)] values (值列表);
  insert into `syudent`(`loginPwd`,`studentName`,`gradeId`,`phone`,`bornDate`)
  values('123','黄小平',1,'13956799999','1996-5-8');

   注意:   字段名是可选的,如省略则依次插入所有字段

               多个列表和多个值之间使用逗号分隔

               值列表和字段名列表一一对应

        如插入的是表中部分数据,字段名列表必填

8.插入多行数据

   insert into 新表 (字段名列表) values(值列表1),(值列表2),……,(值列表n);

  insert into `subject` (`subjectName`,`classHour`,`gradeID`)
  values('Logic Java',220,1),('HTML',160,1),('Java OOP',230,2);

                               经验:为避免表结构发生变化引发的错误,建议插入数据时写明具体字段名!

9.将查询结果插入的新表

     insert into 新表 (字段1,字段2,字段3)
     select 字段1,字段2……
     from 原表;
      句式1:需要先按照所插入字段的类型,顺序,个数创建新表,才能插入数据
    create table 新表 (
    select 字段1,字段2
    from 原表 );

   9.1 将syudent表中的studentName ,phone字段数据保存到新表phoneList中

         create table `phoneList`(select `studentName`,`phone` from `student`);
    句式2: 岁插入语句的执行而创建新表,无须先创建表;,如果新表存在,将会报错

10.更新数据记录,删除数据记录

     10.1更新数据记录
                    update 表名 set 字段1=值1,字段2=值2,…,字段n=值n [where 条件];

              10.2 修改student表中学员为10011学员的手机号码和家庭住址

                   update `sutudent`

                   set `phone`='1381014' , `address`='............'

                   where `studentNo`=10011;

       10.2删除表记录

             delate from 表名 [where条件];   

           删除phoneList表中黄小平的记录

         deleta from `phoneList` where `studentName`='黄小平';

        10.3删除表中所有记录
                      truncate table 表名;                                                                 

 

 

  

11.DQL语句

     select <字段名列表>
     from <表名或视图>
     [where <查询条件>]
     [group by <分组的字段名>]
     [having<条件>]
     [order by <排序的字段名>[asc或deac]]

 

12.LIMIT字句

        select <字段名列表>
        from <表名或视图>
        [where <查询条件>]
   [group by <分组的字段名>]
   [order by <排序的列名>[asc或deac]]
   [limit [位置偏移量,]行数]

      12.1示例

                   

 

 

                       SELECT `studentNo`,`studentName`,`phone`,`address`,`bornDate`

                       FROM `student`
                       WHERE `gradeId` = 1
                       ORDER BY `studentNo`
                       LIMIT 4,4;

13 常用的函数

       复合函数

             

 

 

      字符串函数                                                                                                                    日期函数

                                       

 

       数学函数

       

 

 

 14.子查询

     14.1.简单子查询语法

              SELECT … FROM 表1 WHERE 字段1 比较运算符(子查询)

 

      14.2.查询出身日期比李斯文打的学生        

                 select `studentNo`,`studentName`,`sex`,`bormDate`,`address`
      from `student`
      where `bornDate`>
     (select `bornDate`from`student`where`studentName`=`李斯文`);

  • 子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询
  • 子查询在WHERE语句中的一般用法

 

 

                            注意:将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个

 

 

15.查询“Logic Java”课程至少一次考试刚好等于60分的学生

     分析:  

                     (1)查询subject表,获得Logie Java课程的课程编号。
                     (2)根据课程编号,查询result表中成绩是60分的学生的学号。
                     (3)根据学号,查询student表得到学生姓名。
                    因为涉及多表,所以我们可以采用表连接,在SQL Server课程中曾经学习过

方法一:采用表连接

select `studentName` from `student`                   (内连接(等值连接

inner join `result` r on stu.studentNO = r.studentNo
inner join `subject` sub ON r.subjectNo=sub.subjectNo
where `studentResult` = 60 and `subjectName`='Logic Java';

方法二: 采用子查询

select 'studentName` from `student` where `studentNo` = (
swelect `studentNo` from `result`
inner join `Subject` on result.subjectNo= subject.subjectNo
where `studentResult` =60 AND `subjectName` ='Logic Java'
);

  • 子查询:比较灵活、方便,常作为增删改查的筛选条件,适合于操纵一个表的数据
  • 表连接:更适合于查看多表的数据

16.IN和NOT IN子查询

     16.1in子查询 

         16.1.1查询“Logic Java”课程考试成绩为60分的学生名单         

        SELECT `studentName` FROM `student`
        WHERE `studentNo` IN(
        SELECT `studentNo` FROM `result`
        WHERE `subjectNo` = (
        SELECT `subjectNo` FROM `subject`
        WHERE `subjectName`='Logic Java'
        )AND `studentResult` = 60
        );

          in后面的子查询可以返回多条记录,用于限制学号的删选范围。

 

posted @ 2021-04-09 08:52  小白大号  阅读(90)  评论(0编辑  收藏  举报