Base de dados abrangente e explicação detalhada de casos de prática
Fonte da pergunta:
Pratique principalmente para resumir os fundamentos do banco de dados e adicionar seu próprio entendimento complementar ao exercício
Conhecimento básico de banco de dados "Um": criar e usar
在数据库中是不严格分大小写的
创建数据库 create database 数据库名
创建数据表 create table 表名
使用/切换数据库 use 数据库名
关闭数据库 close 数据库名
删除数据表 drop 数据表名
删除数据表中元组 delete 元组
显示表结构 desc 表名
-
Existem quatro grupos de tabelas no banco de dados
Conhecimento básico de banco de dados "Two": inserção de dados
数据库的数据插入--> insert into 表名(表结构,列1、列2....) values(数据,列1对应的数据、列2对应的数据); 插入多条数据 --> values 第一条数据(数据,列1对应的数据、列2对应的数据),values 第一条数据(数据,列1对应的数据、列2对应的数据)....... 其中的表结构是可以省略的,但是省略后插入数据的顺序必须要按照建表时的表结构顺序 例如--> insert into 表名 values(数据,列1对应的数据、列2对应的数据);
- Aluno (mesa do aluno)
- Curso (programação do curso)
- Ponto
- Professor
-
Insira os dados após criar a tabela
-
Dados do aluno
insert into Student values('108','曾华','男','1977-09-01','95033'); insert into Student values('105','匡明','男','1975-10-02','95031'); insert into Student values('107','王丽','女','1976-01-23','95033'); insert into Student values('101','李军','男','1976-02-20','95033'); insert into Student values('109','王芳','女','1975-02-10','95031'); insert into Student values('103','陆君','男','1974-06-03','95031');
-
Dados do curso
insert into Course values('3-105','计算机导论','825'); insert into Course values('3-245','操作系统','804'); insert into Course values('6-166','数字电路','856'); insert into Course values('9-888','高等数学','831');
- Dados de pontuação
insert into Score values('103','3-245','86'); insert into Score values('105','3-245','75'); insert into Score values('109','3-245','68'); insert into Score values('103','3-105','92'); insert into Score values('105','3-105','88'); insert into Score values('109','3-105','76'); insert into Score values('101','3-105','64'); insert into Score values('107','3-105','91'); insert into Score values('108','3-105','78'); insert into Score values('101','6-166','85'); insert into Score values('107','6-166','79'); insert into Score values('108','6-166','81');
-
Dados do professor
insert into Teacher values('804','李诚','男','1958-12-02','副教授','计算机系'); insert into Teacher values('856','张旭','男','1969-03-12','讲师','电子工程系'); insert into Teacher values('825','王萍','女','1972-05-05','助教','计算机系'); insert into Teacher values('831','刘冰','女','1977-08-14','助教','电子工程系');
-
Conhecimento básico de banco de dados "Três": consulta de informações
1.表内信息查询——> select 查询的表属性 from 表名 where 查询条件
2.其中要查询全部信息 --> select * from 表名;
3.其中当查询的结果不止一项时要用“,”分隔
4.其中如果查询不重复数据 在列前加上 distinct 表示查询的结果无重复项
5.其中当查询有条件限制时,其中and表两个条件都需要满足,or只需满足一个即可
6.其中between...and.....表示的范围和and语句一样
7.在数据库中对字符类型的数据,使用单引号和双引号都是一样的
8.其中在子查询的时候,当子查询的结果只有一个的时候 可以用in 也可以直接用=
-
Consulte as colunas Sname, Ssex e Class de todos os registros na tabela Aluno
select Sname,Ssex,Class from Student
-
Consulte todas as unidades do professor, ou seja, a única coluna Depart.
select distinct Depart from Teache
-
Consulte todos os registros da tabela do Aluno.
select * from Student
-
Consulte todos os registros na tabela de pontuação cujas pontuações estejam entre 60 e 80.
select * from score where degree>60 and degree<80; 还有一种写法对and语句使用 between...and..... select * from Score where Degree between 60 and 80
-
Consulte o registro de 85, 86 ou 88 na tabela de pontuação.
select *from score where degree=85 or degree=86 or degree=88;
其实在这里推荐使用子查询方式
select * from score where degree in (85,86,88);
表示的意思和上面or一样,表示degree在后面集合中的元素,in在里面的意思。
- Consulte os registros da turma "95031" ou de colegas cujo gênero seja "feminino" na tabela Aluno.
select * from Student where class='95031' or Ssex='女'
-
Consulte a coluna Sno com uma pontuação maior que 70 e menor que 90.
select Sno from Score where Degree between 70 and 90
-
Consulte se existem cursos Cno com pontuação de 85 ou mais.
第一种方法,求出所有成绩大于85的成绩对应的学号 select distinct cno from score where cno in(select cno from score where degree>85); 第二种方法:分组按成绩分组,分出来的一组成绩大于85 select Cno from Score where Degree in (select Degree from Score group by Cno having Degree>85) 第三种方法比较简单: select distinct cno from score where degree>85
Conhecimento básico do banco de dados "Quatro": classificação
1.数据库的排序有两种升序->由小到大 asc 降序->由大到小 desc
用法:select 列名 from 表名 order by 要排序的列 排序方式
当没有过滤条件是不用加 where
- Consulte todos os registros da tabela de Alunos em ordem decrescente de Classe.
select * from student order by class desc
-
Consulte todos os registros na tabela de pontuação em ordem crescente de Cno e ordem decrescente de grau.
select * from Score order by Cno, Degree desc
Conhecimento básico de banco de dados "Five": funções
常见的函数有:
1.求某一个项的个数--> count(*) 查询 where过滤后的元组个数有多少个
2.求某一列的最大值--> max(列名)
3.求某一列的最小值--> min(列名)
4.求某一项的平均值--> avg(列名)
5.分组,按某一个规则分组--> group by 规则
比如按照班级分组 select * from 学生表 group by 班级属性
6.Having子句,又称分组过滤子句。需要有Groupby子句支持,换句话说,没有Groupby子句,便不能有Having子句,就是对分组后的每一组进行过滤,在group by后面使用。
6.求最大值max(列名)
7.求最小值min(列名)
8.获取左右两边的某些值,比如获得出生日期的年left(sbirthday,4),表示取出生日期的左边四位
-
Consulte o número de alunos na classe "95031"
select count(*) from Student where class='95031'
-
Consulte o número do aluno e o número do curso com a pontuação mais alta na tabela de pontuação.
select Sno,Cno from Score where Degree=(select max(Degree) from Score)
-
Consulte a nota média de cada curso
因为要求每一门课的平均值,这里就要对课程进行按照课程号分组
select avg(Degree) from Score group by Cno;
-
Consulte as pontuações médias de cursos que tenham pelo menos 5 eletivas e comece com 3 na tabela de pontuação.
select avg(Degree) from Score group by Cno having count(*)>=5 and Cno like '3%'
-
Consulte os maiores e menores valores da data de sábado na tabela do aluno
select max(Sbirthday),min(Sbirthday) from Student
-
Consulte o histórico escolar dos alunos cujas notas são inferiores à nota média do curso.
这里要查找的是在每门课程中该课程中的学生成绩小于平均成绩,所以首先要对每门课程进行分组,求出每门课程的平均成绩 select * from Score a where a.Degree<(select avg(Degree) from Score b where a.cno=b.cno group by cno);
Conhecimento básico de banco de dados "Six": conexão multi-mesa
1.在数据表中要想利用本表的信息查询与之关联的其他表的信息,需要用到外码,外码也就是连个表之间的连接条件,起中间传递作用,如果两个表要想相连,必须有相同项。
外码的作用就是将两个表合并
2.还有一种连接方式 from 表一 join 表二 on 就是将表一加入到表二合成一个新表 不用where 条件直接在on后面即可
- Consulte as colunas Sname, Cno e Degree de todos os alunos.
select Student.Sname,Score.Cno,Score.Degree from Student,Score where Student.Sno=Score.Sno
select sname,cno,degree from student join score on Student.Sno=Score.Sno
- Consulte a pontuação média da classe "95033"
select avg(Degree) from Score,Student where Student.Sno=Score.Sno and class='95033'
第二种方式子查询方式,思路是一样的先找出95033班的学生,第一种可能容易想到,两种第二种查找效率高点
select avg(Degree) from Score where Sno in (select Sno from Student where class='95033')
-
Consulte os resultados dos alunos do professor "Zhang Xu".
select Degree from Score,Course,Teacher where Teacher.Tname='张旭'and Teacher.Tno=Course.Tno and Course.Cno=Score.Cno 第二种子查询推荐使用 select student.sname,score.degree from student,score where student.sno=score.sno and score.cno in(select course.cno from course,teacher where teacher.tname="张旭" and course.tno=teacher.tno);
-
Consulte o nome do professor cujo número de alunos fazendo um curso é superior a 5.
select teacher.tname from course,teacher where course.tno=teacher.tno and course.cno in (select cno from score group by cno having count(cno)>5);
Conhecimento básico do banco de dados "Seven": alias de tabela
1.表名 as 别名 -->其中as可以省略 表名 别名
在起别名的时候默认全部信息答应的是两个表的信息
-
Consulte os registros de todos os alunos cujas notas na disciplina eletiva "3-105" sejam superiores às do aluno nº "109"
select distinct a.Cno,a.Sno,a.Degree from Score a,Score b where a.Cno='3-105' and a.Degree>b.Degree and b.Sno='109' and b.Cno='3-105' 第二种子查询 select * from Score where Cno='3-105' and degree>(select degree from Score where Sno='109' and Cno='3-105 ')
-
Consulte o registro de alunos que escolheram vários cursos na pontuação que não são a pontuação mais alta.
select * from Score where Degree not in (select max(Degree) from Score group by sno having count(*)>1) and
Sno in (selecione Sno do grupo Score por Sno having count (*)> 1)
+ **查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof**。
elect Tname, Prof de Teacher where Prof not in (select Prof from Teacher where Depart = '计算机 系' e prof in (select Prof from Teacher where Depart = '电子 工程系'))
+ **求成绩非最高的学生信息**
selecione * da pontuação onde grau <algum (selecione grau da pontuação);
#### 《八》数据库基础知识:日期及年龄
Mostra a hora atual: curdate () para
obter o ano da data de nascimento Ano (aniversário)
Como encontrar a idade do aluno pela data de nascimento Obtenha o ano da
data ano (sbirthday) mês (sbirthday) dia ( aniversário)
+ **查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。**
selecione sno, sname, sbirthday do aluno onde ano (sbirthday) = (selecione o ano (sbirthday) do aluno onde sno = “108”);
+ **通过出生日期计算年龄**
(ANO (CORDATA ()) - ANO (nascimento)) - (DIREITO (CORDA (), 5) <DIREITO (nascimento, 5))
#### 《九》数据库基础知识:多表显示
Como exibir todas as informações de várias tabelas ao mesmo tempo
. As colunas exibidas por união selecionam da tabela um
As colunas exibidas por união selecionam da tabela dois
+ **查询所有教师和同学的name、sex和birthday.**
selecione Tname como nome, Tsex como sexo, Tbirthday como aniversário da união de professores, selecione Sname, Ssex, Sbirthday do aluno
#### 《十》数据库基础知识:模糊匹配
Por exemplo, em nossas consultas comumente usadas, lembramos apenas de uma parte dos dados na tabela, que pode ser usada para consultas difusas.
Uso onde, como “”
1.% -> Corresponde a um ou mais como “Zhang%”
2_ -> Corresponde a um caractere como encontrar Zhang San como "张 _"
3. \ -> Caractere de escape O caractere de escape é usado para remover o significado específico de alguns caracteres especiais e torná-los tratados como caracteres comuns, como "%" Para corresponder ao caractere%, use _ para corresponder ao caractere _
+ **查询Student表中不姓“王”的同学记录。**
selecione * de Aluno em que Sname não goste de '王%'
#### 《十一》数据库基础知识:信息修改
Modifique as informações na tabela: defina modificar
alter tablename
[add {colnamedatatype,…}] adicionar uma nova coluna
[drop {integridade constraint name}] excluir uma restrição de integridade
[modificar {colnamedatatype,…}] modificar definição de coluna modificar
modificação de elemento de
tabela nome
definir nome da coluna = expressão
+ **增加新的一列,给学生表添加所属系别属性**
alterar aluno
adicionar departamento char (10) ;
+ **将所有的学生的成绩提高10分**
atualizar pontuação definida grau = grau + 10 ;
#### 《十二》数据库基础知识:NULL 值判断
O uso é nulo e não é nulo para consultar o valor nulo na tabela
+ **查找没参加考试的学生信息**
selecione * da pontuação em que o grau é nulo ;
约束
[modify {colnamedatatype, …}] 修改列定义
元素修改
update 表名
set 列名=表达式
-
Adicione uma nova coluna, adicione o atributo do departamento à tabela do aluno
alter student add dept char(10);
-
Aumentar as notas de todos os alunos em 10 pontos
update score set degree=degree+10 ;
Conhecimento básico do banco de dados "Doze": Julgamento de valor NULL
查询表中的null值时用 is null 和 is not null来查询
-
Encontre informações sobre alunos que não fizeram o exame
select * from score where degree is null;