MySQL基础

数据库 概述

数据库是以特定数据结构组织在计算机上存储和管理数据的“仓库”。

数据库有很多类型,通常根据不同数据组织类型分为层次式数据库,网络式数据库,关系数据库和面向对象的数据库。

关系型数据库

关系数据库操作系统,是指通过关系模型来组织数据的数据库。关系型数据库把世界改成与实体和联系组成。

常用的关系型数据库有:

Oracle是收费商量的数据库,提供很好的维护与支持,适用于业务逻辑较复杂,数量数据量大的大中型项目。

MySQL是不是由于体积小,速度快,总体拥有成本低,开放源码,受到很多中小型公司的青睐。

SQL Server数据库的工程比较全面,效率高,适合于中型企业或单位的数据库平台。

SQL语句

数据表的操纵

数据类型

  • int 整型
  • numeric(p,q) 定点型,p为精度,q是小数位数
  • char(n) 定长字符型
  • varchar(n) 变长字符型
  • datetime 日期时间型

约束条件

  • not null 非空
  • check 限制列的取值范围
  • primary key 主键
  • foreign key 外键
    create table student
(sno char(4) primary key,
 sname char(8) not null,
 ssex char(2),
 sage smallint,
 sdept char(20)
 );
 create table course
 ( cno char(4),primary key,
   cname char(4) not null,
   cteacher char(8)      
 )
create table sc
( sno char(4),
  cno char(4),
  grade numeric(4,1)
  primary key (sno,cno),
  foreign key (sno) reference student(sno),
  foreign key (cno) reference course(cno)
)

修改基本表

为sc 表添加“修课类别”列,数据类型为定长2个字符,允许空

alter table sc add 修课类别 char(2) null

删除sc表的“修课类别”列

alter table sc drop 修课类别 

数据更新

插入数据

将一个新生插入到student表中,学号1105,姓名:陈冬,性别:男,年龄18岁,系别:信息管理系

insert into student values('1105','陈冬','男',18,'信息管理系')

在sc表中插入一条记录,学号1603,课程号c001,成绩空

insert into sc values('1603','c001',null)

删除数据

删除使用不及格同学的修课记录

delete from sc where grade <60

删除计算机系女生的记录

delete from student where sdept='计算机系' and ssex='女'

修改数据

将所有学生的成绩加三分

update sc set grade = grade + 3

将学号为1104学生的年龄的加1岁

update sc set sage=sage+1 where sno='1104'

将计算机系女生的系名更新为电子工程系

update student set sdept='电子工程系' 
where sdept='计算机系' and ssex='女'

数据的操纵

查询数据

单表查询

查询全体学生的学号和姓名

select sno,sname from student

查询全体学生的修课记录sno,cno,grade

select  sno,cno,grade  from sc
或 select * from sc

查询全体学生的姓名和出生年份

select snmae,2022-sage 出生年份 from student   // 查询改变列标题: 列名 新列名

查询所有学生选修课程的学号,课程号和成绩(每门课程的成绩=成绩*1.1),成绩列的新列名为“总评成绩”

select sno,cno grade*1.1 总评成绩 from sc

查询有课程选修学生的学号

select distinct sno from sc  // distinct 去除重复值

查询信息管理系学生的学号,姓名

select sno,sname from student where sdept='信息管理系'

比较运算符

= 等于

> 大于

>=大于等于

< 小于

<=小于等于

<>不等于

查询考试成绩有不及格的学生的学号

select distinct sno from sc where grade < 60

查询年龄在20岁以上的学生的姓名,系别

select sname,sdept from student where sage > 20 

查询课程号为c004的课程名,教师名

select cname,cteacher from course where cno = 'c004'

查询通信工程系年龄在20岁以下的女生的姓名

select sname from student 
where sdept='通信工程系'and sage < 20 and ssex='女'

逻辑运算符
and 逻辑且
or 逻辑或
and 比 or 优先级 高

查询计算机或信息管理系学生中男生的学号,姓名,所在系和年龄

select sno,sname,sdept,sage from student 
where (sdept='计算机系' or sdept = '信息管理系') and ssex='男'

查询学号为1602或1604且选修了coo3课程的学生的成绩

select grade from sc
 where (sno = '1602' or sno='1604') and cno='c003'

查询年龄在18~20岁的学生的姓名,所在系和年龄

select sname,sdept,sage from student
where sage between 18 and 20
或 
select sname,sdept,sage from student
where sage >= 18 and sage <= 20

:::info{title=“相关信息”}
注:确定范围运算符 (not)between 下限 and 上限
:::
查询考试成绩不在70~90的学生的学号,课程号

select sno,cno from sc 
where grade not between 70 and 90
或
select sno,cno from sc 
where grade < 70 and grade > 90

查询信息管理系或通信工程系学生的姓名和性别

select sname,ssex from student 
where sdept='信息管理系' or sdept='通信工程系'
或
 select sname,ssex from student 
 where sdept in('信息管理系','通信工程系')

确定集合运算符 (not )in

查询课程号为C002,C004的课程的课程名和教师名

select cname,cteacher from course
where cno in('c002','c004')
或
select cname,cteacher from course
where cno='c002' or cno='c004'

查询未考试学生的学号和课程号

select sno,cno from sc 
where grade is null

确定空值运算符 is (not) null (非)空值

查询有考试成绩的学生的学号,课程号和成绩

select * from sc
where grade is not null

查询计算机系姓张的学生的详细信息

select * from student
where sdept='计算机系' and sname like '张%'

字符匹配运算符 like / not like

用法 列名 like (not like) 匹配串
匹配串 中可包括如下4中通配符
______(下划线):匹配任意一个字符
%(百分号):匹配0个或多个字符
[ ]: 匹配[ ]中的任意一个字符
[^ ]: 不匹配[ ]中的任意一个字符
::
查询学生姓名的第二个字为美或丽的女生的姓名和学号

select sno,sname from student
where sname like '_[美丽]%' and ssex='女'

查询课程名中有大学两字的课程号和课程名

select cno,cname from course
where cname like '%大学%'

查询学号第四位不是3,5,7,的年龄为18岁或20岁的男生的详细信息

select * from student
where cno like '_ _ _ [^357]%' and sage not in (18,20) and ssex ='男'

对查询结构进行排序

查询选修了课程号里含有2 的学生的学号和成绩,查询结果按成绩降序排列,成绩相同的按学号排列

select sno,grade from sc
where cno like '%2%'
order by grade desc,sno ase

查询计算机系或信息管理系女生的学号,姓名和年龄,并按学生年龄升序排列

select sno,sname,sage from student
where sdept in ('计算机系','信息管理系') and ssex='女'
order by sage asc

查询课程号为c002,c003,c004的课程名,查询结果按课程号降序排列

select cname from course
where cno in ('c002','c003','c004')
order by cno desc

使用统计函数汇总数据

count(*) 统计表中元组个数

count(distinct 列名)统计列值个数(去掉重复值)

sun(列名) 计算列值总和

avg(列名) 计算列值平均值

max(列名) 计算列值最大值

min(列名) 计算列值最小值

注:函数用于目标序列或排序子句,但不能用于where子句

统计学生总人数

select count(*) 学生总人数 from student

统计选修了课程学生的人数

select count (distinct sno) 选修课程人数 from sc

统计计算机系女生的总人数,最大年龄,最小年龄和平均年龄

select count(*) 总人数, max(sage) 最大年龄, 
min(sage) 最小年龄 ,avg(sage) 平均年龄 from student
where sdept = '计算机系' and ssex ='女'

统计张王李3个姓的总人数及平均年龄

select count(*) 总人数,avg(sage) 平均年龄 from student
where sname like '[张王李]%'

多表查询

查询计算机系学生的修课情况,要求列出学生的名字,所修课的课程号和成绩

select sname,cno,grade from student,sc
where student.sno=sc.sno and sdept='计算机系'

查询选修了coo1课程且考试成绩在80分以上的女学生的修课情况,要求列出学生的学号,姓名和成绩

select student.sno,sname,grade from student,sc
where student.sno=sc.sno and cno='c001' and grade > 80 and ssex='女' 

查询信息管理系选修了计算机文化学课程的学生的姓名,课程名和成绩

select sname,cname,grade from student ,course,sc
where student.sno=sc.sno and course.cno=sc.cno
and sdept='信息管理系' and cname ='计算机文化学'

查询通信工程系的选课人数,平均成绩和最高成绩

select count(distinct sc.sno)选课人数,
max(grade)最高成绩,avg(grade) 平均成绩 from student,sc
where student.sno=sc.sno and sdept='通信工程系'

查询计算机系女生选修了c001课程的成绩,要求列出姓名和成绩,查询结果按学号的降序排列

select sname , grade from student ,sc
where student.sno=sc.sno and cno ='c001'and sdept ='计算机系'
and ssex='女'
order by stduent.sno desc

子查询(嵌套查询)

查询成绩大于等于90分的学生的学号,姓名

select sno,sname from student where sno in 
(select sno from sc where grade >=90)
或
select stduent.sno,sanme from stduent,sc
where student.sno=sc.sno and grade >=90

查询通信工程系选修了c002课程的学生的学号和成绩

select sno,grade from sc where sno='c002' and sno in 
(select sno from student where sdept='通信工程系')
或
select student.sno,grade from student,sc
where student.sno=sc.sno and sdept='通信工程系' and cno='c002'

查询考试成绩在80分以上的学生的姓名,结果按姓名降序排列

select sname from student 
where ssex='女' and sno in 
(select sno from sc where grade > 80)
order by sanme desc

select sname from student,sc
where student.sno=sc.sno and grade > 80
order by sname desc 

你可能感兴趣的:(数据库,mysql,数据库)