MySQL数据库

数据库简介、Navicat、SQL语句

文章目录

一、数据库简介

1.[了解]数据库介绍和分类

  • 数据库
    指长期存储在计算机内、有组织的数据集合
    简而言之,数据库就是一个存储数据的地方(仓库)

  • 数据库的分类

    (1)关系型数据库(表格方式展示):

    Oracle: 在大型项目中使用,例如:银行、电信等项目
    MySQL: Web项目中使用最广泛的关系型数据库
    Microsoft SQL Server: 在微软的项目中使用
    SQLite: 轻量级数据库, 主要应用在移动平台

    (2)非关系型数据库(以 键-值对 方式展示):redis、mongodb、hbase

2.[知道]关系型数据库核心要素和SQL的分类

  • 关系型数据库核心要素
    数据行 (相当于excel表格中的一行数据)
    数据列 (相当于excel表格中的一列数据)
    数据表 (excel表格中某个表)
    数据库 (相当于所有表的集合)

  • SQL的分类: SQL是一个结构化的查询语言,通过SQL能够对数据库进行相关的操作
    (1)DQL(必须掌握):数据查询语言,用于对数据进行查询,例如: select

    data query language
    

    (2)DML:数据操作语言,对数据进行增加、修改、删除,例如: insert、 update、 delete

    data manipulation language
    

    (3)TPL: 事务处理语言,对事务进行处理,例如: begin transaction、 commit、 rollback

    transaction processing language
    

    (4)DCL:数据控制语言,进行授权与权限回收,例如: grant. revoke

    data control language
    

    (5)DDL:数据定义语言,进行数据库、表的管理等,例如: create、 drop

    data definition language
    

    (6)CCL:指针控制语言,通过控制指针完成表的操作,例如: declare cursor

    cursor control language
    

3.MySQL

3.1[ 了解] MySQL简介

  • mysql是oracle公司的产 品
  • 社区版开源免费,商业版本收费
  • 特点:可移植性好;支持多操作系统;支持多种编程语言;开源、社区版免费;支持多线程;优化SQL查询算法;多种数据库连接方式;支持多语言编码格式

3.2[知道] MySQL组成和命令连接数据库

  • MySQl 组成:
    MySQL 服务器:存储数据并解析编译后的SQL语句, 将执行结果返回给客户端。
    MySQL客户端:下发用户 要执行的SQL语句,并显示服务器返回的执行结果。

image-20221122111347837

  • 命令连接MySQL数据库
    前置条件:
    确定mysq|数据库的IP地址,可以通过ifconfig来确认
    确认mysq|数据库服务是否开启,netstat -anptu| grep 3306
  • 连接命令:
1| mysql -h数据库IP -P端口号 -u数据库登陆用户名 -p数据库登陆密码

-h不加时则表示为本机
-P不加时则表示默认3306端口

注:本机连接的时候不需要数据库IP 直接使用数据库登录用户名和登录密码即可

3.3 [重点]工具连接数据库

image-20221122113432772

image-20221122113521183


补充:

image-20221122114537671

二、Navicat操作数据库

1.[操作] 通过navicat操作数据库

  • 使用数据库:在navicat窗口中,双击左侧已连接的连接名称即可打开并连接到数据库

  • 修改数据库:打开数据库后,右击要修改的数据库名称,选择数据库属性。

  • 创建数据库:打开数据库后,右击连接名称,选择“创建数据库“,然后输入对应的数据,点击确定。

  • 删除数据库:打开数据库后,右击要删除的数据库名称,选择“删除数据库”

  • 新建数据库

image-20221122163241908

  • 编辑或修改数据库

image-20221122170828844

2.[操作]通过navicat操作表

  • 新建表
    右击已打开的数据库中"表"字段名,选择”新建表”
    在新建表的窗口中输入字段的名称及选择字段的类型等信息
    点击保存,输入对应的表名称,再点击确定,然后关闭新建表窗口即可

image-20221122171155488

  • 修改、删除表

    (1)修改表:右击表名,选择“设计表", 可以进入到表字段设计的窗口
    针对要修改的表可以做增加字段、删除字段、修改字段名称及类型等操作
    (2)删除表:右击表名,选择“删除表”即可

image-20221122171519230

3.[操作]通过navicat操作数据

  • 新增数据
    1、右击表名选择“打开表”
    2、点击下方的+号,输入数据
    3、点击下方的 √
  • 修改数据
    1、右击表名选择“打开表”
    2、在表中修改对应的数据
    3、点击下方的 √
  • 删除数据
    1、右击表名选择“打开表”
    2、在表中选中对应数据行
    3、点击下方的 减号-

补充:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lJmIsUcX-1670068883387)(C:\Users\user\AppData\Roaming\Typora\typora-user-images\image-20221122114730698.png)]

4. [重点]数据类型与约束

  • 整型: int
    有符号范围(-21 47483648 -21 47483647)
    无符号范围(0 - 4294967295)
  • 小数: decimal
    示例: decimal(5, 2),表示该字段可以存5
    位数,其中小数位数为2。整数几位? 三位
  • 字符串: varchar
    范围(0~65533)
    一个字母或一个中文点一个字符
    例如: varchar(3)表示最多存3个字符
  • 时间日期: datetime
    范围(1000-01 -01 00:00:00 一9999-12- 31 23:59:59)
    示例: 2021-01-01 12:29:59’
  • 数据约束
    • 主键( primary key) : 物理上存储的顺序
      当把某个字段设定为主键之后,该字段的值必须唯一,且不能为空
      针对主键的字段,可以设定自动自增,自动在原来最大的ID值上加1
    • 非空(not null) : 此字段不允许填写空值
      空(Null)和 " 空字符是不一样的
    • 唯一(unique) : 此字段的值不允许重复
      主键只能有1个
      唯一的字段可以是多个(字段的内容是不可以重复的,例如title字段的值 可以是 十八, 其余的不能和十八一样)
    • 默认值( default) :当不填写 此值时会使用默认值,如果填写时以填写为准
    • 外键( foreign key):维护两个表之间的关联关系

image-20221123102425637

5. [操作]数据库的备份和还原

  • 备份

image-20221123104316091

  • 还原

注意:要还原的数据库不存在时,需要先创建数据库。
还原数据库操作:
在navicat中右击要还原的数据库,选择“运行SQL文件”。
在弹出的窗口中选择 备份的SQL文件,点击“开始”
运行完成后,会提示运行成功。再点击“关闭” 即可。

image-20221123105114581

三、命令行客户端

**注意:**此处使用的操作命令后面的封号 ; 不要丢

1.[知道] 命令行操作数据库

  • 前置条件:命令行先连接数据库
mysql -uroot -p123456
  • 客户端常见数据库操作命令:
    (1)查看所有数据库: show databases;
    (2)使用数据库: use 数据库名;
    (3)查看当前使用数据库: select database();
    (4)创建数据库: create database 数据库名 charset=utf8;
    (5)删除数据库: drop database 数据库名;

image-20221123111927036

image-20221123112044155

2.[知道] 命令行操作数据库表

  • 前置条件:操作数据表之前要选通过use打开对应的数据库
  • 常见数据表操作命令:
    查看当前数据库所有的表: show tables;
    查看表结构: desc 表名;
    查看表的创建语句: show create table 表名;

image-20221123113021758

四、SQL语句

1.[知道]数据库表操作

  • 创建数据库表语法格式
creat	table	表名(
	字段名1 类型 约束,
	字段名2 类型 约束,
	....   ..  ..,
)
  • 举例:创建学生表,字段要求:姓名(长度为10)、年龄、身高(保留2位小数)
create table students(
	id 	   int unsigned primary key auto_increment,    --id字段为主键,且值自增
	name   var char(20),						
	age    int unsigned,	--字段类型为无符号的整型
	height decimal(5,2)
)
  • 删除数据库
drop table 表名;
drop table if exists 表名;

2.数据的增删改查操作

2.1[重点]简单查询

select * from 表名;

2.2 [重点]添加一行数据

--主键自增长,可以用0或null代替
方式一:全部添加
insert into 表名 values(...);
insert into students values(0,'aa',22,170.84);

方式二:部分添加
insert into 表名(字段1,字段2,...) vlaue(值1,值2,...);
insert into students(name) values('哈哈');

2.3[知道]添加多行数据

  • 方式一:写多条insert语句,多条语句之间用英文分号分隔
例: 
insert into students (id,name) values(0,'张三');
insert into students (id,name) values(0,'bb');
insert into students values(0,'张三',20,180);
  • 方式二:通过一条insert语句插入多条数据,数据间用逗号分隔
格式一: insert into 表名 values(...),(...)...
例:insert into students values(0,'aa',23,1667,56),(0,'vvv',22,180.90)

格式二:insert into 表名 (字段名1,...) values (字段值1,字段值2,...),(字段值1,字段值2,...)
例:insert into students (id,name) values(0,'avc'),(0,'rtj'),(null,'ohdf');

2.4[知道]修改数据

  • 格式:update 表名 set 字段名1=值1,字段名2=值2… where 条件
例:修改id为5的学生数据,姓名改为狄仁杰,年龄改为20
update students set name='狄仁杰',age=20 where id=5

2.5[知道]删除数据

  • 格式:delete from 表名 where 条件(物理删除对应的数据)
delete from  students  where  id=6
  • 注意:此方法为物理删除,工作中大部分使用逻辑删除
    逻辑删除是指通过设定一个字段来标识当前记录已经删除
    is _delete字段来标识,1代表删除,0表示未删除

  • 其他删除数据的方式

truncate   table   表名   (清除表里面所有的数据,但是表结构会保留,自增长字段的值会从1开始)
例:truncate   table   students;

drop   table  表名    (删除数据表,包括数据和表结构)
例:drop   table   students;
  • delete:delete可以通过where子句删除部分记录。
    delete删除所有数据时,自增长字段不会从1开始。

  • truncate:Truncat删除数据时,表结构会保留,自增长字段从
    1开始。执行效率低于drop命令。

  • drop:如果想删除表,建议使用drop,且删除数据效率最高。

3.数据查询操作

31.[知道]查询的基本操作

  • 查询部分字段的值
格式:select  字段名1,字段名2....  from   表名  (查询的为一部分的字段的信息)

例: select  name,sex,age  from  students;
  • 取别名
1、给表取别名:
select  别名.字段名1,别名.字段名2..... from 表名 as 别名
例: select s.name,s.sex,s.age  from  students  as  s;

2、给字段起别名
select  字段名1 as 别名,字段名2 as 别名..... from 表名;
例: select name as 姓名,sex as 性别,age as 年龄  from  students;
  • 去重
select distinct  字段名1,字段名2......   from  表名;

例:  select distinct sex  from  students;

3.2 [重点]条件查询

  • 语法格式
select  字段名1,字段名2....  from  表名  where  条件
例: select *  from  students  where id=5;
3.2.1 [重点]条件查询:比较运算符
  • 比较运算符:大于(>)、等于(=)、小于(<)、 大于等于(>=)、小于等于(<=)、不等于(<>或者!=)
-- 条件查询-》比较运算符
-- 例1:查询小乔的年龄  
select age from students where name='小乔';
-- 例2:查询20岁以下的学生
select * from students where age<20;
-- 例3:查询家乡不再北京的学生
select * from students where hometown !='北京';

--  查询学号是' 007的学生的身份证号
select * from students where studentNo=007;
-- 查询'1班'以外的学生信息
select * from students where class !='1班';
-- 查询年龄大于20的学生的姓名和性别
select name,sex from students where age>20;
3.2.2 [重点]条件查询:逻辑运算符
  • 逻辑运算符: and(且,同时符合对应的条件),or (或,符合其中的一个条件),not (非,不符合该条件)
-- 查询年龄等于18的女生的记录(and)
select * from students where age=18 and sex='女';
-- 查询出女学生或者是1班的学生
select * from students where sex='女' or class='1班';
-- 查询非天津学生的记录
select * from students where hometown !='天津';
select * from students where not hometown ='天津';

-- 查询河南或河北的学生
select * from students where hometown='河南' or hometown='河北';
-- 查询'1班'的'上海的学生
select * from students where class='1班' and hometown='上海';
-- 查询非20岁的学生
select * from students where not age=20;
3.3.3[重点]条件查询:模糊查询
  • 模糊查询: like关键字
  • %:匹配任意个字符
  • _ :匹配任意单个字符
    一般LIKE关键字只用来匹配字段类型为字符串的
-- 例1:查询姓孙的学生
select * from students where name like '孙%';
-- 例2:查询姓孙且名字是一个字的学生
select * from students where name like '孙_';
-- 例3:查询姓名以‘乔'结尾的学生
select * from students where name like '%乔';
-- 例4:查询姓名中包含‘白’的学生
select * from students where name like '%白%';

-- 查询姓名为两个字的学生
select * from students where name like '__';
-- 查询姓'百'且年龄大于20的学生
select * from students where name like '百%' and age > 20;
-- 查询学号以1结尾的学生
select * from students where studentNo like '%1';
3.3.4 [重点]条件查询:范围查询
  • in: 查询非连续范围内的数据
-- 例:查询家乡是北京或上海或广东的学生
select * from students where hometown='北京' or hometown='上海' or hometown='广东';
select * from students where hometown in('北京','上海','广东');

-- 查询年龄为18或19或22的女生
select * from students where age in(18,19,22) and sex='女';
  • between … and :查询连续范围内的数据(用来数值型字段中)
-- 例:查询年龄为18至20的学生
select * from students where age>=18 AND age <=20;
select * from students where age BETWEEN 18 AND 20;

-- 查询年龄在20到25以外的学生
select * from students where age NOT BETWEEN 20 AND 25;
3.3.5 [重点]条件查询:为空判断
  • Mysql中空表示null ,与‘ ’(空)字符串不一样
  • 空判断: is null
查询出学生身份证号为空的信息
select * from students where card is null;
  • 非空判断:is not null
查询出学生身份证号不为空的信息
select * from students where card is not null;

4. [知道]排序

  • 语法格式:
select * from  表名  order  by  字段1  asc|desc,字段2  asc|desc......

说明:
	将行数据按照字段1进行排序,如果某些字段1的值相同时,则按照字段2排序,以此类推
	字段的排序规则默认为升顺排列(从小到大)
	asc:表示从小到大排序(升序)
	desc:表示从大到小排序(降序)
-- 例1: 查询所有学生信息, 按年龄从小到大排序
select * from students order by age;
-- 例2: 查询所有学生信息, 按年龄从大到小排序, 年龄相同时, 再按学号从小到大排序
select * from students order by age desc,studentNo;
-- 1、 查询所有学生信息, 按班级从小到大排序, 班级相同时,再按学号从小到大排序
select * from students order by  class, studentNo;

5.分组和聚合

5.1 [知道]聚合函数介绍

  • 使用聚 合函数方便进行数据统计
  • 聚合函数不能在where中使用

image-20221124155730656

5.2 [知道] 聚合函数案例

  • count(*): 求表的总的记录数
查询学生表的总记录数
select count(*) from students;
  • max(字段名):查询对应字段的最大的值
查询女生的最大年龄
select max(age) from students where sex='女';
  • min(字段名):查询对应字段的最小的值
查询1班的最小年龄
select min(age) from students where class='1班';
  • sum(字段名):查询对应字段的值的总和
查询北京学生的年龄总和
select sum( age) from students where hometown='北京';
  • avg(字段名):查询对应字段的值的平均数
查询女生的平均年龄
select avg(age) from students where sex='女';

练习:

-- 查询所有学生的最大年龄、最小年龄、平均年龄
select max(age),min(age),avg(age) from students;

-- 一班共有多少个学生
select count(*) from students where class='1班'; 

-- 查询3班年龄小于18岁的同学有几个
select count(*) from students where class='3班' and age<18;

5.3 [知道]分组查询

  • 分组的目的是对每一组的数据进行统计(使用聚合函数)
语法格式:
select字段名1,字段名2,聚合函数....  from  表名  group by 字段名1,字段名2....
-- 查询各种性别的人数
select sex,count(*) from students group by sex;

-- 查询各种性别年龄最大的
select sex,max(age) from students group by sex;

-- 查询各个班级的人数
select class,count(*) from students group by class;

-- 查询各个班级中不同性别的人数
select class,sex,count(*) from students group by  class,sex;
  • 分组后的数据筛选:将分组之后的数据当成是一个表数据,然后再通过having条件来对当前的表数据进行筛选。
语法格式:
select字段名1,字段名2,聚合函数....  from  表名  group by 字段名1,字段名2....  having  条件

having条件运算符跟where条件运算符是一样的
在having后面可以使用聚合聚函数
-- 查询男生总人数
select sex,count(*) from students group by sex having sex='男';

-- 查询每个班级男生的总记录数
select class,sex,count(*) from students group by class,sex having sex='男';

-- 查询所有班级中不同性别的记录数大于1的信息
select class,sex,count(*) from students group by class,sex having count(*);
  • having 与 where 对比

    where是对from后面指定的表进行數据筛选,属于对原始数据的筛选。
    having是对group by的结果进行筛选。
    having后面的条件中可以用聚合雨数,where后面不可以。

练习:
-- 查询各个班级学生的平均年龄、最大年龄、最小年龄
select class,avg(age),max(age),min(age) from students group by class;
-- 查询1班除外其他班级学生的平均年龄、最大年龄、最小年龄
select class,avg(age),max(age),min(age) from students group by class having class!='1班';

6.[知道]分页查询

  • 语法格式:
 select  *  from  表名 limit  start,count;

start表示的是开始的记录,索引是从0开始。0表示第一条记录
count表示的是从start开始,查询多少条记录

-- 查询前3行的学生信息
select * from students limit 0,3;
select * from students limit 3;

-- 查询第4到第6行学生信息
select * from students limit 3,3;

-- 每页显示5条数据,显示每一页的数据
select * from students limit 0,5;
select * from students limit 5,5;
select * from students limit 10,5;
  • 分页查询实现
select  *  from  表名 limit  (n-1)*m,m;

n表示的是页数   n=1,2,3,4
m表示的是每页显示的记录数  m=3
(n-1)*m,m是公式,并不是语法格式,不能直接写在SQL语句中,需要替换为具体的数字

image-20221124211827574

7.连接查询

7.1[知道]连接查询概述

  • 内连接:连接两个表时,取的是两个表中都存在的数据。(取交集)
  • 左连接:连接两个表时,取的是左表中特有的数据,对于右表中不存在的数据,用null来填充。
  • 右连接:连接两个表时,取的是右表中特有的数据,对于左表中不存在的数据,用null来填充。

image-20221125093445010

7.2[重点]内连接

  • 格式语法
select * from 表名1 inner join 表名2 on 表1.列=表2.列;

另一种写法:
select * from  表1,表2 where 表1.列=表2.列;

查询的是两个表的交集的数据
表1的列与表2的列一定是存在关联关系
内连接连接时可以连接多个表

  • 案例
-- 例1: 查询学生信息及学生的成绩
select * from students inner join scores on students.studentNo=scores.studentNo;

-- students起别名为stu, scores起别名为sc
select * from students as stu inner join scores as sc on stu.studentNo=sc.studentNo;
-- 起别名可以不写as
select * from students stu inner join scores sc on stu.studentNo=sc.studentNo;

-- 例2:查询课程信息及课程的成绩
select * from courses cs inner join scores sc on cs.courseNo=sc.courseNo;

-- 例3:查询王昭君的成绩, 要求显示姓名、 课程号、 成绩
select stu.`name`,sc.courseNo,sc.score from students stu inner join scores sc on 
stu.studentNo=sc.studentNo where stu.`name`='王昭君';


-- 1、查询学生信息及学生的课程对应的成绩
select * from students 
inner join scores  on students.studentNo=scores.studentNo
inner join courses on scores.courseNo=courses.courseNo;

-- 2、查询王昭君的数据库成绩,要求显示姓名、课程名、成绩
select students.`name`,courses.`name`,scores.score from students  
inner join scores on  students.studentNo=scores.studentNo 
inner join courses on scores.courseNo=courses.courseNo
where students.`name`='王昭君' and courses.`name`='数据库';

-- 3、查询所有学生的数据库成绩,要求显示姓名、课程名、成绩
select students.`name`,courses.`name`,scores.score from students  
inner join scores on  students.studentNo=scores.studentNo 
inner join courses on scores.courseNo=courses.courseNo;

-- 4、查询男生中最高成绩,要求显示姓名、课程名、成绩
select students.`name`,courses.`name`,scores.score from students  
inner join scores on students.studentNo=scores.studentNo 
inner join courses on scores.courseNo=courses.courseNo
where students.sex='男' order by scores.score desc limit 0,1;

7.3[知道] 左连接

  • 语法格式
select  * from 表1 left join 表2 on 表1.列=表2.列;

左连接查询的是左表特有的数据,对于右表中不存在的数据用null来填充

  • 案例
-- 例1:查询所有学生的成绩, 包括没有成绩的学生
select * from students left join scores on students.studentNo=scores.studentNo;

-- 例2:查询所有学生的成绩, 包括没有成绩的学生, 需要显示课程名
select * from students 
left join scores on students.studentNo=scores.studentNo
left join courses on scores.courseNo=courses.courseNo;

7.4[知道]右连接

  • 语法格式
select  * from 表1 right join 表2 on 表1.列=表2.列;

右连接查询的是右表特有的数据,对于左表中不存在的数据用null来填充

  • 案例
-- 例1:查询所有学生的成绩,包括没有成绩的学生
select * from scores right join students on scores.studentNo=students.studentNo;

-- 例2:查询所有学生的成绩,包括没有成绩的学生,需要显示课程名
select * from courses 
right join scores on courses.courseNo=scores.courseNo
right join students on students.studentNo=scores.studentNo;

8.自关联

8.1[知道]自关联介绍

  • 自连接的应用场景:省、市、区的信息,一般不会分开放在不同的表里面进行存储,而是放在同一个表当中。

8.2[知道]自关联实现

  • 要通过自关联进行查询时,当前自关联的表当中一定会存在两个相关联的字段
  • 自关联: inner join 关联同一个表,不同的字段
  • 自关联要用别名
  • 语法格式
select  * from 表名 as 别名1 inner join 表名 as 别名2 on 别名1.列=别名2.列;
  • 案例
select * from areas as a1
inner join areas as a2 on a1.aid=a2.pid;

-- 查询出河南省所有的市
select * from areas as a1
inner join areas as a2 on a1.aid=a2.pid
where a1.atitle='河南省';

-- 查询出郑州市所有的区
select * from areas as a1
inner join areas as a2 on a1.aid=a2.pid
where a1.atitle='郑州市';

-- 查询出河南省所有的市区信息
select * from areas as a1
inner join areas as a2 on a1.aid=a2.pid
inner join areas as a3 on a2.aid=a3.pid
where a1.atitle='河南省';


-- 1、 查询河北省所有的市的信息
select * from areas as a1
inner join areas as a2 on a1.aid=a2.pid
where a1.atitle='河北省';

-- 2、查询出洛阳市所有的区的信息
select * from areas as a1
inner join areas as a2 on a1.aid=a2.pid
where a1.atitle='洛阳市';

9.子查询

  • 将一条SQL查询的语句嵌入在其他的SQL语句中,被嵌入的SQL语句称之为子查询,其他的SQL称之为主查询
  • 子查询select语句辅助主查询,要么是充当条件,要么充当数据源
  • 子查询语句是一条完整的、可以单独执行select语句

9.1[知道]子查询—充当条件

-- 例1:查询王昭君的成绩,要求显示成绩(标量子查询);查一个可以使用标量
-- select studentNo from students where name='王昭君';  子查询
--  子查询的结果作为主查询的条件

select score from scores where studentNo=(select studentNo from students where name='王昭君');

-- 例2:查询18岁的学生的成绩,要求显示成绩(列子查询)
-- 先找18岁学生的学号,结果为列表 
select studentNo from students where age=18;
select score from scores where studentNo in (select studentNo from students where age=18);

-- 例3:查询和王昭君同班、同龄的学生信息(行子查询)
select class,age from students where name='王昭君';
select * from students where (class,age) in (select class,age from students where name='王昭君');

9.2[知道]子查询—充当数据源

例1:查询数据库和系统测试的课程成绩

  • 子查询—特定关键字

  • in 范围

格式:主查询  where  条件  in(列子查询);
  • all 所有
格式:主查询  where  列=any(列子查询)
  • any | some 任意
格式:主查询  where  列 = all(列子查询)
  • 案例及练习
例2:查询18岁的学生的成绩,要求显示成绩(列子查询)
=any和in等价
SOME :是ANY的别称,很少用
!=all和 not in等价

1、查询大于平均年龄的学生
2、查询年龄在18-20之间的学生的成绩
  • 查询演练

image-20221128121922897


image-20221128122145908


实践练习

-- 1.查询Student表中的所有记录的Sname. Ssex和Class列。
select sname,sex,class from student;
-- 2.查询教师所有的单位即不重复的Depart列。
select distinct depart from teacher;
-- 3.查询Student表的所有记录。
select * from student;
-- 4.查询Score表中成绩在60到80之间的所有记录。
select * from score where degree between 60 and 80;
-- 5.查询Score表中成绩为85, 86或88的记录。
select * from score where degree in(85,86,88);
-- 6.查询Student表中“95031"班或性别为“女"的同学记录。
select * from student where class='95031' or sex='女';
-- 7.以Class降序查询Student表的所有记录。
select * from student order by class desc;
-- 8.以Cno升序、Degree降序查询Score表的所有记录。
select * from score order by cno asc,degree desc;
-- 9.查询“95031"班的学生人数。
select count(*) from student where class='95031';
select class,count(*) from student group by class having class='95031';
-- 10.查询Score表中的最高分的学生学号和课程号。(子查询或者排序)
-- 排序 
select sno,cno from score order by degree desc -- 降序 
limit 1; -- 取第一个
-- 子查询
select max(degree) from score; 
select sno,cno from score where degree=(
select max(degree) from score
);

-- 12.查询每门课的平均成绩。
-- course score  分组
select cno,avg(degree) from score group by cno;
-- 13.查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
-- 分组  组名3开拓的课程 ,同时组>=5人的组平均分 
select cno,avg(degree) from score group by cno
having count(*)>=5 and cno like '3%';

-- 14.查询分数大于70,小于90的Sno列。
select sno,degree from score where degree >70 and degree <90;

-- 15.查询所有学生的Sname. Cno和Degree列。
select stu.sname,sc.cno,sc.degree from student as stu 
inner join score as sc on stu.sno=sc.sno;

-- 16.查询所有学生的Sno. Cname和Degree列。
select sc.sno,co.cname,sc.degree from score as sc
inner join course as co on sc.cno=sc.cno;

-- 17.查询"95031"班学生的平均分。
select class,avg(degree) from student as stu
inner join score as sc on stu.sno=sc.sno
where class='95031';

-- 18.查询选修“3-105*课程的成绩高于“109"号同学成绩的所有同学的记录。
-- 1.查 109号同学的成绩  有四个,取最大的就行,大于最大的所有都大
select max(degree) from score where sno='109';
-- 2. 3-105成绩》1结果的所有同学信息
select * from student as stu 
inner join score as sc on stu.sno=sc.sno
where sc.degree >(
select max(degree) from score where sno='109'
) and sc.cno='3-105';

-- 19.查询成绩高于学号为“109"、课程号为“3-105”的成绩的所有记录。
-- 1.查 109号同学 课程为 3-105 的同学成绩 有两个,取最大的就行,大于最大的所有都大
select max(degree) from score where sno='109' and cno='3-105';

-- 2.学生成绩 >1结果的所有记录
select * from student as stu 
inner join score as sc on stu.sno=sc.sno
where sc.degree >(
select max(degree) from score where sno='109' and cno='3-105'
);
tudent as stu 
inner join score as sc on stu.sno=sc.sno;

-- 16.查询所有学生的Sno. Cname和Degree列。
select sc.sno,co.cname,sc.degree from score as sc
inner join course as co on sc.cno=sc.cno;

-- 17.查询"95031"班学生的平均分。
select class,avg(degree) from student as stu
inner join score as sc on stu.sno=sc.sno
where class='95031';

-- 18.查询选修“3-105*课程的成绩高于“109"号同学成绩的所有同学的记录。
-- 1.查 109号同学的成绩  有四个,取最大的就行,大于最大的所有都大
select max(degree) from score where sno='109';
-- 2. 3-105成绩》1结果的所有同学信息
select * from student as stu 
inner join score as sc on stu.sno=sc.sno
where sc.degree >(
select max(degree) from score where sno='109'
) and sc.cno='3-105';

-- 19.查询成绩高于学号为“109"、课程号为“3-105”的成绩的所有记录。
-- 1.查 109号同学 课程为 3-105 的同学成绩 有两个,取最大的就行,大于最大的所有都大
select max(degree) from score where sno='109' and cno='3-105';

-- 2.学生成绩 >1结果的所有记录
select * from student as stu 
inner join score as sc on stu.sno=sc.sno
where sc.degree >(
select max(degree) from score where sno='109' and cno='3-105'
);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小橙子*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值