欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

数据库概论_3标准化的SQL语言_ 数据定义

程序员文章站 2023-10-12 11:21:56
Student: Course: SC: 1.数据库的定义、删除 1.1数据库的定义(创建) 1 CREATE DATABASE student; 1.2数据库的删除 1 DROP DATABASE student; 2.表的定义、修改与删除 2.1表的定义 建表语句: 1 CREATE TABLE ......

student:

数据库概论_3标准化的SQL语言_ 数据定义

 

 

course:

数据库概论_3标准化的SQL语言_ 数据定义

 

 sc:

数据库概论_3标准化的SQL语言_ 数据定义

 

1.数据库的定义、删除

1.1数据库的定义(创建)

 1 create database student; 

1.2数据库的删除

 1 drop database student; 

2.表的定义、修改与删除

2.1表的定义

数据库概论_3标准化的SQL语言_ 数据定义

 

建表语句:

1 create table student(
2 sno varchar(255) primary key,
3 sname varchar(255),
4 ssex char(4),
5 sage smallint,
6 sdept char(4)
7 );

添加数据:

1 insert into student(sno,sname,ssex,sage,sdept) values ("20170707001","张一","男",20,"cs");
2 insert into student values ("20170707002","张二","男",21,"cs");
3 insert into student(sno,sname,ssex,sage,sdept) values ("20170707003","张三","女",22,"ma");
4 insert into student(sno,sname,ssex,sage,sdept) values ("20170707004","张四","女",18,"is");

2.2表的修改

 2.2.1向student表中添加“入学时间”列,数据类型为日期型

 sql语句:

1 alter table student add s_entrance date;

结果:

数据库概论_3标准化的SQL语言_ 数据定义

2.2.2将年龄的数据类型由字符型改为整型

mysql>>

alter table student modify column sage int;

 

2.2.3修改表名

alter table studentt rename to course;

 

2.3表的删除

drop table course;

 

3.数据查询

3.1单表查询

3.1.1查所有

1 -- 方式一
2 select * from student;
3 -- 方式二
4 select sno,sname,ssex,sage,sdept,s_entrance from student;

 

数据库概论_3标准化的SQL语言_ 数据定义

3.1.2选择查询表中某些列

select sno,sname,sdept from student;

数据库概论_3标准化的SQL语言_ 数据定义

3.1.3查询经过计算的值并起个别名birthday

 

select sname,2014-sage as birthday from student;

 

数据库概论_3标准化的SQL语言_ 数据定义

3.1.4 查询所在系(用小写字母表示系名)

 

1 select sname,lower(sdept) from student;

数据库概论_3标准化的SQL语言_ 数据定义

3.1.5去除结果中重复的行

select distinct s_entrance from student;

数据库概论_3标准化的SQL语言_ 数据定义

3.1.6查询满足条件的元组

1)年龄小于25岁的

select * from student where sage<25;

2)sno等于20170707001的

-- sno值可以加"",也可以不加""
select * from student where sno="20170707001";

3)年龄在20到30之间的

select * from student where sage between 20 and 30;
-- 等价于
select * from student where sage >= 20 and sage <=30;

4)名字中含有“一”的

select * from student where sname like "_一";

5)名字中不含“一”的

select * from student where sname not like "_一";

6)按学号降序排列

-- 默认升序(asc)

select * from student order by sno desc;

7)聚集函数

 1 -- 统计元组个数
 2 select count(*) from student;
 3 -- 统计一列中的个数(空值不算)
 4 select count(distinct s_entrance) from student;
 5 -- 计算一列值的总合(必须为int)
 6 select sum(sage) from student;
 7 -- 计算一列值的平均值
 8 select avg(distinct sage) from student;
 9 -- 找一个值的最大值
10 select max(sage) from student;
11 -- 找一列值的最小值
12 select min(sage) from student;

8)group by:分组语句

select sname,sum(sage) from student group by sname;

-- group by 与where语句不能共用
select sname,sum(sage) from student group by sname having sum(sage)>=50;

 

3.2连接查询

3.2.1等值与非等值连接查询

等值连接与非等值连接:当连接运算符为“=”时,称为等值连接。使用其它运算符称为非等值连接。

 例:查询每个学生及其选修课程的情况

select student.*,sc.*
from student,sc
where student.sno=sc.sno;

把目标列中重复的属性列去掉则为自然连接。

3.2.2自身连接

例:查询每一门课的间接先修课

select f.cno,s.cpno
from course f,course s
where f.cpno=s.cno;

 

3.2.3外连接

分为:左外连接,右外连接,内连接

left join,right join,inner join

如:

select * from course f left join course s on f.cpno=s.cno;
select * from course f right join course s on f.cpno=s.cno;
select * from course f inner join course s on f.cpno=s.cno;

 

3.2.4多表连接

两个表以上的操作称为多表连接

例:查询每个学生的学号,姓名,选修的课程名及成绩

select student.sno,sname,cname,grade
from student,sc,course
where student.sno=sc.sno and sc.cno=course.cno; 

 

3.3嵌套查询

 

3.4集合查询

 

3.5基于派生表的查询