基本操作
创建数据库
create database的简单语法形式:
create database 数据库名;
-- 1.创建数据库
create database SCT;
创建关系/表
创建
create table简单语法形式:
Create table 表名( 列名 数据类型 [ Primary key |Unique ] [Not null]
[, 列名 数据类型 [Not null] , … ]) ;
- Primary key: 主键约束。每个表只能创建一个主键约束。
- Unique: 唯一性约束(即候选键)。可以有多个唯一性约束。
- Not null: 非空约束。是指该列允许不允许有空值出现,如选择了Not null表
明该列不允许有空值出现。
-- 2.创建关系/表
create table Student(S char(8) not null, Sname char(10),
Ssex char(2), Sage integer, D char(2), Sclass char(6));
Create Table Course (C char(3) , Cname char(12), Chours integer,
Credit float(1), T char(3));
插入元素
insert into简单语法形式:
insert into 表名[ (列名 [, 列名 ]… ]
values (值 [, 值] , …) ;
-- 3.向表中追加元组
-- values后面值的排列,必须与into后面的列名一致
insert into student
Values ( '98030101' , '张三', '男', 20, '03', '980301');
Insert Into Student (S, Sname, Ssex, Sage, D, Sclass)
Values ( '98030102' , '张四', '女', 20, '03', '980301');
Insert Into Course Values ('001', '数据库', 40, 6, '001');
Insert Into Course(Cname, C, Credit, Chours, T)
Values ('数据库', '001', 6, 40, '001');
查询
Select 的简单语法形式:
Select 列名 [[, 列名] … ] From 表名
[ Where 检索条件 ] ;
-- 4.查询语句
select * from student s ;
-- 显示部分信息(投影出个别列)
select Ssex, Sage
from student s ;
-- 加入选择条件(对关系中的每个元组检查where的条件)
select Sname, Sage
from student s
where Sage > 19;
-- 加入distinct表示不可重复(相当于对查询结果的元组做去重操作)
select distinct Ssex
from student s ;
-- 加入排序功能 order by 列名 [asc|desc] 升序(默认)降序
select S, Sname from student s
order by S asc;
-- 模糊查询 列名 [not] like "字符串"
-- % 匹配零个或者多个字符 _ 匹配任意单个字符 \ 转义字符(用\%去匹配%)
select S, Sname from student s
where Sname like '张%';
多表联合查询
1.按“001”号课成绩由高到低顺序显示所有学生的姓名(二表连接)
Select Sname From Student, SC
Where Student.S# = SC.S# and SC.C# = ‘001’
Order By Score DESC;
多表连接时,如两个表的属性名相同,则需采用表名. 属性名方式来限定该 属性是属于哪一个表
2.按‘数据库’课成绩由高到低顺序显示所有同学姓名(三表连接)
Select Sname From Student, SC, Course
Where Student.S# = SC.S# and SC.C# = Course.C# and Cname = ‘数据库’
Order By Score DESC;
3.连接运算涉及到重名的问题,如两个表中的属性重名,连接的两个表重名 (同一表的连接)等,因此需要使用别名以便区分
Select 列名 as 列别名 [ [, 列名 as 列别名] … ]
From 表名1 as 表别名1, 表名2 as 表别名2, …
Where 检索条件 ;
求有薪水差额的任意两位教师(需要进行重命名):
Select T1.Tname as Teacher1, T2.Tname as Teacher2
From Teacher T1, Teacher T2
Where T1.Salary > T2.Salary ;
有时表名很长时,为书写条件简便,也定义表别名,以简化书写
4.求“001”号课成绩比“002”号课成绩高的所有学生的学号
Select S1.S# From SC S1, SC S2
Where S1.S# = S2.S# and S1.C#=‘001’
and S2.C#=‘002’ and S1.Score > S2.Score