数据库SQL语言基础知识

表的创建、更新、删除

创建表

模版

create table 表名
(属性名1 数据类型 约束,
 属性名2 数据类型 约束,
 …
 属性名n 数据类型 约束,
 primary key(主键名),
 foreign key(外键)references 表名);

数据类型:定长字符串char()  变长字符串verchar() 数值numeric ()

约束

完整性约束

复杂条件check

例子

 

修改表

//方法一
alter table <表名> add <列定义> | <完整性约束定义>
alter table S add email varchar(20) constraint S_Chk check(email like '%@%')
//方法二
alter table <表名> alter column <列名> <数据列名> [null |not null]
alter table S alter column SN char(12) not null

删除表

drop table 表名;

查询

关系代数与sql

投影

select 属性

选择

where 条件

等值连接

from 表1,表2
where 条件(共同属性相等);

并差交

()union();
()except();
()intersect();

更名

select 属性名 as 新属性名
from 表 表新名

笛卡尔积

from 表1,表2;

给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组。R中Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算可以得到一个新的关系P(X),P是R中满足下列条件的元组在X 属性列上的投影: 元组在X上的分量值x的像集Y(x)包含S在Y上的投影的集合。🌟理解关系除:A➗B,A不在B中的列包含AB所有共有列,除的结果是A满足条件元组且删去与B相同列

通用方法 R中非与S共有属性不存在其对应共有属性不在S中

select distinct R.X 
from R R1
where not exists
( 
    select S.Y from S
    where not exists
    ( 
        select * from R R2
        where R2.X=R1.X and R2.Y=S.Y 
    ) 
)

特例可以用其他方法实现

例:检索至少学过课程C135和课程C219课程的学生信息,包括学号、姓名、专业

select 学号,姓名,专业
from 学生
where 学号 in(select X1.学号
             from 学习 X1,学习X2
             where X1.学号=X2.学号 and X1.课程号=‘C135’ and X2.课程号=‘c219’);

聚集函数

平均值avg 最小值min 最大值max 总和sum 计数count

注意⚠️:sum和count的区别

group by 属性
having 限定输出条件;

聚集函数计算的值为分组后组内的函数值

嵌套子查询

嵌套在where中

   in  some   any   all

//找出在2009年秋季和2010年春季同时开课的所有课程
select distinct course_id
from section
where semester = ‘Fall’ and year= 2009 and 
course_id not in (select course_id
                  from section
                  where semester = ‘Spring’ and year= 2010);

//查出这些老师的姓名,他的工资要比Biology系某教师工资高
select name
from instructor
where salary > some (select salary
                     from instructor
                     where dept_name ='Biology');

//找出平均工资最高的系
select name
from instructor
group by dept_name
having avg(salary) >= all(select avg(salary) //集合的比较
                          from instructor
                          group by dept_name);

EXIST

EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。

EXISTS可以和NOT一起使用:NOT EXIST

强调的是是否返回结果集,不要求知道返回什么

//找出在2009年秋季和2010年春季同时开课的所有课程
select course_id
from section as S
where semester=‘Fall’
      and year=‘2009’
      and exists (select *
                  from section as T
                  where semester=‘Spring’ 
                        and year=‘2010’
                        and S.course_id=T.course_id);

嵌套在from中

//找出系平均工资超过42000美元的那些系的教师平均工资
select dept_name, avg_salary
from (select dept_name, avg(salary) as avg_slary (属性的别名)
      from instructor
      group by dept_name)
where avg_salary >42000;

 嵌套子句可用在select子句中生成标量值

//列出所有系以及它们拥有的教师数
select dept_name,(select count(*)
                  from instructor
                  where department.dept_name=instructor.dept_name)
as num_instructors (表的别名)
from department;

增删改

插入数据

字符串用'' 数值无需外加符号

//自定义属性列顺序
insert into course (course_id, title, dept_name, credits)
values (’CS-437’, ’Database Systems’, ’Comp. Sci.’, 4);
//按原有属性排序
insert into student
values (’3003’, ’Green’, ’Finance’, null);
//从其他表中选取数据插入
insert into instructor
select ID, name, dept_name, 18000
from student
where dept_name = ‘Music’ and tot_cred > 144;

删除数据

delete from 表名
where 条件;

更新数据

update 表名
set 属性=值
where 条件;

注:更新语句顺序会影响最终结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值